Commit 7b93079b by nulltoken

Make git_path_root() cope with windows network paths

Fix libgit2/libgit2sharp#125
parent e24fbba9
...@@ -171,6 +171,15 @@ int git_path_root(const char *path) ...@@ -171,6 +171,15 @@ int git_path_root(const char *path)
/* Does the root of the path look like a windows drive ? */ /* Does the root of the path look like a windows drive ? */
if (isalpha(path[0]) && (path[1] == ':')) if (isalpha(path[0]) && (path[1] == ':'))
offset += 2; 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 #endif
if (*(path + offset) == '/') if (*(path + offset) == '/')
......
...@@ -388,3 +388,18 @@ void test_core_path__11_walkup(void) ...@@ -388,3 +388,18 @@ void test_core_path__11_walkup(void)
git_buf_free(&p); 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
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment