rugged 1.0.0 → 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.
- checksums.yaml +4 -4
- data/LICENSE +1 -0
- data/README.md +3 -3
- data/ext/rugged/rugged.c +7 -4
- data/ext/rugged/rugged_commit.c +1 -1
- data/ext/rugged/rugged_config.c +1 -1
- data/ext/rugged/rugged_object.c +1 -1
- data/ext/rugged/rugged_remote.c +32 -2
- data/ext/rugged/rugged_repo.c +13 -3
- data/lib/rugged/commit.rb +17 -4
- data/lib/rugged/repository.rb +7 -8
- data/lib/rugged/submodule_collection.rb +4 -4
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +41 -74
- data/vendor/libgit2/COPYING +109 -1
- data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
- data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
- data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
- data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +29 -32
- data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +21 -28
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +24 -10
- data/vendor/libgit2/deps/ntlmclient/compat.h +0 -27
- data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +164 -135
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
- data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
- data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
- data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
- data/vendor/libgit2/deps/pcre/LICENCE +93 -0
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
- data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
- data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
- data/vendor/libgit2/deps/zlib/deflate.c +1 -0
- data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
- data/vendor/libgit2/include/git2/apply.h +2 -0
- data/vendor/libgit2/include/git2/attr.h +89 -0
- data/vendor/libgit2/include/git2/blame.h +95 -42
- data/vendor/libgit2/include/git2/blob.h +31 -3
- data/vendor/libgit2/include/git2/branch.h +25 -0
- data/vendor/libgit2/include/git2/cert.h +42 -5
- data/vendor/libgit2/include/git2/checkout.h +28 -12
- data/vendor/libgit2/include/git2/commit.h +35 -19
- data/vendor/libgit2/include/git2/common.h +33 -6
- data/vendor/libgit2/include/git2/config.h +1 -1
- data/vendor/libgit2/include/git2/deprecated.h +248 -8
- data/vendor/libgit2/include/git2/diff.h +35 -20
- data/vendor/libgit2/include/git2/errors.h +8 -7
- data/vendor/libgit2/include/git2/filter.h +57 -17
- data/vendor/libgit2/include/git2/graph.h +20 -2
- data/vendor/libgit2/include/git2/index.h +4 -5
- data/vendor/libgit2/include/git2/indexer.h +2 -1
- data/vendor/libgit2/include/git2/odb.h +44 -20
- data/vendor/libgit2/include/git2/pack.h +1 -1
- data/vendor/libgit2/include/git2/patch.h +8 -0
- data/vendor/libgit2/include/git2/rebase.h +25 -1
- data/vendor/libgit2/include/git2/refs.h +9 -5
- data/vendor/libgit2/include/git2/remote.h +59 -6
- data/vendor/libgit2/include/git2/repository.h +95 -52
- data/vendor/libgit2/include/git2/revparse.h +5 -5
- data/vendor/libgit2/include/git2/status.h +115 -59
- data/vendor/libgit2/include/git2/strarray.h +6 -10
- data/vendor/libgit2/include/git2/submodule.h +9 -0
- data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
- data/vendor/libgit2/include/git2/sys/filter.h +49 -28
- data/vendor/libgit2/include/git2/sys/midx.h +74 -0
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
- data/vendor/libgit2/include/git2/sys/transport.h +1 -0
- data/vendor/libgit2/include/git2/tag.h +12 -0
- data/vendor/libgit2/include/git2/transport.h +1 -1
- data/vendor/libgit2/include/git2/tree.h +2 -14
- data/vendor/libgit2/include/git2/types.h +9 -0
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +77 -44
- data/vendor/libgit2/src/alloc.c +21 -8
- data/vendor/libgit2/src/allocators/failalloc.c +92 -0
- data/vendor/libgit2/src/allocators/failalloc.h +23 -0
- data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
- data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
- data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
- data/vendor/libgit2/src/annotated_commit.c +21 -9
- data/vendor/libgit2/src/apply.c +21 -8
- data/vendor/libgit2/src/array.h +11 -11
- data/vendor/libgit2/src/assert_safe.h +58 -0
- data/vendor/libgit2/src/attr.c +181 -74
- data/vendor/libgit2/src/attr_file.c +92 -42
- data/vendor/libgit2/src/attr_file.h +32 -11
- data/vendor/libgit2/src/attrcache.c +44 -40
- data/vendor/libgit2/src/attrcache.h +4 -5
- data/vendor/libgit2/src/blame.c +28 -15
- data/vendor/libgit2/src/blame_git.c +6 -3
- data/vendor/libgit2/src/blob.c +46 -24
- data/vendor/libgit2/src/branch.c +87 -37
- data/vendor/libgit2/src/buffer.c +339 -27
- data/vendor/libgit2/src/buffer.h +153 -2
- data/vendor/libgit2/src/cache.c +3 -24
- data/vendor/libgit2/src/cache.h +7 -7
- data/vendor/libgit2/src/cc-compat.h +10 -2
- data/vendor/libgit2/src/checkout.c +97 -98
- data/vendor/libgit2/src/cherrypick.c +8 -2
- data/vendor/libgit2/src/clone.c +104 -29
- data/vendor/libgit2/src/commit.c +41 -28
- data/vendor/libgit2/src/commit_graph.c +1209 -0
- data/vendor/libgit2/src/commit_graph.h +162 -0
- data/vendor/libgit2/src/commit_list.c +46 -0
- data/vendor/libgit2/src/commit_list.h +2 -0
- data/vendor/libgit2/src/common.h +26 -2
- data/vendor/libgit2/src/config.c +40 -22
- data/vendor/libgit2/src/config_cache.c +9 -4
- data/vendor/libgit2/src/config_entries.c +35 -27
- data/vendor/libgit2/src/config_file.c +25 -8
- data/vendor/libgit2/src/config_parse.c +5 -7
- data/vendor/libgit2/src/config_snapshot.c +2 -1
- data/vendor/libgit2/src/crlf.c +16 -6
- data/vendor/libgit2/src/date.c +4 -3
- data/vendor/libgit2/src/delta.c +1 -1
- data/vendor/libgit2/src/describe.c +11 -4
- data/vendor/libgit2/src/diff.c +23 -19
- data/vendor/libgit2/src/diff_driver.c +21 -17
- data/vendor/libgit2/src/diff_file.c +5 -7
- data/vendor/libgit2/src/diff_generate.c +56 -28
- data/vendor/libgit2/src/diff_parse.c +2 -3
- data/vendor/libgit2/src/diff_print.c +81 -65
- data/vendor/libgit2/src/diff_stats.c +19 -16
- data/vendor/libgit2/src/diff_tform.c +13 -13
- data/vendor/libgit2/src/diff_xdiff.c +4 -2
- data/vendor/libgit2/src/diff_xdiff.h +1 -1
- data/vendor/libgit2/src/errors.c +26 -19
- data/vendor/libgit2/src/features.h.in +5 -1
- data/vendor/libgit2/src/fetch.c +7 -2
- data/vendor/libgit2/src/fetchhead.c +8 -4
- data/vendor/libgit2/src/filebuf.c +9 -7
- data/vendor/libgit2/src/filter.c +209 -113
- data/vendor/libgit2/src/filter.h +24 -5
- data/vendor/libgit2/src/futils.c +8 -8
- data/vendor/libgit2/src/futils.h +4 -4
- data/vendor/libgit2/src/graph.c +64 -9
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
- data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
- data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
- data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
- data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
- data/vendor/libgit2/src/hash.c +16 -13
- data/vendor/libgit2/src/hash.h +1 -1
- data/vendor/libgit2/src/hashsig.c +23 -10
- data/vendor/libgit2/src/ident.c +13 -3
- data/vendor/libgit2/src/idxmap.c +0 -22
- data/vendor/libgit2/src/ignore.c +35 -19
- data/vendor/libgit2/src/index.c +126 -84
- data/vendor/libgit2/src/index.h +1 -1
- data/vendor/libgit2/src/indexer.c +60 -36
- data/vendor/libgit2/src/integer.h +79 -2
- data/vendor/libgit2/src/iterator.c +40 -28
- data/vendor/libgit2/src/iterator.h +1 -1
- data/vendor/libgit2/src/khash.h +2 -11
- data/vendor/libgit2/src/{settings.c → libgit2.c} +125 -49
- data/vendor/libgit2/src/libgit2.h +15 -0
- data/vendor/libgit2/src/mailmap.c +23 -10
- data/vendor/libgit2/src/map.h +3 -3
- data/vendor/libgit2/src/merge.c +108 -46
- data/vendor/libgit2/src/merge.h +2 -1
- data/vendor/libgit2/src/merge_driver.c +19 -13
- data/vendor/libgit2/src/merge_file.c +15 -9
- data/vendor/libgit2/src/message.c +3 -1
- data/vendor/libgit2/src/midx.c +879 -0
- data/vendor/libgit2/src/midx.h +110 -0
- data/vendor/libgit2/src/mwindow.c +214 -95
- data/vendor/libgit2/src/mwindow.h +3 -3
- data/vendor/libgit2/src/net.c +133 -4
- data/vendor/libgit2/src/net.h +16 -2
- data/vendor/libgit2/src/netops.c +6 -4
- data/vendor/libgit2/src/netops.h +2 -2
- data/vendor/libgit2/src/notes.c +10 -10
- data/vendor/libgit2/src/object.c +24 -15
- data/vendor/libgit2/src/odb.c +298 -57
- data/vendor/libgit2/src/odb.h +16 -2
- data/vendor/libgit2/src/odb_loose.c +31 -21
- data/vendor/libgit2/src/odb_mempack.c +3 -1
- data/vendor/libgit2/src/odb_pack.c +391 -114
- data/vendor/libgit2/src/oid.c +7 -4
- data/vendor/libgit2/src/pack-objects.c +83 -69
- data/vendor/libgit2/src/pack.c +383 -150
- data/vendor/libgit2/src/pack.h +44 -9
- data/vendor/libgit2/src/patch.c +14 -7
- data/vendor/libgit2/src/patch_generate.c +3 -5
- data/vendor/libgit2/src/patch_parse.c +6 -3
- data/vendor/libgit2/src/path.c +102 -57
- data/vendor/libgit2/src/path.h +79 -6
- data/vendor/libgit2/src/pathspec.c +12 -11
- data/vendor/libgit2/src/pool.c +34 -22
- data/vendor/libgit2/src/pool.h +9 -1
- data/vendor/libgit2/src/posix.c +43 -12
- data/vendor/libgit2/src/posix.h +9 -0
- data/vendor/libgit2/src/proxy.c +2 -0
- data/vendor/libgit2/src/push.c +2 -0
- data/vendor/libgit2/src/reader.c +10 -6
- data/vendor/libgit2/src/rebase.c +95 -49
- data/vendor/libgit2/src/refdb.c +165 -13
- data/vendor/libgit2/src/refdb.h +69 -0
- data/vendor/libgit2/src/refdb_fs.c +144 -152
- data/vendor/libgit2/src/reflog.c +21 -20
- data/vendor/libgit2/src/refs.c +151 -231
- data/vendor/libgit2/src/refs.h +2 -20
- data/vendor/libgit2/src/refspec.c +80 -44
- data/vendor/libgit2/src/regexp.c +2 -2
- data/vendor/libgit2/src/remote.c +312 -121
- data/vendor/libgit2/src/remote.h +2 -1
- data/vendor/libgit2/src/repository.c +351 -189
- data/vendor/libgit2/src/repository.h +23 -29
- data/vendor/libgit2/src/reset.c +7 -6
- data/vendor/libgit2/src/revert.c +8 -2
- data/vendor/libgit2/src/revparse.c +19 -13
- data/vendor/libgit2/src/revwalk.c +35 -20
- data/vendor/libgit2/src/runtime.c +162 -0
- data/vendor/libgit2/src/runtime.h +62 -0
- data/vendor/libgit2/src/{refdb_fs.h → settings.h} +3 -11
- data/vendor/libgit2/src/signature.c +6 -5
- data/vendor/libgit2/src/sortedcache.c +2 -3
- data/vendor/libgit2/src/sortedcache.h +10 -8
- data/vendor/libgit2/src/stash.c +7 -3
- data/vendor/libgit2/src/status.c +9 -4
- data/vendor/libgit2/src/strarray.c +64 -0
- data/vendor/libgit2/src/streams/mbedtls.c +14 -17
- data/vendor/libgit2/src/streams/mbedtls.h +1 -1
- data/vendor/libgit2/src/streams/openssl.c +113 -207
- data/vendor/libgit2/src/streams/openssl.h +9 -1
- data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
- data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
- data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
- data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
- data/vendor/libgit2/src/streams/registry.c +10 -9
- data/vendor/libgit2/src/streams/socket.c +6 -2
- data/vendor/libgit2/src/streams/stransport.c +6 -3
- data/vendor/libgit2/src/streams/tls.c +5 -3
- data/vendor/libgit2/src/submodule.c +134 -66
- data/vendor/libgit2/src/submodule.h +9 -9
- data/vendor/libgit2/src/sysdir.c +8 -26
- data/vendor/libgit2/src/sysdir.h +0 -11
- data/vendor/libgit2/src/tag.c +49 -11
- data/vendor/libgit2/src/thread.c +140 -0
- data/vendor/libgit2/src/thread.h +479 -0
- data/vendor/libgit2/src/threadstate.c +83 -0
- data/vendor/libgit2/src/threadstate.h +24 -0
- data/vendor/libgit2/src/trace.c +2 -2
- data/vendor/libgit2/src/trace.h +17 -13
- data/vendor/libgit2/src/transaction.c +21 -9
- data/vendor/libgit2/src/transport.c +3 -3
- data/vendor/libgit2/src/transports/auth.c +1 -1
- data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
- data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
- data/vendor/libgit2/src/transports/credential.c +17 -7
- data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
- data/vendor/libgit2/src/transports/git.c +1 -3
- data/vendor/libgit2/src/transports/http.c +19 -17
- data/vendor/libgit2/src/transports/http.h +1 -0
- data/vendor/libgit2/src/transports/httpclient.c +84 -42
- data/vendor/libgit2/src/transports/httpclient.h +1 -1
- data/vendor/libgit2/src/transports/local.c +5 -5
- data/vendor/libgit2/src/transports/smart.c +14 -9
- data/vendor/libgit2/src/transports/smart.h +1 -1
- data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
- data/vendor/libgit2/src/transports/ssh.c +51 -17
- data/vendor/libgit2/src/transports/winhttp.c +156 -88
- data/vendor/libgit2/src/tree.c +100 -77
- data/vendor/libgit2/src/tree.h +1 -0
- data/vendor/libgit2/src/tsort.c +0 -2
- data/vendor/libgit2/src/unix/map.c +3 -1
- data/vendor/libgit2/src/unix/posix.h +16 -1
- data/vendor/libgit2/src/unix/pthread.h +2 -1
- data/vendor/libgit2/src/utf8.c +150 -0
- data/vendor/libgit2/src/utf8.h +52 -0
- data/vendor/libgit2/src/util.c +74 -183
- data/vendor/libgit2/src/util.h +33 -39
- data/vendor/libgit2/src/vector.c +23 -19
- data/vendor/libgit2/src/vector.h +4 -2
- data/vendor/libgit2/src/win32/findfile.c +4 -2
- data/vendor/libgit2/src/win32/git2.rc +18 -3
- data/vendor/libgit2/src/win32/map.c +1 -1
- data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
- data/vendor/libgit2/src/win32/path_w32.c +23 -25
- data/vendor/libgit2/src/win32/path_w32.h +0 -1
- data/vendor/libgit2/src/win32/posix_w32.c +77 -1
- data/vendor/libgit2/src/win32/precompiled.h +0 -1
- data/vendor/libgit2/src/win32/reparse.h +4 -4
- data/vendor/libgit2/src/win32/thread.c +24 -15
- data/vendor/libgit2/src/win32/thread.h +1 -1
- data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
- data/vendor/libgit2/src/win32/w32_common.h +18 -9
- data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
- data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
- data/vendor/libgit2/src/win32/w32_util.h +6 -6
- data/vendor/libgit2/src/worktree.c +37 -15
- data/vendor/libgit2/src/zstream.c +1 -1
- metadata +56 -38
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
- data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
- data/vendor/libgit2/src/buf_text.c +0 -316
- data/vendor/libgit2/src/buf_text.h +0 -122
- data/vendor/libgit2/src/global.c +0 -361
- data/vendor/libgit2/src/global.h +0 -41
- data/vendor/libgit2/src/thread-utils.c +0 -58
- data/vendor/libgit2/src/thread-utils.h +0 -246
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
- data/vendor/libgit2/src/win32/w32_stack.c +0 -188
- data/vendor/libgit2/src/win32/w32_stack.h +0 -140
data/vendor/libgit2/src/vector.c
CHANGED
|
@@ -53,7 +53,8 @@ int git_vector_size_hint(git_vector *v, size_t size_hint)
|
|
|
53
53
|
|
|
54
54
|
int git_vector_dup(git_vector *v, const git_vector *src, git_vector_cmp cmp)
|
|
55
55
|
{
|
|
56
|
-
|
|
56
|
+
GIT_ASSERT_ARG(v);
|
|
57
|
+
GIT_ASSERT_ARG(src);
|
|
57
58
|
|
|
58
59
|
v->_alloc_size = 0;
|
|
59
60
|
v->contents = NULL;
|
|
@@ -77,7 +78,8 @@ int git_vector_dup(git_vector *v, const git_vector *src, git_vector_cmp cmp)
|
|
|
77
78
|
|
|
78
79
|
void git_vector_free(git_vector *v)
|
|
79
80
|
{
|
|
80
|
-
|
|
81
|
+
if (!v)
|
|
82
|
+
return;
|
|
81
83
|
|
|
82
84
|
git__free(v->contents);
|
|
83
85
|
v->contents = NULL;
|
|
@@ -90,7 +92,8 @@ void git_vector_free_deep(git_vector *v)
|
|
|
90
92
|
{
|
|
91
93
|
size_t i;
|
|
92
94
|
|
|
93
|
-
|
|
95
|
+
if (!v)
|
|
96
|
+
return;
|
|
94
97
|
|
|
95
98
|
for (i = 0; i < v->length; ++i) {
|
|
96
99
|
git__free(v->contents[i]);
|
|
@@ -102,7 +105,7 @@ void git_vector_free_deep(git_vector *v)
|
|
|
102
105
|
|
|
103
106
|
int git_vector_init(git_vector *v, size_t initial_size, git_vector_cmp cmp)
|
|
104
107
|
{
|
|
105
|
-
|
|
108
|
+
GIT_ASSERT_ARG(v);
|
|
106
109
|
|
|
107
110
|
v->_alloc_size = 0;
|
|
108
111
|
v->_cmp = cmp;
|
|
@@ -131,7 +134,7 @@ void **git_vector_detach(size_t *size, size_t *asize, git_vector *v)
|
|
|
131
134
|
|
|
132
135
|
int git_vector_insert(git_vector *v, void *element)
|
|
133
136
|
{
|
|
134
|
-
|
|
137
|
+
GIT_ASSERT_ARG(v);
|
|
135
138
|
|
|
136
139
|
if (v->length >= v->_alloc_size &&
|
|
137
140
|
resize_vector(v, compute_new_size(v)) < 0)
|
|
@@ -150,7 +153,8 @@ int git_vector_insert_sorted(
|
|
|
150
153
|
int result;
|
|
151
154
|
size_t pos;
|
|
152
155
|
|
|
153
|
-
|
|
156
|
+
GIT_ASSERT_ARG(v);
|
|
157
|
+
GIT_ASSERT(v->_cmp);
|
|
154
158
|
|
|
155
159
|
if (!git_vector_is_sorted(v))
|
|
156
160
|
git_vector_sort(v);
|
|
@@ -180,8 +184,6 @@ int git_vector_insert_sorted(
|
|
|
180
184
|
|
|
181
185
|
void git_vector_sort(git_vector *v)
|
|
182
186
|
{
|
|
183
|
-
assert(v);
|
|
184
|
-
|
|
185
187
|
if (git_vector_is_sorted(v) || !v->_cmp)
|
|
186
188
|
return;
|
|
187
189
|
|
|
@@ -196,7 +198,9 @@ int git_vector_bsearch2(
|
|
|
196
198
|
git_vector_cmp key_lookup,
|
|
197
199
|
const void *key)
|
|
198
200
|
{
|
|
199
|
-
|
|
201
|
+
GIT_ASSERT_ARG(v);
|
|
202
|
+
GIT_ASSERT_ARG(key);
|
|
203
|
+
GIT_ASSERT(key_lookup);
|
|
200
204
|
|
|
201
205
|
/* need comparison function to sort the vector */
|
|
202
206
|
if (!v->_cmp)
|
|
@@ -212,7 +216,9 @@ int git_vector_search2(
|
|
|
212
216
|
{
|
|
213
217
|
size_t i;
|
|
214
218
|
|
|
215
|
-
|
|
219
|
+
GIT_ASSERT_ARG(v);
|
|
220
|
+
GIT_ASSERT_ARG(key);
|
|
221
|
+
GIT_ASSERT(key_lookup);
|
|
216
222
|
|
|
217
223
|
for (i = 0; i < v->length; ++i) {
|
|
218
224
|
if (key_lookup(key, v->contents[i]) == 0) {
|
|
@@ -240,7 +246,7 @@ int git_vector_remove(git_vector *v, size_t idx)
|
|
|
240
246
|
{
|
|
241
247
|
size_t shift_count;
|
|
242
248
|
|
|
243
|
-
|
|
249
|
+
GIT_ASSERT_ARG(v);
|
|
244
250
|
|
|
245
251
|
if (idx >= v->length)
|
|
246
252
|
return GIT_ENOTFOUND;
|
|
@@ -303,7 +309,6 @@ void git_vector_remove_matching(
|
|
|
303
309
|
|
|
304
310
|
void git_vector_clear(git_vector *v)
|
|
305
311
|
{
|
|
306
|
-
assert(v);
|
|
307
312
|
v->length = 0;
|
|
308
313
|
git_vector_set_sorted(v, 1);
|
|
309
314
|
}
|
|
@@ -312,8 +317,6 @@ void git_vector_swap(git_vector *a, git_vector *b)
|
|
|
312
317
|
{
|
|
313
318
|
git_vector t;
|
|
314
319
|
|
|
315
|
-
assert(a && b);
|
|
316
|
-
|
|
317
320
|
if (a != b) {
|
|
318
321
|
memcpy(&t, a, sizeof(t));
|
|
319
322
|
memcpy(a, b, sizeof(t));
|
|
@@ -340,7 +343,8 @@ int git_vector_insert_null(git_vector *v, size_t idx, size_t insert_len)
|
|
|
340
343
|
{
|
|
341
344
|
size_t new_length;
|
|
342
345
|
|
|
343
|
-
|
|
346
|
+
GIT_ASSERT_ARG(insert_len > 0);
|
|
347
|
+
GIT_ASSERT_ARG(idx <= v->length);
|
|
344
348
|
|
|
345
349
|
GIT_ERROR_CHECK_ALLOC_ADD(&new_length, v->length, insert_len);
|
|
346
350
|
|
|
@@ -359,13 +363,13 @@ int git_vector_remove_range(git_vector *v, size_t idx, size_t remove_len)
|
|
|
359
363
|
{
|
|
360
364
|
size_t new_length = v->length - remove_len;
|
|
361
365
|
size_t end_idx = 0;
|
|
362
|
-
|
|
363
|
-
|
|
366
|
+
|
|
367
|
+
GIT_ASSERT_ARG(remove_len > 0);
|
|
364
368
|
|
|
365
369
|
if (git__add_sizet_overflow(&end_idx, idx, remove_len))
|
|
366
|
-
|
|
370
|
+
GIT_ASSERT(0);
|
|
367
371
|
|
|
368
|
-
|
|
372
|
+
GIT_ASSERT(end_idx <= v->length);
|
|
369
373
|
|
|
370
374
|
if (end_idx < v->length)
|
|
371
375
|
memmove(&v->contents[idx], &v->contents[end_idx],
|
data/vendor/libgit2/src/vector.h
CHANGED
|
@@ -26,11 +26,13 @@ typedef struct git_vector {
|
|
|
26
26
|
|
|
27
27
|
#define GIT_VECTOR_INIT {0}
|
|
28
28
|
|
|
29
|
-
int git_vector_init(
|
|
29
|
+
GIT_WARN_UNUSED_RESULT int git_vector_init(
|
|
30
|
+
git_vector *v, size_t initial_size, git_vector_cmp cmp);
|
|
30
31
|
void git_vector_free(git_vector *v);
|
|
31
32
|
void git_vector_free_deep(git_vector *v); /* free each entry and self */
|
|
32
33
|
void git_vector_clear(git_vector *v);
|
|
33
|
-
int git_vector_dup(
|
|
34
|
+
GIT_WARN_UNUSED_RESULT int git_vector_dup(
|
|
35
|
+
git_vector *v, const git_vector *src, git_vector_cmp cmp);
|
|
34
36
|
void git_vector_swap(git_vector *a, git_vector *b);
|
|
35
37
|
int git_vector_size_hint(git_vector *v, size_t size_hint);
|
|
36
38
|
|
|
@@ -53,7 +53,9 @@ static wchar_t* win32_walkpath(wchar_t *path, wchar_t *buf, size_t buflen)
|
|
|
53
53
|
{
|
|
54
54
|
wchar_t term, *base = path;
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
GIT_ASSERT_ARG_WITH_RETVAL(path, NULL);
|
|
57
|
+
GIT_ASSERT_ARG_WITH_RETVAL(buf, NULL);
|
|
58
|
+
GIT_ASSERT_ARG_WITH_RETVAL(buflen, NULL);
|
|
57
59
|
|
|
58
60
|
term = (*path == L'"') ? *path++ : L';';
|
|
59
61
|
|
|
@@ -109,7 +111,7 @@ static int win32_find_git_in_registry(
|
|
|
109
111
|
HKEY hKey;
|
|
110
112
|
int error = GIT_ENOTFOUND;
|
|
111
113
|
|
|
112
|
-
|
|
114
|
+
GIT_ASSERT_ARG(buf);
|
|
113
115
|
|
|
114
116
|
if (!RegOpenKeyExW(hive, key, 0, KEY_READ, &hKey)) {
|
|
115
117
|
DWORD dwType, cbData;
|
|
@@ -2,14 +2,29 @@
|
|
|
2
2
|
#include "../../include/git2/version.h"
|
|
3
3
|
|
|
4
4
|
#ifndef LIBGIT2_FILENAME
|
|
5
|
-
#
|
|
5
|
+
# ifdef __GNUC__
|
|
6
|
+
# define LIBGIT2_FILENAME git2
|
|
7
|
+
# else
|
|
8
|
+
# define LIBGIT2_FILENAME "git2"
|
|
9
|
+
# endif
|
|
6
10
|
#endif
|
|
7
11
|
|
|
8
12
|
#ifndef LIBGIT2_COMMENTS
|
|
9
13
|
# define LIBGIT2_COMMENTS "For more information visit http://libgit2.github.com/"
|
|
10
14
|
#endif
|
|
11
15
|
|
|
16
|
+
#ifdef __GNUC__
|
|
17
|
+
# define _STR(x) #x
|
|
18
|
+
# define STR(x) _STR(x)
|
|
19
|
+
#else
|
|
20
|
+
# define STR(x) x
|
|
21
|
+
#endif
|
|
22
|
+
|
|
23
|
+
#ifdef __GNUC__
|
|
24
|
+
VS_VERSION_INFO VERSIONINFO
|
|
25
|
+
#else
|
|
12
26
|
VS_VERSION_INFO VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
|
|
27
|
+
#endif
|
|
13
28
|
FILEVERSION LIBGIT2_VER_MAJOR,LIBGIT2_VER_MINOR,LIBGIT2_VER_REVISION,LIBGIT2_VER_PATCH
|
|
14
29
|
PRODUCTVERSION LIBGIT2_VER_MAJOR,LIBGIT2_VER_MINOR,LIBGIT2_VER_REVISION,LIBGIT2_VER_PATCH
|
|
15
30
|
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
|
|
@@ -29,9 +44,9 @@ BEGIN
|
|
|
29
44
|
BEGIN
|
|
30
45
|
VALUE "FileDescription", "libgit2 - the Git linkable library\0"
|
|
31
46
|
VALUE "FileVersion", LIBGIT2_VERSION "\0"
|
|
32
|
-
VALUE "InternalName", LIBGIT2_FILENAME ".dll\0"
|
|
47
|
+
VALUE "InternalName", STR(LIBGIT2_FILENAME) ".dll\0"
|
|
33
48
|
VALUE "LegalCopyright", "Copyright (C) the libgit2 contributors. All rights reserved.\0"
|
|
34
|
-
VALUE "OriginalFilename", LIBGIT2_FILENAME ".dll\0"
|
|
49
|
+
VALUE "OriginalFilename", STR(LIBGIT2_FILENAME) ".dll\0"
|
|
35
50
|
VALUE "ProductName", "libgit2\0"
|
|
36
51
|
VALUE "ProductVersion", LIBGIT2_VERSION "\0"
|
|
37
52
|
VALUE "Comments", LIBGIT2_COMMENTS "\0"
|
|
@@ -23,6 +23,14 @@ typedef SSIZE_T ssize_t;
|
|
|
23
23
|
|
|
24
24
|
#endif
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
/*
|
|
27
|
+
* Offer GIT_LIBGIT2_CALL for our calling conventions (__cdecl, always).
|
|
28
|
+
* This is useful for providing callbacks to userspace code.
|
|
29
|
+
*
|
|
30
|
+
* Offer GIT_SYSTEM_CALL for the system calling conventions (__stdcall on
|
|
31
|
+
* Win32). Useful for providing callbacks to system libraries.
|
|
32
|
+
*/
|
|
33
|
+
#define GIT_LIBGIT2_CALL __cdecl
|
|
34
|
+
#define GIT_SYSTEM_CALL NTAPI
|
|
27
35
|
|
|
28
36
|
#endif
|
|
@@ -151,7 +151,7 @@ int git_win32_path_canonicalize(git_win32_path path)
|
|
|
151
151
|
return (int)(to - path);
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
-
int
|
|
154
|
+
static int win32_path_cwd(wchar_t *out, size_t len)
|
|
155
155
|
{
|
|
156
156
|
int cwd_len;
|
|
157
157
|
|
|
@@ -170,7 +170,7 @@ int git_win32_path__cwd(wchar_t *out, size_t len)
|
|
|
170
170
|
* '\'s, but we we add a 'UNC' specifier to the path, plus
|
|
171
171
|
* a trailing directory separator, plus a NUL.
|
|
172
172
|
*/
|
|
173
|
-
if (cwd_len >
|
|
173
|
+
if (cwd_len > GIT_WIN_PATH_MAX - 4) {
|
|
174
174
|
errno = ENAMETOOLONG;
|
|
175
175
|
return -1;
|
|
176
176
|
}
|
|
@@ -187,7 +187,7 @@ int git_win32_path__cwd(wchar_t *out, size_t len)
|
|
|
187
187
|
* working directory. (One character for the directory separator,
|
|
188
188
|
* one for the null.
|
|
189
189
|
*/
|
|
190
|
-
else if (cwd_len >
|
|
190
|
+
else if (cwd_len > GIT_WIN_PATH_MAX - 2) {
|
|
191
191
|
errno = ENAMETOOLONG;
|
|
192
192
|
return -1;
|
|
193
193
|
}
|
|
@@ -205,13 +205,13 @@ int git_win32_path_from_utf8(git_win32_path out, const char *src)
|
|
|
205
205
|
|
|
206
206
|
/* See if this is an absolute path (beginning with a drive letter) */
|
|
207
207
|
if (git_path_is_absolute(src)) {
|
|
208
|
-
if (git__utf8_to_16(dest,
|
|
208
|
+
if (git__utf8_to_16(dest, GIT_WIN_PATH_MAX, src) < 0)
|
|
209
209
|
goto on_error;
|
|
210
210
|
}
|
|
211
211
|
/* File-prefixed NT-style paths beginning with \\?\ */
|
|
212
212
|
else if (path__is_nt_namespace(src)) {
|
|
213
213
|
/* Skip the NT prefix, the destination already contains it */
|
|
214
|
-
if (git__utf8_to_16(dest,
|
|
214
|
+
if (git__utf8_to_16(dest, GIT_WIN_PATH_MAX, src + PATH__NT_NAMESPACE_LEN) < 0)
|
|
215
215
|
goto on_error;
|
|
216
216
|
}
|
|
217
217
|
/* UNC paths */
|
|
@@ -220,12 +220,12 @@ int git_win32_path_from_utf8(git_win32_path out, const char *src)
|
|
|
220
220
|
dest += 4;
|
|
221
221
|
|
|
222
222
|
/* Skip the leading "\\" */
|
|
223
|
-
if (git__utf8_to_16(dest,
|
|
223
|
+
if (git__utf8_to_16(dest, GIT_WIN_PATH_MAX - 2, src + 2) < 0)
|
|
224
224
|
goto on_error;
|
|
225
225
|
}
|
|
226
226
|
/* Absolute paths omitting the drive letter */
|
|
227
227
|
else if (path__startswith_slash(src)) {
|
|
228
|
-
if (path__cwd(dest,
|
|
228
|
+
if (path__cwd(dest, GIT_WIN_PATH_MAX) < 0)
|
|
229
229
|
goto on_error;
|
|
230
230
|
|
|
231
231
|
if (!git_path_is_absolute(dest)) {
|
|
@@ -234,19 +234,19 @@ int git_win32_path_from_utf8(git_win32_path out, const char *src)
|
|
|
234
234
|
}
|
|
235
235
|
|
|
236
236
|
/* Skip the drive letter specification ("C:") */
|
|
237
|
-
if (git__utf8_to_16(dest + 2,
|
|
237
|
+
if (git__utf8_to_16(dest + 2, GIT_WIN_PATH_MAX - 2, src) < 0)
|
|
238
238
|
goto on_error;
|
|
239
239
|
}
|
|
240
240
|
/* Relative paths */
|
|
241
241
|
else {
|
|
242
242
|
int cwd_len;
|
|
243
243
|
|
|
244
|
-
if ((cwd_len =
|
|
244
|
+
if ((cwd_len = win32_path_cwd(dest, GIT_WIN_PATH_MAX)) < 0)
|
|
245
245
|
goto on_error;
|
|
246
246
|
|
|
247
247
|
dest[cwd_len++] = L'\\';
|
|
248
248
|
|
|
249
|
-
if (git__utf8_to_16(dest + cwd_len,
|
|
249
|
+
if (git__utf8_to_16(dest + cwd_len, GIT_WIN_PATH_MAX - cwd_len, src) < 0)
|
|
250
250
|
goto on_error;
|
|
251
251
|
}
|
|
252
252
|
|
|
@@ -273,7 +273,7 @@ int git_win32_path_relative_from_utf8(git_win32_path out, const char *src)
|
|
|
273
273
|
return git_win32_path_from_utf8(out, src);
|
|
274
274
|
}
|
|
275
275
|
|
|
276
|
-
if ((len = git__utf8_to_16(dest,
|
|
276
|
+
if ((len = git__utf8_to_16(dest, GIT_WIN_PATH_MAX, src)) < 0)
|
|
277
277
|
return -1;
|
|
278
278
|
|
|
279
279
|
for (p = dest; p < (dest + len); p++) {
|
|
@@ -381,14 +381,14 @@ int git_win32_path_readlink_w(git_win32_path dest, const git_win32_path path)
|
|
|
381
381
|
|
|
382
382
|
switch (reparse_buf->ReparseTag) {
|
|
383
383
|
case IO_REPARSE_TAG_SYMLINK:
|
|
384
|
-
target = reparse_buf->
|
|
385
|
-
(reparse_buf->
|
|
386
|
-
target_len = reparse_buf->
|
|
384
|
+
target = reparse_buf->ReparseBuffer.SymbolicLink.PathBuffer +
|
|
385
|
+
(reparse_buf->ReparseBuffer.SymbolicLink.SubstituteNameOffset / sizeof(WCHAR));
|
|
386
|
+
target_len = reparse_buf->ReparseBuffer.SymbolicLink.SubstituteNameLength / sizeof(WCHAR);
|
|
387
387
|
break;
|
|
388
388
|
case IO_REPARSE_TAG_MOUNT_POINT:
|
|
389
|
-
target = reparse_buf->
|
|
390
|
-
(reparse_buf->
|
|
391
|
-
target_len = reparse_buf->
|
|
389
|
+
target = reparse_buf->ReparseBuffer.MountPoint.PathBuffer +
|
|
390
|
+
(reparse_buf->ReparseBuffer.MountPoint.SubstituteNameOffset / sizeof(WCHAR));
|
|
391
|
+
target_len = reparse_buf->ReparseBuffer.MountPoint.SubstituteNameLength / sizeof(WCHAR);
|
|
392
392
|
break;
|
|
393
393
|
default:
|
|
394
394
|
errno = EINVAL;
|
|
@@ -492,14 +492,12 @@ size_t git_win32_path_remove_namespace(wchar_t *str, size_t len)
|
|
|
492
492
|
prefix_len = CONST_STRLEN(unc_prefix);
|
|
493
493
|
}
|
|
494
494
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
assert(len >= remainder_len + prefix_len);
|
|
502
|
-
|
|
495
|
+
/*
|
|
496
|
+
* Sanity check that the new string isn't longer than the old one.
|
|
497
|
+
* (This could only happen due to programmer error introducing a
|
|
498
|
+
* prefix longer than the namespace it replaces.)
|
|
499
|
+
*/
|
|
500
|
+
if (remainder && len >= remainder_len + prefix_len) {
|
|
503
501
|
if (prefix)
|
|
504
502
|
memmove(str, prefix, prefix_len * sizeof(wchar_t));
|
|
505
503
|
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
#include "utf-conv.h"
|
|
15
15
|
#include "repository.h"
|
|
16
16
|
#include "reparse.h"
|
|
17
|
-
#include "global.h"
|
|
18
17
|
#include "buffer.h"
|
|
19
18
|
#include <errno.h>
|
|
20
19
|
#include <io.h>
|
|
@@ -544,6 +543,13 @@ int p_open(const char *path, int flags, ...)
|
|
|
544
543
|
mode_t mode = 0;
|
|
545
544
|
struct open_opts opts = {0};
|
|
546
545
|
|
|
546
|
+
#ifdef GIT_DEBUG_STRICT_OPEN
|
|
547
|
+
if (strstr(path, "//") != NULL) {
|
|
548
|
+
errno = EACCES;
|
|
549
|
+
return -1;
|
|
550
|
+
}
|
|
551
|
+
#endif
|
|
552
|
+
|
|
547
553
|
if (git_win32_path_from_utf8(wpath, path) < 0)
|
|
548
554
|
return -1;
|
|
549
555
|
|
|
@@ -982,3 +988,73 @@ int p_inet_pton(int af, const char *src, void *dst)
|
|
|
982
988
|
errno = EINVAL;
|
|
983
989
|
return -1;
|
|
984
990
|
}
|
|
991
|
+
|
|
992
|
+
ssize_t p_pread(int fd, void *data, size_t size, off64_t offset)
|
|
993
|
+
{
|
|
994
|
+
HANDLE fh;
|
|
995
|
+
DWORD rsize = 0;
|
|
996
|
+
OVERLAPPED ov = {0};
|
|
997
|
+
LARGE_INTEGER pos = {0};
|
|
998
|
+
off64_t final_offset = 0;
|
|
999
|
+
|
|
1000
|
+
/* Fail if the final offset would have overflowed to match POSIX semantics. */
|
|
1001
|
+
if (!git__is_ssizet(size) || git__add_int64_overflow(&final_offset, offset, (int64_t)size)) {
|
|
1002
|
+
errno = EINVAL;
|
|
1003
|
+
return -1;
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
/*
|
|
1007
|
+
* Truncate large writes to the maximum allowable size: the caller
|
|
1008
|
+
* needs to always call this in a loop anyways.
|
|
1009
|
+
*/
|
|
1010
|
+
if (size > INT32_MAX) {
|
|
1011
|
+
size = INT32_MAX;
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
pos.QuadPart = offset;
|
|
1015
|
+
ov.Offset = pos.LowPart;
|
|
1016
|
+
ov.OffsetHigh = pos.HighPart;
|
|
1017
|
+
fh = (HANDLE)_get_osfhandle(fd);
|
|
1018
|
+
|
|
1019
|
+
if (ReadFile(fh, data, (DWORD)size, &rsize, &ov)) {
|
|
1020
|
+
return (ssize_t)rsize;
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
set_errno();
|
|
1024
|
+
return -1;
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
ssize_t p_pwrite(int fd, const void *data, size_t size, off64_t offset)
|
|
1028
|
+
{
|
|
1029
|
+
HANDLE fh;
|
|
1030
|
+
DWORD wsize = 0;
|
|
1031
|
+
OVERLAPPED ov = {0};
|
|
1032
|
+
LARGE_INTEGER pos = {0};
|
|
1033
|
+
off64_t final_offset = 0;
|
|
1034
|
+
|
|
1035
|
+
/* Fail if the final offset would have overflowed to match POSIX semantics. */
|
|
1036
|
+
if (!git__is_ssizet(size) || git__add_int64_overflow(&final_offset, offset, (int64_t)size)) {
|
|
1037
|
+
errno = EINVAL;
|
|
1038
|
+
return -1;
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
/*
|
|
1042
|
+
* Truncate large writes to the maximum allowable size: the caller
|
|
1043
|
+
* needs to always call this in a loop anyways.
|
|
1044
|
+
*/
|
|
1045
|
+
if (size > INT32_MAX) {
|
|
1046
|
+
size = INT32_MAX;
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
pos.QuadPart = offset;
|
|
1050
|
+
ov.Offset = pos.LowPart;
|
|
1051
|
+
ov.OffsetHigh = pos.HighPart;
|
|
1052
|
+
fh = (HANDLE)_get_osfhandle(fd);
|
|
1053
|
+
|
|
1054
|
+
if (WriteFile(fh, data, (DWORD)size, &wsize, &ov)) {
|
|
1055
|
+
return (ssize_t)wsize;
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
set_errno();
|
|
1059
|
+
return -1;
|
|
1060
|
+
}
|