From cb2a372c9f7931d05d3f9d5caac82426f60a48b5 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Mon, 4 Jun 2001 16:54:39 +0000 Subject: [PATCH] Revert the patch from Konstantin Boldyshev to never 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 | 9 ++------- tar.c | 9 ++------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/archival/tar.c b/archival/tar.c index 9e1270cca..f31859e33 100644 --- a/archival/tar.c +++ b/archival/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); } diff --git a/tar.c b/tar.c index 9e1270cca..f31859e33 100644 --- 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); } -- 2.25.1