}
static bool
-read_header0 ()
+read_header0 (struct tar_stat_info *info)
{
- enum read_header rc = read_header (false);
+ enum read_header rc;
+ tar_stat_init (info);
+ rc = read_header_primitive (false, info);
if (rc == HEADER_SUCCESS)
{
set_next_block_after (current_header);
{
size_t status;
union block *header;
-
+ struct tar_stat_info dummy;
+
switch (subcommand_option)
{
case APPEND_SUBCOMMAND:
header = find_next_block ();
if (!header)
return false;
+
switch (header->header.typeflag)
{
case XGLTYPE:
{
- struct tar_stat_info dummy;
- if (!read_header0 ())
+ if (!read_header0 (&dummy))
return false;
- tar_stat_init (&dummy);
xheader_decode (&dummy); /* decodes values from the global header */
tar_stat_destroy (&dummy);
if (!real_s_name)
}
case GNUTYPE_VOLHDR:
- if (!read_header0 ())
+ if (!read_header0 (&dummy))
return false;
+ tar_stat_destroy (&dummy);
assign_string (&volume_label, current_header->header.name);
set_next_block_after (header);
header = find_next_block ();
/* FALL THROUGH */
case GNUTYPE_MULTIVOL:
- if (!read_header0 ())
+ if (!read_header0 (&dummy))
return false;
+ tar_stat_destroy (&dummy);
assign_string (&continued_file_name, current_header->header.name);
continued_file_size =
UINTMAX_FROM_HEADER (current_header->header.size);