Przeglądaj źródła

(read_header0): Use read_header_primitive to avoid clubbering current_tar_info. All callers updated.

Sergey Poznyakoff 19 lat temu
rodzic
commit
d2b3114a3b
1 zmienionych plików z 12 dodań i 8 usunięć
  1. 12 8
      src/buffer.c

+ 12 - 8
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);