quotearg_colon (current_stat_info.file_name)));
/* Fall through. */
default:
+ decode_header (current_header,
+ ¤t_stat_info, ¤t_format, 0);
skip_member ();
continue;
}
case HEADER_ZERO_BLOCK:
case HEADER_SUCCESS:
+ if (block_number_option)
+ {
+ char buf[UINTMAX_STRSIZE_BOUND];
+ off_t block_ordinal = current_block_ordinal ();
+ block_ordinal -= recent_long_name_blocks;
+ block_ordinal -= recent_long_link_blocks;
+ fprintf (stdlis, _("block %s: "),
+ STRINGIFY_BIGINT (block_ordinal, buf));
+ }
ERROR ((0, 0, _("Skipping to next header")));
break;
sparse_fixup_header (stat_info);
stat_info->is_sparse = true;
}
+ else
+ stat_info->is_sparse = false;
}
/* Convert buffer at WHERE0 of size DIGS from external format to
/* Print a similar line when we make a directory automatically. */
void
-print_for_mkdir (char *pathname, int length, mode_t mode)
+print_for_mkdir (char *dirname, int length, mode_t mode)
{
char modes[11];
}
fprintf (stdlis, "%s %*s %.*s\n", modes, ugswidth + DATEWIDTH,
- _("Creating directory:"), length, quotearg (pathname));
+ _("Creating directory:"), length, quotearg (dirname));
}
}
save_sizeleft = size;
}
+ if (seekable_archive)
+ {
+ off_t nblk = seek_archive (size);
+ if (nblk >= 0)
+ {
+ size -= nblk * BLOCKSIZE;
+ if (multi_volume_option) /* Argh.. */
+ save_sizeleft -= nblk * BLOCKSIZE;
+ }
+ else
+ seekable_archive = false;
+ }
+
while (size > 0)
{
x = find_next_block ();
}
}
-/* Skip the current member in the archive. */
+/* Skip the current member in the archive.
+ NOTE: Current header must be decoded before calling this function. */
void
skip_member (void)
{
char save_typeflag = current_header->header.typeflag;
set_next_block_after (current_header);
-
+
assign_string (&save_name, current_stat_info.file_name);
- if (sparse_member_p (¤t_stat_info))
+ if (current_stat_info.is_sparse)
sparse_skip_file (¤t_stat_info);
else if (save_typeflag != DIRTYPE)
skip_file (current_stat_info.stat.st_size);