]> git.cworth.org Git - tar/commitdiff
Preserve hard links with --remove-files
authorCarl Worth <cworth@cworth.org>
Thu, 30 Jul 2009 03:45:58 +0000 (20:45 -0700)
committerCarl Worth <cworth@cworth.org>
Thu, 30 Jul 2009 11:42:12 +0000 (04:42 -0700)
When the --remove-files option is in effect, it is no longer
reliable to use a file's link count to determine if we should
use the hash table for hard links. Instead, we look into the
hash table for every file when under the influence of the
--remove-files option.

debian/changelog
src/create.c

index df3a1253994ef3ad511e9476f48abdbb3715d01f..747988e10926a6040a756dba9fa1f6445ac7d01c 100644 (file)
@@ -3,8 +3,9 @@ tar (1.22-1.2) UNRELEASED; urgency=low
   * Add Carl Worth as an uploader.
   * Fix to allow parallel build (-j2), closes #535319
   * Don't close file stream before EOF, closes #525818
+  * Preserve hard links with --remove-files, closes #188663
 
- -- Carl Worth <cworth@cworth.org>  Wed, 29 Jul 2009 16:18:18 -0700
+ -- Carl Worth <cworth@cworth.org>  Wed, 29 Jul 2009 21:28:45 -0700
 
 tar (1.22-1.1) unstable; urgency=low
 
index fde7ed171f9d40c64806ffee725c5f053ccafc15..559aaa08b9fc1e55046c1b01a7d403b9a4a59bb8 100644 (file)
@@ -1377,7 +1377,7 @@ static Hash_table *link_table;
 static bool
 dump_hard_link (struct tar_stat_info *st)
 {
-  if (link_table && st->stat.st_nlink > 1)
+  if (link_table && (st->stat.st_nlink > 1 || remove_files_option))
     {
       struct link lp;
       struct link *duplicate;
@@ -1424,7 +1424,7 @@ file_count_links (struct tar_stat_info *st)
 {
   if (hard_dereference_option)
     return;
-  if (st->stat.st_nlink > 1)
+  if (st->stat.st_nlink > 1 || remove_files_option)
     {
       struct link *duplicate;
       struct link *lp = xmalloc (offsetof (struct link, name)