aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2001-06-04 16:54:39 +0000
committerEric Andersen <andersen@codepoet.org>2001-06-04 16:54:39 +0000
commitcb2a372c9f7931d05d3f9d5caac82426f60a48b5 (patch)
tree17c684a4f3a042a980cf55b218ab017868a3d40a
parent67a464033345d0fcabfda06ed5d4532da6702ecf (diff)
downloadbusybox-cb2a372c9f7931d05d3f9d5caac82426f60a48b5.tar.gz
Revert the patch from Konstantin Boldyshev <konst@linuxassembly.org> 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
-rw-r--r--archival/tar.c9
-rw-r--r--tar.c9
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);
}