rugged 1.1.1 → 1.2.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 (277) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -0
  3. data/README.md +1 -1
  4. data/ext/rugged/rugged.c +7 -4
  5. data/ext/rugged/rugged_object.c +1 -1
  6. data/ext/rugged/rugged_repo.c +3 -3
  7. data/lib/rugged/repository.rb +2 -2
  8. data/lib/rugged/version.rb +1 -1
  9. data/vendor/libgit2/CMakeLists.txt +11 -6
  10. data/vendor/libgit2/COPYING +109 -1
  11. data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
  12. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +4 -0
  13. data/vendor/libgit2/cmake/SelectHashes.cmake +1 -0
  14. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
  15. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +17 -5
  16. data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
  17. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
  18. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
  19. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
  20. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
  21. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
  22. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
  23. data/vendor/libgit2/deps/ntlmclient/ntlm.c +150 -118
  24. data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
  25. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
  26. data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
  27. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
  28. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
  29. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
  30. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
  31. data/vendor/libgit2/include/git2/attr.h +89 -0
  32. data/vendor/libgit2/include/git2/blame.h +93 -42
  33. data/vendor/libgit2/include/git2/blob.h +14 -2
  34. data/vendor/libgit2/include/git2/branch.h +25 -0
  35. data/vendor/libgit2/include/git2/cert.h +42 -5
  36. data/vendor/libgit2/include/git2/checkout.h +28 -12
  37. data/vendor/libgit2/include/git2/commit.h +35 -19
  38. data/vendor/libgit2/include/git2/common.h +14 -4
  39. data/vendor/libgit2/include/git2/deprecated.h +206 -6
  40. data/vendor/libgit2/include/git2/diff.h +34 -19
  41. data/vendor/libgit2/include/git2/errors.h +6 -6
  42. data/vendor/libgit2/include/git2/filter.h +57 -17
  43. data/vendor/libgit2/include/git2/graph.h +20 -2
  44. data/vendor/libgit2/include/git2/index.h +2 -2
  45. data/vendor/libgit2/include/git2/odb.h +29 -0
  46. data/vendor/libgit2/include/git2/patch.h +8 -0
  47. data/vendor/libgit2/include/git2/rebase.h +25 -1
  48. data/vendor/libgit2/include/git2/refs.h +6 -2
  49. data/vendor/libgit2/include/git2/remote.h +59 -6
  50. data/vendor/libgit2/include/git2/revparse.h +5 -5
  51. data/vendor/libgit2/include/git2/status.h +115 -59
  52. data/vendor/libgit2/include/git2/submodule.h +9 -0
  53. data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
  54. data/vendor/libgit2/include/git2/sys/filter.h +49 -28
  55. data/vendor/libgit2/include/git2/sys/midx.h +74 -0
  56. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
  57. data/vendor/libgit2/include/git2/sys/transport.h +1 -0
  58. data/vendor/libgit2/include/git2/tag.h +12 -0
  59. data/vendor/libgit2/include/git2/tree.h +0 -14
  60. data/vendor/libgit2/include/git2/types.h +9 -0
  61. data/vendor/libgit2/include/git2/version.h +4 -4
  62. data/vendor/libgit2/include/git2/worktree.h +1 -0
  63. data/vendor/libgit2/src/CMakeLists.txt +25 -4
  64. data/vendor/libgit2/src/alloc.c +21 -8
  65. data/vendor/libgit2/src/allocators/failalloc.c +92 -0
  66. data/vendor/libgit2/src/allocators/failalloc.h +23 -0
  67. data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
  68. data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
  69. data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
  70. data/vendor/libgit2/src/annotated_commit.c +21 -9
  71. data/vendor/libgit2/src/apply.c +16 -7
  72. data/vendor/libgit2/src/array.h +11 -11
  73. data/vendor/libgit2/src/attr.c +181 -74
  74. data/vendor/libgit2/src/attr_file.c +84 -39
  75. data/vendor/libgit2/src/attr_file.h +32 -11
  76. data/vendor/libgit2/src/attrcache.c +42 -37
  77. data/vendor/libgit2/src/attrcache.h +4 -5
  78. data/vendor/libgit2/src/blame.c +11 -5
  79. data/vendor/libgit2/src/blob.c +35 -24
  80. data/vendor/libgit2/src/branch.c +69 -17
  81. data/vendor/libgit2/src/buffer.c +334 -25
  82. data/vendor/libgit2/src/buffer.h +153 -2
  83. data/vendor/libgit2/src/cache.c +2 -2
  84. data/vendor/libgit2/src/cache.h +7 -7
  85. data/vendor/libgit2/src/cc-compat.h +10 -2
  86. data/vendor/libgit2/src/checkout.c +48 -26
  87. data/vendor/libgit2/src/cherrypick.c +6 -2
  88. data/vendor/libgit2/src/clone.c +41 -47
  89. data/vendor/libgit2/src/commit.c +41 -28
  90. data/vendor/libgit2/src/commit_graph.c +1209 -0
  91. data/vendor/libgit2/src/commit_graph.h +162 -0
  92. data/vendor/libgit2/src/commit_list.c +46 -0
  93. data/vendor/libgit2/src/commit_list.h +2 -0
  94. data/vendor/libgit2/src/common.h +25 -2
  95. data/vendor/libgit2/src/config.c +37 -15
  96. data/vendor/libgit2/src/config_cache.c +5 -3
  97. data/vendor/libgit2/src/config_file.c +16 -8
  98. data/vendor/libgit2/src/config_parse.c +4 -6
  99. data/vendor/libgit2/src/crlf.c +16 -6
  100. data/vendor/libgit2/src/date.c +4 -3
  101. data/vendor/libgit2/src/delta.c +1 -1
  102. data/vendor/libgit2/src/describe.c +6 -3
  103. data/vendor/libgit2/src/diff.c +11 -8
  104. data/vendor/libgit2/src/diff_driver.c +21 -17
  105. data/vendor/libgit2/src/diff_file.c +2 -6
  106. data/vendor/libgit2/src/diff_generate.c +46 -17
  107. data/vendor/libgit2/src/diff_print.c +19 -6
  108. data/vendor/libgit2/src/diff_stats.c +7 -5
  109. data/vendor/libgit2/src/diff_tform.c +9 -8
  110. data/vendor/libgit2/src/diff_xdiff.c +4 -2
  111. data/vendor/libgit2/src/diff_xdiff.h +1 -1
  112. data/vendor/libgit2/src/errors.c +24 -19
  113. data/vendor/libgit2/src/features.h.in +5 -1
  114. data/vendor/libgit2/src/fetch.c +5 -2
  115. data/vendor/libgit2/src/fetchhead.c +8 -4
  116. data/vendor/libgit2/src/filebuf.c +9 -7
  117. data/vendor/libgit2/src/filter.c +206 -110
  118. data/vendor/libgit2/src/filter.h +24 -5
  119. data/vendor/libgit2/src/futils.c +5 -5
  120. data/vendor/libgit2/src/futils.h +1 -1
  121. data/vendor/libgit2/src/graph.c +64 -9
  122. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
  123. data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
  124. data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
  125. data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
  126. data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
  127. data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
  128. data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
  129. data/vendor/libgit2/src/hash.c +16 -13
  130. data/vendor/libgit2/src/hash.h +1 -1
  131. data/vendor/libgit2/src/hashsig.c +23 -10
  132. data/vendor/libgit2/src/ident.c +13 -3
  133. data/vendor/libgit2/src/ignore.c +35 -19
  134. data/vendor/libgit2/src/index.c +106 -70
  135. data/vendor/libgit2/src/index.h +1 -1
  136. data/vendor/libgit2/src/indexer.c +31 -29
  137. data/vendor/libgit2/src/integer.h +64 -2
  138. data/vendor/libgit2/src/iterator.c +36 -24
  139. data/vendor/libgit2/src/iterator.h +1 -1
  140. data/vendor/libgit2/src/khash.h +2 -11
  141. data/vendor/libgit2/src/{settings.c → libgit2.c} +117 -50
  142. data/vendor/libgit2/src/libgit2.h +15 -0
  143. data/vendor/libgit2/src/mailmap.c +23 -10
  144. data/vendor/libgit2/src/map.h +3 -3
  145. data/vendor/libgit2/src/merge.c +70 -30
  146. data/vendor/libgit2/src/merge.h +2 -1
  147. data/vendor/libgit2/src/merge_driver.c +19 -13
  148. data/vendor/libgit2/src/merge_file.c +11 -3
  149. data/vendor/libgit2/src/message.c +3 -1
  150. data/vendor/libgit2/src/midx.c +471 -10
  151. data/vendor/libgit2/src/midx.h +28 -1
  152. data/vendor/libgit2/src/mwindow.c +103 -59
  153. data/vendor/libgit2/src/mwindow.h +3 -3
  154. data/vendor/libgit2/src/net.c +127 -3
  155. data/vendor/libgit2/src/net.h +16 -2
  156. data/vendor/libgit2/src/netops.c +6 -4
  157. data/vendor/libgit2/src/netops.h +2 -2
  158. data/vendor/libgit2/src/notes.c +10 -10
  159. data/vendor/libgit2/src/object.c +22 -14
  160. data/vendor/libgit2/src/odb.c +285 -48
  161. data/vendor/libgit2/src/odb.h +16 -2
  162. data/vendor/libgit2/src/odb_loose.c +28 -18
  163. data/vendor/libgit2/src/odb_mempack.c +1 -1
  164. data/vendor/libgit2/src/odb_pack.c +391 -114
  165. data/vendor/libgit2/src/oid.c +5 -4
  166. data/vendor/libgit2/src/pack-objects.c +54 -48
  167. data/vendor/libgit2/src/pack.c +329 -119
  168. data/vendor/libgit2/src/pack.h +25 -7
  169. data/vendor/libgit2/src/patch.c +14 -7
  170. data/vendor/libgit2/src/patch_generate.c +2 -2
  171. data/vendor/libgit2/src/patch_parse.c +2 -1
  172. data/vendor/libgit2/src/path.c +98 -53
  173. data/vendor/libgit2/src/path.h +79 -6
  174. data/vendor/libgit2/src/pathspec.c +8 -8
  175. data/vendor/libgit2/src/pool.c +13 -7
  176. data/vendor/libgit2/src/posix.c +11 -3
  177. data/vendor/libgit2/src/reader.c +10 -6
  178. data/vendor/libgit2/src/rebase.c +93 -49
  179. data/vendor/libgit2/src/refdb.c +30 -13
  180. data/vendor/libgit2/src/refdb_fs.c +121 -69
  181. data/vendor/libgit2/src/reflog.c +19 -14
  182. data/vendor/libgit2/src/refs.c +76 -41
  183. data/vendor/libgit2/src/refspec.c +32 -12
  184. data/vendor/libgit2/src/remote.c +272 -102
  185. data/vendor/libgit2/src/remote.h +2 -1
  186. data/vendor/libgit2/src/repository.c +176 -103
  187. data/vendor/libgit2/src/repository.h +12 -1
  188. data/vendor/libgit2/src/reset.c +7 -6
  189. data/vendor/libgit2/src/revert.c +6 -2
  190. data/vendor/libgit2/src/revparse.c +14 -9
  191. data/vendor/libgit2/src/revwalk.c +32 -15
  192. data/vendor/libgit2/src/runtime.c +162 -0
  193. data/vendor/libgit2/src/runtime.h +62 -0
  194. data/vendor/libgit2/src/settings.h +11 -0
  195. data/vendor/libgit2/src/signature.c +6 -5
  196. data/vendor/libgit2/src/sortedcache.h +10 -8
  197. data/vendor/libgit2/src/stash.c +3 -1
  198. data/vendor/libgit2/src/status.c +7 -4
  199. data/vendor/libgit2/src/strarray.c +2 -1
  200. data/vendor/libgit2/src/streams/mbedtls.c +14 -17
  201. data/vendor/libgit2/src/streams/mbedtls.h +1 -1
  202. data/vendor/libgit2/src/streams/openssl.c +101 -201
  203. data/vendor/libgit2/src/streams/openssl.h +9 -1
  204. data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
  205. data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
  206. data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
  207. data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
  208. data/vendor/libgit2/src/streams/registry.c +5 -6
  209. data/vendor/libgit2/src/streams/socket.c +6 -2
  210. data/vendor/libgit2/src/streams/stransport.c +6 -3
  211. data/vendor/libgit2/src/streams/tls.c +5 -3
  212. data/vendor/libgit2/src/submodule.c +128 -62
  213. data/vendor/libgit2/src/submodule.h +9 -9
  214. data/vendor/libgit2/src/sysdir.c +4 -6
  215. data/vendor/libgit2/src/tag.c +47 -11
  216. data/vendor/libgit2/src/thread.c +140 -0
  217. data/vendor/libgit2/src/thread.h +479 -0
  218. data/vendor/libgit2/src/threadstate.c +83 -0
  219. data/vendor/libgit2/src/threadstate.h +24 -0
  220. data/vendor/libgit2/src/trace.c +2 -2
  221. data/vendor/libgit2/src/trace.h +17 -13
  222. data/vendor/libgit2/src/transaction.c +19 -8
  223. data/vendor/libgit2/src/transport.c +3 -3
  224. data/vendor/libgit2/src/transports/auth.c +1 -1
  225. data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
  226. data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
  227. data/vendor/libgit2/src/transports/credential.c +15 -7
  228. data/vendor/libgit2/src/transports/git.c +1 -3
  229. data/vendor/libgit2/src/transports/http.c +19 -17
  230. data/vendor/libgit2/src/transports/http.h +1 -0
  231. data/vendor/libgit2/src/transports/httpclient.c +53 -26
  232. data/vendor/libgit2/src/transports/httpclient.h +1 -1
  233. data/vendor/libgit2/src/transports/local.c +3 -3
  234. data/vendor/libgit2/src/transports/smart.c +12 -7
  235. data/vendor/libgit2/src/transports/smart.h +1 -1
  236. data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
  237. data/vendor/libgit2/src/transports/ssh.c +51 -17
  238. data/vendor/libgit2/src/transports/winhttp.c +41 -31
  239. data/vendor/libgit2/src/tree.c +100 -77
  240. data/vendor/libgit2/src/tree.h +1 -0
  241. data/vendor/libgit2/src/tsort.c +0 -2
  242. data/vendor/libgit2/src/unix/map.c +3 -1
  243. data/vendor/libgit2/src/unix/pthread.h +2 -1
  244. data/vendor/libgit2/src/utf8.c +150 -0
  245. data/vendor/libgit2/src/utf8.h +52 -0
  246. data/vendor/libgit2/src/util.c +53 -129
  247. data/vendor/libgit2/src/util.h +33 -39
  248. data/vendor/libgit2/src/vector.c +23 -19
  249. data/vendor/libgit2/src/vector.h +4 -2
  250. data/vendor/libgit2/src/win32/findfile.c +4 -2
  251. data/vendor/libgit2/src/win32/map.c +1 -1
  252. data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
  253. data/vendor/libgit2/src/win32/path_w32.c +22 -24
  254. data/vendor/libgit2/src/win32/path_w32.h +0 -1
  255. data/vendor/libgit2/src/win32/posix_w32.c +7 -1
  256. data/vendor/libgit2/src/win32/precompiled.h +0 -1
  257. data/vendor/libgit2/src/win32/reparse.h +4 -4
  258. data/vendor/libgit2/src/win32/thread.c +24 -15
  259. data/vendor/libgit2/src/win32/thread.h +1 -1
  260. data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
  261. data/vendor/libgit2/src/win32/w32_common.h +18 -9
  262. data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
  263. data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
  264. data/vendor/libgit2/src/win32/w32_util.h +6 -6
  265. data/vendor/libgit2/src/worktree.c +27 -16
  266. data/vendor/libgit2/src/zstream.c +1 -1
  267. metadata +32 -16
  268. data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
  269. data/vendor/libgit2/src/buf_text.c +0 -316
  270. data/vendor/libgit2/src/buf_text.h +0 -122
  271. data/vendor/libgit2/src/global.c +0 -363
  272. data/vendor/libgit2/src/global.h +0 -41
  273. data/vendor/libgit2/src/thread-utils.c +0 -58
  274. data/vendor/libgit2/src/thread-utils.h +0 -369
  275. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
  276. data/vendor/libgit2/src/win32/w32_stack.c +0 -188
  277. data/vendor/libgit2/src/win32/w32_stack.h +0 -140
