From 7b93079b5b7c5f58de321bb9846e93b1717d3e4c Mon Sep 17 00:00:00 2001 From: nulltoken Date: Fri, 16 Mar 2012 15:16:52 +0100 Subject: Make git_path_root() cope with windows network paths Fix libgit2/libgit2sharp#125 --- src/path.c | 9 +++++++++ tests-clar/core/path.c | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/path.c b/src/path.c index 0f45d7130..45cc94e82 100644 --- a/src/path.c +++ b/src/path.c @@ -171,6 +171,15 @@ int git_path_root(const char *path) /* Does the root of the path look like a windows drive ? */ if (isalpha(path[0]) && (path[1] == ':')) offset += 2; + + /* Are we dealing with a network path? */ + else if (path[0] == '/' && path[1] == '/') { + offset += 2; + + /* Skip the computer name segment */ + while (*(path + offset) && *(path + offset) != '/') + offset++; + } #endif if (*(path + offset) == '/') diff --git a/tests-clar/core/path.c b/tests-clar/core/path.c index c07362f1d..c1e3ef29c 100644 --- a/tests-clar/core/path.c +++ b/tests-clar/core/path.c @@ -388,3 +388,18 @@ void test_core_path__11_walkup(void) git_buf_free(&p); } + +void test_core_path__12_offset_to_path_root(void) +{ + cl_assert(git_path_root("non/rooted/path") == -1); + cl_assert(git_path_root("/rooted/path") == 0); + +#ifdef GIT_WIN32 + /* Windows specific tests */ + cl_assert(git_path_root("C:non/rooted/path") == -1); + cl_assert(git_path_root("C:/rooted/path") == 2); + cl_assert(git_path_root("//computername/sharefolder/resource") == 14); + cl_assert(git_path_root("//computername/sharefolder") == 14); + cl_assert(git_path_root("//computername") == -1); +#endif +} -- cgit v1.2.1