diff options
author | Edward Thomson <ethomson@microsoft.com> | 2015-09-17 12:48:37 -0400 |
---|---|---|
committer | Edward Thomson <ethomson@microsoft.com> | 2015-09-17 12:48:37 -0400 |
commit | 9ce2e7b317277b1a27bbcef77fab4d053019b8d8 (patch) | |
tree | 2ddb3b7fdad0097d7345221fc9afb2c53807e132 | |
parent | e164ddb11df0d7cd8178c759e323d18a7a7ea526 (diff) | |
download | libgit2-9ce2e7b317277b1a27bbcef77fab4d053019b8d8.tar.gz |
`mkdir`: cope with root path on win32
-rw-r--r-- | src/fileops.c | 7 | ||||
-rw-r--r-- | src/path.h | 2 |
2 files changed, 5 insertions, 4 deletions
diff --git a/src/fileops.c b/src/fileops.c index 739a98fc4..57d2ce9c3 100644 --- a/src/fileops.c +++ b/src/fileops.c @@ -408,7 +408,7 @@ int git_futils_mkdir( struct git_futils_mkdir_options opts = { 0 }; struct stat st; size_t depth = 0; - int len = 0, error; + int len = 0, root_len, error; if ((error = git_buf_puts(&make_path, path)) < 0 || (error = mkdir_canonicalize(&make_path, flags)) < 0 || @@ -416,6 +416,8 @@ int git_futils_mkdir( make_path.size == 0) goto done; + root_len = git_path_root(make_path.ptr); + /* find the first parent directory that exists. this will be used * as the base to dirname_relative. */ @@ -442,8 +444,7 @@ int git_futils_mkdir( /* we've walked all the given path's parents and it's either relative * or rooted. either way, give up and make the entire path. */ - if (len == 1 && - (parent_path.ptr[0] == '.' || parent_path.ptr[0] == '/')) { + if ((len == 1 && parent_path.ptr[0] == '.') || len == root_len+1) { relative = make_path.ptr; break; } diff --git a/src/path.h b/src/path.h index c76e90343..7e156fce8 100644 --- a/src/path.h +++ b/src/path.h @@ -72,7 +72,7 @@ extern const char *git_path_topdir(const char *path); * This will return a number >= 0 which is the offset to the start of the * path, if the path is rooted (i.e. "/rooted/path" returns 0 and * "c:/windows/rooted/path" returns 2). If the path is not rooted, this - * returns < 0. + * returns -1. */ extern int git_path_root(const char *path); |