When the same file is added several times to the archive, count correctly the number of hard links. See also 37ddfb0b. * src/create.c (dump_hard_link): Don't decrease nlink if it is 0. * tests/link04.at: Test -cl options.
@@ -1472,8 +1472,8 @@ dump_hard_link (struct tar_stat_info *st)
/* We found a link. */
char const *link_name = safer_name_suffix (duplicate->name, true,
absolute_names_option);
-
- duplicate->nlink--;
+ if (duplicate->nlink)
+ duplicate->nlink--;
block_ordinal = current_block_ordinal ();
assign_string (&st->link_name, link_name);
@@ -39,6 +39,10 @@ tar tvf archive | sed '
s,.*[[0-9]] dir/,dir/,
' | sort
+echo --
+
+tar cfl archive dir dir
echo ==
tar chf archive dir
@@ -55,6 +59,7 @@ dir/file
dir/file link to dir/file
dir/symlink -> file
dir/symlink link to dir/symlink
+--
==
dir/
dir/FOO