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,629 @@
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 <stdio.h>
9
+ #include <sys/wait.h>
10
+ #include <signal.h>
11
+ #include <git2.h>
12
+
13
+ #include "git2_util.h"
14
+ #include "vector.h"
15
+ #include "process.h"
16
+ #include "strlist.h"
17
+
18
+ #ifdef __APPLE__
19
+ #include <crt_externs.h>
20
+ #define environ (*_NSGetEnviron())
21
+ #else
22
+ extern char **environ;
23
+ #endif
24
+
25
+ struct git_process {
26
+ char **args;
27
+ char **env;
28
+
29
+ char *cwd;
30
+
31
+ unsigned int capture_in : 1,
32
+ capture_out : 1,
33
+ capture_err : 1;
34
+
35
+ pid_t pid;
36
+
37
+ int child_in;
38
+ int child_out;
39
+ int child_err;
40
+ git_process_result_status status;
41
+ };
42
+
43
+ GIT_INLINE(bool) is_delete_env(const char *env)
44
+ {
45
+ char *c = strchr(env, '=');
46
+
47
+ if (c == NULL)
48
+ return false;
49
+
50
+ return *(c+1) == '\0';
51
+ }
52
+
53
+ static int merge_env(
54
+ char ***out,
55
+ const char **env,
56
+ size_t env_len,
57
+ bool exclude_env)
58
+ {
59
+ git_vector merged = GIT_VECTOR_INIT;
60
+ char **kv, *dup;
61
+ size_t max, cnt;
62
+ int error = 0;
63
+
64
+ for (max = env_len, kv = environ; !exclude_env && *kv; kv++)
65
+ max++;
66
+
67
+ if ((error = git_vector_init(&merged, max, NULL)) < 0)
68
+ goto on_error;
69
+
70
+ for (cnt = 0; env && cnt < env_len; cnt++) {
71
+ if (is_delete_env(env[cnt]))
72
+ continue;
73
+
74
+ dup = git__strdup(env[cnt]);
75
+ GIT_ERROR_CHECK_ALLOC(dup);
76
+
77
+ if ((error = git_vector_insert(&merged, dup)) < 0)
78
+ goto on_error;
79
+ }
80
+
81
+ if (!exclude_env) {
82
+ for (kv = environ; *kv; kv++) {
83
+ if (env && git_strlist_contains_key(env, env_len, *kv, '='))
84
+ continue;
85
+
86
+ dup = git__strdup(*kv);
87
+ GIT_ERROR_CHECK_ALLOC(dup);
88
+
89
+ if ((error = git_vector_insert(&merged, dup)) < 0)
90
+ goto on_error;
91
+ }
92
+ }
93
+
94
+ if (merged.length == 0) {
95
+ *out = NULL;
96
+ error = 0;
97
+ goto on_error;
98
+ }
99
+
100
+ git_vector_insert(&merged, NULL);
101
+
102
+ *out = (char **)merged.contents;
103
+
104
+ return 0;
105
+
106
+ on_error:
107
+ git_vector_dispose_deep(&merged);
108
+ return error;
109
+ }
110
+
111
+ int git_process_new(
112
+ git_process **out,
113
+ const char **args,
114
+ size_t args_len,
115
+ const char **env,
116
+ size_t env_len,
117
+ git_process_options *opts)
118
+ {
119
+ git_process *process;
120
+
121
+ GIT_ASSERT_ARG(out && args && args_len > 0);
122
+
123
+ *out = NULL;
124
+
125
+ process = git__calloc(sizeof(git_process), 1);
126
+ GIT_ERROR_CHECK_ALLOC(process);
127
+
128
+ if (git_strlist_copy_with_null(&process->args, args, args_len) < 0 ||
129
+ merge_env(&process->env, env, env_len, opts ? opts->exclude_env : false) < 0) {
130
+ git_process_free(process);
131
+ return -1;
132
+ }
133
+
134
+ if (opts) {
135
+ process->capture_in = opts->capture_in;
136
+ process->capture_out = opts->capture_out;
137
+ process->capture_err = opts->capture_err;
138
+
139
+ if (opts->cwd) {
140
+ process->cwd = git__strdup(opts->cwd);
141
+ GIT_ERROR_CHECK_ALLOC(process->cwd);
142
+ }
143
+ }
144
+
145
+ process->child_in = -1;
146
+ process->child_out = -1;
147
+ process->child_err = -1;
148
+ process->status = -1;
149
+
150
+ *out = process;
151
+ return 0;
152
+ }
153
+
154
+ extern int git_process_new_from_cmdline(
155
+ git_process **out,
156
+ const char *cmdline,
157
+ const char **env,
158
+ size_t env_len,
159
+ git_process_options *opts)
160
+ {
161
+ const char *args[] = { "/bin/sh", "-c", cmdline };
162
+
163
+ return git_process_new(out,
164
+ args, ARRAY_SIZE(args), env, env_len, opts);
165
+ }
166
+
167
+ #define CLOSE_FD(fd) \
168
+ if (fd >= 0) { \
169
+ close(fd); \
170
+ fd = -1; \
171
+ }
172
+
173
+ static int try_read_status(size_t *out, int fd, void *buf, size_t len)
174
+ {
175
+ size_t read_len = 0;
176
+ int ret = -1;
177
+
178
+ while (ret && read_len < len) {
179
+ ret = read(fd, buf + read_len, len - read_len);
180
+
181
+ if (ret < 0 && errno != EAGAIN && errno != EINTR) {
182
+ git_error_set(GIT_ERROR_OS, "could not read child status");
183
+ return -1;
184
+ }
185
+
186
+ read_len += ret;
187
+ }
188
+
189
+ *out = read_len;
190
+ return 0;
191
+ }
192
+
193
+
194
+ static int read_status(int fd)
195
+ {
196
+ size_t status_len = sizeof(int) * 3, read_len = 0;
197
+ char buffer[status_len], fn[128];
198
+ int error, fn_error, os_error, fn_len = 0;
199
+
200
+ if ((error = try_read_status(&read_len, fd, buffer, status_len)) < 0)
201
+ return error;
202
+
203
+ /* Immediate EOF indicates the exec succeeded. */
204
+ if (read_len == 0)
205
+ return 0;
206
+
207
+ if (read_len < status_len) {
208
+ git_error_set(GIT_ERROR_INVALID, "child status truncated");
209
+ return -1;
210
+ }
211
+
212
+ memcpy(&fn_error, &buffer[0], sizeof(int));
213
+ memcpy(&os_error, &buffer[sizeof(int)], sizeof(int));
214
+ memcpy(&fn_len, &buffer[sizeof(int) * 2], sizeof(int));
215
+
216
+ if (fn_len > 0) {
217
+ fn_len = min(fn_len, (int)(ARRAY_SIZE(fn) - 1));
218
+
219
+ if ((error = try_read_status(&read_len, fd, fn, fn_len)) < 0)
220
+ return error;
221
+
222
+ fn[fn_len] = '\0';
223
+ } else {
224
+ fn[0] = '\0';
225
+ }
226
+
227
+ if (fn_error) {
228
+ errno = os_error;
229
+ git_error_set(GIT_ERROR_OS, "could not %s", fn[0] ? fn : "(unknown)");
230
+ }
231
+
232
+ return fn_error;
233
+ }
234
+
235
+ static bool try_write_status(int fd, const void *buf, size_t len)
236
+ {
237
+ size_t write_len;
238
+ int ret;
239
+
240
+ for (write_len = 0; write_len < len; ) {
241
+ ret = write(fd, buf + write_len, len - write_len);
242
+
243
+ if (ret <= 0)
244
+ break;
245
+
246
+ write_len += ret;
247
+ }
248
+
249
+ return (len == write_len);
250
+ }
251
+
252
+ static void write_status(int fd, const char *fn, int error, int os_error)
253
+ {
254
+ size_t status_len = sizeof(int) * 3, fn_len;
255
+ char buffer[status_len];
256
+
257
+ fn_len = strlen(fn);
258
+
259
+ if (fn_len > INT_MAX)
260
+ fn_len = INT_MAX;
261
+
262
+ memcpy(&buffer[0], &error, sizeof(int));
263
+ memcpy(&buffer[sizeof(int)], &os_error, sizeof(int));
264
+ memcpy(&buffer[sizeof(int) * 2], &fn_len, sizeof(int));
265
+
266
+ /* Do our best effort to write all the status. */
267
+ if (!try_write_status(fd, buffer, status_len))
268
+ return;
269
+
270
+ if (fn_len)
271
+ try_write_status(fd, fn, fn_len);
272
+ }
273
+
274
+ int git_process_start(git_process *process)
275
+ {
276
+ int in[2] = { -1, -1 }, out[2] = { -1, -1 },
277
+ err[2] = { -1, -1 }, status[2] = { -1, -1 };
278
+ int fdflags, state, error;
279
+ pid_t pid;
280
+
281
+ /* Set up the pipes to read from/write to the process */
282
+ if ((process->capture_in && pipe(in) < 0) ||
283
+ (process->capture_out && pipe(out) < 0) ||
284
+ (process->capture_err && pipe(err) < 0)) {
285
+ git_error_set(GIT_ERROR_OS, "could not create pipe");
286
+ goto on_error;
287
+ }
288
+
289
+ /* Set up a self-pipe for status from the forked process. */
290
+ if (pipe(status) < 0 ||
291
+ (fdflags = fcntl(status[1], F_GETFD)) < 0 ||
292
+ fcntl(status[1], F_SETFD, fdflags | FD_CLOEXEC) < 0) {
293
+ git_error_set(GIT_ERROR_OS, "could not create pipe");
294
+ goto on_error;
295
+ }
296
+
297
+ switch (pid = fork()) {
298
+ case -1:
299
+ git_error_set(GIT_ERROR_OS, "could not fork");
300
+ goto on_error;
301
+
302
+ /* Child: start the process. */
303
+ case 0:
304
+ /* Close the opposing side of the pipes */
305
+ CLOSE_FD(status[0]);
306
+
307
+ if (process->capture_in) {
308
+ CLOSE_FD(in[1]);
309
+ dup2(in[0], STDIN_FILENO);
310
+ }
311
+
312
+ if (process->capture_out) {
313
+ CLOSE_FD(out[0]);
314
+ dup2(out[1], STDOUT_FILENO);
315
+ }
316
+
317
+ if (process->capture_err) {
318
+ CLOSE_FD(err[0]);
319
+ dup2(err[1], STDERR_FILENO);
320
+ }
321
+
322
+ if (process->cwd && (error = chdir(process->cwd)) < 0) {
323
+ write_status(status[1], "chdir", error, errno);
324
+ exit(0);
325
+ }
326
+
327
+ /*
328
+ * Exec the process and write the results back if the
329
+ * call fails. If it succeeds, we'll close the status
330
+ * pipe (via CLOEXEC) and the parent will know.
331
+ */
332
+ error = execve(process->args[0],
333
+ process->args,
334
+ process->env);
335
+
336
+ write_status(status[1], "execve", error, errno);
337
+ exit(0);
338
+
339
+ /* Parent: make sure the child process exec'd correctly. */
340
+ default:
341
+ /* Close the opposing side of the pipes */
342
+ CLOSE_FD(status[1]);
343
+
344
+ if (process->capture_in) {
345
+ CLOSE_FD(in[0]);
346
+ process->child_in = in[1];
347
+ }
348
+
349
+ if (process->capture_out) {
350
+ CLOSE_FD(out[1]);
351
+ process->child_out = out[0];
352
+ }
353
+
354
+ if (process->capture_err) {
355
+ CLOSE_FD(err[1]);
356
+ process->child_err = err[0];
357
+ }
358
+
359
+ /* Try to read the status */
360
+ process->status = status[0];
361
+ if ((error = read_status(status[0])) < 0) {
362
+ waitpid(process->pid, &state, 0);
363
+ goto on_error;
364
+ }
365
+
366
+ process->pid = pid;
367
+ return 0;
368
+ }
369
+
370
+ on_error:
371
+ CLOSE_FD(in[0]); CLOSE_FD(in[1]);
372
+ CLOSE_FD(out[0]); CLOSE_FD(out[1]);
373
+ CLOSE_FD(err[0]); CLOSE_FD(err[1]);
374
+ CLOSE_FD(status[0]); CLOSE_FD(status[1]);
375
+ return -1;
376
+ }
377
+
378
+ int git_process_id(p_pid_t *out, git_process *process)
379
+ {
380
+ GIT_ASSERT(out && process);
381
+
382
+ if (!process->pid) {
383
+ git_error_set(GIT_ERROR_INVALID, "process not running");
384
+ return -1;
385
+ }
386
+
387
+ *out = process->pid;
388
+ return 0;
389
+ }
390
+
391
+ static ssize_t process_read(int fd, void *buf, size_t count)
392
+ {
393
+ ssize_t ret;
394
+
395
+ if (count > SSIZE_MAX)
396
+ count = SSIZE_MAX;
397
+
398
+ if ((ret = read(fd, buf, count)) < 0) {
399
+ git_error_set(GIT_ERROR_OS, "could not read from child process");
400
+ return -1;
401
+ }
402
+
403
+ return ret;
404
+ }
405
+
406
+ ssize_t git_process_read(git_process *process, void *buf, size_t count)
407
+ {
408
+ GIT_ASSERT_ARG(process);
409
+ GIT_ASSERT(process->capture_out);
410
+
411
+ return process_read(process->child_out, buf, count);
412
+ }
413
+
414
+ ssize_t git_process_read_err(git_process *process, void *buf, size_t count)
415
+ {
416
+ GIT_ASSERT_ARG(process);
417
+ GIT_ASSERT(process->capture_err);
418
+
419
+ return process_read(process->child_err, buf, count);
420
+ }
421
+
422
+ #ifdef GIT_THREADS
423
+
424
+ # define signal_state sigset_t
425
+
426
+ /*
427
+ * Since signal-handling is process-wide, we cannot simply use
428
+ * SIG_IGN to avoid SIGPIPE. Instead: http://www.microhowto.info:80/howto/ignore_sigpipe_without_affecting_other_threads_in_a_process.html
429
+ */
430
+
431
+ GIT_INLINE(int) disable_signals(sigset_t *saved_mask)
432
+ {
433
+ sigset_t sigpipe_mask;
434
+
435
+ sigemptyset(&sigpipe_mask);
436
+ sigaddset(&sigpipe_mask, SIGPIPE);
437
+
438
+ if (pthread_sigmask(SIG_BLOCK, &sigpipe_mask, saved_mask) < 0) {
439
+ git_error_set(GIT_ERROR_OS, "could not configure signal mask");
440
+ return -1;
441
+ }
442
+
443
+ return 0;
444
+ }
445
+
446
+ GIT_INLINE(int) restore_signals(sigset_t *saved_mask)
447
+ {
448
+ sigset_t sigpipe_mask, pending;
449
+ int signal;
450
+
451
+ sigemptyset(&sigpipe_mask);
452
+ sigaddset(&sigpipe_mask, SIGPIPE);
453
+
454
+ if (sigpending(&pending) < 0) {
455
+ git_error_set(GIT_ERROR_OS, "could not examine pending signals");
456
+ return -1;
457
+ }
458
+
459
+ if (sigismember(&pending, SIGPIPE) == 1 &&
460
+ sigwait(&sigpipe_mask, &signal) < 0) {
461
+ git_error_set(GIT_ERROR_OS, "could not wait for (blocking) signal delivery");
462
+ return -1;
463
+ }
464
+
465
+ if (pthread_sigmask(SIG_SETMASK, saved_mask, 0) < 0) {
466
+ git_error_set(GIT_ERROR_OS, "could not configure signal mask");
467
+ return -1;
468
+ }
469
+
470
+ return 0;
471
+ }
472
+
473
+ #else
474
+
475
+ # define signal_state struct sigaction
476
+
477
+ GIT_INLINE(int) disable_signals(struct sigaction *saved_handler)
478
+ {
479
+ struct sigaction ign_handler = { 0 };
480
+
481
+ ign_handler.sa_handler = SIG_IGN;
482
+
483
+ if (sigaction(SIGPIPE, &ign_handler, saved_handler) < 0) {
484
+ git_error_set(GIT_ERROR_OS, "could not configure signal handler");
485
+ return -1;
486
+ }
487
+
488
+ return 0;
489
+ }
490
+
491
+ GIT_INLINE(int) restore_signals(struct sigaction *saved_handler)
492
+ {
493
+ if (sigaction(SIGPIPE, saved_handler, NULL) < 0) {
494
+ git_error_set(GIT_ERROR_OS, "could not configure signal handler");
495
+ return -1;
496
+ }
497
+
498
+ return 0;
499
+ }
500
+
501
+ #endif
502
+
503
+ ssize_t git_process_write(git_process *process, const void *buf, size_t count)
504
+ {
505
+ signal_state saved_signal;
506
+ ssize_t ret;
507
+
508
+ GIT_ASSERT_ARG(process);
509
+ GIT_ASSERT(process->capture_in);
510
+
511
+ if (count > SSIZE_MAX)
512
+ count = SSIZE_MAX;
513
+
514
+ if (disable_signals(&saved_signal) < 0)
515
+ return -1;
516
+
517
+ if ((ret = write(process->child_in, buf, count)) < 0)
518
+ git_error_set(GIT_ERROR_OS, "could not write to child process");
519
+
520
+ if (restore_signals(&saved_signal) < 0)
521
+ return -1;
522
+
523
+ return (ret < 0) ? -1 : ret;
524
+ }
525
+
526
+ int git_process_close_in(git_process *process)
527
+ {
528
+ if (!process->capture_in) {
529
+ git_error_set(GIT_ERROR_INVALID, "input is not open");
530
+ return -1;
531
+ }
532
+
533
+ CLOSE_FD(process->child_in);
534
+ return 0;
535
+ }
536
+
537
+ int git_process_close_out(git_process *process)
538
+ {
539
+ if (!process->capture_out) {
540
+ git_error_set(GIT_ERROR_INVALID, "output is not open");
541
+ return -1;
542
+ }
543
+
544
+ CLOSE_FD(process->child_out);
545
+ return 0;
546
+ }
547
+
548
+ int git_process_close_err(git_process *process)
549
+ {
550
+ if (!process->capture_err) {
551
+ git_error_set(GIT_ERROR_INVALID, "error is not open");
552
+ return -1;
553
+ }
554
+
555
+ CLOSE_FD(process->child_err);
556
+ return 0;
557
+ }
558
+
559
+ int git_process_close(git_process *process)
560
+ {
561
+ CLOSE_FD(process->child_in);
562
+ CLOSE_FD(process->child_out);
563
+ CLOSE_FD(process->child_err);
564
+
565
+ return 0;
566
+ }
567
+
568
+ int git_process_wait(git_process_result *result, git_process *process)
569
+ {
570
+ int state;
571
+
572
+ if (result)
573
+ memset(result, 0, sizeof(git_process_result));
574
+
575
+ if (!process->pid) {
576
+ git_error_set(GIT_ERROR_INVALID, "process is stopped");
577
+ return -1;
578
+ }
579
+
580
+ if (waitpid(process->pid, &state, 0) < 0) {
581
+ git_error_set(GIT_ERROR_OS, "could not wait for child");
582
+ return -1;
583
+ }
584
+
585
+ process->pid = 0;
586
+
587
+ if (result) {
588
+ if (WIFEXITED(state)) {
589
+ result->status = GIT_PROCESS_STATUS_NORMAL;
590
+ result->exitcode = WEXITSTATUS(state);
591
+ } else if (WIFSIGNALED(state)) {
592
+ result->status = GIT_PROCESS_STATUS_ERROR;
593
+ result->signal = WTERMSIG(state);
594
+ } else {
595
+ result->status = GIT_PROCESS_STATUS_ERROR;
596
+ }
597
+ }
598
+
599
+ return 0;
600
+ }
601
+
602
+ int git_process_result_msg(git_str *out, git_process_result *result)
603
+ {
604
+ if (result->status == GIT_PROCESS_STATUS_NONE) {
605
+ return git_str_puts(out, "process not started");
606
+ } else if (result->status == GIT_PROCESS_STATUS_NORMAL) {
607
+ return git_str_printf(out, "process exited with code %d",
608
+ result->exitcode);
609
+ } else if (result->signal) {
610
+ return git_str_printf(out, "process exited on signal %d",
611
+ result->signal);
612
+ }
613
+
614
+ return git_str_puts(out, "unknown error");
615
+ }
616
+
617
+ void git_process_free(git_process *process)
618
+ {
619
+ if (!process)
620
+ return;
621
+
622
+ if (process->pid)
623
+ git_process_close(process);
624
+
625
+ git__free(process->cwd);
626
+ git_strlist_free_with_null(process->args);
627
+ git_strlist_free_with_null(process->env);
628
+ git__free(process);
629
+ }
@@ -16,17 +16,35 @@
16
16
 
