svn commit: trunk/busybox/archival

vda at busybox.net vda at busybox.net
Mon Sep 24 19:07:57 UTC 2007


Author: vda
Date: 2007-09-24 12:07:57 -0700 (Mon, 24 Sep 2007)
New Revision: 19994

Log:
tar: strip leading '/' BEFORE memorizing hardlink's name

function                                             old     new   delta
writeFileToTarball                                  1362    1352     -10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-10)             Total: -10 bytes



Modified:
   trunk/busybox/archival/tar.c


Changeset:
Modified: trunk/busybox/archival/tar.c
===================================================================
--- trunk/busybox/archival/tar.c	2007-09-24 18:30:02 UTC (rev 19993)
+++ trunk/busybox/archival/tar.c	2007-09-24 19:07:57 UTC (rev 19994)
@@ -386,6 +386,20 @@
 	const char *header_name;
 	int inputFileFd = -1;
 
+	header_name = fileName;
+	while (header_name[0] == '/') {
+		static smallint warned;
+
+		if (!warned) {
+			bb_error_msg("removing leading '/' from member names");
+			warned = 1;
+		}
+		header_name++;
+	}
+
+	if (header_name[0] == '\0')
+		return TRUE;
+
 	/*
 	 * Check to see if we are dealing with a hard link.
 	 * If so -
@@ -397,7 +411,7 @@
 	if (statbuf->st_nlink > 1) {
 		tbInfo->hlInfo = findHardLinkInfo(tbInfo->hlInfoHead, statbuf);
 		if (tbInfo->hlInfo == NULL)
-			addHardLinkInfo(&tbInfo->hlInfoHead, statbuf, fileName);
+			addHardLinkInfo(&tbInfo->hlInfoHead, statbuf, header_name);
 	}
 
 	/* It is against the rules to archive a socket */
@@ -409,36 +423,23 @@
 	/* It is a bad idea to store the archive we are in the process of creating,
 	 * so check the device and inode to be sure that this particular file isn't
 	 * the new tarball */
-	if (tbInfo->statBuf.st_dev == statbuf->st_dev &&
-		tbInfo->statBuf.st_ino == statbuf->st_ino) {
+	if (tbInfo->statBuf.st_dev == statbuf->st_dev
+	 && tbInfo->statBuf.st_ino == statbuf->st_ino
+	) {
 		bb_error_msg("%s: file is the archive; skipping", fileName);
 		return TRUE;
 	}
 
-	header_name = fileName;
-	while (header_name[0] == '/') {
-		static smallint warned;
+	if (exclude_file(tbInfo->excludeList, header_name))
+		return SKIP;
 
-		if (!warned) {
-			bb_error_msg("removing leading '/' from member names");
-			warned = 1;
-		}
-		header_name++;
-	}
-
 #if !ENABLE_FEATURE_TAR_GNU_EXTENSIONS
-	if (strlen(fileName) >= NAME_SIZE) {
+	if (strlen(header_name) >= NAME_SIZE) {
 		bb_error_msg("names longer than "NAME_SIZE_STR" chars not supported");
 		return TRUE;
 	}
 #endif
 
-	if (header_name[0] == '\0')
-		return TRUE;
-
-	if (exclude_file(tbInfo->excludeList, header_name))
-		return SKIP;
-
 	/* Is this a regular file? */
 	if (tbInfo->hlInfo == NULL && S_ISREG(statbuf->st_mode)) {
 		/* open the file we want to archive, and make sure all is well */




More information about the busybox-cvs mailing list