From: Sergey Poznyakoff Date: Sat, 13 May 2006 11:57:06 +0000 (+0000) Subject: (read_header0): Use read_header_primitive to avoid clubbering current_tar_info. All... X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=d2b3114a3bcf75d18738b0ca4b5e33d0edc6c7bb;p=chaz%2Ftar (read_header0): Use read_header_primitive to avoid clubbering current_tar_info. All callers updated. --- diff --git a/src/buffer.c b/src/buffer.c index 06b6901..d788b16 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1057,10 +1057,12 @@ new_volume (enum access_mode mode) } 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); @@ -1075,7 +1077,8 @@ try_new_volume () { size_t status; union block *header; - + struct tar_stat_info dummy; + switch (subcommand_option) { case APPEND_SUBCOMMAND: @@ -1101,14 +1104,13 @@ try_new_volume () 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) @@ -1122,8 +1124,9 @@ try_new_volume () } 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 (); @@ -1132,8 +1135,9 @@ try_new_volume () /* 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);