]> Dogcows Code - chaz/tar/commitdiff
(delete_archive_members): Honor --occurence option.
authorSergey Poznyakoff <gray@gnu.org.ua>
Sat, 4 Oct 2003 13:49:46 +0000 (13:49 +0000)
committerSergey Poznyakoff <gray@gnu.org.ua>
Sat, 4 Oct 2003 13:49:46 +0000 (13:49 +0000)
src/delete.c

index 8b4c1b225c027860b538997edb0859f47c94fd4b..b79321ff319b08c3a2d306e4cda2ca3d8eb45189 100644 (file)
@@ -173,12 +173,18 @@ delete_archive_members (void)
          abort ();
 
        case HEADER_SUCCESS:
-         if (name = name_scan (current_stat_info.file_name), !name)
+         if ((name = name_scan (current_stat_info.file_name)) == NULL)
            {
              skip_member ();
              break;
            }
-         name->found = 1;
+         name->found_count++;
+         if (!ISFOUND(name))
+           {
+             skip_member ();
+             break;
+           }
+         
          /* Fall through.  */
        case HEADER_SUCCESS_EXTENDED:
          logical_status = status;
@@ -279,23 +285,26 @@ delete_archive_members (void)
 
          /* Found another header.  */
 
-         if (name = name_scan (current_stat_info.file_name), name)
+         if ((name = name_scan (current_stat_info.file_name)) != NULL)
            {
-             name->found = 1;
-           flush_file:
-             set_next_block_after (current_header);
-             blocks_to_skip = (current_stat_info.stat.st_size + BLOCKSIZE - 1) / BLOCKSIZE;
-
-             while (record_end - current_block <= blocks_to_skip)
+             name->found_count++;
+             if (ISFOUND(name))
                {
-                 blocks_to_skip -= (record_end - current_block);
-                 flush_archive ();
+               flush_file:
+                 set_next_block_after (current_header);
+                 blocks_to_skip = (current_stat_info.stat.st_size
+                                   + BLOCKSIZE - 1) / BLOCKSIZE;
+
+                 while (record_end - current_block <= blocks_to_skip)
+                   {
+                     blocks_to_skip -= (record_end - current_block);
+                     flush_archive ();
+                   }
+                 current_block += blocks_to_skip;
+                 blocks_to_skip = 0;
+                 continue;
                }
-             current_block += blocks_to_skip;
-             blocks_to_skip = 0;
-             continue;
            }
-
          /* Copy header.  */
 
          if (extended_header.size)
This page took 0.023736 seconds and 4 git commands to generate.