@@ -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
  }
@@ -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
+ }
@@ -0,0 +1,52 @@
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_utf8_h__
8
+ #define INCLUDE_utf8_h__
9
+
10
+ #include "common.h"
11
+
12
+ /*
13
+ * Iterate through an UTF-8 string, yielding one codepoint at a time.
14
+ *
15
+ * @param out pointer where to store the current codepoint
16
+ * @param str current position in the string
17
+ * @param str_len size left in the string
18
+ * @return length in bytes of the read codepoint; -1 if the codepoint was invalid
19
+ */
20
+ extern int git_utf8_iterate(uint32_t *out, const char *str, size_t str_len);
21
+
22
+ /**
23
+ * Returns the number of characters in the given string.
24
+ *
25
+ * This function will count invalid codepoints; if any given byte is
26
+ * not part of a valid UTF-8 codepoint, then it will be counted toward
27
+ * the length in characters.
28
+ *
29
+ * In other words:
30
+ * 0x24 (U+0024 "$") has length 1
31
+ * 0xc2 0xa2 (U+00A2 "¢") has length 1
32
+ * 0x24 0xc2 0xa2 (U+0024 U+00A2 "$¢") has length 2
33
+ * 0xf0 0x90 0x8d 0x88 (U+10348 "𐍈") has length 1
34
+ * 0x24 0xc0 0xc1 0x34 (U+0024 <invalid> <invalid> "4) has length 4
35
+ *
36
+ * @param str string to scan
37
+ * @param str_len size of the string
38
+ * @return length in characters of the string
39
+ */
40
+ extern size_t git_utf8_char_length(const char *str, size_t str_len);
41
+
42
+ /**
43
+ * Iterate through an UTF-8 string and stops after finding any invalid UTF-8
44
+ * codepoints.
45
+ *
46
+ * @param str string to scan
47
+ * @param str_len size of the string
48
+ * @return length in bytes of the string that contains valid data
49
+ */
50
+ extern size_t git_utf8_valid_buf_length(const char *str, size_t str_len);
51
+
52
+ #endif
@@ -13,6 +13,11 @@
13
13
  # include "win32/utf-conv.h"
