]> git.proxmox.com Git - libgit2.git/commitdiff
`mkdir`: cope with root path on win32
authorEdward Thomson <ethomson@microsoft.com>
Thu, 17 Sep 2015 16:48:37 +0000 (12:48 -0400)
committerEdward Thomson <ethomson@microsoft.com>
Thu, 17 Sep 2015 16:48:37 +0000 (12:48 -0400)
src/fileops.c
src/path.h

index 739a98fc4042d754a1b8c18718cac62372406e94..57d2ce9c38efca61263af9bf03bc8e0718b4e517 100644 (file)
@@ -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;
                }
index c76e90343e283f0e304abb67d67e039f64aceb87..7e156fce8258929da9d02c311f2a4694a225400f 100644 (file)
@@ -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);