rugged 1.3.2.3 → 1.4.2
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/ext/rugged/extconf.rb +1 -1
- data/ext/rugged/rugged_config.c +7 -2
- data/ext/rugged/rugged_remote.c +17 -0
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +103 -276
- data/vendor/libgit2/COPYING +36 -19
- data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
- data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
- data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
- data/vendor/libgit2/cmake/FindCoreFoundation.cmake +13 -13
- data/vendor/libgit2/cmake/FindGSSAPI.cmake +171 -287
- data/vendor/libgit2/cmake/FindGSSFramework.cmake +13 -13
- data/vendor/libgit2/cmake/{FindHTTP_Parser.cmake → FindHTTPParser.cmake} +17 -17
- data/vendor/libgit2/cmake/FindIconv.cmake +27 -27
- data/vendor/libgit2/cmake/FindLibSSH2.cmake +5 -5
- data/vendor/libgit2/cmake/FindPCRE.cmake +13 -13
- data/vendor/libgit2/cmake/FindPCRE2.cmake +12 -12
- data/vendor/libgit2/cmake/FindPkgLibraries.cmake +19 -19
- data/vendor/libgit2/cmake/FindSecurity.cmake +14 -14
- data/vendor/libgit2/cmake/FindStatNsec.cmake +12 -18
- data/vendor/libgit2/cmake/Findfutimens.cmake +8 -8
- data/vendor/libgit2/cmake/FindmbedTLS.cmake +63 -70
- data/vendor/libgit2/cmake/IdeSplitSources.cmake +18 -18
- data/vendor/libgit2/cmake/PkgBuildConfig.cmake +60 -60
- data/vendor/libgit2/cmake/SanitizeBool.cmake +20 -20
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +37 -37
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +19 -0
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +100 -100
- data/vendor/libgit2/cmake/SelectHashes.cmake +39 -49
- data/vendor/libgit2/cmake/SelectRegex.cmake +51 -0
- data/vendor/libgit2/cmake/SelectSSH.cmake +41 -0
- data/vendor/libgit2/cmake/SelectWinHTTP.cmake +17 -0
- data/vendor/libgit2/cmake/SelectZlib.cmake +34 -0
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +6 -6
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +31 -31
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +1 -1
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +2 -2
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +88 -88
- data/vendor/libgit2/deps/winhttp/CMakeLists.txt +14 -16
- data/vendor/libgit2/deps/zlib/adler32.c +0 -7
- data/vendor/libgit2/deps/zlib/crc32.c +288 -975
- data/vendor/libgit2/deps/zlib/crc32.h +436 -9441
- data/vendor/libgit2/deps/zlib/deflate.c +31 -83
- data/vendor/libgit2/deps/zlib/deflate.h +15 -12
- data/vendor/libgit2/deps/zlib/gzguts.h +2 -3
- data/vendor/libgit2/deps/zlib/infback.c +1 -2
- data/vendor/libgit2/deps/zlib/inffast.c +14 -14
- data/vendor/libgit2/deps/zlib/inflate.c +8 -39
- data/vendor/libgit2/deps/zlib/inflate.h +2 -3
- data/vendor/libgit2/deps/zlib/inftrees.c +3 -3
- data/vendor/libgit2/deps/zlib/trees.c +48 -27
- data/vendor/libgit2/deps/zlib/zlib.h +100 -126
- data/vendor/libgit2/deps/zlib/zutil.c +2 -2
- data/vendor/libgit2/deps/zlib/zutil.h +9 -12
- data/vendor/libgit2/include/git2/apply.h +16 -2
- data/vendor/libgit2/include/git2/attr.h +11 -2
- data/vendor/libgit2/include/git2/blame.h +4 -1
- data/vendor/libgit2/include/git2/blob.h +14 -1
- data/vendor/libgit2/include/git2/branch.h +2 -0
- data/vendor/libgit2/include/git2/buffer.h +18 -78
- data/vendor/libgit2/include/git2/cert.h +2 -2
- data/vendor/libgit2/include/git2/checkout.h +5 -2
- data/vendor/libgit2/include/git2/clone.h +3 -3
- data/vendor/libgit2/include/git2/commit.h +2 -0
- data/vendor/libgit2/include/git2/common.h +5 -12
- data/vendor/libgit2/include/git2/config.h +19 -3
- data/vendor/libgit2/include/git2/credential.h +2 -1
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +1 -1
- data/vendor/libgit2/include/git2/describe.h +7 -2
- data/vendor/libgit2/include/git2/diff.h +17 -9
- data/vendor/libgit2/include/git2/email.h +1 -1
- data/vendor/libgit2/include/git2/errors.h +1 -2
- data/vendor/libgit2/include/git2/filter.h +7 -2
- data/vendor/libgit2/include/git2/graph.h +1 -0
- data/vendor/libgit2/include/git2/ignore.h +1 -1
- data/vendor/libgit2/include/git2/index.h +11 -5
- data/vendor/libgit2/include/git2/indexer.h +19 -0
- data/vendor/libgit2/include/git2/merge.h +23 -3
- data/vendor/libgit2/include/git2/message.h +2 -0
- data/vendor/libgit2/include/git2/object.h +23 -0
- data/vendor/libgit2/include/git2/odb.h +37 -7
- data/vendor/libgit2/include/git2/odb_backend.h +1 -1
- data/vendor/libgit2/include/git2/pack.h +24 -8
- data/vendor/libgit2/include/git2/patch.h +8 -0
- data/vendor/libgit2/include/git2/pathspec.h +1 -1
- data/vendor/libgit2/include/git2/proxy.h +1 -1
- data/vendor/libgit2/include/git2/rebase.h +9 -1
- data/vendor/libgit2/include/git2/refdb.h +3 -0
- data/vendor/libgit2/include/git2/reflog.h +1 -1
- data/vendor/libgit2/include/git2/refs.h +2 -2
- data/vendor/libgit2/include/git2/remote.h +184 -37
- data/vendor/libgit2/include/git2/repository.h +14 -9
- data/vendor/libgit2/include/git2/reset.h +2 -2
- data/vendor/libgit2/include/git2/revparse.h +1 -1
- data/vendor/libgit2/include/git2/revwalk.h +4 -1
- data/vendor/libgit2/include/git2/signature.h +1 -1
- data/vendor/libgit2/include/git2/stash.h +3 -3
- data/vendor/libgit2/include/git2/status.h +9 -3
- data/vendor/libgit2/include/git2/submodule.h +7 -2
- data/vendor/libgit2/include/git2/sys/commit_graph.h +1 -1
- data/vendor/libgit2/include/git2/sys/odb_backend.h +2 -5
- data/vendor/libgit2/include/git2/sys/remote.h +31 -0
- data/vendor/libgit2/include/git2/sys/stream.h +1 -1
- data/vendor/libgit2/include/git2/sys/transport.h +25 -34
- data/vendor/libgit2/include/git2/tag.h +1 -0
- data/vendor/libgit2/include/git2/tree.h +4 -3
- data/vendor/libgit2/include/git2/types.h +7 -7
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +12 -2
- data/vendor/libgit2/src/CMakeLists.txt +189 -315
- data/vendor/libgit2/src/annotated_commit.h +1 -1
- data/vendor/libgit2/src/apply.c +18 -18
- data/vendor/libgit2/src/apply.h +2 -2
- data/vendor/libgit2/src/attr.c +18 -18
- data/vendor/libgit2/src/attr_file.c +17 -17
- data/vendor/libgit2/src/attr_file.h +4 -4
- data/vendor/libgit2/src/attrcache.c +17 -12
- data/vendor/libgit2/src/blame_git.c +1 -1
- data/vendor/libgit2/src/blob.c +33 -26
- data/vendor/libgit2/src/blob.h +1 -1
- data/vendor/libgit2/src/branch.c +150 -109
- data/vendor/libgit2/src/branch.h +15 -3
- data/vendor/libgit2/src/buf.c +126 -0
- data/vendor/libgit2/src/buf.h +50 -0
- data/vendor/libgit2/src/cc-compat.h +1 -1
- data/vendor/libgit2/src/checkout.c +74 -68
- data/vendor/libgit2/src/cherrypick.c +10 -10
- data/vendor/libgit2/src/clone.c +66 -66
- data/vendor/libgit2/src/commit.c +128 -58
- data/vendor/libgit2/src/commit.h +24 -1
- data/vendor/libgit2/src/commit_graph.c +68 -53
- data/vendor/libgit2/src/commit_graph.h +10 -3
- data/vendor/libgit2/src/commit_list.c +2 -3
- data/vendor/libgit2/src/common.h +10 -3
- data/vendor/libgit2/src/config.c +99 -77
- data/vendor/libgit2/src/config.h +15 -2
- data/vendor/libgit2/src/config_file.c +103 -91
- data/vendor/libgit2/src/config_mem.c +9 -9
- data/vendor/libgit2/src/config_parse.c +27 -23
- data/vendor/libgit2/src/crlf.c +24 -21
- data/vendor/libgit2/src/date.c +10 -17
- data/vendor/libgit2/src/date.h +33 -0
- data/vendor/libgit2/src/describe.c +27 -19
- data/vendor/libgit2/src/diff.c +25 -8
- data/vendor/libgit2/src/diff.h +2 -4
- data/vendor/libgit2/src/diff_driver.c +34 -36
- data/vendor/libgit2/src/diff_driver.h +3 -3
- data/vendor/libgit2/src/diff_file.c +29 -20
- data/vendor/libgit2/src/diff_generate.c +30 -6
- data/vendor/libgit2/src/diff_generate.h +5 -3
- data/vendor/libgit2/src/diff_print.c +102 -95
- data/vendor/libgit2/src/diff_stats.c +40 -29
- data/vendor/libgit2/src/{message.h → diff_stats.h} +7 -6
- data/vendor/libgit2/src/diff_tform.c +9 -8
- data/vendor/libgit2/src/diff_xdiff.c +3 -8
- data/vendor/libgit2/src/email.c +54 -38
- data/vendor/libgit2/src/email.h +1 -1
- data/vendor/libgit2/src/errors.c +18 -18
- data/vendor/libgit2/src/features.h.in +6 -1
- data/vendor/libgit2/src/fetch.c +69 -24
- data/vendor/libgit2/src/fetch.h +1 -1
- data/vendor/libgit2/src/fetchhead.c +19 -19
- data/vendor/libgit2/src/filebuf.c +28 -28
- data/vendor/libgit2/src/filebuf.h +1 -1
- data/vendor/libgit2/src/filter.c +96 -52
- data/vendor/libgit2/src/filter.h +26 -5
- data/vendor/libgit2/src/fs_path.c +1912 -0
- data/vendor/libgit2/src/fs_path.h +752 -0
- data/vendor/libgit2/src/futils.c +91 -85
- data/vendor/libgit2/src/futils.h +26 -14
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +2 -2
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +2 -2
- data/vendor/libgit2/src/hash/sha1/generic.c +2 -2
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +2 -2
- data/vendor/libgit2/src/hash/sha1/openssl.c +2 -2
- data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +1 -1
- data/vendor/libgit2/src/hash/sha1/win32.c +6 -6
- data/vendor/libgit2/src/hash/sha1.h +3 -1
- data/vendor/libgit2/src/hash.c +67 -35
- data/vendor/libgit2/src/hash.h +12 -12
- data/vendor/libgit2/src/ident.c +18 -18
- data/vendor/libgit2/src/ignore.c +35 -34
- data/vendor/libgit2/src/ignore.h +2 -2
- data/vendor/libgit2/src/index.c +79 -80
- data/vendor/libgit2/src/index.h +6 -3
- data/vendor/libgit2/src/indexer.c +75 -57
- data/vendor/libgit2/src/iterator.c +64 -56
- data/vendor/libgit2/src/iterator.h +5 -5
- data/vendor/libgit2/src/khash.h +1 -1
- data/vendor/libgit2/src/libgit2.c +22 -19
- data/vendor/libgit2/src/mailmap.c +38 -36
- data/vendor/libgit2/src/merge.c +27 -27
- data/vendor/libgit2/src/merge.h +1 -14
- data/vendor/libgit2/src/merge_driver.c +2 -2
- data/vendor/libgit2/src/merge_file.c +13 -3
- data/vendor/libgit2/src/message.c +21 -10
- data/vendor/libgit2/src/midx.c +83 -66
- data/vendor/libgit2/src/midx.h +3 -3
- data/vendor/libgit2/src/mwindow.c +1 -1
- data/vendor/libgit2/src/net.c +278 -68
- data/vendor/libgit2/src/net.h +10 -3
- data/vendor/libgit2/src/netops.c +1 -1
- data/vendor/libgit2/src/netops.h +1 -1
- data/vendor/libgit2/src/notes.c +20 -29
- data/vendor/libgit2/src/object.c +49 -9
- data/vendor/libgit2/src/object.h +1 -1
- data/vendor/libgit2/src/odb.c +35 -32
- data/vendor/libgit2/src/odb.h +1 -1
- data/vendor/libgit2/src/odb_loose.c +68 -68
- data/vendor/libgit2/src/odb_mempack.c +18 -5
- data/vendor/libgit2/src/odb_pack.c +43 -43
- data/vendor/libgit2/src/oid.c +11 -4
- data/vendor/libgit2/src/oid.h +15 -0
- data/vendor/libgit2/src/pack-objects.c +41 -26
- data/vendor/libgit2/src/pack-objects.h +11 -6
- data/vendor/libgit2/src/pack.c +10 -10
- data/vendor/libgit2/src/patch.c +3 -3
- data/vendor/libgit2/src/patch.h +1 -0
- data/vendor/libgit2/src/patch_generate.c +27 -11
- data/vendor/libgit2/src/patch_generate.h +5 -5
- data/vendor/libgit2/src/patch_parse.c +24 -24
- data/vendor/libgit2/src/path.c +76 -1951
- data/vendor/libgit2/src/path.h +34 -741
- data/vendor/libgit2/src/pathspec.c +6 -6
- data/vendor/libgit2/src/pathspec.h +2 -2
- data/vendor/libgit2/src/posix.c +3 -3
- data/vendor/libgit2/src/posix.h +1 -0
- data/vendor/libgit2/src/pqueue.h +1 -1
- data/vendor/libgit2/src/proxy.c +4 -1
- data/vendor/libgit2/src/proxy.h +1 -1
- data/vendor/libgit2/src/push.c +30 -35
- data/vendor/libgit2/src/push.h +4 -16
- data/vendor/libgit2/src/rand.c +226 -0
- data/vendor/libgit2/src/rand.h +37 -0
- data/vendor/libgit2/src/reader.c +8 -8
- data/vendor/libgit2/src/reader.h +2 -2
- data/vendor/libgit2/src/rebase.c +89 -88
- data/vendor/libgit2/src/refdb_fs.c +447 -173
- data/vendor/libgit2/src/refs.c +32 -32
- data/vendor/libgit2/src/refs.h +2 -2
- data/vendor/libgit2/src/refspec.c +32 -37
- data/vendor/libgit2/src/refspec.h +5 -2
- data/vendor/libgit2/src/regexp.c +1 -1
- data/vendor/libgit2/src/remote.c +713 -419
- data/vendor/libgit2/src/remote.h +15 -10
- data/vendor/libgit2/src/repository.c +350 -467
- data/vendor/libgit2/src/repository.h +11 -10
- data/vendor/libgit2/src/reset.c +8 -5
- data/vendor/libgit2/src/revert.c +10 -10
- data/vendor/libgit2/src/revparse.c +48 -35
- data/vendor/libgit2/src/revwalk.c +7 -7
- data/vendor/libgit2/src/signature.c +12 -6
- data/vendor/libgit2/src/signature.h +1 -1
- data/vendor/libgit2/src/sortedcache.c +1 -1
- data/vendor/libgit2/src/sortedcache.h +1 -1
- data/vendor/libgit2/src/stash.c +36 -37
- data/vendor/libgit2/src/status.c +4 -1
- data/vendor/libgit2/src/{buffer.c → str.c} +157 -151
- data/vendor/libgit2/src/str.h +357 -0
- data/vendor/libgit2/src/streams/mbedtls.c +8 -6
- data/vendor/libgit2/src/streams/openssl_dynamic.h +3 -3
- data/vendor/libgit2/src/submodule.c +171 -159
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/sysdir.c +68 -52
- data/vendor/libgit2/src/sysdir.h +15 -10
- data/vendor/libgit2/src/tag.c +29 -27
- data/vendor/libgit2/src/thread.h +3 -3
- data/vendor/libgit2/src/threadstate.c +3 -3
- data/vendor/libgit2/src/threadstate.h +1 -1
- data/vendor/libgit2/src/trace.c +1 -14
- data/vendor/libgit2/src/trace.h +5 -22
- data/vendor/libgit2/src/trailer.c +1 -1
- data/vendor/libgit2/src/transaction.c +1 -1
- data/vendor/libgit2/src/transport.c +10 -10
- data/vendor/libgit2/src/transports/auth.c +7 -9
- data/vendor/libgit2/src/transports/auth.h +2 -3
- data/vendor/libgit2/src/transports/auth_negotiate.c +12 -13
- data/vendor/libgit2/src/transports/auth_ntlm.c +10 -10
- data/vendor/libgit2/src/transports/auth_ntlm.h +0 -1
- data/vendor/libgit2/src/transports/git.c +9 -11
- data/vendor/libgit2/src/transports/http.c +37 -17
- data/vendor/libgit2/src/transports/http.h +2 -3
- data/vendor/libgit2/src/transports/httpclient.c +65 -65
- data/vendor/libgit2/src/transports/local.c +124 -116
- data/vendor/libgit2/src/transports/smart.c +51 -139
- data/vendor/libgit2/src/transports/smart.h +25 -31
- data/vendor/libgit2/src/transports/smart_pkt.c +33 -33
- data/vendor/libgit2/src/transports/smart_protocol.c +57 -39
- data/vendor/libgit2/src/transports/ssh.c +47 -112
- data/vendor/libgit2/src/transports/winhttp.c +50 -56
- data/vendor/libgit2/src/tree-cache.c +5 -5
- data/vendor/libgit2/src/tree-cache.h +2 -2
- data/vendor/libgit2/src/tree.c +59 -48
- data/vendor/libgit2/src/tree.h +1 -1
- data/vendor/libgit2/src/unix/map.c +0 -2
- data/vendor/libgit2/src/unix/posix.h +1 -4
- data/vendor/libgit2/src/unix/realpath.c +0 -2
- data/vendor/libgit2/src/util.c +14 -14
- data/vendor/libgit2/src/util.h +2 -28
- data/vendor/libgit2/src/vector.h +1 -1
- data/vendor/libgit2/src/win32/findfile.c +172 -116
- data/vendor/libgit2/src/win32/findfile.h +7 -4
- data/vendor/libgit2/src/win32/path_w32.c +140 -9
- data/vendor/libgit2/src/win32/path_w32.h +2 -0
- data/vendor/libgit2/src/win32/posix.h +0 -1
- data/vendor/libgit2/src/win32/posix_w32.c +11 -27
- data/vendor/libgit2/src/win32/w32_buffer.c +2 -3
- data/vendor/libgit2/src/win32/w32_buffer.h +2 -3
- data/vendor/libgit2/src/win32/w32_leakcheck.c +1 -1
- data/vendor/libgit2/src/worktree.c +116 -94
- data/vendor/libgit2/src/worktree.h +1 -1
- data/vendor/libgit2/src/xdiff/git-xdiff.h +53 -0
- data/vendor/libgit2/src/xdiff/xdiff.h +15 -15
- data/vendor/libgit2/src/xdiff/xdiffi.c +134 -108
- data/vendor/libgit2/src/xdiff/xemit.c +23 -7
- data/vendor/libgit2/src/xdiff/xhistogram.c +87 -78
- data/vendor/libgit2/src/xdiff/xinclude.h +1 -12
- data/vendor/libgit2/src/xdiff/xmerge.c +104 -117
- data/vendor/libgit2/src/xdiff/xpatience.c +6 -17
- data/vendor/libgit2/src/xdiff/xprepare.c +15 -20
- data/vendor/libgit2/src/xdiff/xutils.c +18 -7
- data/vendor/libgit2/src/zstream.c +5 -5
- data/vendor/libgit2/src/zstream.h +4 -4
- metadata +25 -10
- data/vendor/libgit2/src/buffer.h +0 -374
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
#include "path_w32.h"
|
|
9
9
|
|
|
10
|
-
#include "
|
|
10
|
+
#include "fs_path.h"
|
|
11
11
|
#include "utf-conv.h"
|
|
12
12
|
#include "posix.h"
|
|
13
13
|
#include "reparse.h"
|
|
@@ -41,7 +41,7 @@ GIT_INLINE(int) path__cwd(wchar_t *path, int size)
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
/* The Win32 APIs may return "\\?\" once you've used it first.
|
|
44
|
-
* But it may not. What a gloriously
|
|
44
|
+
* But it may not. What a gloriously predictable API!
|
|
45
45
|
*/
|
|
46
46
|
if (wcsncmp(path, PATH__NT_NAMESPACE, PATH__NT_NAMESPACE_LEN))
|
|
47
47
|
return len;
|
|
@@ -57,7 +57,7 @@ static wchar_t *path__skip_server(wchar_t *path)
|
|
|
57
57
|
wchar_t *c;
|
|
58
58
|
|
|
59
59
|
for (c = path; *c; c++) {
|
|
60
|
-
if (
|
|
60
|
+
if (git_fs_path_is_dirsep(*c))
|
|
61
61
|
return c + 1;
|
|
62
62
|
}
|
|
63
63
|
|
|
@@ -71,9 +71,9 @@ static wchar_t *path__skip_prefix(wchar_t *path)
|
|
|
71
71
|
|
|
72
72
|
if (wcsncmp(path, L"UNC\\", 4) == 0)
|
|
73
73
|
path = path__skip_server(path + 4);
|
|
74
|
-
else if (
|
|
74
|
+
else if (git_fs_path_is_absolute(path))
|
|
75
75
|
path += PATH__ABSOLUTE_LEN;
|
|
76
|
-
} else if (
|
|
76
|
+
} else if (git_fs_path_is_absolute(path)) {
|
|
77
77
|
path += PATH__ABSOLUTE_LEN;
|
|
78
78
|
} else if (path__is_unc(path)) {
|
|
79
79
|
path = path__skip_server(path + 2);
|
|
@@ -151,6 +151,137 @@ int git_win32_path_canonicalize(git_win32_path path)
|
|
|
151
151
|
return (int)(to - path);
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
static int git_win32_path_join(
|
|
155
|
+
git_win32_path dest,
|
|
156
|
+
const wchar_t *one,
|
|
157
|
+
size_t one_len,
|
|
158
|
+
const wchar_t *two,
|
|
159
|
+
size_t two_len)
|
|
160
|
+
{
|
|
161
|
+
size_t backslash = 0;
|
|
162
|
+
|
|
163
|
+
if (one_len && two_len && one[one_len - 1] != L'\\')
|
|
164
|
+
backslash = 1;
|
|
165
|
+
|
|
166
|
+
if (one_len + two_len + backslash > MAX_PATH) {
|
|
167
|
+
git_error_set(GIT_ERROR_INVALID, "path too long");
|
|
168
|
+
return -1;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
memmove(dest, one, one_len * sizeof(wchar_t));
|
|
172
|
+
|
|
173
|
+
if (backslash)
|
|
174
|
+
dest[one_len] = L'\\';
|
|
175
|
+
|
|
176
|
+
memcpy(dest + one_len + backslash, two, two_len * sizeof(wchar_t));
|
|
177
|
+
dest[one_len + backslash + two_len] = L'\0';
|
|
178
|
+
|
|
179
|
+
return 0;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
struct win32_path_iter {
|
|
183
|
+
wchar_t *env;
|
|
184
|
+
const wchar_t *current_dir;
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
static int win32_path_iter_init(struct win32_path_iter *iter)
|
|
188
|
+
{
|
|
189
|
+
DWORD len = GetEnvironmentVariableW(L"PATH", NULL, 0);
|
|
190
|
+
|
|
191
|
+
if (!len && GetLastError() == ERROR_ENVVAR_NOT_FOUND) {
|
|
192
|
+
iter->env = NULL;
|
|
193
|
+
iter->current_dir = NULL;
|
|
194
|
+
return 0;
|
|
195
|
+
} else if (!len) {
|
|
196
|
+
git_error_set(GIT_ERROR_OS, "could not load PATH");
|
|
197
|
+
return -1;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
iter->env = git__malloc(len * sizeof(wchar_t));
|
|
201
|
+
GIT_ERROR_CHECK_ALLOC(iter->env);
|
|
202
|
+
|
|
203
|
+
len = GetEnvironmentVariableW(L"PATH", iter->env, len);
|
|
204
|
+
|
|
205
|
+
if (len == 0) {
|
|
206
|
+
git_error_set(GIT_ERROR_OS, "could not load PATH");
|
|
207
|
+
return -1;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
iter->current_dir = iter->env;
|
|
211
|
+
return 0;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
static int win32_path_iter_next(
|
|
215
|
+
const wchar_t **out,
|
|
216
|
+
size_t *out_len,
|
|
217
|
+
struct win32_path_iter *iter)
|
|
218
|
+
{
|
|
219
|
+
const wchar_t *start;
|
|
220
|
+
wchar_t term;
|
|
221
|
+
size_t len = 0;
|
|
222
|
+
|
|
223
|
+
if (!iter->current_dir || !*iter->current_dir)
|
|
224
|
+
return GIT_ITEROVER;
|
|
225
|
+
|
|
226
|
+
term = (*iter->current_dir == L'"') ? *iter->current_dir++ : L';';
|
|
227
|
+
start = iter->current_dir;
|
|
228
|
+
|
|
229
|
+
while (*iter->current_dir && *iter->current_dir != term) {
|
|
230
|
+
iter->current_dir++;
|
|
231
|
+
len++;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
*out = start;
|
|
235
|
+
*out_len = len;
|
|
236
|
+
|
|
237
|
+
if (term == L'"' && *iter->current_dir)
|
|
238
|
+
iter->current_dir++;
|
|
239
|
+
|
|
240
|
+
while (*iter->current_dir == L';')
|
|
241
|
+
iter->current_dir++;
|
|
242
|
+
|
|
243
|
+
return 0;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
static void win32_path_iter_dispose(struct win32_path_iter *iter)
|
|
247
|
+
{
|
|
248
|
+
if (!iter)
|
|
249
|
+
return;
|
|
250
|
+
|
|
251
|
+
git__free(iter->env);
|
|
252
|
+
iter->env = NULL;
|
|
253
|
+
iter->current_dir = NULL;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
int git_win32_path_find_executable(git_win32_path fullpath, wchar_t *exe)
|
|
257
|
+
{
|
|
258
|
+
struct win32_path_iter path_iter;
|
|
259
|
+
const wchar_t *dir;
|
|
260
|
+
size_t dir_len, exe_len = wcslen(exe);
|
|
261
|
+
bool found = false;
|
|
262
|
+
|
|
263
|
+
if (win32_path_iter_init(&path_iter) < 0)
|
|
264
|
+
return -1;
|
|
265
|
+
|
|
266
|
+
while (win32_path_iter_next(&dir, &dir_len, &path_iter) != GIT_ITEROVER) {
|
|
267
|
+
if (git_win32_path_join(fullpath, dir, dir_len, exe, exe_len) < 0)
|
|
268
|
+
continue;
|
|
269
|
+
|
|
270
|
+
if (_waccess(fullpath, 0) == 0) {
|
|
271
|
+
found = true;
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
win32_path_iter_dispose(&path_iter);
|
|
277
|
+
|
|
278
|
+
if (found)
|
|
279
|
+
return 0;
|
|
280
|
+
|
|
281
|
+
fullpath[0] = L'\0';
|
|
282
|
+
return GIT_ENOTFOUND;
|
|
283
|
+
}
|
|
284
|
+
|
|
154
285
|
static int win32_path_cwd(wchar_t *out, size_t len)
|
|
155
286
|
{
|
|
156
287
|
int cwd_len;
|
|
@@ -204,7 +335,7 @@ int git_win32_path_from_utf8(git_win32_path out, const char *src)
|
|
|
204
335
|
dest += PATH__NT_NAMESPACE_LEN;
|
|
205
336
|
|
|
206
337
|
/* See if this is an absolute path (beginning with a drive letter) */
|
|
207
|
-
if (
|
|
338
|
+
if (git_fs_path_is_absolute(src)) {
|
|
208
339
|
if (git__utf8_to_16(dest, GIT_WIN_PATH_MAX, src) < 0)
|
|
209
340
|
goto on_error;
|
|
210
341
|
}
|
|
@@ -228,7 +359,7 @@ int git_win32_path_from_utf8(git_win32_path out, const char *src)
|
|
|
228
359
|
if (path__cwd(dest, GIT_WIN_PATH_MAX) < 0)
|
|
229
360
|
goto on_error;
|
|
230
361
|
|
|
231
|
-
if (!
|
|
362
|
+
if (!git_fs_path_is_absolute(dest)) {
|
|
232
363
|
errno = ENOENT;
|
|
233
364
|
goto on_error;
|
|
234
365
|
}
|
|
@@ -266,7 +397,7 @@ int git_win32_path_relative_from_utf8(git_win32_path out, const char *src)
|
|
|
266
397
|
int len;
|
|
267
398
|
|
|
268
399
|
/* Handle absolute paths */
|
|
269
|
-
if (
|
|
400
|
+
if (git_fs_path_is_absolute(src) ||
|
|
270
401
|
path__is_nt_namespace(src) ||
|
|
271
402
|
path__is_unc(src) ||
|
|
272
403
|
path__startswith_slash(src)) {
|
|
@@ -305,7 +436,7 @@ int git_win32_path_to_utf8(git_win32_utf8_path dest, const wchar_t *src)
|
|
|
305
436
|
if ((len = git__utf16_to_8(out, GIT_WIN_PATH_UTF8, src)) < 0)
|
|
306
437
|
return len;
|
|
307
438
|
|
|
308
|
-
|
|
439
|
+
git_fs_path_mkposix(dest);
|
|
309
440
|
|
|
310
441
|
return len;
|
|
311
442
|
}
|
|
@@ -42,7 +42,6 @@ extern int p_inet_pton(int af, const char *src, void* dst);
|
|
|
42
42
|
|
|
43
43
|
extern int p_vsnprintf(char *buffer, size_t count, const char *format, va_list argptr);
|
|
44
44
|
extern int p_snprintf(char *buffer, size_t count, const char *format, ...) GIT_FORMAT_PRINTF(3, 4);
|
|
45
|
-
extern int p_mkstemp(char *tmp_path);
|
|
46
45
|
extern int p_chdir(const char *path);
|
|
47
46
|
extern int p_chmod(const char *path, mode_t mode);
|
|
48
47
|
extern int p_rmdir(const char *path);
|
|
@@ -9,12 +9,10 @@
|
|
|
9
9
|
|
|
10
10
|
#include "../posix.h"
|
|
11
11
|
#include "../futils.h"
|
|
12
|
-
#include "
|
|
12
|
+
#include "fs_path.h"
|
|
13
13
|
#include "path_w32.h"
|
|
14
14
|
#include "utf-conv.h"
|
|
15
|
-
#include "repository.h"
|
|
16
15
|
#include "reparse.h"
|
|
17
|
-
#include "buffer.h"
|
|
18
16
|
#include <errno.h>
|
|
19
17
|
#include <io.h>
|
|
20
18
|
#include <fcntl.h>
|
|
@@ -415,21 +413,21 @@ int p_readlink(const char *path, char *buf, size_t bufsiz)
|
|
|
415
413
|
|
|
416
414
|
static bool target_is_dir(const char *target, const char *path)
|
|
417
415
|
{
|
|
418
|
-
|
|
416
|
+
git_str resolved = GIT_STR_INIT;
|
|
419
417
|
git_win32_path resolved_w;
|
|
420
418
|
bool isdir = true;
|
|
421
419
|
|
|
422
|
-
if (
|
|
420
|
+
if (git_fs_path_is_absolute(target))
|
|
423
421
|
git_win32_path_from_utf8(resolved_w, target);
|
|
424
|
-
else if (
|
|
425
|
-
|
|
422
|
+
else if (git_fs_path_dirname_r(&resolved, path) < 0 ||
|
|
423
|
+
git_fs_path_apply_relative(&resolved, target) < 0 ||
|
|
426
424
|
git_win32_path_from_utf8(resolved_w, resolved.ptr) < 0)
|
|
427
425
|
goto out;
|
|
428
426
|
|
|
429
427
|
isdir = GetFileAttributesW(resolved_w) & FILE_ATTRIBUTE_DIRECTORY;
|
|
430
428
|
|
|
431
429
|
out:
|
|
432
|
-
|
|
430
|
+
git_str_dispose(&resolved);
|
|
433
431
|
return isdir;
|
|
434
432
|
}
|
|
435
433
|
|
|
@@ -443,7 +441,7 @@ int p_symlink(const char *target, const char *path)
|
|
|
443
441
|
* not want to use `git_win32_path_from_utf8` for converting the target,
|
|
444
442
|
* as that function will automatically pre-pend the current working
|
|
445
443
|
* directory in case the path is not absolute. As Git will instead use
|
|
446
|
-
* relative symlinks, this is not
|
|
444
|
+
* relative symlinks, this is not something we want.
|
|
447
445
|
*/
|
|
448
446
|
if (git_win32_path_from_utf8(path_w, path) < 0 ||
|
|
449
447
|
git_win32_path_relative_from_utf8(target_w, target) < 0)
|
|
@@ -662,7 +660,7 @@ int p_getcwd(char *buffer_out, size_t size)
|
|
|
662
660
|
return -1;
|
|
663
661
|
}
|
|
664
662
|
|
|
665
|
-
|
|
663
|
+
git_fs_path_mkposix(buffer_out);
|
|
666
664
|
return 0;
|
|
667
665
|
}
|
|
668
666
|
|
|
@@ -822,7 +820,7 @@ char *p_realpath(const char *orig_path, char *buffer)
|
|
|
822
820
|
if (git_win32_path_to_utf8(buffer, buffer_w) < 0)
|
|
823
821
|
return NULL;
|
|
824
822
|
|
|
825
|
-
|
|
823
|
+
git_fs_path_mkposix(buffer);
|
|
826
824
|
|
|
827
825
|
return buffer;
|
|
828
826
|
}
|
|
@@ -862,20 +860,6 @@ int p_snprintf(char *buffer, size_t count, const char *format, ...)
|
|
|
862
860
|
return r;
|
|
863
861
|
}
|
|
864
862
|
|
|
865
|
-
/* TODO: wut? */
|
|
866
|
-
int p_mkstemp(char *tmp_path)
|
|
867
|
-
{
|
|
868
|
-
#if defined(_MSC_VER) && _MSC_VER >= 1500
|
|
869
|
-
if (_mktemp_s(tmp_path, strlen(tmp_path) + 1) != 0)
|
|
870
|
-
return -1;
|
|
871
|
-
#else
|
|
872
|
-
if (_mktemp(tmp_path) == NULL)
|
|
873
|
-
return -1;
|
|
874
|
-
#endif
|
|
875
|
-
|
|
876
|
-
return p_open(tmp_path, O_RDWR | O_CREAT | O_EXCL, 0744); /* -V536 */
|
|
877
|
-
}
|
|
878
|
-
|
|
879
863
|
int p_access(const char *path, mode_t mode)
|
|
880
864
|
{
|
|
881
865
|
git_win32_path buf;
|
|
@@ -1003,7 +987,7 @@ ssize_t p_pread(int fd, void *data, size_t size, off64_t offset)
|
|
|
1003
987
|
/* Fail if the final offset would have overflowed to match POSIX semantics. */
|
|
1004
988
|
if (!git__is_ssizet(size) || git__add_int64_overflow(&final_offset, offset, (int64_t)size)) {
|
|
1005
989
|
errno = EINVAL;
|
|
1006
|
-
return -1;
|
|
990
|
+
return -1;
|
|
1007
991
|
}
|
|
1008
992
|
|
|
1009
993
|
/*
|
|
@@ -1038,7 +1022,7 @@ ssize_t p_pwrite(int fd, const void *data, size_t size, off64_t offset)
|
|
|
1038
1022
|
/* Fail if the final offset would have overflowed to match POSIX semantics. */
|
|
1039
1023
|
if (!git__is_ssizet(size) || git__add_int64_overflow(&final_offset, offset, (int64_t)size)) {
|
|
1040
1024
|
errno = EINVAL;
|
|
1041
|
-
return -1;
|
|
1025
|
+
return -1;
|
|
1042
1026
|
}
|
|
1043
1027
|
|
|
1044
1028
|
/*
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
|
|
8
8
|
#include "w32_buffer.h"
|
|
9
9
|
|
|
10
|
-
#include "../buffer.h"
|
|
11
10
|
#include "utf-conv.h"
|
|
12
11
|
|
|
13
12
|
GIT_INLINE(int) handle_wc_error(void)
|
|
@@ -20,7 +19,7 @@ GIT_INLINE(int) handle_wc_error(void)
|
|
|
20
19
|
return -1;
|
|
21
20
|
}
|
|
22
21
|
|
|
23
|
-
int
|
|
22
|
+
int git_str_put_w(git_str *buf, const wchar_t *string_w, size_t len_w)
|
|
24
23
|
{
|
|
25
24
|
int utf8_len, utf8_write_len;
|
|
26
25
|
size_t new_size;
|
|
@@ -43,7 +42,7 @@ int git_buf_put_w(git_buf *buf, const wchar_t *string_w, size_t len_w)
|
|
|
43
42
|
GIT_ERROR_CHECK_ALLOC_ADD(&new_size, buf->size, (size_t)utf8_len);
|
|
44
43
|
GIT_ERROR_CHECK_ALLOC_ADD(&new_size, new_size, 1);
|
|
45
44
|
|
|
46
|
-
if (
|
|
45
|
+
if (git_str_grow(buf, new_size) < 0)
|
|
47
46
|
return -1;
|
|
48
47
|
|
|
49
48
|
if ((utf8_write_len = WideCharToMultiByte(
|
|
@@ -8,13 +8,12 @@
|
|
|
8
8
|
#define INCLUDE_win32_w32_buffer_h__
|
|
9
9
|
|
|
10
10
|
#include "common.h"
|
|
11
|
-
|
|
12
|
-
#include "../buffer.h"
|
|
11
|
+
#include "str.h"
|
|
13
12
|
|
|
14
13
|
/**
|
|
15
14
|
* Convert a wide character string to UTF-8 and append the results to the
|
|
16
15
|
* buffer.
|
|
17
16
|
*/
|
|
18
|
-
int
|
|
17
|
+
int git_str_put_w(git_str *buf, const wchar_t *string_w, size_t len_w);
|
|
19
18
|
|
|
20
19
|
#endif
|