rugged 1.7.2 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rugged/version.rb +1 -1
  3. data/vendor/libgit2/AUTHORS +1 -0
  4. data/vendor/libgit2/CMakeLists.txt +23 -10
  5. data/vendor/libgit2/COPYING +195 -1
  6. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  7. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  8. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
  9. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  10. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
  11. data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
  12. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  13. data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
  14. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  15. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  16. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  17. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  18. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  19. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  20. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  21. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  22. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  23. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  24. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  25. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  26. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  27. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  28. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  29. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  30. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  31. data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
  32. data/vendor/libgit2/deps/xdiff/xmerge.c +2 -2
  33. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  34. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  35. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  36. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  37. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  38. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  39. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  40. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  41. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  42. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  43. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  44. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  45. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  46. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  47. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  48. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  49. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  50. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  51. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  52. data/vendor/libgit2/include/git2/apply.h +27 -6
  53. data/vendor/libgit2/include/git2/attr.h +17 -4
  54. data/vendor/libgit2/include/git2/blame.h +133 -28
  55. data/vendor/libgit2/include/git2/blob.h +71 -28
  56. data/vendor/libgit2/include/git2/branch.h +22 -15
  57. data/vendor/libgit2/include/git2/buffer.h +6 -4
  58. data/vendor/libgit2/include/git2/cert.h +2 -1
  59. data/vendor/libgit2/include/git2/checkout.h +83 -32
  60. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  61. data/vendor/libgit2/include/git2/clone.h +25 -9
  62. data/vendor/libgit2/include/git2/commit.h +132 -3
  63. data/vendor/libgit2/include/git2/common.h +120 -63
  64. data/vendor/libgit2/include/git2/config.h +93 -23
  65. data/vendor/libgit2/include/git2/credential.h +30 -2
  66. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  67. data/vendor/libgit2/include/git2/deprecated.h +133 -3
  68. data/vendor/libgit2/include/git2/describe.h +13 -1
  69. data/vendor/libgit2/include/git2/diff.h +38 -8
  70. data/vendor/libgit2/include/git2/email.h +9 -29
  71. data/vendor/libgit2/include/git2/errors.h +46 -73
  72. data/vendor/libgit2/include/git2/filter.h +14 -7
  73. data/vendor/libgit2/include/git2/global.h +8 -1
  74. data/vendor/libgit2/include/git2/graph.h +3 -2
  75. data/vendor/libgit2/include/git2/ignore.h +10 -0
  76. data/vendor/libgit2/include/git2/index.h +99 -14
  77. data/vendor/libgit2/include/git2/indexer.h +21 -4
  78. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  79. data/vendor/libgit2/include/git2/merge.h +46 -1
  80. data/vendor/libgit2/include/git2/message.h +2 -2
  81. data/vendor/libgit2/include/git2/net.h +3 -1
  82. data/vendor/libgit2/include/git2/notes.h +9 -6
  83. data/vendor/libgit2/include/git2/object.h +9 -8
  84. data/vendor/libgit2/include/git2/odb.h +91 -49
  85. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  86. data/vendor/libgit2/include/git2/oid.h +23 -24
  87. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  88. data/vendor/libgit2/include/git2/pack.h +13 -1
  89. data/vendor/libgit2/include/git2/patch.h +2 -3
  90. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  91. data/vendor/libgit2/include/git2/proxy.h +10 -0
  92. data/vendor/libgit2/include/git2/rebase.h +9 -6
  93. data/vendor/libgit2/include/git2/refdb.h +2 -2
  94. data/vendor/libgit2/include/git2/reflog.h +3 -2
  95. data/vendor/libgit2/include/git2/refs.h +9 -6
  96. data/vendor/libgit2/include/git2/refspec.h +14 -4
  97. data/vendor/libgit2/include/git2/remote.h +94 -18
  98. data/vendor/libgit2/include/git2/repository.h +57 -21
  99. data/vendor/libgit2/include/git2/reset.h +16 -3
  100. data/vendor/libgit2/include/git2/revert.h +9 -4
  101. data/vendor/libgit2/include/git2/revparse.h +3 -3
  102. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  103. data/vendor/libgit2/include/git2/signature.h +46 -1
  104. data/vendor/libgit2/include/git2/stash.h +17 -3
  105. data/vendor/libgit2/include/git2/status.h +10 -6
  106. data/vendor/libgit2/include/git2/stdint.h +87 -85
  107. data/vendor/libgit2/include/git2/strarray.h +2 -3
  108. data/vendor/libgit2/include/git2/submodule.h +20 -9
  109. data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
  110. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  111. data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
  112. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  113. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  114. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  115. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  116. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  117. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  118. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  119. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  120. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  121. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  122. data/vendor/libgit2/include/git2/sys/midx.h +43 -4
  123. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  124. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  125. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  126. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  127. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  128. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  129. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  130. data/vendor/libgit2/include/git2/sys/stream.h +11 -2
  131. data/vendor/libgit2/include/git2/sys/transport.h +24 -3
  132. data/vendor/libgit2/include/git2/tag.h +3 -1
  133. data/vendor/libgit2/include/git2/trace.h +9 -3
  134. data/vendor/libgit2/include/git2/transaction.h +3 -2
  135. data/vendor/libgit2/include/git2/transport.h +11 -3
  136. data/vendor/libgit2/include/git2/tree.h +16 -5
  137. data/vendor/libgit2/include/git2/types.h +19 -3
  138. data/vendor/libgit2/include/git2/version.h +44 -8
  139. data/vendor/libgit2/include/git2/worktree.h +16 -6
  140. data/vendor/libgit2/src/CMakeLists.txt +6 -4
  141. data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
  142. data/vendor/libgit2/src/cli/cmd.c +1 -1
  143. data/vendor/libgit2/src/cli/cmd.h +4 -0
  144. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  145. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  146. data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
  147. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  148. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  149. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  150. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  151. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  152. data/vendor/libgit2/src/cli/common.c +168 -0
  153. data/vendor/libgit2/src/cli/common.h +63 -0
  154. data/vendor/libgit2/src/cli/error.h +1 -1
  155. data/vendor/libgit2/src/cli/main.c +52 -24
  156. data/vendor/libgit2/src/cli/opt.c +29 -3
  157. data/vendor/libgit2/src/cli/opt.h +21 -3
  158. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  159. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  160. data/vendor/libgit2/src/cli/progress.c +51 -2
  161. data/vendor/libgit2/src/cli/progress.h +12 -0
  162. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  163. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  164. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  165. data/vendor/libgit2/src/libgit2/CMakeLists.txt +26 -8
  166. data/vendor/libgit2/src/libgit2/apply.c +10 -13
  167. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  168. data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
  169. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  170. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  171. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  172. data/vendor/libgit2/src/libgit2/blame.c +130 -44
  173. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  174. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  175. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  176. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  177. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  178. data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
  179. data/vendor/libgit2/src/libgit2/clone.c +186 -166
  180. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  181. data/vendor/libgit2/src/libgit2/commit.c +92 -0
  182. data/vendor/libgit2/src/libgit2/commit_graph.c +67 -56
  183. data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
  184. data/vendor/libgit2/src/libgit2/config.c +389 -298
  185. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  186. data/vendor/libgit2/src/libgit2/config.h +9 -4
  187. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  188. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  189. data/vendor/libgit2/src/libgit2/config_file.c +99 -88
  190. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  191. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  192. data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
  193. data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
  194. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  195. data/vendor/libgit2/src/libgit2/describe.c +24 -24
  196. data/vendor/libgit2/src/libgit2/diff.c +1 -1
  197. data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
  198. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  199. data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
  200. data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
  201. data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
  202. data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
  203. data/vendor/libgit2/src/libgit2/email.c +1 -0
  204. data/vendor/libgit2/src/libgit2/fetch.c +5 -3
  205. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  206. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  207. data/vendor/libgit2/src/libgit2/grafts.c +18 -20
  208. data/vendor/libgit2/src/libgit2/grafts.h +0 -1
  209. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  210. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  211. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  212. data/vendor/libgit2/src/libgit2/index.c +68 -90
  213. data/vendor/libgit2/src/libgit2/index.h +2 -2
  214. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  215. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  216. data/vendor/libgit2/src/libgit2/indexer.c +34 -38
  217. data/vendor/libgit2/src/libgit2/iterator.c +14 -8
  218. data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
  219. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  220. data/vendor/libgit2/src/libgit2/merge.c +42 -37
  221. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  222. data/vendor/libgit2/src/libgit2/midx.c +28 -15
  223. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  224. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  225. data/vendor/libgit2/src/libgit2/object.c +6 -5
  226. data/vendor/libgit2/src/libgit2/odb.c +5 -4
  227. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  228. data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
  229. data/vendor/libgit2/src/libgit2/oid.c +32 -5
  230. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  231. data/vendor/libgit2/src/libgit2/pack-objects.c +58 -31
  232. data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
  233. data/vendor/libgit2/src/libgit2/pack.c +30 -24
  234. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  235. data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
  236. data/vendor/libgit2/src/libgit2/path.c +1 -1
  237. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  238. data/vendor/libgit2/src/libgit2/push.c +79 -28
  239. data/vendor/libgit2/src/libgit2/push.h +1 -0
  240. data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
  241. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  242. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  243. data/vendor/libgit2/src/libgit2/refs.c +26 -7
  244. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  245. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  246. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  247. data/vendor/libgit2/src/libgit2/remote.c +121 -61
  248. data/vendor/libgit2/src/libgit2/repository.c +231 -51
  249. data/vendor/libgit2/src/libgit2/repository.h +10 -6
  250. data/vendor/libgit2/src/libgit2/revert.c +1 -2
  251. data/vendor/libgit2/src/libgit2/revparse.c +2 -2
  252. data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
  253. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  254. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  255. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  256. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  257. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  258. data/vendor/libgit2/src/libgit2/status.c +1 -1
  259. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
  260. data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
  261. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  262. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  263. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  264. data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
  265. data/vendor/libgit2/src/libgit2/submodule.c +106 -63
  266. data/vendor/libgit2/src/libgit2/submodule.h +6 -7
  267. data/vendor/libgit2/src/libgit2/tag.c +1 -1
  268. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  269. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  270. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  271. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  272. data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
  273. data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
  274. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  275. data/vendor/libgit2/src/libgit2/transports/httpclient.c +112 -72
  276. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  277. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  278. data/vendor/libgit2/src/libgit2/transports/local.c +8 -7
  279. data/vendor/libgit2/src/libgit2/transports/smart.c +20 -8
  280. data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
  281. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +2 -2
  282. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
  283. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  284. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  285. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  286. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  287. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  288. data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
  289. data/vendor/libgit2/src/libgit2/tree.c +34 -26
  290. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  291. data/vendor/libgit2/src/libgit2/worktree.c +14 -17
  292. data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
  293. data/vendor/libgit2/src/util/alloc.c +4 -1
  294. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  295. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  296. data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
  297. data/vendor/libgit2/src/util/array.h +18 -17
  298. data/vendor/libgit2/src/util/cc-compat.h +2 -0
  299. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  300. data/vendor/libgit2/src/util/date.c +22 -14
  301. data/vendor/libgit2/src/util/date.h +12 -0
  302. data/vendor/libgit2/src/util/errors.c +401 -0
  303. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  304. data/vendor/libgit2/src/util/fs_path.c +15 -4
  305. data/vendor/libgit2/src/util/fs_path.h +23 -0
  306. data/vendor/libgit2/src/util/futils.c +6 -5
  307. data/vendor/libgit2/src/util/futils.h +13 -4
  308. data/vendor/libgit2/src/util/git2_features.h.in +12 -1
  309. data/vendor/libgit2/src/util/git2_util.h +6 -0
  310. data/vendor/libgit2/src/util/hash/openssl.c +152 -0
  311. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  312. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  313. data/vendor/libgit2/src/util/hashmap.h +424 -0
  314. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  315. data/vendor/libgit2/src/util/integer.h +3 -1
  316. data/vendor/libgit2/src/util/net.c +13 -7
  317. data/vendor/libgit2/src/util/net.h +2 -0
  318. data/vendor/libgit2/src/util/pool.c +1 -1
  319. data/vendor/libgit2/src/util/pool.h +5 -0
  320. data/vendor/libgit2/src/util/pqueue.h +1 -1
  321. data/vendor/libgit2/src/util/process.h +222 -0
  322. data/vendor/libgit2/src/util/rand.c +1 -7
  323. data/vendor/libgit2/src/util/regexp.c +1 -1
  324. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  325. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  326. data/vendor/libgit2/src/util/str.c +2 -2
  327. data/vendor/libgit2/src/util/strlist.c +108 -0
  328. data/vendor/libgit2/src/util/strlist.h +36 -0
  329. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  330. data/vendor/libgit2/src/util/unix/process.c +629 -0
  331. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  332. data/vendor/libgit2/src/util/util.c +2 -2
  333. data/vendor/libgit2/src/util/util.h +4 -38
  334. data/vendor/libgit2/src/util/vector.c +3 -3
  335. data/vendor/libgit2/src/util/vector.h +2 -2
  336. data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
  337. data/vendor/libgit2/src/util/win32/process.c +506 -0
  338. metadata +45 -28
  339. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  340. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  341. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  342. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  343. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  344. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  345. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  346. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  347. data/vendor/libgit2/src/libgit2/errors.c +0 -293
  348. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  349. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  350. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  351. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  352. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  353. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  354. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  355. data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
  356. data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
  357. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  358. data/vendor/libgit2/src/util/khash.h +0 -615
  359. data/vendor/libgit2/src/util/strmap.c +0 -100
  360. data/vendor/libgit2/src/util/strmap.h +0 -131
  361. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+ #ifndef INCLUDE_transports_libssh2_h__
