diff options
author | Harald van Dijk <harald@gigawatt.nl> | 2021-06-27 15:11:57 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-08-02 20:13:28 +0200 |
commit | 8ae6a4344d5d0f46e542d835ce4d218ff902c783 (patch) | |
tree | 3a4d01ef90ec30903a6cd329f5acb687a4088ace | |
parent | 3d40dfabe1049ecfbe05570b2287cfc5dbd33456 (diff) | |
download | busybox-w32-8ae6a4344d5d0f46e542d835ce4d218ff902c783.tar.gz busybox-w32-8ae6a4344d5d0f46e542d835ce4d218ff902c783.tar.bz2 busybox-w32-8ae6a4344d5d0f46e542d835ce4d218ff902c783.zip |
tar: exclude files before updating hardlink info list
When excluding one file, and including another file that is a hardlink
of the excluded file, it should be stored as an ordinary file.
function old new delta
writeFileToTarball 489 493 +4
Signed-off-by: Harald van Dijk <harald@gigawatt.nl>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | archival/tar.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/archival/tar.c b/archival/tar.c index 879f6bf6f..94fb61a29 100644 --- a/archival/tar.c +++ b/archival/tar.c | |||
@@ -507,6 +507,9 @@ static int FAST_FUNC writeFileToTarball(struct recursive_state *state, | |||
507 | if (header_name[0] == '\0') | 507 | if (header_name[0] == '\0') |
508 | return TRUE; | 508 | return TRUE; |
509 | 509 | ||
510 | if (exclude_file(tbInfo->excludeList, header_name)) | ||
511 | return SKIP; /* "do not recurse on this directory", no error message printed */ | ||
512 | |||
510 | /* It is against the rules to archive a socket */ | 513 | /* It is against the rules to archive a socket */ |
511 | if (S_ISSOCK(statbuf->st_mode)) { | 514 | if (S_ISSOCK(statbuf->st_mode)) { |
512 | bb_error_msg("%s: socket ignored", fileName); | 515 | bb_error_msg("%s: socket ignored", fileName); |
@@ -540,9 +543,6 @@ static int FAST_FUNC writeFileToTarball(struct recursive_state *state, | |||
540 | return TRUE; | 543 | return TRUE; |
541 | } | 544 | } |
542 | 545 | ||
543 | if (exclude_file(tbInfo->excludeList, header_name)) | ||
544 | return SKIP; | ||
545 | |||
546 | # if !ENABLE_FEATURE_TAR_GNU_EXTENSIONS | 546 | # if !ENABLE_FEATURE_TAR_GNU_EXTENSIONS |
547 | if (strlen(header_name) >= NAME_SIZE) { | 547 | if (strlen(header_name) >= NAME_SIZE) { |
548 | bb_simple_error_msg("names longer than "NAME_SIZE_STR" chars not supported"); | 548 | bb_simple_error_msg("names longer than "NAME_SIZE_STR" chars not supported"); |
@@ -555,13 +555,13 @@ static int FAST_FUNC writeFileToTarball(struct recursive_state *state, | |||
555 | /* open the file we want to archive, and make sure all is well */ | 555 | /* open the file we want to archive, and make sure all is well */ |
556 | inputFileFd = open_or_warn(fileName, O_RDONLY); | 556 | inputFileFd = open_or_warn(fileName, O_RDONLY); |
557 | if (inputFileFd < 0) { | 557 | if (inputFileFd < 0) { |
558 | return FALSE; | 558 | return FALSE; /* make recursive_action() return FALSE */ |
559 | } | 559 | } |
560 | } | 560 | } |
561 | 561 | ||
562 | /* Add an entry to the tarball */ | 562 | /* Add an entry to the tarball */ |
563 | if (writeTarHeader(tbInfo, header_name, fileName, statbuf) == FALSE) { | 563 | if (writeTarHeader(tbInfo, header_name, fileName, statbuf) == FALSE) { |
564 | return FALSE; | 564 | return FALSE; /* make recursive_action() return FALSE */ |
565 | } | 565 | } |
566 | 566 | ||
567 | /* If it was a regular file, write out the body */ | 567 | /* If it was a regular file, write out the body */ |