tree-diff: rework diff_tree() to generate diffs for multiparent cases as well
[gitweb.git] / sha1_file.c
index 8b0849f931c5a2f9eea47594b50560fe4526969c..6e8c05d10825ee93d8248f749d4bef513d772be4 100644 (file)
@@ -112,17 +112,21 @@ enum scld_error safe_create_leading_directories(char *path)
 
        while (ret == SCLD_OK && next_component) {
                struct stat st;
-               char *slash = strchr(next_component, '/');
+               char *slash = next_component, slash_character;
 
-               if (!slash)
+               while (*slash && !is_dir_sep(*slash))
+                       slash++;
+
+               if (!*slash)
                        break;
 
                next_component = slash + 1;
-               while (*next_component == '/')
+               while (is_dir_sep(*next_component))
                        next_component++;
                if (!*next_component)
                        break;
 
+               slash_character = *slash;
                *slash = '\0';
                if (!stat(path, &st)) {
                        /* path exists */
@@ -148,7 +152,7 @@ enum scld_error safe_create_leading_directories(char *path)
                } else if (adjust_shared_perm(path)) {
                        ret = SCLD_PERMS;
                }
-               *slash = '/';
+               *slash = slash_character;
        }
        return ret;
 }