Code

safe_create_leading_directories(): make it about "leading" directories
authorJunio C Hamano <gitster@pobox.com>
Tue, 2 Sep 2008 21:10:15 +0000 (14:10 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 4 Sep 2008 05:35:32 +0000 (22:35 -0700)
We used to allow callers to pass "foo/bar/" to make sure both "foo" and
"foo/bar" exist and have good permissions, but this interface is too error
prone.  If a caller mistakenly passes a path with trailing slashes
(perhaps it forgot to verify the user input) even when it wants to later
mkdir "bar" itself, it will find that it cannot mkdir "bar".  If such a
caller does not bother to check the error for EEXIST, it may even
errorneously die().

Because we have no existing callers to use that obscure feature, this
patch removes it to avoid confusion.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
sha1_file.c

index 477d3fb4b06bcbcdd3f75a9e48d5945f91e1f3e6..f85c8cec35530203d1f54598e35d7a1b494827b0 100644 (file)
@@ -99,7 +99,11 @@ int safe_create_leading_directories(char *path)
                pos = strchr(pos, '/');
                if (!pos)
                        break;
-               *pos = 0;
+               while (*++pos == '/')
+                       ;
+               if (!*pos)
+                       break;
+               *--pos = '\0';
                if (!stat(path, &st)) {
                        /* path exists */
                        if (!S_ISDIR(st.st_mode)) {