14
14
  # include "win32/w32_buffer.h"
15
15
 
16
+ # ifndef WIN32_LEAN_AND_MEAN
17
+ # define WIN32_LEAN_AND_MEAN
18
+ # endif
19
+ # include <windows.h>
20
+
16
21
  # ifdef HAVE_QSORT_S
17
22
  # include <search.h>
18
23
  # endif
@@ -22,11 +27,15 @@
22
27
  # include <Shlwapi.h>
23
28
  #endif
24
29
 
30
+ #if defined(hpux) || defined(__hpux) || defined(_hpux)
31
+ # include <sys/pstat.h>
32
+ #endif
33
+
25
34
  int git__strntol64(int64_t *result, const char *nptr, size_t nptr_len, const char **endptr, int base)
26
35
  {
27
36
  const char *p;
28
- int64_t n, nn;
29
- int c, ovfl, v, neg, ndig;
37
+ int64_t n, nn, v;
38
+ int c, ovfl, neg, ndig;
30
39
 
31
40
  p = nptr;
32
41
  neg = 0;
@@ -101,19 +110,11 @@ int git__strntol64(int64_t *result, const char *nptr, size_t nptr_len, const cha
101
110
  if (v >= base)
102
111
  break;
103
112
  v = neg ? -v : v;
104
- if (n > INT64_MAX / base || n < INT64_MIN / base) {
105
- ovfl = 1;
106
- /* Keep on iterating until the end of this number */
107
- continue;
108
- }
109
- nn = n * base;
110
- if ((v > 0 && nn > INT64_MAX - v) ||
111
- (v < 0 && nn < INT64_MIN - v)) {
113
+ if (git__multiply_int64_overflow(&nn, n, base) || git__add_int64_overflow(&n, nn, v)) {
112
114
  ovfl = 1;
113
115
  /* Keep on iterating until the end of this number */
114
116
  continue;
115
117
  }
116
- n = nn + v;
117
118
  }
118
119
 
119
120
  Return:
@@ -678,7 +679,7 @@ typedef struct {
678
679
  void *payload;
679
680
  } git__qsort_r_glue;
680
681
 
681
- static int GIT_STDLIB_CALL git__qsort_r_glue_cmp(
682
+ static int GIT_LIBGIT2_CALL git__qsort_r_glue_cmp(
682
683
  void *payload, const void *a, const void *b)
683
684
  {
684
685
  git__qsort_r_glue *glue = payload;
@@ -733,123 +734,6 @@ void git__qsort_r(
733
734
  #endif
734
735
  }
735
736
 
736
- /*
737
- * git__utf8_iterate is taken from the utf8proc project,
738
- * http://www.public-software-group.org/utf8proc
739
- *
740
- * Copyright (c) 2009 Public Software Group e. V., Berlin, Germany
741
- *
742
- * Permission is hereby granted, free of charge, to any person obtaining a
743
- * copy of this software and associated documentation files (the ""Software""),
744
- * to deal in the Software without restriction, including without limitation
745
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
746
- * and/or sell copies of the Software, and to permit persons to whom the
747
- * Software is furnished to do so, subject to the following conditions:
748
- *
749
- * The above copyright notice and this permission notice shall be included in
750
- * all copies or substantial portions of the Software.
751
- *
752
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
753
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
754
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
755
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
756
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
757
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
758
- * DEALINGS IN THE SOFTWARE.
759
- */
760
-
761
- static const int8_t utf8proc_utf8class[256] = {
762
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
763
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
764
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
765
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
766
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
767
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
768
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
769
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
770
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
771
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
772
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
773
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
774
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
775
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
776
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
777
- 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0
778
- };
779
-
780
- static int util_utf8_charlen(const uint8_t *str, size_t str_len)
781
- {
782
- size_t length, i;
783
-
784
- length = utf8proc_utf8class[str[0]];
785
- if (!length)
786
- return -1;
787
-
788
- if (str_len > 0 && length > str_len)
789
- return -1;
790
-
791
- for (i = 1; i < length; i++) {
792
- if ((str[i] & 0xC0) != 0x80)
793
- return -1;
794
- }
795
-
796
- return (int)length;
797
- }
798
-
799
- int git__utf8_iterate(const uint8_t *str, int str_len, int32_t *dst)
800
- {
801
- int length;
802
- int32_t uc = -1;
803
-
804
- *dst = -1;
805
- length = util_utf8_charlen(str, str_len);
806
- if (length < 0)
807
- return -1;
808
-
809
- switch (length) {
810
- case 1:
811
- uc = str[0];
812
- break;
813
- case 2:
814
- uc = ((str[0] & 0x1F) << 6) + (str[1] & 0x3F);
815
- if (uc < 0x80) uc = -1;
816
- break;
817
- case 3:
818
- uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6)
819
- + (str[2] & 0x3F);
820
- if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000) ||
821
- (uc >= 0xFDD0 && uc < 0xFDF0)) uc = -1;
822
- break;
823
- case 4:
824
- uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12)
825
- + ((str[2] & 0x3F) << 6) + (str[3] & 0x3F);
826
- if (uc < 0x10000 || uc >= 0x110000) uc = -1;
827
- break;
828
- }
829
-
830
- if (uc < 0 || ((uc & 0xFFFF) >= 0xFFFE))
831
- return -1;
832
-
833
- *dst = uc;
834
- return length;
835
- }
836
-
837
- size_t git__utf8_valid_buf_length(const uint8_t *str, size_t str_len)
838
- {
839
- size_t offset = 0;
840
-
841
- while (offset < str_len) {
842
- int length = util_utf8_charlen(str + offset, str_len - offset);
843
-
844
- if (length < 0)
845
- break;
846
-
847
- offset += length;
848
- }
849
-
850
- return offset;
851
- }
852
-
853
737
  #ifdef GIT_WIN32