8
+ #define INCLUDE_transports_libssh2_h__
9
+
10
+ #include "common.h"
11
+
12
+ #include "git2.h"
13
+ #include "git2/transport.h"
14
+ #include "git2/sys/transport.h"
15
+
16
+ int git_transport_ssh_libssh2_global_init(void);
17
+
18
+ int git_smart_subtransport_ssh_libssh2(
19
+ git_smart_subtransport **out,
20
+ git_transport *owner,
21
+ void *param);
22
+
23
+ int git_smart_subtransport_ssh_libssh2_set_paths(
24
+ git_smart_subtransport *subtransport,
25
+ const char *cmd_uploadpack,
26
+ const char *cmd_receivepack);
27
+
28
+ #endif
@@ -293,7 +293,7 @@ static int certificate_check(winhttp_stream *s, int valid)
293
293
 
294
294
  /* If there is no override, we should fail if WinHTTP doesn't think it's fine */
295
295
  if (t->owner->connect_opts.callbacks.certificate_check == NULL && !valid) {
296
- if (!git_error_last())
296
+ if (git_error_last()->klass == GIT_ERROR_NONE)
297
297
  git_error_set(GIT_ERROR_HTTP, "unknown certificate check failure");
298
298
 
299
299
  return GIT_ECERTIFICATE;
@@ -317,7 +317,7 @@ static int certificate_check(winhttp_stream *s, int valid)
317
317
  if (error == GIT_PASSTHROUGH)
318
318
  error = valid ? 0 : GIT_ECERTIFICATE;
319
319
 
320
- if (error < 0 && !git_error_last())
320
+ if (error < 0 && git_error_last()->klass == GIT_ERROR_NONE)
321
321
  git_error_set(GIT_ERROR_HTTP, "user cancelled certificate check");
322
322
 
323
323
  return error;
@@ -436,7 +436,7 @@ static int winhttp_stream_connect(winhttp_stream *s)
436
436
  GIT_ERROR_CHECK_ALLOC(proxy_url);
437
437
  }
