diff options
author | nulltoken <emeric.fermas@gmail.com> | 2012-12-26 12:03:07 +0100 |
---|---|---|
committer | nulltoken <emeric.fermas@gmail.com> | 2012-12-26 23:07:25 +0100 |
commit | 50a762a563fe8116e2707ce1fcb75391d41dca23 (patch) | |
tree | e892158408191911921778bda4938f1989b97a4a | |
parent | 34b6f05f3984cad3ec05c6018828472356c45e28 (diff) | |
download | libgit2-50a762a563fe8116e2707ce1fcb75391d41dca23.tar.gz |
path: Teach UNC paths to git_path_dirname_r()
Fix libgit2/libgit2sharp#256
-rw-r--r-- | src/path.c | 25 | ||||
-rw-r--r-- | tests-clar/core/path.c | 4 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/path.c b/src/path.c index 569101c40..dd6bb70ad 100644 --- a/src/path.c +++ b/src/path.c @@ -19,6 +19,22 @@ #define LOOKS_LIKE_DRIVE_PREFIX(S) (git__isalpha((S)[0]) && (S)[1] == ':') +static bool looks_like_network_computer_name(const char *path, int pos) +{ + if (pos < 3) + return false; + + if (path[0] != '/' || path[1] != '/') + return false; + + while (pos-- > 2) { + if (path[pos] == '/') + return false; + } + + return true; +} + /* * Based on the Android implementation, BSD licensed. * Check http://android.git.kernel.org/ @@ -111,6 +127,15 @@ int git_path_dirname_r(git_buf *buffer, const char *path) len = 3; goto Exit; } + + /* Similarly checks if we're dealing with a network computer name + '//computername/.git' will return '//computername/' */ + + if (looks_like_network_computer_name(path, len)) { + len++; + goto Exit; + } + #endif Exit: diff --git a/tests-clar/core/path.c b/tests-clar/core/path.c index e2f78ea50..894e81f3d 100644 --- a/tests-clar/core/path.c +++ b/tests-clar/core/path.c @@ -91,6 +91,10 @@ void test_core_path__00_dirname(void) #ifdef GIT_WIN32 check_dirname("C:/path/", "C:/"); check_dirname("C:/path", "C:/"); + check_dirname("//computername/path/", "//computername/"); + check_dirname("//computername/path", "//computername/"); + check_dirname("//computername/sub/path/", "//computername/sub"); + check_dirname("//computername/sub/path", "//computername/sub"); #endif } |