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

diff --git a/archival/tar.c b/archival/tar.c
index 11f5eba..bbda52d 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -386,35 +386,6 @@
 	const char *header_name;
 	int inputFileFd = -1;
 
-	/*
-	 * Check to see if we are dealing with a hard link.
-	 * If so -
-	 * Treat the first occurance of a given dev/inode as a file while
-	 * treating any additional occurances as hard links.  This is done
-	 * by adding the file information to the HardLinkInfo linked list.
-	 */
-	tbInfo->hlInfo = NULL;
-	if (statbuf->st_nlink > 1) {
-		tbInfo->hlInfo = findHardLinkInfo(tbInfo->hlInfoHead, statbuf);
-		if (tbInfo->hlInfo == NULL)
-			addHardLinkInfo(&tbInfo->hlInfoHead, statbuf, fileName);
-	}
-
-	/* It is against the rules to archive a socket */
-	if (S_ISSOCK(statbuf->st_mode)) {
-		bb_error_msg("%s: socket ignored", fileName);
-		return TRUE;
-	}
-
-	/* 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) {
-		bb_error_msg("%s: file is the archive; skipping", fileName);
-		return TRUE;
-	}
-
 	header_name = fileName;
 	while (header_name[0] == '/') {
 		static smallint warned;
@@ -426,19 +397,49 @@
 		header_name++;
 	}
 
+	if (header_name[0] == '\0')
+		return TRUE;
+
+	/*
+	 * Check to see if we are dealing with a hard link.
+	 * If so -
+	 * Treat the first occurance of a given dev/inode as a file while
+	 * treating any additional occurances as hard links.  This is done
+	 * by adding the file information to the HardLinkInfo linked list.
+	 */
+	tbInfo->hlInfo = NULL;
+	if (statbuf->st_nlink > 1) {
+		tbInfo->hlInfo = findHardLinkInfo(tbInfo->hlInfoHead, statbuf);
+		if (tbInfo->hlInfo == NULL)
+			addHardLinkInfo(&tbInfo->hlInfoHead, statbuf, header_name);
+	}
+
+	/* It is against the rules to archive a socket */
+	if (S_ISSOCK(statbuf->st_mode)) {
+		bb_error_msg("%s: socket ignored", fileName);
+		return TRUE;
+	}
+
+	/* 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
+	) {
+		bb_error_msg("%s: file is the archive; skipping", fileName);
+		return TRUE;
+	}
+
+	if (exclude_file(tbInfo->excludeList, header_name))
+		return SKIP;
+
 #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 */