438
438
 
439
- if (proxy_url) {
439
+ if (proxy_url && *proxy_url) {
440
440
  git_str processed_url = GIT_STR_INIT;
441
441
  WINHTTP_PROXY_INFO proxy_info;
442
442
  wchar_t *proxy_wide;
@@ -746,6 +746,33 @@ static void CALLBACK winhttp_status(
746
746
  }
747
747
  }
748
748
 
749
+ static int user_agent(bool *exists, git_str *out)
750
+ {
751
+ const char *product = git_settings__user_agent_product();
752
+ const char *comment = git_settings__user_agent();
753
+
754
+ GIT_ASSERT(product && comment);
755
+
756
+ if (!*product) {
757
+ *exists = false;
758
+ return 0;
759
+ }
760
+
761
+ git_str_puts(out, product);
762
+
763
+ if (*comment) {
764
+ git_str_puts(out, " (");
765
+ git_str_puts(out, comment);
766
+ git_str_puts(out, ")");
767
+ }
768
+
769
+ if (git_str_oom(out))
770
+ return -1;
771
+
772
+ *exists = true;
773
+ return 0;
774
+ }
775
+
749
776
  static int winhttp_connect(
750
777
  winhttp_subtransport *t)
751
778
  {
@@ -757,6 +784,7 @@ static int winhttp_connect(
757
784
  int error = -1;
758
785
  int default_timeout = TIMEOUT_INFINITE;
759
786
  int default_connect_timeout = DEFAULT_CONNECT_TIMEOUT;
787
+ bool has_ua = true;
760
788
  DWORD protocols =
761
789
  WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 |
762
790
  WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 |
@@ -787,11 +815,11 @@ static int winhttp_connect(
787
815
  goto on_error;
788
816
  }
789
817
 
790
-
791
- if (git_http__user_agent(&ua) < 0)
818
+ if (user_agent(&has_ua, &ua) < 0)
792
819
  goto on_error;
793
820
 
794
- if (git_utf8_to_16_alloc(&wide_ua, git_str_cstr(&ua)) < 0) {
821
+ if (has_ua &&
822
+ git_utf8_to_16_alloc(&wide_ua, git_str_cstr(&ua)) < 0) {
795
823
  git_error_set(GIT_ERROR_OS, "unable to convert host to wide characters");
796
824
  goto on_error;
797
825
  }
@@ -933,7 +961,7 @@ static int send_request(winhttp_stream *s, size_t len, bool chunked)
933
961
  (!request_failed && s->status_sending_request_reached)) {
934
962
  git_error_clear();
935
963
  if ((error = certificate_check(s, cert_valid)) < 0) {
936
- if (!git_error_last())
964
+ if (git_error_last()->klass == GIT_ERROR_NONE)
937
965
  git_error_set(GIT_ERROR_OS, "user cancelled certificate check");
938
966
 
939
967
  return error;
@@ -21,6 +21,8 @@
21
21
  #define TREE_ENTRY_CHECK_NAMELEN(n) \
22
22
  if (n > UINT16_MAX) { git_error_set(GIT_ERROR_INVALID, "tree entry path too long"); }
23
23
 
24
+ GIT_HASHMAP_STR_FUNCTIONS(git_treebuilder_entrymap, GIT_HASHMAP_INLINE, git_tree_entry *);
25
+
24
26
  static bool valid_filemode(const int filemode)
25
27
  {
26
28
  return (filemode == GIT_FILEMODE_TREE
@@ -347,7 +349,7 @@ size_t git_treebuilder_entrycount(git_treebuilder *bld)
347
349
  {
348
350
  GIT_ASSERT_ARG_WITH_RETVAL(bld, 0);
349
351
 
350
- return git_strmap_size(bld->map);
352
+ return git_treebuilder_entrymap_size(&bld->map);
351
353
  }
352
354
 
353
355
  GIT_INLINE(void) set_error(const char *str, const char *path)
@@ -381,7 +383,7 @@ static int parse_mode(uint16_t *mode_out, const char *buffer, size_t buffer_len,
381
383
  if ((error = git__strntol32(&mode, buffer, buffer_len, buffer_out, 8)) < 0)
382
384
  return error;
383
385
 
384
- if (mode < 0 || mode > UINT16_MAX)
386
+ if (mode < 0 || (uint32_t)mode > UINT16_MAX)
385
387
  return -1;
386
388
 
387
389
  *mode_out = mode;
@@ -512,10 +514,12 @@ static int git_treebuilder__write_with_buffer(
512
514
  git_tree_entry *entry;
513
515
  git_vector entries = GIT_VECTOR_INIT;
514
516
  size_t oid_size = git_oid_size(bld->repo->oid_type);
517
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
515
518
 
516
519
  git_str_clear(buf);
517
520
 
518
- entrycount = git_strmap_size(bld->map);
521
+ entrycount = git_treebuilder_entrymap_size(&bld->map);
522
+
519
523
  if ((error = git_vector_init(&entries, entrycount, entry_sort_cmp)) < 0)
520
524
  goto out;
521
525
 
@@ -523,10 +527,10 @@ static int git_treebuilder__write_with_buffer(
523
527
  (error = git_str_grow(buf, entrycount * 72)) < 0)
524
528
  goto out;
525
529
 
526
- git_strmap_foreach_value(bld->map, entry, {
530
+ while (git_treebuilder_entrymap_iterate(&iter, NULL, &entry, &bld->map) == 0) {
527
531
  if ((error = git_vector_insert(&entries, entry)) < 0)
528
532
  goto out;
529
- });
533
+ }
530
534
 
531
535
  git_vector_sort(&entries);
532
536
 
@@ -547,7 +551,7 @@ static int git_treebuilder__write_with_buffer(
547
551
  error = git_odb_write(oid, odb, buf->ptr, buf->size, GIT_OBJECT_TREE);
548
552
 
549
553
  out:
550
- git_vector_free(&entries);
554
+ git_vector_dispose(&entries);
551
555
 
552
556
  return error;
553
557
  }
@@ -570,7 +574,7 @@ static int append_entry(
570
574
 
571
575
  entry->attr = (uint16_t)filemode;
572
576
 
573
- if ((error = git_strmap_set(bld->map, entry->filename, entry)) < 0) {
577
+ if ((error = git_treebuilder_entrymap_put(&bld->map, entry->filename, entry)) < 0) {
574
578
  git_tree_entry_free(entry);
575
579
  git_error_set(GIT_ERROR_TREE, "failed to append entry %s to the tree builder", filename);
576
580
  return -1;
@@ -753,11 +757,6 @@ int git_treebuilder_new(
753
757
 
754
758
  bld->repo = repo;
755
759
 
756
- if (git_strmap_new(&bld->map) < 0) {
757
- git__free(bld);
758
- return -1;
759
- }
760
-
761
760
  if (source != NULL) {
762
761
  git_tree_entry *entry_src;
763
762
 
@@ -796,13 +795,13 @@ int git_treebuilder_insert(
796
795
  if ((error = check_entry(bld->repo, filename, id, filemode)) < 0)
797
796
  return error;
798
797
 
799
- if ((entry = git_strmap_get(bld->map, filename)) != NULL) {
798
+ if (git_treebuilder_entrymap_get(&entry, &bld->map, filename) == 0) {
800
799
  git_oid_cpy(&entry->oid, id);
801
800
  } else {
802
801
  entry = alloc_entry(filename, strlen(filename), id);
803
802
  GIT_ERROR_CHECK_ALLOC(entry);
804
803
 
805
- if ((error = git_strmap_set(bld->map, entry->filename, entry)) < 0) {
804
+ if (git_treebuilder_entrymap_put(&bld->map, entry->filename, entry) < 0) {
806
805
  git_tree_entry_free(entry);
807
806
  git_error_set(GIT_ERROR_TREE, "failed to insert %s", filename);
808
807
  return -1;
@@ -819,10 +818,15 @@ int git_treebuilder_insert(
819
818
 
820
819
  static git_tree_entry *treebuilder_get(git_treebuilder *bld, const char *filename)
821
820
  {
821
+ git_tree_entry *entry;
822
+
822
823
  GIT_ASSERT_ARG_WITH_RETVAL(bld, NULL);
823
824
  GIT_ASSERT_ARG_WITH_RETVAL(filename, NULL);
824
825
 
825
- return git_strmap_get(bld->map, filename);
826
+ if (git_treebuilder_entrymap_get(&entry, &bld->map, filename) != 0)
827
+ return NULL;
828
+
829
+ return entry;
826
830
  }
827
831
 
828
832
  const git_tree_entry *git_treebuilder_get(git_treebuilder *bld, const char *filename)
@@ -837,7 +841,7 @@ int git_treebuilder_remove(git_treebuilder *bld, const char *filename)
837
841
  if (entry == NULL)
838
842
  return tree_error("failed to remove entry: file isn't in the tree", filename);
839
843
 
840
- git_strmap_delete(bld->map, filename);
844
+ git_treebuilder_entrymap_remove(&bld->map, filename);
841
845
  git_tree_entry_free(entry);
842
846
 
843
847
  return 0;
@@ -858,16 +862,17 @@ int git_treebuilder_filter(
858
862
  {
859
863
  const char *filename;
860
864
  git_tree_entry *entry;
865
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
861
866
 
862
867
  GIT_ASSERT_ARG(bld);
863
868
  GIT_ASSERT_ARG(filter);
864
869
 
865
- git_strmap_foreach(bld->map, filename, entry, {
866
- if (filter(entry, payload)) {
867
- git_strmap_delete(bld->map, filename);
868
- git_tree_entry_free(entry);
869
- }
870
- });
870
+ while (git_treebuilder_entrymap_iterate(&iter, &filename, &entry, &bld->map) == 0) {
871
+ if (filter(entry, payload)) {
872
+ git_treebuilder_entrymap_remove(&bld->map, filename);
873
+ git_tree_entry_free(entry);
874
+ }
875
+ }
871
876
 
872
877
  return 0;
873
878
  }
@@ -875,11 +880,14 @@ int git_treebuilder_filter(
875
880
  int git_treebuilder_clear(git_treebuilder *bld)
876
881
  {
877
882
  git_tree_entry *e;
883
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
878
884
 
879
885
  GIT_ASSERT_ARG(bld);
880
886
 
881
- git_strmap_foreach_value(bld->map, e, git_tree_entry_free(e));
882
- git_strmap_clear(bld->map);
887
+ while (git_treebuilder_entrymap_iterate(&iter, NULL, &e, &bld->map) == 0)
888
+ git_tree_entry_free(e);
889
+
890
+ git_treebuilder_entrymap_clear(&bld->map);
883
891
 
884
892
  return 0;
885
893
  }
@@ -891,7 +899,7 @@ void git_treebuilder_free(git_treebuilder *bld)
891
899
 
892
900
  git_str_dispose(&bld->write_cache);
893
901
  git_treebuilder_clear(bld);
894
- git_strmap_free(bld->map);
902
+ git_treebuilder_entrymap_dispose(&bld->map);
895
903
  git__free(bld);
896
904
  }
897
905
 
@@ -1312,7 +1320,7 @@ cleanup:
1312
1320
 
1313
1321
  git_str_dispose(&component);
1314
1322
  git_array_clear(stack);
1315
- git_vector_free(&entries);
1323
+ git_vector_dispose(&entries);
1316
1324
  return error;
1317
1325
  }
1318
1326
 
@@ -13,7 +13,6 @@
13
13
  #include "repository.h"
14
14
  #include "odb.h"
15
15
  #include "vector.h"
16
- #include "strmap.h"
17
16
  #include "pool.h"
18
17
 
19
18
  struct git_tree_entry {
@@ -29,9 +28,11 @@ struct git_tree {
29
28
  git_array_t(git_tree_entry) entries;
30
29
  };
31
30
 
31
+ GIT_HASHMAP_STR_STRUCT(git_treebuilder_entrymap, git_tree_entry *);
32
+
32
33
  struct git_treebuilder {
33
34
  git_repository *repo;
34
- git_strmap *map;
35
+ git_treebuilder_entrymap map;
35
36
  git_str write_cache;
36
37
  };
37
38
 
@@ -335,11 +335,21 @@ int git_worktree_add(git_worktree **out, git_repository *repo,
335
335
  goto out;
336
336
  }
337
337
 
338
- if (git_branch_is_checked_out(wtopts.ref)) {
339
- git_error_set(GIT_ERROR_WORKTREE, "reference is already checked out");
340
- err = -1;
338
+ if ((err = git_reference_dup(&ref, wtopts.ref)) < 0)
341
339
  goto out;
342
- }
340
+ } else if (wtopts.checkout_existing && git_branch_lookup(&ref, repo, name, GIT_BRANCH_LOCAL) == 0) {
341
+ /* Do nothing */
342
+ } else if ((err = git_repository_head(&head, repo)) < 0 ||
343
+ (err = git_commit_lookup(&commit, repo, &head->target.oid)) < 0 ||
344
+ (err = git_branch_create(&ref, repo, name, commit, false)) < 0) {
345
+ goto out;
346
+ }
347
+
348
+ if (git_branch_is_checked_out(ref)) {
349
+ git_error_set(GIT_ERROR_WORKTREE, "reference %s is already checked out",
350
+ git_reference_name(ref));
351
+ err = -1;
352
+ goto out;
343
353
  }
344
354
 
345
355
  /* Create gitdir directory ".git/worktrees/<name>" */
@@ -392,19 +402,6 @@ int git_worktree_add(git_worktree **out, git_repository *repo,
392
402
  || (err = write_wtfile(gitdir.ptr, "gitdir", &buf)) < 0)
393
403
  goto out;
394
404
 
395
- /* Set up worktree reference */
396
- if (wtopts.ref) {
397
- if ((err = git_reference_dup(&ref, wtopts.ref)) < 0)
398
- goto out;
399
- } else {
400
- if ((err = git_repository_head(&head, repo)) < 0)
401
- goto out;
402
- if ((err = git_commit_lookup(&commit, repo, &head->target.oid)) < 0)
403
- goto out;
404
- if ((err = git_branch_create(&ref, repo, name, commit, false)) < 0)
405
- goto out;
406
- }
407
-
408
405
  /* Set worktree's HEAD */
409
406
  if ((err = git_repository_create_head(gitdir.ptr, git_reference_name(ref))) < 0)
410
407
  goto out;
@@ -1,8 +1,6 @@
1
1
  # util: a shared library for common utility functions for libgit2 projects
2
2
 
3
3
  add_library(util OBJECT)
4
- set_target_properties(util PROPERTIES C_STANDARD 90)
5
- set_target_properties(util PROPERTIES C_EXTENSIONS OFF)
6
4
 
7
5
  configure_file(git2_features.h.in git2_features.h)
8
6
 
@@ -36,7 +34,7 @@ if(USE_SHA1 STREQUAL "CollisionDetection")
36
34
  target_compile_definitions(util PRIVATE SHA1DC_NO_STANDARD_INCLUDES=1)
37
35
  target_compile_definitions(util PRIVATE SHA1DC_CUSTOM_INCLUDE_SHA1_C=\"git2_util.h\")
38
36
  target_compile_definitions(util PRIVATE SHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C=\"git2_util.h\")
39
- elseif(USE_SHA1 STREQUAL "OpenSSL" OR USE_SHA1 STREQUAL "OpenSSL-Dynamic")
37
+ elseif(USE_SHA1 STREQUAL "OpenSSL" OR USE_SHA1 STREQUAL "OpenSSL-Dynamic" OR USE_SHA1 STREQUAL "OpenSSL-FIPS")
40
38
  add_definitions(-DOPENSSL_API_COMPAT=0x10100000L)
41
39
  file(GLOB UTIL_SRC_SHA1 hash/openssl.*)
42
40
  elseif(USE_SHA1 STREQUAL "CommonCrypto")
@@ -51,9 +49,9 @@ endif()
51
49
 
52
50
  list(SORT UTIL_SRC_SHA1)
53
51
 
54
- if(USE_SHA256 STREQUAL "Builtin")
52
+ if(USE_SHA256 STREQUAL "builtin")
55
53
  file(GLOB UTIL_SRC_SHA256 hash/builtin.* hash/rfc6234/*)
56
- elseif(USE_SHA256 STREQUAL "OpenSSL" OR USE_SHA256 STREQUAL "OpenSSL-Dynamic")
54
+ elseif(USE_SHA256 STREQUAL "OpenSSL" OR USE_SHA256 STREQUAL "OpenSSL-Dynamic" OR USE_SHA256 STREQUAL "OpenSSL-FIPS")
57
55
  add_definitions(-DOPENSSL_API_COMPAT=0x10100000L)
58
56
  file(GLOB UTIL_SRC_SHA256 hash/openssl.*)
59
57
  elseif(USE_SHA256 STREQUAL "CommonCrypto")
@@ -63,7 +61,7 @@ elseif(USE_SHA256 STREQUAL "mbedTLS")
63
61
  elseif(USE_SHA256 STREQUAL "Win32")
64
62
  file(GLOB UTIL_SRC_SHA256 hash/win32.*)
65
63
  else()
66
- message(FATAL_ERROR "Asked for unknown SHA256 backend: ${USE_SHA256}")
64
+ message(FATAL_ERROR "asked for unknown SHA256 backend: ${USE_SHA256}")
67
65
  endif()
68
66
 
69
67
  list(SORT UTIL_SRC_SHA256)
@@ -8,8 +8,9 @@
8
8
  #include "alloc.h"
9
9
  #include "runtime.h"
10
10
 
11
- #include "allocators/failalloc.h"
12
11
  #include "allocators/stdalloc.h"
12
+ #include "allocators/debugalloc.h"
13
+ #include "allocators/failalloc.h"
13
14
  #include "allocators/win32_leakcheck.h"
14
15
 
15
16
  /* Fail any allocation until git_libgit2_init is called. */
@@ -88,6 +89,8 @@ static int setup_default_allocator(void)
88
89
  {
89
90
  #if defined(GIT_WIN32_LEAKCHECK)
90
91
  return git_win32_leakcheck_init_allocator(&git__allocator);
92
+ #elif defined(GIT_DEBUG_STRICT_ALLOC)
93
+ return git_debugalloc_init_allocator(&git__allocator);
91
94
  #else
92
95
  return git_stdalloc_init_allocator(&git__allocator);
93
96
  #endif
@@ -0,0 +1,73 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+
8
+ #include "debugalloc.h"
9
+
10
+ static void *debugalloc__malloc(size_t len, const char *file, int line)
11
+ {
12
+ unsigned char *ptr;
13
+ size_t total = len + sizeof(size_t);
14
+
15
+ GIT_UNUSED(file);
16
+ GIT_UNUSED(line);
17
+
18
+ if (!len || (ptr = malloc(total)) == NULL)
19
+ return NULL;
20
+
21
+ memcpy(ptr, &len, sizeof(size_t));
22
+ return ptr + sizeof(size_t);
23
+ }
24
+
25
+ static void *debugalloc__realloc(void *_ptr, size_t len, const char *file, int line)
26
+ {
27
+ unsigned char *ptr = _ptr, *newptr;
28
+ size_t original_len;
29
+ size_t total = len + sizeof(size_t);
30
+
31
+ GIT_UNUSED(file);
32
+ GIT_UNUSED(line);
33
+
34
+ if (!len && !ptr)
35
+ return NULL;
36
+
37
+ if (!len) {
38
+ free(ptr - sizeof(size_t));
39
+ return NULL;
40
+ }
41
+
42
+ if ((newptr = malloc(total)) == NULL)
43
+ return NULL;
44
+
45
+ if (ptr) {
46
+ memcpy(&original_len, ptr - sizeof(size_t), sizeof(size_t));
47
+ memcpy(newptr + sizeof(size_t), ptr, min(len, original_len));
48
+
49
+ memset(ptr - sizeof(size_t), 0xfd, original_len + sizeof(size_t));
50
+ free(ptr - sizeof(size_t));
51
+ }
52
+
53
+ memcpy(newptr, &len, sizeof(size_t));
54
+ return newptr + sizeof(size_t);
55
+ }
56
+
57
+ static void debugalloc__free(void *_ptr)
58
+ {
59
+ unsigned char *ptr = _ptr;
60
+
61
+ if (!ptr)
62
+ return;
63
+
64
+ free(ptr - sizeof(size_t));
65
+ }
66
+
67
+ int git_debugalloc_init_allocator(git_allocator *allocator)
68
+ {
69
+ allocator->gmalloc = debugalloc__malloc;
70
+ allocator->grealloc = debugalloc__realloc;
71
+ allocator->gfree = debugalloc__free;
72
+ return 0;
73
+ }
@@ -5,16 +5,13 @@
5
5
  * a Linking Exception. For full terms see the included COPYING file.
6
6
  */
7
7
 
8
- #ifndef CLI_cli_h__
9
- #define CLI_cli_h__
10
-
11
- #define PROGRAM_NAME "git2"
8
+ #ifndef INCLUDE_allocators_debugalloc_h__
9
+ #define INCLUDE_allocators_debugalloc_h__
12
10
 
13
11
  #include "git2_util.h"
14
12
 
15
- #include "error.h"
16
- #include "opt.h"
17
- #include "opt_usage.h"
18
- #include "sighandler.h"
13
+ #include "alloc.h"
14
+
15
+ int git_debugalloc_init_allocator(git_allocator *allocator);
19
16
 
20
- #endif /* CLI_cli_h__ */
17
+ #endif
@@ -12,11 +12,6 @@ static void *stdalloc__malloc(size_t len, const char *file, int line)
12
12
  GIT_UNUSED(file);
13
13
  GIT_UNUSED(line);
14
14
 
15
- #ifdef GIT_DEBUG_STRICT_ALLOC
16
- if (!len)
17
- return NULL;
18
- #endif
19
-
20
15
  return malloc(len);
21
16
  }
22
17
 
@@ -25,11 +20,6 @@ static void *stdalloc__realloc(void *ptr, size_t size, const char *file, int lin
25
20
  GIT_UNUSED(file);
26
21
  GIT_UNUSED(line);
27
22
 
28
- #ifdef GIT_DEBUG_STRICT_ALLOC
29
- if (!size)
30
- return NULL;
31
- #endif
32
-
33
23
  return realloc(ptr, size);
34
24
  }
35
25
 
@@ -41,39 +41,40 @@
41
41
 
42
42
  #define GIT_ERROR_CHECK_ARRAY(a) GIT_ERROR_CHECK_ALLOC((a).ptr)
43
43
 
44
-
45
- typedef git_array_t(char) git_array_generic_t;
46
-
47
- /* use a generic array for growth, return 0 on success */
48
- GIT_INLINE(int) git_array_grow(void *_a, size_t item_size)
44
+ GIT_INLINE(void *) git_array__alloc(void *arr, size_t *size, size_t *asize, size_t item_size)
49
45
  {
50
- volatile git_array_generic_t *a = _a;
51
46
  size_t new_size;
52
- char *new_array;
47
+ void *new_array;
48
+
49
+ if (*size < *asize)
50
+ return arr;
53
51
 
54
- if (a->size < 8) {
52
+ if (*size < 8) {
55
53
  new_size = 8;
56
54
  } else {
57
- if (GIT_MULTIPLY_SIZET_OVERFLOW(&new_size, a->size, 3))
55
+ if (GIT_MULTIPLY_SIZET_OVERFLOW(&new_size, *asize, 3))
58
56
  goto on_oom;
57
+
59
58
  new_size /= 2;
60
59
  }
61
60
 
62
- if ((new_array = git__reallocarray(a->ptr, new_size, item_size)) == NULL)
61
+ if ((new_array = git__reallocarray(arr, new_size, item_size)) == NULL)
63
62
  goto on_oom;
64
63
 
65
- a->ptr = new_array;
66
- a->asize = new_size;
67
- return 0;
64
+ *asize = new_size;
65
+
66
+ return new_array;
68
67
 
69
68
  on_oom:
70
- git_array_clear(*a);
71
- return -1;
69
+ git__free(arr);
70
+ *size = 0;
71
+ *asize = 0;
72
+ return NULL;
72
73
  }
73
74
 
74
75
  #define git_array_alloc(a) \
75
- (((a).size < (a).asize || git_array_grow(&(a), sizeof(*(a).ptr)) == 0) ? \
76
- &(a).ptr[(a).size++] : (void *)NULL)
76
+ (((a).size < (a).asize || \
77
+ ((a).ptr = git_array__alloc((a).ptr, &(a).size, &(a).asize, sizeof(*(a).ptr))) != NULL) ? &(a).ptr[(a).size++] : (void *)NULL)
77
78
 
78
79
  #define git_array_last(a) ((a).size ? &(a).ptr[(a).size - 1] : (void *)NULL)
79
80
 
@@ -44,9 +44,11 @@
44
44
  _unused = (x); \
45
45
  } while (0)
46
46
  # define GIT_UNUSED_ARG __attribute__((unused))
47
+ # define GIT_UNUSED_FUNCTION __attribute__((unused))
47
48
  #else
48
49
  # define GIT_UNUSED(x) ((void)(x))
49
50
  # define GIT_UNUSED_ARG
51
+ # define GIT_UNUSED_FUNCTION
50
52
  #endif
51
53
 
52
54
  /* Define the printf format specifier to use for size_t output */
@@ -0,0 +1,70 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+ #ifndef INCLUDE_ctype_compat_h__
8
+ #define INCLUDE_ctype_compat_h__
9
+
10
+ /*
11
+ * The Microsoft C runtime (MSVCRT) may take a heavy lock on the
12
+ * locale in order to figure out how the `ctype` functions work.
13
+ * This is deeply slow. Provide our own to avoid that.
14
+ */
15
+
16
+ #ifdef GIT_WIN32
17
+
18
+ GIT_INLINE(int) git__tolower(int c)
19
+ {
20
+ return (c >= 'A' && c <= 'Z') ? (c + 32) : c;
21
+ }
22
+
23
+ GIT_INLINE(int) git__toupper(int c)
24
+ {
25
+ return (c >= 'a' && c <= 'z') ? (c - 32) : c;
26
+ }
27
+
28
+ GIT_INLINE(bool) git__isalpha(int c)
29
+ {
30
+ return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
31
+ }
32
+
33
+ GIT_INLINE(bool) git__isdigit(int c)
34
+ {
35
+ return (c >= '0' && c <= '9');
36
+ }
37
+
38
+ GIT_INLINE(bool) git__isalnum(int c)
39
+ {
40
+ return git__isalpha(c) || git__isdigit(c);
41
+ }
42
+
43
+ GIT_INLINE(bool) git__isspace(int c)
44
+ {
45
+ return (c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\r' || c == '\v');
46
+ }
47
+
48
+ GIT_INLINE(bool) git__isxdigit(int c)
49
+ {
50
+ return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'));
51
+ }
52
+
53
+ GIT_INLINE(bool) git__isprint(int c)
54
+ {
55
+ return (c >= ' ' && c <= '~');
56
+ }
57
+
58
+ #else
59
+ # define git__tolower(a) tolower((unsigned char)(a))
60
+ # define git__toupper(a) toupper((unsigned char)(a))
61
+
62
+ # define git__isalpha(a) (!!isalpha((unsigned char)(a)))
63
+ # define git__isdigit(a) (!!isdigit((unsigned char)(a)))
64
+ # define git__isalnum(a) (!!isalnum((unsigned char)(a)))
65
+ # define git__isspace(a) (!!isspace((unsigned char)(a)))
66
+ # define git__isxdigit(a) (!!isxdigit((unsigned char)(a)))
67
+ # define git__isprint(a) (!!isprint((unsigned char)(a)))
68
+ #endif
69
+
70
+ #endif