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>
This commit is contained in:
		
				
					committed by
					
						 Denys Vlasenko
						Denys Vlasenko
					
				
			
			
				
	
			
			
			
						parent
						
							3d40dfabe1
						
					
				
				
					commit
					8ae6a4344d
				
			| @@ -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 */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user