rugged 1.0.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (338) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -0
  3. data/README.md +3 -3
  4. data/ext/rugged/rugged.c +7 -4
  5. data/ext/rugged/rugged_commit.c +1 -1
  6. data/ext/rugged/rugged_config.c +1 -1
  7. data/ext/rugged/rugged_object.c +1 -1
  8. data/ext/rugged/rugged_remote.c +32 -2
  9. data/ext/rugged/rugged_repo.c +13 -3
  10. data/lib/rugged/commit.rb +17 -4
  11. data/lib/rugged/repository.rb +7 -8
  12. data/lib/rugged/submodule_collection.rb +4 -4
  13. data/lib/rugged/version.rb +1 -1
  14. data/vendor/libgit2/CMakeLists.txt +41 -74
  15. data/vendor/libgit2/COPYING +109 -1
  16. data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
  17. data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
  18. data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
  19. data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
  20. data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
  21. data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
  22. data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
  23. data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
  24. data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
  25. data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
  26. data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
  27. data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
  28. data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
  29. data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
  30. data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
  31. data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
  32. data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
  33. data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
  34. data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +29 -32
  35. data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +21 -28
  36. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
  37. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
  38. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +24 -10
  39. data/vendor/libgit2/deps/ntlmclient/compat.h +0 -27
  40. data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
  41. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
  42. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
  43. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
  44. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
  45. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
  46. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
  47. data/vendor/libgit2/deps/ntlmclient/ntlm.c +164 -135
  48. data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
  49. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
  50. data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
  51. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
  52. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
  53. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
  54. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
  55. data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
  56. data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
  57. data/vendor/libgit2/deps/pcre/LICENCE +93 -0
  58. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  59. data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
  60. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
  61. data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
  62. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
  63. data/vendor/libgit2/deps/zlib/deflate.c +1 -0
  64. data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
  65. data/vendor/libgit2/include/git2/apply.h +2 -0
  66. data/vendor/libgit2/include/git2/attr.h +89 -0
  67. data/vendor/libgit2/include/git2/blame.h +95 -42
  68. data/vendor/libgit2/include/git2/blob.h +31 -3
  69. data/vendor/libgit2/include/git2/branch.h +25 -0
  70. data/vendor/libgit2/include/git2/cert.h +42 -5
  71. data/vendor/libgit2/include/git2/checkout.h +28 -12
  72. data/vendor/libgit2/include/git2/commit.h +35 -19
  73. data/vendor/libgit2/include/git2/common.h +33 -6
  74. data/vendor/libgit2/include/git2/config.h +1 -1
  75. data/vendor/libgit2/include/git2/deprecated.h +248 -8
  76. data/vendor/libgit2/include/git2/diff.h +35 -20
  77. data/vendor/libgit2/include/git2/errors.h +8 -7
  78. data/vendor/libgit2/include/git2/filter.h +57 -17
  79. data/vendor/libgit2/include/git2/graph.h +20 -2
  80. data/vendor/libgit2/include/git2/index.h +4 -5
  81. data/vendor/libgit2/include/git2/indexer.h +2 -1
  82. data/vendor/libgit2/include/git2/odb.h +44 -20
  83. data/vendor/libgit2/include/git2/pack.h +1 -1
  84. data/vendor/libgit2/include/git2/patch.h +8 -0
  85. data/vendor/libgit2/include/git2/rebase.h +25 -1
  86. data/vendor/libgit2/include/git2/refs.h +9 -5
  87. data/vendor/libgit2/include/git2/remote.h +59 -6
  88. data/vendor/libgit2/include/git2/repository.h +95 -52
  89. data/vendor/libgit2/include/git2/revparse.h +5 -5
  90. data/vendor/libgit2/include/git2/status.h +115 -59
  91. data/vendor/libgit2/include/git2/strarray.h +6 -10
  92. data/vendor/libgit2/include/git2/submodule.h +9 -0
  93. data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
  94. data/vendor/libgit2/include/git2/sys/filter.h +49 -28
  95. data/vendor/libgit2/include/git2/sys/midx.h +74 -0
  96. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
  97. data/vendor/libgit2/include/git2/sys/transport.h +1 -0
  98. data/vendor/libgit2/include/git2/tag.h +12 -0
  99. data/vendor/libgit2/include/git2/transport.h +1 -1
  100. data/vendor/libgit2/include/git2/tree.h +2 -14
  101. data/vendor/libgit2/include/git2/types.h +9 -0
  102. data/vendor/libgit2/include/git2/version.h +3 -3
  103. data/vendor/libgit2/include/git2/worktree.h +1 -0
  104. data/vendor/libgit2/src/CMakeLists.txt +77 -44
  105. data/vendor/libgit2/src/alloc.c +21 -8
  106. data/vendor/libgit2/src/allocators/failalloc.c +92 -0
  107. data/vendor/libgit2/src/allocators/failalloc.h +23 -0
  108. data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
  109. data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
  110. data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
  111. data/vendor/libgit2/src/annotated_commit.c +21 -9
  112. data/vendor/libgit2/src/apply.c +21 -8
  113. data/vendor/libgit2/src/array.h +11 -11
  114. data/vendor/libgit2/src/assert_safe.h +58 -0
  115. data/vendor/libgit2/src/attr.c +181 -74
  116. data/vendor/libgit2/src/attr_file.c +92 -42
  117. data/vendor/libgit2/src/attr_file.h +32 -11
  118. data/vendor/libgit2/src/attrcache.c +44 -40
  119. data/vendor/libgit2/src/attrcache.h +4 -5
  120. data/vendor/libgit2/src/blame.c +28 -15
  121. data/vendor/libgit2/src/blame_git.c +6 -3
  122. data/vendor/libgit2/src/blob.c +46 -24
  123. data/vendor/libgit2/src/branch.c +87 -37
  124. data/vendor/libgit2/src/buffer.c +339 -27
  125. data/vendor/libgit2/src/buffer.h +153 -2
  126. data/vendor/libgit2/src/cache.c +3 -24
  127. data/vendor/libgit2/src/cache.h +7 -7
  128. data/vendor/libgit2/src/cc-compat.h +10 -2
  129. data/vendor/libgit2/src/checkout.c +97 -98
  130. data/vendor/libgit2/src/cherrypick.c +8 -2
  131. data/vendor/libgit2/src/clone.c +104 -29
  132. data/vendor/libgit2/src/commit.c +41 -28
  133. data/vendor/libgit2/src/commit_graph.c +1209 -0
  134. data/vendor/libgit2/src/commit_graph.h +162 -0
  135. data/vendor/libgit2/src/commit_list.c +46 -0
  136. data/vendor/libgit2/src/commit_list.h +2 -0
  137. data/vendor/libgit2/src/common.h +26 -2
  138. data/vendor/libgit2/src/config.c +40 -22
  139. data/vendor/libgit2/src/config_cache.c +9 -4
  140. data/vendor/libgit2/src/config_entries.c +35 -27
  141. data/vendor/libgit2/src/config_file.c +25 -8
  142. data/vendor/libgit2/src/config_parse.c +5 -7
  143. data/vendor/libgit2/src/config_snapshot.c +2 -1
  144. data/vendor/libgit2/src/crlf.c +16 -6
  145. data/vendor/libgit2/src/date.c +4 -3
  146. data/vendor/libgit2/src/delta.c +1 -1
  147. data/vendor/libgit2/src/describe.c +11 -4
  148. data/vendor/libgit2/src/diff.c +23 -19
  149. data/vendor/libgit2/src/diff_driver.c +21 -17
  150. data/vendor/libgit2/src/diff_file.c +5 -7
  151. data/vendor/libgit2/src/diff_generate.c +56 -28
  152. data/vendor/libgit2/src/diff_parse.c +2 -3
  153. data/vendor/libgit2/src/diff_print.c +81 -65
  154. data/vendor/libgit2/src/diff_stats.c +19 -16
  155. data/vendor/libgit2/src/diff_tform.c +13 -13
  156. data/vendor/libgit2/src/diff_xdiff.c +4 -2
  157. data/vendor/libgit2/src/diff_xdiff.h +1 -1
  158. data/vendor/libgit2/src/errors.c +26 -19
  159. data/vendor/libgit2/src/features.h.in +5 -1
  160. data/vendor/libgit2/src/fetch.c +7 -2
  161. data/vendor/libgit2/src/fetchhead.c +8 -4
  162. data/vendor/libgit2/src/filebuf.c +9 -7
  163. data/vendor/libgit2/src/filter.c +209 -113
  164. data/vendor/libgit2/src/filter.h +24 -5
  165. data/vendor/libgit2/src/futils.c +8 -8
  166. data/vendor/libgit2/src/futils.h +4 -4
  167. data/vendor/libgit2/src/graph.c +64 -9
  168. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
  169. data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
  170. data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
  171. data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
  172. data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
  173. data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
  174. data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
  175. data/vendor/libgit2/src/hash.c +16 -13
  176. data/vendor/libgit2/src/hash.h +1 -1
  177. data/vendor/libgit2/src/hashsig.c +23 -10
  178. data/vendor/libgit2/src/ident.c +13 -3
  179. data/vendor/libgit2/src/idxmap.c +0 -22
  180. data/vendor/libgit2/src/ignore.c +35 -19
  181. data/vendor/libgit2/src/index.c +126 -84
  182. data/vendor/libgit2/src/index.h +1 -1
  183. data/vendor/libgit2/src/indexer.c +60 -36
  184. data/vendor/libgit2/src/integer.h +79 -2
  185. data/vendor/libgit2/src/iterator.c +40 -28
  186. data/vendor/libgit2/src/iterator.h +1 -1
  187. data/vendor/libgit2/src/khash.h +2 -11
  188. data/vendor/libgit2/src/{settings.c → libgit2.c} +125 -49
  189. data/vendor/libgit2/src/libgit2.h +15 -0
  190. data/vendor/libgit2/src/mailmap.c +23 -10
  191. data/vendor/libgit2/src/map.h +3 -3
  192. data/vendor/libgit2/src/merge.c +108 -46
  193. data/vendor/libgit2/src/merge.h +2 -1
  194. data/vendor/libgit2/src/merge_driver.c +19 -13
  195. data/vendor/libgit2/src/merge_file.c +15 -9
  196. data/vendor/libgit2/src/message.c +3 -1
  197. data/vendor/libgit2/src/midx.c +879 -0
  198. data/vendor/libgit2/src/midx.h +110 -0
  199. data/vendor/libgit2/src/mwindow.c +214 -95
  200. data/vendor/libgit2/src/mwindow.h +3 -3
  201. data/vendor/libgit2/src/net.c +133 -4
  202. data/vendor/libgit2/src/net.h +16 -2
  203. data/vendor/libgit2/src/netops.c +6 -4
  204. data/vendor/libgit2/src/netops.h +2 -2
  205. data/vendor/libgit2/src/notes.c +10 -10
  206. data/vendor/libgit2/src/object.c +24 -15
  207. data/vendor/libgit2/src/odb.c +298 -57
  208. data/vendor/libgit2/src/odb.h +16 -2
  209. data/vendor/libgit2/src/odb_loose.c +31 -21
  210. data/vendor/libgit2/src/odb_mempack.c +3 -1
  211. data/vendor/libgit2/src/odb_pack.c +391 -114
  212. data/vendor/libgit2/src/oid.c +7 -4
  213. data/vendor/libgit2/src/pack-objects.c +83 -69
  214. data/vendor/libgit2/src/pack.c +383 -150
  215. data/vendor/libgit2/src/pack.h +44 -9
  216. data/vendor/libgit2/src/patch.c +14 -7
  217. data/vendor/libgit2/src/patch_generate.c +3 -5
  218. data/vendor/libgit2/src/patch_parse.c +6 -3
  219. data/vendor/libgit2/src/path.c +102 -57
  220. data/vendor/libgit2/src/path.h +79 -6
  221. data/vendor/libgit2/src/pathspec.c +12 -11
  222. data/vendor/libgit2/src/pool.c +34 -22
  223. data/vendor/libgit2/src/pool.h +9 -1
  224. data/vendor/libgit2/src/posix.c +43 -12
  225. data/vendor/libgit2/src/posix.h +9 -0
  226. data/vendor/libgit2/src/proxy.c +2 -0
  227. data/vendor/libgit2/src/push.c +2 -0
  228. data/vendor/libgit2/src/reader.c +10 -6
  229. data/vendor/libgit2/src/rebase.c +95 -49
  230. data/vendor/libgit2/src/refdb.c +165 -13
  231. data/vendor/libgit2/src/refdb.h +69 -0
  232. data/vendor/libgit2/src/refdb_fs.c +144 -152
  233. data/vendor/libgit2/src/reflog.c +21 -20
  234. data/vendor/libgit2/src/refs.c +151 -231
  235. data/vendor/libgit2/src/refs.h +2 -20
  236. data/vendor/libgit2/src/refspec.c +80 -44
  237. data/vendor/libgit2/src/regexp.c +2 -2
  238. data/vendor/libgit2/src/remote.c +312 -121
  239. data/vendor/libgit2/src/remote.h +2 -1
  240. data/vendor/libgit2/src/repository.c +351 -189
  241. data/vendor/libgit2/src/repository.h +23 -29
  242. data/vendor/libgit2/src/reset.c +7 -6
  243. data/vendor/libgit2/src/revert.c +8 -2
  244. data/vendor/libgit2/src/revparse.c +19 -13
  245. data/vendor/libgit2/src/revwalk.c +35 -20
  246. data/vendor/libgit2/src/runtime.c +162 -0
  247. data/vendor/libgit2/src/runtime.h +62 -0
  248. data/vendor/libgit2/src/{refdb_fs.h → settings.h} +3 -11
  249. data/vendor/libgit2/src/signature.c +6 -5
  250. data/vendor/libgit2/src/sortedcache.c +2 -3
  251. data/vendor/libgit2/src/sortedcache.h +10 -8
  252. data/vendor/libgit2/src/stash.c +7 -3
  253. data/vendor/libgit2/src/status.c +9 -4
  254. data/vendor/libgit2/src/strarray.c +64 -0
  255. data/vendor/libgit2/src/streams/mbedtls.c +14 -17
  256. data/vendor/libgit2/src/streams/mbedtls.h +1 -1
  257. data/vendor/libgit2/src/streams/openssl.c +113 -207
  258. data/vendor/libgit2/src/streams/openssl.h +9 -1
  259. data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
  260. data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
  261. data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
  262. data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
  263. data/vendor/libgit2/src/streams/registry.c +10 -9
  264. data/vendor/libgit2/src/streams/socket.c +6 -2
  265. data/vendor/libgit2/src/streams/stransport.c +6 -3
  266. data/vendor/libgit2/src/streams/tls.c +5 -3
  267. data/vendor/libgit2/src/submodule.c +134 -66
  268. data/vendor/libgit2/src/submodule.h +9 -9
  269. data/vendor/libgit2/src/sysdir.c +8 -26
  270. data/vendor/libgit2/src/sysdir.h +0 -11
  271. data/vendor/libgit2/src/tag.c +49 -11
  272. data/vendor/libgit2/src/thread.c +140 -0
  273. data/vendor/libgit2/src/thread.h +479 -0
  274. data/vendor/libgit2/src/threadstate.c +83 -0
  275. data/vendor/libgit2/src/threadstate.h +24 -0
  276. data/vendor/libgit2/src/trace.c +2 -2
  277. data/vendor/libgit2/src/trace.h +17 -13
  278. data/vendor/libgit2/src/transaction.c +21 -9
  279. data/vendor/libgit2/src/transport.c +3 -3
  280. data/vendor/libgit2/src/transports/auth.c +1 -1
  281. data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
  282. data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
  283. data/vendor/libgit2/src/transports/credential.c +17 -7
  284. data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
  285. data/vendor/libgit2/src/transports/git.c +1 -3
  286. data/vendor/libgit2/src/transports/http.c +19 -17
  287. data/vendor/libgit2/src/transports/http.h +1 -0
  288. data/vendor/libgit2/src/transports/httpclient.c +84 -42
  289. data/vendor/libgit2/src/transports/httpclient.h +1 -1
  290. data/vendor/libgit2/src/transports/local.c +5 -5
  291. data/vendor/libgit2/src/transports/smart.c +14 -9
  292. data/vendor/libgit2/src/transports/smart.h +1 -1
  293. data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
  294. data/vendor/libgit2/src/transports/ssh.c +51 -17
  295. data/vendor/libgit2/src/transports/winhttp.c +156 -88
  296. data/vendor/libgit2/src/tree.c +100 -77
  297. data/vendor/libgit2/src/tree.h +1 -0
  298. data/vendor/libgit2/src/tsort.c +0 -2
  299. data/vendor/libgit2/src/unix/map.c +3 -1
  300. data/vendor/libgit2/src/unix/posix.h +16 -1
  301. data/vendor/libgit2/src/unix/pthread.h +2 -1
  302. data/vendor/libgit2/src/utf8.c +150 -0
  303. data/vendor/libgit2/src/utf8.h +52 -0
  304. data/vendor/libgit2/src/util.c +74 -183
  305. data/vendor/libgit2/src/util.h +33 -39
  306. data/vendor/libgit2/src/vector.c +23 -19
  307. data/vendor/libgit2/src/vector.h +4 -2
  308. data/vendor/libgit2/src/win32/findfile.c +4 -2
  309. data/vendor/libgit2/src/win32/git2.rc +18 -3
  310. data/vendor/libgit2/src/win32/map.c +1 -1
  311. data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
  312. data/vendor/libgit2/src/win32/path_w32.c +23 -25
  313. data/vendor/libgit2/src/win32/path_w32.h +0 -1
  314. data/vendor/libgit2/src/win32/posix_w32.c +77 -1
  315. data/vendor/libgit2/src/win32/precompiled.h +0 -1
  316. data/vendor/libgit2/src/win32/reparse.h +4 -4
  317. data/vendor/libgit2/src/win32/thread.c +24 -15
  318. data/vendor/libgit2/src/win32/thread.h +1 -1
  319. data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
  320. data/vendor/libgit2/src/win32/w32_common.h +18 -9
  321. data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
  322. data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
  323. data/vendor/libgit2/src/win32/w32_util.h +6 -6
  324. data/vendor/libgit2/src/worktree.c +37 -15
  325. data/vendor/libgit2/src/zstream.c +1 -1
  326. metadata +56 -38
  327. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
  328. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
  329. data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
  330. data/vendor/libgit2/src/buf_text.c +0 -316
  331. data/vendor/libgit2/src/buf_text.h +0 -122
  332. data/vendor/libgit2/src/global.c +0 -361
  333. data/vendor/libgit2/src/global.h +0 -41
  334. data/vendor/libgit2/src/thread-utils.c +0 -58
  335. data/vendor/libgit2/src/thread-utils.h +0 -246
  336. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
  337. data/vendor/libgit2/src/win32/w32_stack.c +0 -188
  338. data/vendor/libgit2/src/win32/w32_stack.h +0 -140
@@ -54,7 +54,7 @@ GIT_INLINE(git_filemode_t) normalize_filemode(git_filemode_t filemode)
54
54
  static int valid_entry_name(git_repository *repo, const char *filename)
55
55
  {
56
56
  return *filename != '\0' &&
57
- git_path_isvalid(repo, filename, 0,
57
+ git_path_validate(repo, filename, 0,
58
58
  GIT_PATH_REJECT_TRAVERSAL | GIT_PATH_REJECT_DOT_GIT | GIT_PATH_REJECT_SLASH);
59
59
  }
60
60
 
@@ -228,7 +228,7 @@ int git_tree_entry_dup(git_tree_entry **dest, const git_tree_entry *source)
228
228
  {
229
229
  git_tree_entry *cpy;
230
230
 
231
- assert(source);
231
+ GIT_ASSERT_ARG(source);
232
232
 
233
233
  cpy = alloc_entry(source->filename, source->filename_len, source->oid);
234
234
  if (cpy == NULL)
@@ -261,19 +261,19 @@ git_filemode_t git_tree_entry_filemode_raw(const git_tree_entry *entry)
261
261
 
262
262
  const char *git_tree_entry_name(const git_tree_entry *entry)
263
263
  {
264
- assert(entry);
264
+ GIT_ASSERT_ARG_WITH_RETVAL(entry, NULL);
265
265
  return entry->filename;
266
266
  }
267
267
 
268
268
  const git_oid *git_tree_entry_id(const git_tree_entry *entry)
269
269
  {
270
- assert(entry);
270
+ GIT_ASSERT_ARG_WITH_RETVAL(entry, NULL);
271
271
  return entry->oid;
272
272
  }
273
273
 
274
274
  git_object_t git_tree_entry_type(const git_tree_entry *entry)
275
275
  {
276
- assert(entry);
276
+ GIT_ASSERT_ARG_WITH_RETVAL(entry, GIT_OBJECT_INVALID);
277
277
 
278
278
  if (S_ISGITLINK(entry->attr))
279
279
  return GIT_OBJECT_COMMIT;
@@ -288,7 +288,9 @@ int git_tree_entry_to_object(
288
288
  git_repository *repo,
289
289
  const git_tree_entry *entry)
290
290
  {
291
- assert(entry && object_out);
291
+ GIT_ASSERT_ARG(entry);
292
+ GIT_ASSERT_ARG(object_out);
293
+
292
294
  return git_object_lookup(object_out, repo, entry->oid, GIT_OBJECT_ANY);
293
295
  }
294
296
 
@@ -306,7 +308,8 @@ static const git_tree_entry *entry_fromname(
306
308
  const git_tree_entry *git_tree_entry_byname(
307
309
  const git_tree *tree, const char *filename)
308
310
  {
309
- assert(tree && filename);
311
+ GIT_ASSERT_ARG_WITH_RETVAL(tree, NULL);
312
+ GIT_ASSERT_ARG_WITH_RETVAL(filename, NULL);
310
313
 
311
314
  return entry_fromname(tree, filename, strlen(filename));
312
315
  }
@@ -314,7 +317,7 @@ const git_tree_entry *git_tree_entry_byname(
314
317
  const git_tree_entry *git_tree_entry_byindex(
315
318
  const git_tree *tree, size_t idx)
316
319
  {
317
- assert(tree);
320
+ GIT_ASSERT_ARG_WITH_RETVAL(tree, NULL);
318
321
  return git_array_get(tree->entries, idx);
319
322
  }
320
323
 
@@ -324,7 +327,7 @@ const git_tree_entry *git_tree_entry_byid(
324
327
  size_t i;
325
328
  const git_tree_entry *e;
326
329
 
327
- assert(tree);
330
+ GIT_ASSERT_ARG_WITH_RETVAL(tree, NULL);
328
331
 
329
332
  git_array_foreach(tree->entries, i, e) {
330
333
  if (memcmp(&e->oid->id, &id->id, sizeof(id->id)) == 0)
@@ -336,13 +339,13 @@ const git_tree_entry *git_tree_entry_byid(
336
339
 
337
340
  size_t git_tree_entrycount(const git_tree *tree)
338
341
  {
339
- assert(tree);
342
+ GIT_ASSERT_ARG_WITH_RETVAL(tree, 0);
340
343
  return tree->entries.size;
341
344
  }
342
345
 
343
346
  size_t git_treebuilder_entrycount(git_treebuilder *bld)
344
347
  {
345
- assert(bld);
348
+ GIT_ASSERT_ARG_WITH_RETVAL(bld, 0);
346
349
 
347
350
  return git_strmap_size(bld->map);
348
351
  }
@@ -489,6 +492,56 @@ static int check_entry(git_repository *repo, const char *filename, const git_oid
489
492
  return 0;
490
493
  }
491
494
 
495
+ static int git_treebuilder__write_with_buffer(
496
+ git_oid *oid,
497
+ git_treebuilder *bld,
498
+ git_buf *buf)
499
+ {
500
+ int error = 0;
501
+ size_t i, entrycount;
502
+ git_odb *odb;
503
+ git_tree_entry *entry;
504
+ git_vector entries = GIT_VECTOR_INIT;
505
+
506
+ git_buf_clear(buf);
507
+
508
+ entrycount = git_strmap_size(bld->map);
509
+ if ((error = git_vector_init(&entries, entrycount, entry_sort_cmp)) < 0)
510
+ goto out;
511
+
512
+ if (buf->asize == 0 &&
513
+ (error = git_buf_grow(buf, entrycount * 72)) < 0)
514
+ goto out;
515
+
516
+ git_strmap_foreach_value(bld->map, entry, {
517
+ if ((error = git_vector_insert(&entries, entry)) < 0)
518
+ goto out;
519
+ });
520
+
521
+ git_vector_sort(&entries);
522
+
523
+ for (i = 0; i < entries.length && !error; ++i) {
524
+ entry = git_vector_get(&entries, i);
525
+
526
+ git_buf_printf(buf, "%o ", entry->attr);
527
+ git_buf_put(buf, entry->filename, entry->filename_len + 1);
528
+ git_buf_put(buf, (char *)entry->oid->id, GIT_OID_RAWSZ);
529
+
530
+ if (git_buf_oom(buf)) {
531
+ error = -1;
532
+ goto out;
533
+ }
534
+ }
535
+
536
+ if ((error = git_repository_odb__weakptr(&odb, bld->repo)) == 0)
537
+ error = git_odb_write(oid, odb, buf->ptr, buf->size, GIT_OBJECT_TREE);
538
+
539
+ out:
540
+ git_vector_free(&entries);
541
+
542
+ return error;
543
+ }
544
+
492
545
  static int append_entry(
493
546
  git_treebuilder *bld,
494
547
  const char *filename,
@@ -607,7 +660,7 @@ static int write_tree(
607
660
  }
608
661
  }
609
662
 
610
- if (git_treebuilder_write_with_buffer(oid, bld, shared_buf) < 0)
663
+ if (git_treebuilder__write_with_buffer(oid, bld, shared_buf) < 0)
611
664
  goto on_error;
612
665
 
613
666
  git_treebuilder_free(bld);
@@ -626,7 +679,9 @@ int git_tree__write_index(
626
679
  git_buf shared_buf = GIT_BUF_INIT;
627
680
  bool old_ignore_case = false;
628
681
 
629
- assert(oid && index && repo);
682
+ GIT_ASSERT_ARG(oid);
683
+ GIT_ASSERT_ARG(index);
684
+ GIT_ASSERT_ARG(repo);
630
685
 
631
686
  if (git_index_has_conflicts(index)) {
632
687
  git_error_set(GIT_ERROR_INDEX,
@@ -680,7 +735,8 @@ int git_treebuilder_new(
680
735
  git_treebuilder *bld;
681
736
  size_t i;
682
737
 
683
- assert(builder_p && repo);
738
+ GIT_ASSERT_ARG(builder_p);
739
+ GIT_ASSERT_ARG(repo);
684
740
 
685
741
  bld = git__calloc(1, sizeof(git_treebuilder));
686
742
  GIT_ERROR_CHECK_ALLOC(bld);
@@ -723,7 +779,9 @@ int git_treebuilder_insert(
723
779
  git_tree_entry *entry;
724
780
  int error;
725
781
 
726
- assert(bld && id && filename);
782
+ GIT_ASSERT_ARG(bld);
783
+ GIT_ASSERT_ARG(id);
784
+ GIT_ASSERT_ARG(filename);
727
785
 
728
786
  if ((error = check_entry(bld->repo, filename, id, filemode)) < 0)
729
787
  return error;
@@ -751,7 +809,9 @@ int git_treebuilder_insert(
751
809
 
752
810
  static git_tree_entry *treebuilder_get(git_treebuilder *bld, const char *filename)
753
811
  {
754
- assert(bld && filename);
812
+ GIT_ASSERT_ARG_WITH_RETVAL(bld, NULL);
813
+ GIT_ASSERT_ARG_WITH_RETVAL(filename, NULL);
814
+
755
815
  return git_strmap_get(bld->map, filename);
756
816
  }
757
817
 
@@ -775,63 +835,10 @@ int git_treebuilder_remove(git_treebuilder *bld, const char *filename)
775
835
 
776
836
  int git_treebuilder_write(git_oid *oid, git_treebuilder *bld)
777
837
  {
778
- int error;
779
- git_buf buffer = GIT_BUF_INIT;
780
-
781
- error = git_treebuilder_write_with_buffer(oid, bld, &buffer);
782
-
783
- git_buf_dispose(&buffer);
784
- return error;
785
- }
786
-
787
- int git_treebuilder_write_with_buffer(git_oid *oid, git_treebuilder *bld, git_buf *tree)
788
- {
789
- int error = 0;
790
- size_t i, entrycount;
791
- git_odb *odb;
792
- git_tree_entry *entry;
793
- git_vector entries = GIT_VECTOR_INIT;
794
-
795
- assert(bld);
796
- assert(tree);
797
-
798
- git_buf_clear(tree);
799
-
800
- entrycount = git_strmap_size(bld->map);
801
- if ((error = git_vector_init(&entries, entrycount, entry_sort_cmp)) < 0)
802
- goto out;
803
-
804
- if (tree->asize == 0 &&
805
- (error = git_buf_grow(tree, entrycount * 72)) < 0)
806
- goto out;
807
-
808
- git_strmap_foreach_value(bld->map, entry, {
809
- if ((error = git_vector_insert(&entries, entry)) < 0)
810
- goto out;
811
- });
812
-
813
- git_vector_sort(&entries);
838
+ GIT_ASSERT_ARG(oid);
839
+ GIT_ASSERT_ARG(bld);
814
840
 
815
- for (i = 0; i < entries.length && !error; ++i) {
816
- entry = git_vector_get(&entries, i);
817
-
818
- git_buf_printf(tree, "%o ", entry->attr);
819
- git_buf_put(tree, entry->filename, entry->filename_len + 1);
820
- git_buf_put(tree, (char *)entry->oid->id, GIT_OID_RAWSZ);
821
-
822
- if (git_buf_oom(tree)) {
823
- error = -1;
824
- goto out;
825
- }
826
- }
827
-
828
- if ((error = git_repository_odb__weakptr(&odb, bld->repo)) == 0)
829
- error = git_odb_write(oid, odb, tree->ptr, tree->size, GIT_OBJECT_TREE);
830
-
831
- out:
832
- git_vector_free(&entries);
833
-
834
- return error;
841
+ return git_treebuilder__write_with_buffer(oid, bld, &bld->write_cache);
835
842
  }
836
843
 
837
844
  int git_treebuilder_filter(
@@ -842,7 +849,8 @@ int git_treebuilder_filter(
842
849
  const char *filename;
843
850
  git_tree_entry *entry;
844
851
 
845
- assert(bld && filter);
852
+ GIT_ASSERT_ARG(bld);
853
+ GIT_ASSERT_ARG(filter);
846
854
 
847
855
  git_strmap_foreach(bld->map, filename, entry, {
848
856
  if (filter(entry, payload)) {
@@ -858,7 +866,7 @@ int git_treebuilder_clear(git_treebuilder *bld)
858
866
  {
859
867
  git_tree_entry *e;
860
868
 
861
- assert(bld);
869
+ GIT_ASSERT_ARG(bld);
862
870
 
863
871
  git_strmap_foreach_value(bld->map, e, git_tree_entry_free(e));
864
872
  git_strmap_clear(bld->map);
@@ -871,6 +879,7 @@ void git_treebuilder_free(git_treebuilder *bld)
871
879
  if (bld == NULL)
872
880
  return;
873
881
 
882
+ git_buf_dispose(&bld->write_cache);
874
883
  git_treebuilder_clear(bld);
875
884
  git_strmap_free(bld->map);
876
885
  git__free(bld);
@@ -1174,10 +1183,10 @@ int git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseli
1174
1183
 
1175
1184
  for (j = 0; j < steps_up; j++) {
1176
1185
  tree_stack_entry *current, *popped = git_array_pop(stack);
1177
- assert(popped);
1186
+ GIT_ASSERT(popped);
1178
1187
 
1179
1188
  current = git_array_last(stack);
1180
- assert(current);
1189
+ GIT_ASSERT(current);
1181
1190
 
1182
1191
  if ((error = create_popped_tree(current, popped, &component)) < 0)
1183
1192
  goto cleanup;
@@ -1242,8 +1251,9 @@ int git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseli
1242
1251
  }
1243
1252
  case GIT_TREE_UPDATE_REMOVE:
1244
1253
  {
1254
+ tree_stack_entry *last = git_array_last(stack);
1245
1255
  char *basename = git_path_basename(update->path);
1246
- error = git_treebuilder_remove(git_array_last(stack)->bld, basename);
1256
+ error = git_treebuilder_remove(last->bld, basename);
1247
1257
  git__free(basename);
1248
1258
  break;
1249
1259
  }
@@ -1295,3 +1305,16 @@ cleanup:
1295
1305
  git_vector_free(&entries);
1296
1306
  return error;
1297
1307
  }
1308
+
1309
+ /* Deprecated Functions */
1310
+
1311
+ #ifndef GIT_DEPRECATE_HARD
1312
+
1313
+ int git_treebuilder_write_with_buffer(git_oid *oid, git_treebuilder *bld, git_buf *buf)
1314
+ {
1315
+ GIT_UNUSED(buf);
1316
+
1317
+ return git_treebuilder_write(oid, bld);
1318
+ }
1319
+
1320
+ #endif
@@ -32,6 +32,7 @@ struct git_tree {
32
32
  struct git_treebuilder {
33
33
  git_repository *repo;
34
34
  git_strmap *map;
35
+ git_buf write_cache;
35
36
  };
36
37
 
37
38
  GIT_INLINE(bool) git_tree_entry__is_tree(const struct git_tree_entry *e)
@@ -29,8 +29,6 @@ static int binsearch(
29
29
  int l, c, r;
30
30
  void *lx, *cx;
31
31
 
32
- assert(size > 0);
33
-
34
32
  l = 0;
35
33
  r = (int)size - 1;
36
34
  c = r >> 1;
@@ -66,8 +66,10 @@ int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, off64_t offset
66
66
 
67
67
  int p_munmap(git_map *map)
68
68
  {
69
- assert(map != NULL);
69
+ GIT_ASSERT_ARG(map);
70
70
  munmap(map->data, map->len);
71
+ map->data = NULL;
72
+ map->len = 0;
71
73
 
72
74
  return 0;
73
75
  }
@@ -62,11 +62,23 @@ GIT_INLINE(int) p_fsync(int fd)
62
62
  #define p_snprintf snprintf
63
63
  #define p_mkstemp(p) mkstemp(p)
64
64
  #define p_chdir(p) chdir(p)
65
- #define p_chmod(p,m) chmod(p, m)
66
65
  #define p_rmdir(p) rmdir(p)
67
66
  #define p_access(p,m) access(p,m)
68
67
  #define p_ftruncate(fd, sz) ftruncate(fd, sz)
69
68
 
69
+ /*
70
+ * Pre-Android 5 did not implement a virtual filesystem atop FAT
71
+ * partitions for Unix permissions, which causes chmod to fail. However,
72
+ * Unix permissions have no effect on Android anyway as file permissions
73
+ * are not actually managed this way, so treating it as a no-op across
74
+ * all Android is safe.
75
+ */
76
+ #ifdef __ANDROID__
77
+ # define p_chmod(p,m) 0
78
+ #else
79
+ # define p_chmod(p,m) chmod(p, m)
80
+ #endif
81
+
70
82
  /* see win32/posix.h for explanation about why this exists */
71
83
  #define p_lstat_posixly(p,b) lstat(p,b)
72
84
 
@@ -89,4 +101,7 @@ GIT_INLINE(int) p_futimes(int f, const struct p_timeval t[2])
89
101
  # define p_futimes futimes
90
102
  #endif
91
103
 
104
+ #define p_pread(f, d, s, o) pread(f, d, s, o)
105
+ #define p_pwrite(f, d, s, o) pwrite(f, d, s, o)
106
+
92
107
  #endif
@@ -12,7 +12,8 @@ typedef struct {
12
12
  pthread_t thread;
13
13
  } git_thread;
14
14
 
15
- #define git_threads_init() (void)0
15
+ GIT_INLINE(int) git_threads_global_init(void) { return 0; }
16
+
16
17
  #define git_thread_create(git_thread_ptr, start_routine, arg) \
17
18
  pthread_create(&(git_thread_ptr)->thread, NULL, start_routine, arg)
18
19
  #define git_thread_join(git_thread_ptr, status) \
@@ -0,0 +1,150 @@
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 "utf8.h"
9
+
10
+ #include "common.h"
11
+
12
+ /*
13
+ * git_utf8_iterate is taken from the utf8proc project,
14
+ * http://www.public-software-group.org/utf8proc
15
+ *
16
+ * Copyright (c) 2009 Public Software Group e. V., Berlin, Germany
17
+ *
18
+ * Permission is hereby granted, free of charge, to any person obtaining a
19
+ * copy of this software and associated documentation files (the ""Software""),
20
+ * to deal in the Software without restriction, including without limitation
21
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
22
+ * and/or sell copies of the Software, and to permit persons to whom the
23
+ * Software is furnished to do so, subject to the following conditions:
24
+ *
25
+ * The above copyright notice and this permission notice shall be included in
26
+ * all copies or substantial portions of the Software.
27
+ *
28
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
29
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
30
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
31
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
32
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
33
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
34
+ * DEALINGS IN THE SOFTWARE.
35
+ */
36
+
37
+ static const uint8_t utf8proc_utf8class[256] = {
38
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
39
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
40
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
41
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
42
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
43
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
44
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
45
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
46
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
48
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
49
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
50
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
51
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
52
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
53
+ 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0
54
+ };
55
+
56
+ static int utf8_charlen(const uint8_t *str, size_t str_len)
57
+ {
58
+ uint8_t length;
59
+ size_t i;
60
+
61
+ length = utf8proc_utf8class[str[0]];
62
+ if (!length)
63
+ return -1;
64
+
65
+ if (str_len > 0 && length > str_len)
66
+ return -1;
67
+
68
+ for (i = 1; i < length; i++) {
69
+ if ((str[i] & 0xC0) != 0x80)
70
+ return -1;
71
+ }
72
+
73
+ return (int)length;
74
+ }
75
+
76
+ int git_utf8_iterate(uint32_t *out, const char *_str, size_t str_len)
77
+ {
78
+ const uint8_t *str = (const uint8_t *)_str;
79
+ uint32_t uc = 0;
80
+ int length;
81
+
82
+ *out = 0;
83
+
84
+ if ((length = utf8_charlen(str, str_len)) < 0)
85
+ return -1;
86
+
87
+ switch (length) {
88
+ case 1:
89
+ uc = str[0];
90
+ break;
91
+ case 2:
92
+ uc = ((str[0] & 0x1F) << 6) + (str[1] & 0x3F);
93
+ if (uc < 0x80) uc = -1;
94
+ break;
95
+ case 3:
96
+ uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6)
97
+ + (str[2] & 0x3F);
98
+ if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000) ||
99
+ (uc >= 0xFDD0 && uc < 0xFDF0)) uc = -1;
100
+ break;
101
+ case 4:
102
+ uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12)
103
+ + ((str[2] & 0x3F) << 6) + (str[3] & 0x3F);
104
+ if (uc < 0x10000 || uc >= 0x110000) uc = -1;
105
+ break;
106
+ default:
107
+ return -1;
108
+ }
109
+
110
+ if ((uc & 0xFFFF) >= 0xFFFE)
111
+ return -1;
112
+
113
+ *out = uc;
114
+ return length;
115
+ }
116
+
117
+ size_t git_utf8_char_length(const char *_str, size_t str_len)
118
+ {
119
+ const uint8_t *str = (const uint8_t *)_str;
120
+ size_t offset = 0, count = 0;
121
+
122
+ while (offset < str_len) {
123
+ int length = utf8_charlen(str + offset, str_len - offset);
124
+
125
+ if (length < 0)
126
+ length = 1;
127
+
128
+ offset += length;
129
+ count++;
130
+ }
131
+
132
+ return count;
133
+ }
134
+
135
+ size_t git_utf8_valid_buf_length(const char *_str, size_t str_len)
136
+ {
137
+ const uint8_t *str = (const uint8_t *)_str;
138
+ size_t offset = 0;
139
+
140
+ while (offset < str_len) {
141
+ int length = utf8_charlen(str + offset, str_len - offset);
142
+
143
+ if (length < 0)
144
+ break;
145
+
146
+ offset += length;
147
+ }
148
+
149
+ return offset;
150
+ }