From 8ae6a4344d5d0f46e542d835ce4d218ff902c783 Mon Sep 17 00:00:00 2001 From: Harald van Dijk Date: Sun, 27 Jun 2021 15:11:57 +0100 Subject: 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 Signed-off-by: Denys Vlasenko --- archival/tar.c | 10 +++++----- 1 file 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, if (header_name[0] == '\0') return TRUE; + if (exclude_file(tbInfo->excludeList, header_name)) + return SKIP; /* "do not recurse on this directory", no error message printed */ + /* It is against the rules to archive a socket */ if (S_ISSOCK(statbuf->st_mode)) { bb_error_msg("%s: socket ignored", fileName); @@ -540,9 +543,6 @@ static int FAST_FUNC writeFileToTarball(struct recursive_state *state, return TRUE; } - if (exclude_file(tbInfo->excludeList, header_name)) - return SKIP; - # if !ENABLE_FEATURE_TAR_GNU_EXTENSIONS if (strlen(header_name) >= NAME_SIZE) { 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, /* open the file we want to archive, and make sure all is well */ inputFileFd = open_or_warn(fileName, O_RDONLY); if (inputFileFd < 0) { - return FALSE; + return FALSE; /* make recursive_action() return FALSE */ } } /* Add an entry to the tarball */ if (writeTarHeader(tbInfo, header_name, fileName, statbuf) == FALSE) { - return FALSE; + return FALSE; /* make recursive_action() return FALSE */ } /* If it was a regular file, write out the body */ -- cgit v1.2.3