Revert the patch from Konstantin Boldyshev <konst@linuxassembly.org> to never
authorEric Andersen <andersen@codepoet.org>
Mon, 4 Jun 2001 16:54:39 +0000 (16:54 -0000)
committerEric Andersen <andersen@codepoet.org>
Mon, 4 Jun 2001 16:54:39 +0000 (16:54 -0000)
change permissions on existing directories.  This behavior is contrary to SUSv2
and contrary to GNU tar.  Thanks to Matt Kraai for pointing this out.  I should
have been much more careful about accepting such a patch.
 -Erik

archival/tar.c
tar.c

index 9e1270cca10a27e888c3ee36ef5c12ebf859ad77..f31859e335caafc33441c9f9d5cd0d71fadcc250 100644 (file)
@@ -382,8 +382,6 @@ tarExtractRegularFile(TarInfo *header, int extractFlag, int tostdoutFlag)
 static int
 tarExtractDirectory(TarInfo *header, int extractFlag, int tostdoutFlag)
 {
-       int result;
-
        if (extractFlag==FALSE || tostdoutFlag==TRUE)
                return( TRUE);
 
@@ -394,15 +392,12 @@ tarExtractDirectory(TarInfo *header, int extractFlag, int tostdoutFlag)
        /* make the final component, just in case it was
         * omitted by create_path() (which will skip the
         * directory if it doesn't have a terminating '/') */
-       result = mkdir(header->name, header->mode);
-       /* Don't fix permissions on pre-existing directories */
-       if (result == 0) {
-               fixUpPermissions(header);
-       } else if (result < 0 && errno != EEXIST) {
+       if (mkdir(header->name, header->mode) < 0 && errno != EEXIST) {
                perror_msg("%s", header->name);
                return FALSE;
        }
 
+       fixUpPermissions(header);
        return( TRUE);
 }
 
diff --git a/tar.c b/tar.c
index 9e1270cca10a27e888c3ee36ef5c12ebf859ad77..f31859e335caafc33441c9f9d5cd0d71fadcc250 100644 (file)
--- a/tar.c
+++ b/tar.c
@@ -382,8 +382,6 @@ tarExtractRegularFile(TarInfo *header, int extractFlag, int tostdoutFlag)
 static int
 tarExtractDirectory(TarInfo *header, int extractFlag, int tostdoutFlag)
 {
-       int result;
-
        if (extractFlag==FALSE || tostdoutFlag==TRUE)
                return( TRUE);
 
@@ -394,15 +392,12 @@ tarExtractDirectory(TarInfo *header, int extractFlag, int tostdoutFlag)
        /* make the final component, just in case it was
         * omitted by create_path() (which will skip the
         * directory if it doesn't have a terminating '/') */
-       result = mkdir(header->name, header->mode);
-       /* Don't fix permissions on pre-existing directories */
-       if (result == 0) {
-               fixUpPermissions(header);
-       } else if (result < 0 && errno != EEXIST) {
+       if (mkdir(header->name, header->mode) < 0 && errno != EEXIST) {
                perror_msg("%s", header->name);
                return FALSE;
        }
 
+       fixUpPermissions(header);
        return( TRUE);
 }