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;
if (logical_status == HEADER_SUCCESS
|| logical_status == HEADER_SUCCESS_EXTENDED)
{
- write_archive_to_stdout = 0;
+ write_archive_to_stdout = false;
/* Save away blocks before this one in this record. */
flush_archive ();
status = read_header (false);
- if (extended_header.size)
- xheader_decode (¤t_stat_info);
+ xheader_decode (¤t_stat_info);
if (status == HEADER_ZERO_BLOCK && ignore_zeros_option)
{
/* 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)
if (! acting_as_filter && ! _isrmt (archive))
{
-#if MSDOS
- int status = write (archive, "", 0);
-#else
- off_t pos = lseek (archive, (off_t) 0, SEEK_CUR);
- int status = pos < 0 ? -1 : ftruncate (archive, pos);
-#endif
- if (status != 0)
+ if (sys_truncate (archive))
truncate_warn (archive_name_array[0]);
}