summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2003-10-04 13:49:46 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2003-10-04 13:49:46 +0000
commitf4935ab55d53a8c6d9581722bf6113164411192b (patch)
tree199216f2c77369a993d3c47e6f26c2e9c563be99 /src
parent660c6d9b648e6ac74d9526142de7e797f304de4c (diff)
downloadtar-f4935ab55d53a8c6d9581722bf6113164411192b.tar.gz
(delete_archive_members): Honor --occurence option.
Diffstat (limited to 'src')
-rw-r--r--src/delete.c39
1 files changed, 24 insertions, 15 deletions
diff --git a/src/delete.c b/src/delete.c
index 8b4c1b22..b79321ff 100644
--- a/src/delete.c
+++ b/src/delete.c
@@ -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)