854
738
  int git__getenv(git_buf *out, const char *name)
855
739
  {
@@ -893,3 +777,43 @@ int git__getenv(git_buf *out, const char *name)
893
777
  return git_buf_puts(out, val);
894
778
  }
895
779
  #endif
780
+
781
+ /*
782
+ * By doing this in two steps we can at least get
783
+ * the function to be somewhat coherent, even
784
+ * with this disgusting nest of #ifdefs.
785
+ */
786
+ #ifndef _SC_NPROCESSORS_ONLN
787
+ # ifdef _SC_NPROC_ONLN
788
+ # define _SC_NPROCESSORS_ONLN _SC_NPROC_ONLN
789
+ # elif defined _SC_CRAY_NCPU
790
+ # define _SC_NPROCESSORS_ONLN _SC_CRAY_NCPU
791
+ # endif
792
+ #endif
793
+
794
+ int git__online_cpus(void)
795
+ {
796
+ #ifdef _SC_NPROCESSORS_ONLN
797
+ long ncpus;
798
+ #endif
799
+
800
+ #ifdef _WIN32
801
+ SYSTEM_INFO info;
802
+ GetSystemInfo(&info);
803
+
804
+ if ((int)info.dwNumberOfProcessors > 0)
805
+ return (int)info.dwNumberOfProcessors;
806
+ #elif defined(hpux) || defined(__hpux) || defined(_hpux)
807
+ struct pst_dynamic psd;
808
+
809
+ if (!pstat_getdynamic(&psd, sizeof(psd), (size_t)1, 0))
810
+ return (int)psd.psd_proc_cnt;
811
+ #endif
812
+
813
+ #ifdef _SC_NPROCESSORS_ONLN
814
+ if ((ncpus = (long)sysconf(_SC_NPROCESSORS_ONLN)) > 0)
815
+ return (int)ncpus;
816
+ #endif
817
+
818
+ return 1;
819
+ }