rugged 0.27.7 → 0.27.10
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.
- checksums.yaml +4 -4
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +99 -51
- data/vendor/libgit2/COPYING +28 -0
- data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +29 -0
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +96 -0
- data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +9 -8
- data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
- data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
- data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
- data/vendor/libgit2/cmake/Modules/FindIconv.cmake +11 -6
- data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
- data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
- data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
- data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
- data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +110 -0
- data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +53 -0
- data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +124 -0
- data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +66 -0
- data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +21 -0
- data/vendor/libgit2/deps/ntlmclient/compat.h +33 -0
- data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +1420 -0
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
- data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
- data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
- data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
- data/vendor/libgit2/deps/pcre/COPYING +5 -0
- data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
- data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
- data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
- data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
- data/vendor/libgit2/deps/pcre/config.h.in +57 -0
- data/vendor/libgit2/deps/pcre/pcre.h +641 -0
- data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
- data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
- data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
- data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
- data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
- data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
- data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
- data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
- data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
- data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
- data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
- data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
- data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
- data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
- data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
- data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
- data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
- data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
- data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
- data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
- data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
- data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
- data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
- data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
- data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
- data/vendor/libgit2/deps/pcre/ucp.h +224 -0
- data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
- data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +1 -0
- data/vendor/libgit2/deps/zlib/COPYING +27 -0
- data/vendor/libgit2/deps/zlib/adler32.c +0 -7
- data/vendor/libgit2/deps/zlib/crc32.c +0 -7
- data/vendor/libgit2/include/git2/annotated_commit.h +9 -0
- data/vendor/libgit2/include/git2/apply.h +149 -0
- data/vendor/libgit2/include/git2/attr.h +20 -13
- data/vendor/libgit2/include/git2/blame.h +4 -4
- data/vendor/libgit2/include/git2/blob.h +44 -12
- data/vendor/libgit2/include/git2/buffer.h +20 -26
- data/vendor/libgit2/include/git2/cert.h +135 -0
- data/vendor/libgit2/include/git2/checkout.h +53 -21
- data/vendor/libgit2/include/git2/cherrypick.h +3 -3
- data/vendor/libgit2/include/git2/clone.h +5 -5
- data/vendor/libgit2/include/git2/commit.h +25 -3
- data/vendor/libgit2/include/git2/common.h +35 -10
- data/vendor/libgit2/include/git2/config.h +29 -19
- data/vendor/libgit2/include/git2/cred.h +308 -0
- data/vendor/libgit2/include/git2/deprecated.h +493 -0
- data/vendor/libgit2/include/git2/describe.h +4 -4
- data/vendor/libgit2/include/git2/diff.h +177 -135
- data/vendor/libgit2/include/git2/errors.h +53 -46
- data/vendor/libgit2/include/git2/filter.h +8 -0
- data/vendor/libgit2/include/git2/index.h +74 -52
- data/vendor/libgit2/include/git2/indexer.h +76 -6
- data/vendor/libgit2/include/git2/merge.h +25 -10
- data/vendor/libgit2/include/git2/net.h +0 -5
- data/vendor/libgit2/include/git2/notes.h +1 -1
- data/vendor/libgit2/include/git2/object.h +17 -29
- data/vendor/libgit2/include/git2/odb.h +12 -11
- data/vendor/libgit2/include/git2/odb_backend.h +10 -9
- data/vendor/libgit2/include/git2/oid.h +2 -2
- data/vendor/libgit2/include/git2/pack.h +14 -3
- data/vendor/libgit2/include/git2/proxy.h +5 -3
- data/vendor/libgit2/include/git2/rebase.h +46 -2
- data/vendor/libgit2/include/git2/refs.h +34 -16
- data/vendor/libgit2/include/git2/remote.h +111 -14
- data/vendor/libgit2/include/git2/repository.h +69 -34
- data/vendor/libgit2/include/git2/revert.h +1 -1
- data/vendor/libgit2/include/git2/revwalk.h +7 -7
- data/vendor/libgit2/include/git2/signature.h +2 -2
- data/vendor/libgit2/include/git2/stash.h +5 -5
- data/vendor/libgit2/include/git2/status.h +26 -17
- data/vendor/libgit2/include/git2/submodule.h +23 -6
- data/vendor/libgit2/include/git2/sys/alloc.h +18 -18
- data/vendor/libgit2/include/git2/sys/commit.h +1 -1
- data/vendor/libgit2/include/git2/sys/config.h +13 -13
- data/vendor/libgit2/include/git2/sys/cred.h +90 -0
- data/vendor/libgit2/include/git2/sys/filter.h +6 -6
- data/vendor/libgit2/include/git2/sys/merge.h +3 -3
- data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
- data/vendor/libgit2/include/git2/sys/path.h +14 -5
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +76 -40
- data/vendor/libgit2/include/git2/sys/repository.h +5 -1
- data/vendor/libgit2/include/git2/sys/stream.h +92 -12
- data/vendor/libgit2/include/git2/sys/transport.h +129 -83
- data/vendor/libgit2/include/git2/tag.h +13 -4
- data/vendor/libgit2/include/git2/trace.h +2 -2
- data/vendor/libgit2/include/git2/transport.h +11 -311
- data/vendor/libgit2/include/git2/tree.h +4 -4
- data/vendor/libgit2/include/git2/types.h +25 -106
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +5 -5
- data/vendor/libgit2/include/git2.h +4 -0
- data/vendor/libgit2/src/CMakeLists.txt +104 -235
- data/vendor/libgit2/src/alloc.c +14 -18
- data/vendor/libgit2/src/{stdalloc.c → allocators/stdalloc.c} +7 -8
- data/vendor/libgit2/src/{stdalloc.h → allocators/stdalloc.h} +4 -4
- data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
- data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
- data/vendor/libgit2/src/annotated_commit.c +18 -11
- data/vendor/libgit2/src/apply.c +535 -28
- data/vendor/libgit2/src/apply.h +3 -1
- data/vendor/libgit2/src/array.h +2 -2
- data/vendor/libgit2/src/attr.c +77 -71
- data/vendor/libgit2/src/attr_file.c +203 -117
- data/vendor/libgit2/src/attr_file.h +9 -9
- data/vendor/libgit2/src/attrcache.c +49 -51
- data/vendor/libgit2/src/attrcache.h +2 -1
- data/vendor/libgit2/src/blame.c +38 -18
- data/vendor/libgit2/src/blame.h +1 -1
- data/vendor/libgit2/src/blame_git.c +29 -15
- data/vendor/libgit2/src/blob.c +123 -37
- data/vendor/libgit2/src/blob.h +19 -2
- data/vendor/libgit2/src/branch.c +47 -23
- data/vendor/libgit2/src/buf_text.c +7 -6
- data/vendor/libgit2/src/buffer.c +60 -53
- data/vendor/libgit2/src/cache.c +38 -45
- data/vendor/libgit2/src/cache.h +3 -3
- data/vendor/libgit2/src/cc-compat.h +20 -3
- data/vendor/libgit2/src/checkout.c +77 -67
- data/vendor/libgit2/src/cherrypick.c +12 -6
- data/vendor/libgit2/src/clone.c +36 -14
- data/vendor/libgit2/src/clone.h +4 -0
- data/vendor/libgit2/src/commit.c +103 -48
- data/vendor/libgit2/src/commit.h +7 -0
- data/vendor/libgit2/src/commit_list.c +36 -78
- data/vendor/libgit2/src/commit_list.h +2 -2
- data/vendor/libgit2/src/common.h +24 -90
- data/vendor/libgit2/src/config.c +203 -176
- data/vendor/libgit2/src/config.h +8 -20
- data/vendor/libgit2/src/config_backend.h +96 -0
- data/vendor/libgit2/src/config_cache.c +41 -35
- data/vendor/libgit2/src/config_entries.c +229 -0
- data/vendor/libgit2/src/config_entries.h +24 -0
- data/vendor/libgit2/src/config_file.c +422 -680
- data/vendor/libgit2/src/config_mem.c +220 -0
- data/vendor/libgit2/src/config_parse.c +96 -68
- data/vendor/libgit2/src/config_parse.h +15 -14
- data/vendor/libgit2/src/config_snapshot.c +206 -0
- data/vendor/libgit2/src/crlf.c +219 -196
- data/vendor/libgit2/src/delta.c +25 -18
- data/vendor/libgit2/src/describe.c +42 -41
- data/vendor/libgit2/src/diff.c +52 -67
- data/vendor/libgit2/src/diff.h +2 -1
- data/vendor/libgit2/src/diff_driver.c +44 -46
- data/vendor/libgit2/src/diff_file.c +16 -14
- data/vendor/libgit2/src/diff_file.h +1 -1
- data/vendor/libgit2/src/diff_generate.c +158 -103
- data/vendor/libgit2/src/diff_generate.h +3 -3
- data/vendor/libgit2/src/diff_parse.c +4 -4
- data/vendor/libgit2/src/diff_print.c +34 -22
- data/vendor/libgit2/src/diff_stats.c +22 -7
- data/vendor/libgit2/src/diff_tform.c +18 -16
- data/vendor/libgit2/src/diff_xdiff.c +3 -3
- data/vendor/libgit2/src/errors.c +51 -39
- data/vendor/libgit2/src/errors.h +81 -0
- data/vendor/libgit2/src/features.h.in +9 -3
- data/vendor/libgit2/src/fetch.c +8 -3
- data/vendor/libgit2/src/fetchhead.c +12 -12
- data/vendor/libgit2/src/filebuf.c +28 -32
- data/vendor/libgit2/src/filebuf.h +2 -2
- data/vendor/libgit2/src/filter.c +47 -33
- data/vendor/libgit2/src/filter.h +0 -10
- data/vendor/libgit2/src/{fileops.c → futils.c} +70 -63
- data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
- data/vendor/libgit2/src/global.c +35 -55
- data/vendor/libgit2/src/global.h +0 -2
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +48 -0
- data/vendor/libgit2/src/hash/sha1/collisiondetect.h +19 -0
- data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +17 -17
- data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
- data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
- data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -10
- data/vendor/libgit2/src/hash/{hash_mbedtls.c → sha1/mbedtls.c} +15 -7
- data/vendor/libgit2/src/hash/{hash_mbedtls.h → sha1/mbedtls.h} +6 -7
- data/vendor/libgit2/src/hash/sha1/openssl.c +59 -0
- data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
- data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
- data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +47 -37
- data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
- data/vendor/libgit2/src/hash/sha1.h +38 -0
- data/vendor/libgit2/src/hash.c +61 -0
- data/vendor/libgit2/src/hash.h +20 -21
- data/vendor/libgit2/src/hashsig.c +5 -5
- data/vendor/libgit2/src/idxmap.c +107 -61
- data/vendor/libgit2/src/idxmap.h +153 -31
- data/vendor/libgit2/src/ignore.c +38 -42
- data/vendor/libgit2/src/index.c +264 -199
- data/vendor/libgit2/src/index.h +7 -1
- data/vendor/libgit2/src/indexer.c +338 -167
- data/vendor/libgit2/src/integer.h +71 -26
- data/vendor/libgit2/src/iterator.c +134 -62
- data/vendor/libgit2/src/iterator.h +15 -0
- data/vendor/libgit2/src/mailmap.c +8 -8
- data/vendor/libgit2/src/map.h +1 -1
- data/vendor/libgit2/src/merge.c +137 -93
- data/vendor/libgit2/src/merge_driver.c +11 -11
- data/vendor/libgit2/src/merge_file.c +2 -2
- data/vendor/libgit2/src/mwindow.c +24 -29
- data/vendor/libgit2/src/mwindow.h +4 -4
- data/vendor/libgit2/src/net.c +184 -0
- data/vendor/libgit2/src/net.h +36 -0
- data/vendor/libgit2/src/netops.c +55 -156
- data/vendor/libgit2/src/netops.h +3 -23
- data/vendor/libgit2/src/notes.c +14 -9
- data/vendor/libgit2/src/object.c +120 -69
- data/vendor/libgit2/src/object.h +22 -9
- data/vendor/libgit2/src/object_api.c +8 -8
- data/vendor/libgit2/src/odb.c +111 -88
- data/vendor/libgit2/src/odb.h +8 -7
- data/vendor/libgit2/src/odb_loose.c +58 -47
- data/vendor/libgit2/src/odb_mempack.c +21 -34
- data/vendor/libgit2/src/odb_pack.c +17 -13
- data/vendor/libgit2/src/offmap.c +53 -35
- data/vendor/libgit2/src/offmap.h +108 -21
- data/vendor/libgit2/src/oid.c +12 -7
- data/vendor/libgit2/src/oidmap.c +49 -47
- data/vendor/libgit2/src/oidmap.h +101 -24
- data/vendor/libgit2/src/pack-objects.c +87 -86
- data/vendor/libgit2/src/pack-objects.h +2 -8
- data/vendor/libgit2/src/pack.c +94 -96
- data/vendor/libgit2/src/pack.h +16 -18
- data/vendor/libgit2/src/parse.c +17 -4
- data/vendor/libgit2/src/parse.h +3 -3
- data/vendor/libgit2/src/patch.c +3 -3
- data/vendor/libgit2/src/patch_generate.c +18 -18
- data/vendor/libgit2/src/patch_parse.c +147 -79
- data/vendor/libgit2/src/path.c +207 -62
- data/vendor/libgit2/src/path.h +14 -0
- data/vendor/libgit2/src/pathspec.c +18 -18
- data/vendor/libgit2/src/pool.c +26 -22
- data/vendor/libgit2/src/pool.h +7 -7
- data/vendor/libgit2/src/posix.c +10 -10
- data/vendor/libgit2/src/posix.h +12 -1
- data/vendor/libgit2/src/proxy.c +8 -3
- data/vendor/libgit2/src/push.c +35 -29
- data/vendor/libgit2/src/push.h +2 -1
- data/vendor/libgit2/src/reader.c +265 -0
- data/vendor/libgit2/src/reader.h +107 -0
- data/vendor/libgit2/src/rebase.c +97 -38
- data/vendor/libgit2/src/refdb.c +15 -3
- data/vendor/libgit2/src/refdb_fs.c +318 -222
- data/vendor/libgit2/src/reflog.c +13 -15
- data/vendor/libgit2/src/refs.c +122 -89
- data/vendor/libgit2/src/refs.h +5 -3
- data/vendor/libgit2/src/refspec.c +27 -33
- data/vendor/libgit2/src/regexp.c +221 -0
- data/vendor/libgit2/src/regexp.h +97 -0
- data/vendor/libgit2/src/remote.c +229 -178
- data/vendor/libgit2/src/remote.h +11 -2
- data/vendor/libgit2/src/repository.c +227 -172
- data/vendor/libgit2/src/repository.h +52 -40
- data/vendor/libgit2/src/reset.c +7 -7
- data/vendor/libgit2/src/revert.c +11 -6
- data/vendor/libgit2/src/revparse.c +46 -46
- data/vendor/libgit2/src/revwalk.c +89 -54
- data/vendor/libgit2/src/revwalk.h +20 -0
- data/vendor/libgit2/src/settings.c +22 -9
- data/vendor/libgit2/src/signature.c +15 -13
- data/vendor/libgit2/src/sortedcache.c +22 -36
- data/vendor/libgit2/src/sortedcache.h +1 -1
- data/vendor/libgit2/src/stash.c +56 -76
- data/vendor/libgit2/src/status.c +27 -21
- data/vendor/libgit2/src/stream.h +17 -2
- data/vendor/libgit2/src/streams/mbedtls.c +100 -80
- data/vendor/libgit2/src/streams/mbedtls.h +5 -2
- data/vendor/libgit2/src/streams/openssl.c +93 -81
- data/vendor/libgit2/src/streams/openssl.h +5 -2
- data/vendor/libgit2/src/streams/registry.c +118 -0
- data/vendor/libgit2/src/streams/registry.h +19 -0
- data/vendor/libgit2/src/streams/socket.c +55 -30
- data/vendor/libgit2/src/streams/stransport.c +57 -32
- data/vendor/libgit2/src/streams/stransport.h +5 -0
- data/vendor/libgit2/src/streams/tls.c +48 -20
- data/vendor/libgit2/src/streams/tls.h +12 -4
- data/vendor/libgit2/src/strmap.c +47 -74
- data/vendor/libgit2/src/strmap.h +108 -33
- data/vendor/libgit2/src/submodule.c +190 -169
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/sysdir.c +25 -15
- data/vendor/libgit2/src/tag.c +39 -26
- data/vendor/libgit2/src/tag.h +2 -1
- data/vendor/libgit2/src/trace.c +2 -2
- data/vendor/libgit2/src/trace.h +2 -2
- data/vendor/libgit2/src/trailer.c +46 -32
- data/vendor/libgit2/src/transaction.c +30 -29
- data/vendor/libgit2/src/transport.c +3 -3
- data/vendor/libgit2/src/transports/auth.c +14 -10
- data/vendor/libgit2/src/transports/auth.h +10 -3
- data/vendor/libgit2/src/transports/auth_negotiate.c +31 -16
- data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
- data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
- data/vendor/libgit2/src/transports/auth_ntlm.h +35 -0
- data/vendor/libgit2/src/transports/cred.c +24 -24
- data/vendor/libgit2/src/transports/git.c +25 -30
- data/vendor/libgit2/src/transports/http.c +871 -335
- data/vendor/libgit2/src/transports/http.h +2 -0
- data/vendor/libgit2/src/transports/local.c +28 -28
- data/vendor/libgit2/src/transports/smart.c +64 -46
- data/vendor/libgit2/src/transports/smart.h +5 -6
- data/vendor/libgit2/src/transports/smart_pkt.c +162 -151
- data/vendor/libgit2/src/transports/smart_protocol.c +64 -94
- data/vendor/libgit2/src/transports/ssh.c +76 -65
- data/vendor/libgit2/src/transports/winhttp.c +328 -319
- data/vendor/libgit2/src/tree-cache.c +21 -14
- data/vendor/libgit2/src/tree.c +119 -112
- data/vendor/libgit2/src/tree.h +1 -0
- data/vendor/libgit2/src/unix/map.c +3 -3
- data/vendor/libgit2/src/unix/posix.h +1 -11
- data/vendor/libgit2/src/userdiff.h +3 -1
- data/vendor/libgit2/src/util.c +154 -93
- data/vendor/libgit2/src/util.h +19 -23
- data/vendor/libgit2/src/vector.c +15 -10
- data/vendor/libgit2/src/wildmatch.c +320 -0
- data/vendor/libgit2/src/wildmatch.h +23 -0
- data/vendor/libgit2/src/win32/dir.c +3 -3
- data/vendor/libgit2/src/win32/findfile.c +1 -1
- data/vendor/libgit2/src/win32/map.c +9 -11
- data/vendor/libgit2/src/win32/msvc-compat.h +6 -0
- data/vendor/libgit2/src/win32/path_w32.c +113 -9
- data/vendor/libgit2/src/win32/path_w32.h +18 -29
- data/vendor/libgit2/src/win32/posix.h +1 -4
- data/vendor/libgit2/src/win32/posix_w32.c +69 -44
- data/vendor/libgit2/src/win32/precompiled.h +0 -2
- data/vendor/libgit2/src/win32/thread.c +5 -10
- data/vendor/libgit2/src/win32/w32_buffer.c +9 -5
- data/vendor/libgit2/src/win32/w32_common.h +39 -0
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +2 -95
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -2
- data/vendor/libgit2/src/win32/w32_stack.c +6 -11
- data/vendor/libgit2/src/win32/w32_stack.h +3 -3
- data/vendor/libgit2/src/win32/w32_util.c +27 -64
- data/vendor/libgit2/src/win32/w32_util.h +5 -49
- data/vendor/libgit2/src/worktree.c +44 -30
- data/vendor/libgit2/src/xdiff/xdiffi.c +5 -5
- data/vendor/libgit2/src/xdiff/xhistogram.c +1 -1
- data/vendor/libgit2/src/xdiff/xmerge.c +27 -15
- data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
- data/vendor/libgit2/src/zstream.c +4 -4
- metadata +115 -38
- data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
- data/vendor/libgit2/deps/regex/config.h +0 -7
- data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
- data/vendor/libgit2/deps/regex/regex.c +0 -92
- data/vendor/libgit2/deps/regex/regex.h +0 -582
- data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
- data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
- data/vendor/libgit2/deps/regex/regexec.c +0 -4369
- data/vendor/libgit2/include/git2/inttypes.h +0 -309
- data/vendor/libgit2/include/git2/sys/time.h +0 -31
- data/vendor/libgit2/libgit2.pc.in +0 -13
- data/vendor/libgit2/src/config_file.h +0 -73
- data/vendor/libgit2/src/fnmatch.c +0 -248
- data/vendor/libgit2/src/fnmatch.h +0 -48
- data/vendor/libgit2/src/hash/hash_collisiondetect.h +0 -47
- data/vendor/libgit2/src/hash/hash_openssl.h +0 -59
- data/vendor/libgit2/src/streams/curl.c +0 -385
- data/vendor/libgit2/src/streams/curl.h +0 -17
- /data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
- /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
- /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
- /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
|
@@ -47,7 +47,7 @@ extern int p_chdir(const char* path);
|
|
|
47
47
|
extern int p_chmod(const char* path, mode_t mode);
|
|
48
48
|
extern int p_rmdir(const char* path);
|
|
49
49
|
extern int p_access(const char* path, mode_t mode);
|
|
50
|
-
extern int p_ftruncate(int fd,
|
|
50
|
+
extern int p_ftruncate(int fd, off64_t size);
|
|
51
51
|
|
|
52
52
|
/* p_lstat is almost but not quite POSIX correct. Specifically, the use of
|
|
53
53
|
* ENOTDIR is wrong, in that it does not mean precisely that a non-directory
|
|
@@ -60,7 +60,4 @@ extern int p_lstat_posixly(const char *filename, struct stat *buf);
|
|
|
60
60
|
extern struct tm * p_localtime_r(const time_t *timer, struct tm *result);
|
|
61
61
|
extern struct tm * p_gmtime_r(const time_t *timer, struct tm *result);
|
|
62
62
|
|
|
63
|
-
/* Use the bundled regcomp */
|
|
64
|
-
#define p_regcomp regcomp
|
|
65
|
-
|
|
66
63
|
#endif
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
#include "common.h"
|
|
9
9
|
|
|
10
10
|
#include "../posix.h"
|
|
11
|
-
#include "../
|
|
11
|
+
#include "../futils.h"
|
|
12
12
|
#include "path.h"
|
|
13
13
|
#include "path_w32.h"
|
|
14
14
|
#include "utf-conv.h"
|
|
@@ -29,15 +29,20 @@
|
|
|
29
29
|
#define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
|
|
30
30
|
#endif
|
|
31
31
|
|
|
32
|
+
#ifndef SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE
|
|
33
|
+
# define SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE 0x02
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
#ifndef SYMBOLIC_LINK_FLAG_DIRECTORY
|
|
37
|
+
# define SYMBOLIC_LINK_FLAG_DIRECTORY 0x01
|
|
38
|
+
#endif
|
|
39
|
+
|
|
32
40
|
/* Allowable mode bits on Win32. Using mode bits that are not supported on
|
|
33
41
|
* Win32 (eg S_IRWXU) is generally ignored, but Wine warns loudly about it
|
|
34
42
|
* so we simply remove them.
|
|
35
43
|
*/
|
|
36
44
|
#define WIN32_MODE_MASK (_S_IREAD | _S_IWRITE)
|
|
37
45
|
|
|
38
|
-
/* GetFinalPathNameByHandleW signature */
|
|
39
|
-
typedef DWORD(WINAPI *PFGetFinalPathNameByHandleW)(HANDLE, LPWSTR, DWORD, DWORD);
|
|
40
|
-
|
|
41
46
|
unsigned long git_win32__createfile_sharemode =
|
|
42
47
|
FILE_SHARE_READ | FILE_SHARE_WRITE;
|
|
43
48
|
int git_win32__retries = 10;
|
|
@@ -205,7 +210,7 @@ on_error:
|
|
|
205
210
|
* We now take a "git_off_t" rather than "long" because
|
|
206
211
|
* files may be longer than 2Gb.
|
|
207
212
|
*/
|
|
208
|
-
int p_ftruncate(int fd,
|
|
213
|
+
int p_ftruncate(int fd, off64_t size)
|
|
209
214
|
{
|
|
210
215
|
if (size < 0) {
|
|
211
216
|
errno = EINVAL;
|
|
@@ -246,9 +251,25 @@ int p_link(const char *old, const char *new)
|
|
|
246
251
|
|
|
247
252
|
GIT_INLINE(int) unlink_once(const wchar_t *path)
|
|
248
253
|
{
|
|
254
|
+
DWORD error;
|
|
255
|
+
|
|
249
256
|
if (DeleteFileW(path))
|
|
250
257
|
return 0;
|
|
251
258
|
|
|
259
|
+
if ((error = GetLastError()) == ERROR_ACCESS_DENIED) {
|
|
260
|
+
WIN32_FILE_ATTRIBUTE_DATA fdata;
|
|
261
|
+
if (!GetFileAttributesExW(path, GetFileExInfoStandard, &fdata) ||
|
|
262
|
+
!(fdata.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) ||
|
|
263
|
+
!(fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
|
264
|
+
goto out;
|
|
265
|
+
|
|
266
|
+
if (RemoveDirectoryW(path))
|
|
267
|
+
return 0;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
out:
|
|
271
|
+
SetLastError(error);
|
|
272
|
+
|
|
252
273
|
if (last_error_retryable())
|
|
253
274
|
return GIT_RETRY;
|
|
254
275
|
|
|
@@ -354,7 +375,7 @@ static int do_lstat(const char *path, struct stat *buf, bool posixly_correct)
|
|
|
354
375
|
if ((len = git_win32_path_from_utf8(path_w, path)) < 0)
|
|
355
376
|
return -1;
|
|
356
377
|
|
|
357
|
-
|
|
378
|
+
git_win32_path_trim_end(path_w, len);
|
|
358
379
|
|
|
359
380
|
return lstat_w(path_w, buf, posixly_correct);
|
|
360
381
|
}
|
|
@@ -393,12 +414,43 @@ int p_readlink(const char *path, char *buf, size_t bufsiz)
|
|
|
393
414
|
return (int)bufsiz;
|
|
394
415
|
}
|
|
395
416
|
|
|
396
|
-
|
|
417
|
+
static bool target_is_dir(const char *target, const char *path)
|
|
397
418
|
{
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
419
|
+
git_buf resolved = GIT_BUF_INIT;
|
|
420
|
+
git_win32_path resolved_w;
|
|
421
|
+
bool isdir = true;
|
|
422
|
+
|
|
423
|
+
if (git_path_is_absolute(target))
|
|
424
|
+
git_win32_path_from_utf8(resolved_w, target);
|
|
425
|
+
else if (git_path_dirname_r(&resolved, path) < 0 ||
|
|
426
|
+
git_path_apply_relative(&resolved, target) < 0 ||
|
|
427
|
+
git_win32_path_from_utf8(resolved_w, resolved.ptr) < 0)
|
|
428
|
+
goto out;
|
|
429
|
+
|
|
430
|
+
isdir = GetFileAttributesW(resolved_w) & FILE_ATTRIBUTE_DIRECTORY;
|
|
431
|
+
|
|
432
|
+
out:
|
|
433
|
+
git_buf_dispose(&resolved);
|
|
434
|
+
return isdir;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
int p_symlink(const char *target, const char *path)
|
|
438
|
+
{
|
|
439
|
+
git_win32_path target_w, path_w;
|
|
440
|
+
DWORD dwFlags;
|
|
441
|
+
|
|
442
|
+
if (git_win32_path_from_utf8(path_w, path) < 0 ||
|
|
443
|
+
git__utf8_to_16(target_w, MAX_PATH, target) < 0)
|
|
444
|
+
return -1;
|
|
445
|
+
|
|
446
|
+
dwFlags = SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE;
|
|
447
|
+
if (target_is_dir(target, path))
|
|
448
|
+
dwFlags |= SYMBOLIC_LINK_FLAG_DIRECTORY;
|
|
449
|
+
|
|
450
|
+
if (!CreateSymbolicLinkW(path_w, target_w, dwFlags))
|
|
451
|
+
return -1;
|
|
452
|
+
|
|
453
|
+
return 0;
|
|
402
454
|
}
|
|
403
455
|
|
|
404
456
|
struct open_opts {
|
|
@@ -524,7 +576,7 @@ int p_utimes(const char *path, const struct p_timeval times[2])
|
|
|
524
576
|
attrs_new = attrs_orig & ~FILE_ATTRIBUTE_READONLY;
|
|
525
577
|
|
|
526
578
|
if (!SetFileAttributesW(wpath, attrs_new)) {
|
|
527
|
-
|
|
579
|
+
git_error_set(GIT_ERROR_OS, "failed to set attributes");
|
|
528
580
|
return -1;
|
|
529
581
|
}
|
|
530
582
|
}
|
|
@@ -598,40 +650,13 @@ int p_getcwd(char *buffer_out, size_t size)
|
|
|
598
650
|
return 0;
|
|
599
651
|
}
|
|
600
652
|
|
|
601
|
-
/*
|
|
602
|
-
* Returns the address of the GetFinalPathNameByHandleW function.
|
|
603
|
-
* This function is available on Windows Vista and higher.
|
|
604
|
-
*/
|
|
605
|
-
static PFGetFinalPathNameByHandleW get_fpnbyhandle(void)
|
|
606
|
-
{
|
|
607
|
-
static PFGetFinalPathNameByHandleW pFunc = NULL;
|
|
608
|
-
PFGetFinalPathNameByHandleW toReturn = pFunc;
|
|
609
|
-
|
|
610
|
-
if (!toReturn) {
|
|
611
|
-
HMODULE hModule = GetModuleHandleW(L"kernel32");
|
|
612
|
-
|
|
613
|
-
if (hModule)
|
|
614
|
-
toReturn = (PFGetFinalPathNameByHandleW)GetProcAddress(hModule, "GetFinalPathNameByHandleW");
|
|
615
|
-
|
|
616
|
-
pFunc = toReturn;
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
assert(toReturn);
|
|
620
|
-
|
|
621
|
-
return toReturn;
|
|
622
|
-
}
|
|
623
|
-
|
|
624
653
|
static int getfinalpath_w(
|
|
625
654
|
git_win32_path dest,
|
|
626
655
|
const wchar_t *path)
|
|
627
656
|
{
|
|
628
|
-
PFGetFinalPathNameByHandleW pgfp = get_fpnbyhandle();
|
|
629
657
|
HANDLE hFile;
|
|
630
658
|
DWORD dwChars;
|
|
631
659
|
|
|
632
|
-
if (!pgfp)
|
|
633
|
-
return -1;
|
|
634
|
-
|
|
635
660
|
/* Use FILE_FLAG_BACKUP_SEMANTICS so we can open a directory. Do not
|
|
636
661
|
* specify FILE_FLAG_OPEN_REPARSE_POINT; we want to open a handle to the
|
|
637
662
|
* target of the link. */
|
|
@@ -642,14 +667,14 @@ static int getfinalpath_w(
|
|
|
642
667
|
return -1;
|
|
643
668
|
|
|
644
669
|
/* Call GetFinalPathNameByHandle */
|
|
645
|
-
dwChars =
|
|
670
|
+
dwChars = GetFinalPathNameByHandleW(hFile, dest, GIT_WIN_PATH_UTF16, FILE_NAME_NORMALIZED);
|
|
646
671
|
CloseHandle(hFile);
|
|
647
672
|
|
|
648
673
|
if (!dwChars || dwChars >= GIT_WIN_PATH_UTF16)
|
|
649
674
|
return -1;
|
|
650
675
|
|
|
651
|
-
/* The path may be delivered to us with a prefix;
|
|
652
|
-
return (int)
|
|
676
|
+
/* The path may be delivered to us with a namespace prefix; remove */
|
|
677
|
+
return (int)git_win32_path_remove_namespace(dest, dwChars);
|
|
653
678
|
}
|
|
654
679
|
|
|
655
680
|
static int follow_and_lstat_link(git_win32_path path, struct stat* buf)
|
|
@@ -871,7 +896,7 @@ int p_rename(const char *from, const char *to)
|
|
|
871
896
|
int p_recv(GIT_SOCKET socket, void *buffer, size_t length, int flags)
|
|
872
897
|
{
|
|
873
898
|
if ((size_t)((int)length) != length)
|
|
874
|
-
return -1; /*
|
|
899
|
+
return -1; /* git_error_set will be done by caller */
|
|
875
900
|
|
|
876
901
|
return recv(socket, buffer, (int)length, flags);
|
|
877
902
|
}
|
|
@@ -879,7 +904,7 @@ int p_recv(GIT_SOCKET socket, void *buffer, size_t length, int flags)
|
|
|
879
904
|
int p_send(GIT_SOCKET socket, const void *buffer, size_t length, int flags)
|
|
880
905
|
{
|
|
881
906
|
if ((size_t)((int)length) != length)
|
|
882
|
-
return -1; /*
|
|
907
|
+
return -1; /* git_error_set will be done by caller */
|
|
883
908
|
|
|
884
909
|
return send(socket, buffer, (int)length, flags);
|
|
885
910
|
}
|
|
@@ -32,8 +32,6 @@ static DWORD WINAPI git_win32__threadproc(LPVOID lpParameter)
|
|
|
32
32
|
|
|
33
33
|
thread->result = thread->proc(thread->param);
|
|
34
34
|
|
|
35
|
-
git__free_tls_data();
|
|
36
|
-
|
|
37
35
|
return CLEAN_THREAD_EXIT;
|
|
38
36
|
}
|
|
39
37
|
|
|
@@ -42,15 +40,15 @@ int git_threads_init(void)
|
|
|
42
40
|
HMODULE hModule = GetModuleHandleW(L"kernel32");
|
|
43
41
|
|
|
44
42
|
if (hModule) {
|
|
45
|
-
win32_srwlock_initialize = (win32_srwlock_fn)
|
|
43
|
+
win32_srwlock_initialize = (win32_srwlock_fn)(void *)
|
|
46
44
|
GetProcAddress(hModule, "InitializeSRWLock");
|
|
47
|
-
win32_srwlock_acquire_shared = (win32_srwlock_fn)
|
|
45
|
+
win32_srwlock_acquire_shared = (win32_srwlock_fn)(void *)
|
|
48
46
|
GetProcAddress(hModule, "AcquireSRWLockShared");
|
|
49
|
-
win32_srwlock_release_shared = (win32_srwlock_fn)
|
|
47
|
+
win32_srwlock_release_shared = (win32_srwlock_fn)(void *)
|
|
50
48
|
GetProcAddress(hModule, "ReleaseSRWLockShared");
|
|
51
|
-
win32_srwlock_acquire_exclusive = (win32_srwlock_fn)
|
|
49
|
+
win32_srwlock_acquire_exclusive = (win32_srwlock_fn)(void *)
|
|
52
50
|
GetProcAddress(hModule, "AcquireSRWLockExclusive");
|
|
53
|
-
win32_srwlock_release_exclusive = (win32_srwlock_fn)
|
|
51
|
+
win32_srwlock_release_exclusive = (win32_srwlock_fn)(void *)
|
|
54
52
|
GetProcAddress(hModule, "ReleaseSRWLockExclusive");
|
|
55
53
|
}
|
|
56
54
|
|
|
@@ -103,9 +101,6 @@ void git_thread_exit(void *value)
|
|
|
103
101
|
{
|
|
104
102
|
assert(GIT_GLOBAL->current_thread);
|
|
105
103
|
GIT_GLOBAL->current_thread->result = value;
|
|
106
|
-
|
|
107
|
-
git__free_tls_data();
|
|
108
|
-
|
|
109
104
|
ExitThread(CLEAN_THREAD_EXIT);
|
|
110
105
|
}
|
|
111
106
|
|
|
@@ -25,25 +25,29 @@ int git_buf_put_w(git_buf *buf, const wchar_t *string_w, size_t len_w)
|
|
|
25
25
|
int utf8_len, utf8_write_len;
|
|
26
26
|
size_t new_size;
|
|
27
27
|
|
|
28
|
-
if (!len_w)
|
|
28
|
+
if (!len_w) {
|
|
29
29
|
return 0;
|
|
30
|
+
} else if (len_w > INT_MAX) {
|
|
31
|
+
git_error_set_oom();
|
|
32
|
+
return -1;
|
|
33
|
+
}
|
|
30
34
|
|
|
31
35
|
assert(string_w);
|
|
32
36
|
|
|
33
37
|
/* Measure the string necessary for conversion */
|
|
34
|
-
if ((utf8_len = WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, string_w, len_w, NULL, 0, NULL, NULL)) == 0)
|
|
38
|
+
if ((utf8_len = WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, string_w, (int)len_w, NULL, 0, NULL, NULL)) == 0)
|
|
35
39
|
return 0;
|
|
36
40
|
|
|
37
41
|
assert(utf8_len > 0);
|
|
38
42
|
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&new_size, buf->size, (size_t)utf8_len);
|
|
44
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&new_size, new_size, 1);
|
|
41
45
|
|
|
42
46
|
if (git_buf_grow(buf, new_size) < 0)
|
|
43
47
|
return -1;
|
|
44
48
|
|
|
45
49
|
if ((utf8_write_len = WideCharToMultiByte(
|
|
46
|
-
CP_UTF8, WC_ERR_INVALID_CHARS, string_w, len_w, &buf->ptr[buf->size], utf8_len, NULL, NULL)) == 0)
|
|
50
|
+
CP_UTF8, WC_ERR_INVALID_CHARS, string_w, (int)len_w, &buf->ptr[buf->size], utf8_len, NULL, NULL)) == 0)
|
|
47
51
|
return handle_wc_error();
|
|
48
52
|
|
|
49
53
|
assert(utf8_write_len == utf8_len);
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
#ifndef INCLUDE_win32_w32_common_h__
|
|
9
|
+
#define INCLUDE_win32_w32_common_h__
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
* Provides a large enough buffer to support Windows paths: MAX_PATH is
|
|
13
|
+
* 260, corresponding to a maximum path length of 259 characters plus a
|
|
14
|
+
* NULL terminator. Prefixing with "\\?\" adds 4 characters, but if the
|
|
15
|
+
* original was a UNC path, then we turn "\\server\share" into
|
|
16
|
+
* "\\?\UNC\server\share". So we replace the first two characters with
|
|
17
|
+
* 8 characters, a net gain of 6, so the maximum length is MAX_PATH+6.
|
|
18
|
+
*/
|
|
19
|
+
#define GIT_WIN_PATH_UTF16 MAX_PATH+6
|
|
20
|
+
|
|
21
|
+
/* Maximum size of a UTF-8 Win32 path. We remove the "\\?\" or "\\?\UNC\"
|
|
22
|
+
* prefixes for presentation, bringing us back to 259 (non-NULL)
|
|
23
|
+
* characters. UTF-8 does have 4-byte sequences, but they are encoded in
|
|
24
|
+
* UTF-16 using surrogate pairs, which takes up the space of two characters.
|
|
25
|
+
* Two characters in the range U+0800 -> U+FFFF take up more space in UTF-8
|
|
26
|
+
* (6 bytes) than one surrogate pair (4 bytes).
|
|
27
|
+
*/
|
|
28
|
+
#define GIT_WIN_PATH_UTF8 (259 * 3 + 1)
|
|
29
|
+
|
|
30
|
+
/*
|
|
31
|
+
* The length of a Windows "shortname", for 8.3 compatibility.
|
|
32
|
+
*/
|
|
33
|
+
#define GIT_WIN_PATH_SHORTNAME 13
|
|
34
|
+
|
|
35
|
+
/* Win32 path types */
|
|
36
|
+
typedef wchar_t git_win32_path[GIT_WIN_PATH_UTF16];
|
|
37
|
+
typedef char git_win32_utf8_path[GIT_WIN_PATH_UTF8];
|
|
38
|
+
|
|
39
|
+
#endif
|
|
@@ -71,99 +71,6 @@ static bool g_limit_reached = false; /* had allocs after we filled row table */
|
|
|
71
71
|
static unsigned int g_checkpoint_id = 0; /* to better label leak checkpoints */
|
|
72
72
|
static bool g_transient_leaks_since_mark = false; /* payload for hook */
|
|
73
73
|
|
|
74
|
-
static void *crtdbg__malloc(size_t len, const char *file, int line)
|
|
75
|
-
{
|
|
76
|
-
void *ptr = _malloc_dbg(len, _NORMAL_BLOCK, git_win32__crtdbg_stacktrace(1,file), line);
|
|
77
|
-
if (!ptr) giterr_set_oom();
|
|
78
|
-
return ptr;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
static void *crtdbg__calloc(size_t nelem, size_t elsize, const char *file, int line)
|
|
82
|
-
{
|
|
83
|
-
void *ptr = _calloc_dbg(nelem, elsize, _NORMAL_BLOCK, git_win32__crtdbg_stacktrace(1,file), line);
|
|
84
|
-
if (!ptr) giterr_set_oom();
|
|
85
|
-
return ptr;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
static char *crtdbg__strdup(const char *str, const char *file, int line)
|
|
89
|
-
{
|
|
90
|
-
char *ptr = _strdup_dbg(str, _NORMAL_BLOCK, git_win32__crtdbg_stacktrace(1,file), line);
|
|
91
|
-
if (!ptr) giterr_set_oom();
|
|
92
|
-
return ptr;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
static char *crtdbg__strndup(const char *str, size_t n, const char *file, int line)
|
|
96
|
-
{
|
|
97
|
-
size_t length = 0, alloclength;
|
|
98
|
-
char *ptr;
|
|
99
|
-
|
|
100
|
-
length = p_strnlen(str, n);
|
|
101
|
-
|
|
102
|
-
if (GIT_ADD_SIZET_OVERFLOW(&alloclength, length, 1) ||
|
|
103
|
-
!(ptr = crtdbg__malloc(alloclength, file, line)))
|
|
104
|
-
return NULL;
|
|
105
|
-
|
|
106
|
-
if (length)
|
|
107
|
-
memcpy(ptr, str, length);
|
|
108
|
-
|
|
109
|
-
ptr[length] = '\0';
|
|
110
|
-
|
|
111
|
-
return ptr;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
static char *crtdbg__substrdup(const char *start, size_t n, const char *file, int line)
|
|
115
|
-
{
|
|
116
|
-
char *ptr;
|
|
117
|
-
size_t alloclen;
|
|
118
|
-
|
|
119
|
-
if (GIT_ADD_SIZET_OVERFLOW(&alloclen, n, 1) ||
|
|
120
|
-
!(ptr = crtdbg__malloc(alloclen, file, line)))
|
|
121
|
-
return NULL;
|
|
122
|
-
|
|
123
|
-
memcpy(ptr, start, n);
|
|
124
|
-
ptr[n] = '\0';
|
|
125
|
-
return ptr;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
static void *crtdbg__realloc(void *ptr, size_t size, const char *file, int line)
|
|
129
|
-
{
|
|
130
|
-
void *new_ptr = _realloc_dbg(ptr, size, _NORMAL_BLOCK, git_win32__crtdbg_stacktrace(1,file), line);
|
|
131
|
-
if (!new_ptr) giterr_set_oom();
|
|
132
|
-
return new_ptr;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
static void *crtdbg__reallocarray(void *ptr, size_t nelem, size_t elsize, const char *file, int line)
|
|
136
|
-
{
|
|
137
|
-
size_t newsize;
|
|
138
|
-
|
|
139
|
-
return GIT_MULTIPLY_SIZET_OVERFLOW(&newsize, nelem, elsize) ?
|
|
140
|
-
NULL : _realloc_dbg(ptr, newsize, _NORMAL_BLOCK, git_win32__crtdbg_stacktrace(1,file), line);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
static void *crtdbg__mallocarray(size_t nelem, size_t elsize, const char *file, int line)
|
|
144
|
-
{
|
|
145
|
-
return crtdbg__reallocarray(NULL, nelem, elsize, file, line);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
static void crtdbg__free(void *ptr)
|
|
149
|
-
{
|
|
150
|
-
free(ptr);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
int git_win32_crtdbg_init_allocator(git_allocator *allocator)
|
|
154
|
-
{
|
|
155
|
-
allocator->gmalloc = crtdbg__malloc;
|
|
156
|
-
allocator->gcalloc = crtdbg__calloc;
|
|
157
|
-
allocator->gstrdup = crtdbg__strdup;
|
|
158
|
-
allocator->gstrndup = crtdbg__strndup;
|
|
159
|
-
allocator->gsubstrdup = crtdbg__substrdup;
|
|
160
|
-
allocator->grealloc = crtdbg__realloc;
|
|
161
|
-
allocator->greallocarray = crtdbg__reallocarray;
|
|
162
|
-
allocator->gmallocarray = crtdbg__mallocarray;
|
|
163
|
-
allocator->gfree = crtdbg__free;
|
|
164
|
-
return 0;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
74
|
/**
|
|
168
75
|
* Compare function for bsearch on g_cs_index table.
|
|
169
76
|
*/
|
|
@@ -347,11 +254,11 @@ int git_win32__crtdbg_stacktrace__dump(
|
|
|
347
254
|
bool b_quiet = IS_BIT_SET(opt, GIT_WIN32__CRTDBG_STACKTRACE__QUIET);
|
|
348
255
|
|
|
349
256
|
if (b_leaks_since_mark && b_leaks_total) {
|
|
350
|
-
|
|
257
|
+
git_error_set(GIT_ERROR_INVALID, "cannot combine LEAKS_SINCE_MARK and LEAKS_TOTAL.");
|
|
351
258
|
return GIT_ERROR;
|
|
352
259
|
}
|
|
353
260
|
if (!b_set_mark && !b_leaks_since_mark && !b_leaks_total) {
|
|
354
|
-
|
|
261
|
+
git_error_set(GIT_ERROR_INVALID, "nothing to do.");
|
|
355
262
|
return GIT_ERROR;
|
|
356
263
|
}
|
|
357
264
|
|
|
@@ -13,11 +13,6 @@
|
|
|
13
13
|
#include "win32/posix.h"
|
|
14
14
|
#include "hash.h"
|
|
15
15
|
|
|
16
|
-
/**
|
|
17
|
-
* This is supposedly defined in WinBase.h (from Windows.h) but there were linker issues.
|
|
18
|
-
*/
|
|
19
|
-
USHORT WINAPI RtlCaptureStackBackTrace(ULONG, ULONG, PVOID*, PULONG);
|
|
20
|
-
|
|
21
16
|
static bool g_win32_stack_initialized = false;
|
|
22
17
|
static HANDLE g_win32_stack_process = INVALID_HANDLE_VALUE;
|
|
23
18
|
static git_win32__stack__aux_cb_alloc g_aux_cb_alloc = NULL;
|
|
@@ -55,7 +50,7 @@ void git_win32__stack_cleanup(void)
|
|
|
55
50
|
int git_win32__stack_capture(git_win32__stack__raw_data *pdata, int skip)
|
|
56
51
|
{
|
|
57
52
|
if (!g_win32_stack_initialized) {
|
|
58
|
-
|
|
53
|
+
git_error_set(GIT_ERROR_INVALID, "git_win32_stack not initialized.");
|
|
59
54
|
return GIT_ERROR;
|
|
60
55
|
}
|
|
61
56
|
|
|
@@ -81,7 +76,7 @@ int git_win32__stack_compare(
|
|
|
81
76
|
}
|
|
82
77
|
|
|
83
78
|
int git_win32__stack_format(
|
|
84
|
-
char *pbuf,
|
|
79
|
+
char *pbuf, size_t buf_len,
|
|
85
80
|
const git_win32__stack__raw_data *pdata,
|
|
86
81
|
const char *prefix, const char *suffix)
|
|
87
82
|
{
|
|
@@ -96,13 +91,13 @@ int git_win32__stack_format(
|
|
|
96
91
|
} s;
|
|
97
92
|
|
|
98
93
|
IMAGEHLP_LINE64 line;
|
|
99
|
-
|
|
94
|
+
size_t buf_used = 0;
|
|
100
95
|
unsigned int k;
|
|
101
96
|
char detail[MY_MAX_FILENAME * 2]; /* filename plus space for function name and formatting */
|
|
102
|
-
|
|
97
|
+
size_t detail_len;
|
|
103
98
|
|
|
104
99
|
if (!g_win32_stack_initialized) {
|
|
105
|
-
|
|
100
|
+
git_error_set(GIT_ERROR_INVALID, "git_win32_stack not initialized.");
|
|
106
101
|
return GIT_ERROR;
|
|
107
102
|
}
|
|
108
103
|
|
|
@@ -176,7 +171,7 @@ int git_win32__stack_format(
|
|
|
176
171
|
}
|
|
177
172
|
|
|
178
173
|
int git_win32__stack(
|
|
179
|
-
char * pbuf,
|
|
174
|
+
char * pbuf, size_t buf_len,
|
|
180
175
|
int skip,
|
|
181
176
|
const char *prefix, const char *suffix)
|
|
182
177
|
{
|
|
@@ -38,7 +38,7 @@ typedef void (*git_win32__stack__aux_cb_alloc)(unsigned int *aux_id);
|
|
|
38
38
|
* @param aux_msg A buffer where a formatted message should be written.
|
|
39
39
|
* @param aux_msg_len The size of the buffer.
|
|
40
40
|
*/
|
|
41
|
-
typedef void (*git_win32__stack__aux_cb_lookup)(unsigned int aux_id, char *aux_msg,
|
|
41
|
+
typedef void (*git_win32__stack__aux_cb_lookup)(unsigned int aux_id, char *aux_msg, size_t aux_msg_len);
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
44
|
* Register an "aux" data provider to augment our C stacktrace data.
|
|
@@ -116,7 +116,7 @@ int git_win32__stack_compare(
|
|
|
116
116
|
* @param suffix String written after each frame; defaults to "\n".
|
|
117
117
|
*/
|
|
118
118
|
int git_win32__stack_format(
|
|
119
|
-
char *pbuf,
|
|
119
|
+
char *pbuf, size_t buf_len,
|
|
120
120
|
const git_win32__stack__raw_data *pdata,
|
|
121
121
|
const char *prefix, const char *suffix);
|
|
122
122
|
|
|
@@ -132,7 +132,7 @@ int git_win32__stack_format(
|
|
|
132
132
|
* @param suffix String written after each frame; defaults to "\n".
|
|
133
133
|
*/
|
|
134
134
|
int git_win32__stack(
|
|
135
|
-
char * pbuf,
|
|
135
|
+
char * pbuf, size_t buf_len,
|
|
136
136
|
int skip,
|
|
137
137
|
const char *prefix, const char *suffix);
|
|
138
138
|
|
|
@@ -68,7 +68,7 @@ int git_win32__set_hidden(const char *path, bool hidden)
|
|
|
68
68
|
newattrs = attrs & ~FILE_ATTRIBUTE_HIDDEN;
|
|
69
69
|
|
|
70
70
|
if (attrs != newattrs && !SetFileAttributesW(buf, newattrs)) {
|
|
71
|
-
|
|
71
|
+
git_error_set(GIT_ERROR_OS, "failed to %s hidden bit for '%s'",
|
|
72
72
|
hidden ? "set" : "unset", path);
|
|
73
73
|
return -1;
|
|
74
74
|
}
|
|
@@ -94,70 +94,33 @@ int git_win32__hidden(bool *out, const char *path)
|
|
|
94
94
|
return 0;
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* @param path The path which should be trimmed.
|
|
102
|
-
* @return The length of the modified string (<= the input length)
|
|
103
|
-
*/
|
|
104
|
-
size_t git_win32__path_trim_end(wchar_t *str, size_t len)
|
|
97
|
+
int git_win32__file_attribute_to_stat(
|
|
98
|
+
struct stat *st,
|
|
99
|
+
const WIN32_FILE_ATTRIBUTE_DATA *attrdata,
|
|
100
|
+
const wchar_t *path)
|
|
105
101
|
{
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
102
|
+
git_win32__stat_init(st,
|
|
103
|
+
attrdata->dwFileAttributes,
|
|
104
|
+
attrdata->nFileSizeHigh,
|
|
105
|
+
attrdata->nFileSizeLow,
|
|
106
|
+
attrdata->ftCreationTime,
|
|
107
|
+
attrdata->ftLastAccessTime,
|
|
108
|
+
attrdata->ftLastWriteTime);
|
|
109
|
+
|
|
110
|
+
if (attrdata->dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT && path) {
|
|
111
|
+
git_win32_path target;
|
|
112
|
+
|
|
113
|
+
if (git_win32_path_readlink_w(target, path) >= 0) {
|
|
114
|
+
st->st_mode = (st->st_mode & ~S_IFMT) | S_IFLNK;
|
|
115
|
+
|
|
116
|
+
/* st_size gets the UTF-8 length of the target name, in bytes,
|
|
117
|
+
* not counting the NULL terminator */
|
|
118
|
+
if ((st->st_size = git__utf16_to_8(NULL, 0, target)) < 0) {
|
|
119
|
+
git_error_set(GIT_ERROR_OS, "could not convert reparse point name for '%ls'", path);
|
|
120
|
+
return -1;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
116
123
|
}
|
|
117
124
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return len;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Removes any of the following namespace prefixes from a path,
|
|
125
|
-
* if found: "\??\", "\\?\", "\\?\UNC\". This function cannot fail.
|
|
126
|
-
*
|
|
127
|
-
* @param path The path which should be converted.
|
|
128
|
-
* @return The length of the modified string (<= the input length)
|
|
129
|
-
*/
|
|
130
|
-
size_t git_win32__canonicalize_path(wchar_t *str, size_t len)
|
|
131
|
-
{
|
|
132
|
-
static const wchar_t dosdevices_prefix[] = L"\\\?\?\\";
|
|
133
|
-
static const wchar_t nt_prefix[] = L"\\\\?\\";
|
|
134
|
-
static const wchar_t unc_prefix[] = L"UNC\\";
|
|
135
|
-
size_t to_advance = 0;
|
|
136
|
-
|
|
137
|
-
/* "\??\" -- DOS Devices prefix */
|
|
138
|
-
if (len >= CONST_STRLEN(dosdevices_prefix) &&
|
|
139
|
-
!wcsncmp(str, dosdevices_prefix, CONST_STRLEN(dosdevices_prefix))) {
|
|
140
|
-
to_advance += CONST_STRLEN(dosdevices_prefix);
|
|
141
|
-
len -= CONST_STRLEN(dosdevices_prefix);
|
|
142
|
-
}
|
|
143
|
-
/* "\\?\" -- NT namespace prefix */
|
|
144
|
-
else if (len >= CONST_STRLEN(nt_prefix) &&
|
|
145
|
-
!wcsncmp(str, nt_prefix, CONST_STRLEN(nt_prefix))) {
|
|
146
|
-
to_advance += CONST_STRLEN(nt_prefix);
|
|
147
|
-
len -= CONST_STRLEN(nt_prefix);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/* "\??\UNC\", "\\?\UNC\" -- UNC prefix */
|
|
151
|
-
if (to_advance && len >= CONST_STRLEN(unc_prefix) &&
|
|
152
|
-
!wcsncmp(str + to_advance, unc_prefix, CONST_STRLEN(unc_prefix))) {
|
|
153
|
-
to_advance += CONST_STRLEN(unc_prefix);
|
|
154
|
-
len -= CONST_STRLEN(unc_prefix);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
if (to_advance) {
|
|
158
|
-
memmove(str, str + to_advance, len * sizeof(wchar_t));
|
|
159
|
-
str[len] = L'\0';
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
return git_win32__path_trim_end(str, len);
|
|
125
|
+
return 0;
|
|
163
126
|
}
|