Ver Fonte

(delete_archive_members): Bugfix: when
attempting to delete an unexisting member, the last
blocking_factor blocks were zeroed.

Sergey Poznyakoff há 20 anos atrás
pai
commit
e6a67c2eb5
1 ficheiros alterados com 18 adições e 19 exclusões
  1. 18 19
      src/delete.c

+ 18 - 19
src/delete.c

@@ -359,33 +359,32 @@ delete_archive_members (void)
 		write_record (1);
 	    }
 	}
-    }
 
-  if (logical_status == HEADER_END_OF_FILE)
-    {
-      /* Write the end of tape.  FIXME: we can't use write_eot here,
-	 as it gets confused when the input is at end of file.  */
+      if (logical_status == HEADER_END_OF_FILE)
+	{
+	  /* Write the end of tape.  FIXME: we can't use write_eot here,
+	     as it gets confused when the input is at end of file.  */
 
-      int total_zero_blocks = 0;
+	  int total_zero_blocks = 0;
 
-      do
+	  do
+	    {
+	      int zero_blocks = blocking_factor - new_blocks;
+	      memset (new_record + new_blocks, 0, BLOCKSIZE * zero_blocks);
+	      total_zero_blocks += zero_blocks;
+	      write_record (total_zero_blocks < 2);
+	    }
+	  while (total_zero_blocks < 2);
+	}
+
+      if (! acting_as_filter && ! _isrmt (archive))
 	{
-	  int zero_blocks = blocking_factor - new_blocks;
-	  memset (new_record + new_blocks, 0, BLOCKSIZE * zero_blocks);
-	  total_zero_blocks += zero_blocks;
-	  write_record (total_zero_blocks < 2);
+	  if (sys_truncate (archive))
+	    truncate_warn (archive_name_array[0]);
 	}
-      while (total_zero_blocks < 2);
     }
-
   free (new_record);
 
-  if (! acting_as_filter && ! _isrmt (archive))
-    {
-      if (sys_truncate (archive))
-	truncate_warn (archive_name_array[0]);
-    }
-
   close_archive ();
   names_notfound ();
 }