17
17
  char *p_realpath(const char *pathname, char *resolved)
18
18
  {
19
- char *ret;
20
- if ((ret = realpath(pathname, resolved)) == NULL)
19
+ char *result;
20
+
21
+ if ((result = realpath(pathname, resolved)) == NULL)
21
22
  return NULL;
22
23
 
23
24
  #ifdef __OpenBSD__
24
25
  /* The OpenBSD realpath function behaves differently,
25
26
  * figure out if the file exists */
26
- if (access(ret, F_OK) < 0)
27
- ret = NULL;
27
+ if (access(result, F_OK) < 0) {
28
+ if (!resolved)
29
+ free(result);
30
+
31
+ return NULL;
32
+ }
28
33
  #endif
29
- return ret;
34
+
35
+ /*
36
+ * If resolved == NULL, the system has allocated the result
37
+ * string. We need to strdup this into _our_ allocator pool
38
+ * so that callers can free it with git__free.
39
+ */
40
+ if (!resolved) {
41
+ char *dup = git__strdup(result);
42
+ free(result);
43
+
44
+ result = dup;
45
+ }
46
+
47
+ return result;
30
48
  }
31
49
 
32
50
  #endif
@@ -623,12 +623,12 @@ int git__bsearch_r(
623
623
  */
624
624
  int git__strcmp_cb(const void *a, const void *b)
625
625
  {
626
- return strcmp((const char *)a, (const char *)b);
626
+ return git__strcmp((const char *)a, (const char *)b);
627
627
  }
628
628
 
629
629
  int git__strcasecmp_cb(const void *a, const void *b)
630
630
  {
631
- return strcasecmp((const char *)a, (const char *)b);
631
+ return git__strcasecmp((const char *)a, (const char *)b);
632
632
  }
633
633
 
634
634
  int git__parse_bool(int *out, const char *value)