}
}
+static void
+write_recent_bytes (char *data, size_t bytes)
+{
+ size_t blocks = bytes / BLOCKSIZE;
+ size_t rest = bytes - blocks * BLOCKSIZE;
+
+ write_recent_blocks ((union block *)data, blocks);
+ memcpy (new_record[new_blocks].buffer, data + blocks * BLOCKSIZE, rest);
+ if (rest < BLOCKSIZE)
+ memset (new_record[new_blocks].buffer + rest, 0, BLOCKSIZE - rest);
+ new_blocks++;
+ if (new_blocks == blocking_factor)
+ write_record (1);
+}
+
void
delete_archive_members (void)
{
if (current_block == record_end)
flush_archive ();
status = read_header (false);
-
+
+ if (extended_header.size)
+ xheader_decode (¤t_stat_info);
+
if (status == HEADER_ZERO_BLOCK && ignore_zeros_option)
{
set_next_block_after (current_header);
/* Copy header. */
- write_recent_blocks (recent_long_name, recent_long_name_blocks);
- write_recent_blocks (recent_long_link, recent_long_link_blocks);
+ if (extended_header.size)
+ {
+ write_recent_bytes (extended_header.buffer,
+ extended_header.size);
+ }
+ else
+ {
+ write_recent_blocks (recent_long_name, recent_long_name_blocks);
+ write_recent_blocks (recent_long_link, recent_long_link_blocks);
+ }
new_record[new_blocks] = *current_header;
new_blocks++;
blocks_to_keep