Browse Source

Bugfixes.

* src/buffer.c (try_new_volume): Print more information with error
diagnostics.
(_gnu_flush_write): Improve error checking.  Adjust
real_s_sizeleft before calling new_volume to avoid creating
malformed multivolume headers.
* tests/delete05.at, tests/gzip.at, tests/ignfail.at,
tests/longv7.at, tests/lustar01.at, tests/lustar02.at,
tests/shortfile.at: Update to match new diagnostic wording
(see 2008-05-06).

* NEWS: Update.
Sergey Poznyakoff 16 years ago
parent
commit
985637ab5a
11 changed files with 48 additions and 9 deletions
  1. 14 0
      ChangeLog
  2. 4 0
      NEWS
  3. 5 0
      lib/.cvsignore
  4. 17 1
      src/buffer.c
  5. 1 1
      tests/delete05.at
  6. 1 1
      tests/gzip.at
  7. 2 2
      tests/ignfail.at
  8. 1 1
      tests/longv7.at
  9. 1 1
      tests/lustar01.at
  10. 1 1
      tests/lustar02.at
  11. 1 1
      tests/shortfile.at

+ 14 - 0
ChangeLog

@@ -1,3 +1,17 @@
+2008-06-26  Sergey Poznyakoff  <[email protected]>
+
+	* src/buffer.c (try_new_volume): Print more information with error
+	diagnostics.
+	(_gnu_flush_write): Improve error checking.  Adjust
+	real_s_sizeleft before calling new_volume to avoid creating
+	malformed multivolume headers.
+	* tests/delete05.at, tests/gzip.at, tests/ignfail.at,
+	tests/longv7.at, tests/lustar01.at, tests/lustar02.at,
+	tests/shortfile.at: Update to match new diagnostic wording
+	(see 2008-05-06).
+	
+	* NEWS: Update.
+
 2008-06-14  Sergey Poznyakoff  <[email protected]>
 
 	* doc/tar.texi (exclude): Document support for new VCS.

+ 4 - 0
NEWS

@@ -59,6 +59,10 @@ Names".
 The value of the blocking factor is made available to info and
 checkpoint scripts via environment variable TAR_BLOCKING_FACTOR.
 
+* Incremental archives
+
+Improved (sped up) extracting from incremental archives.
+
 * Bugfixes.
 ** Fix bug introduced in version 1.19: tar refused to update non-existing
 archives.

+ 5 - 0
lib/.cvsignore

@@ -149,6 +149,8 @@ quote.c
 quote.h
 quotearg.c
 quotearg.h
+rawmemchr.c
+rawmemchr.valgrind
 readlink.c
 realloc.c
 ref-add.sed
@@ -181,10 +183,12 @@ sleep.c
 snprintf.c
 stat-macros.h
 stat-time.h
+stdarg.in.h
 stdbool.h
 stdbool.in.h
 stdint.h
 stdint.in.h
+stdio-impl.h
 stdio.h
 stdio.in.h
 stdlib.h
@@ -192,6 +196,7 @@ stdlib.in.h
 stpcpy.c
 strcasecmp.c
 strchrnul.c
+strchrnul.valgrind
 strdup.c
 streq.h
 strerror.c

+ 17 - 1
src/buffer.c

@@ -1224,7 +1224,15 @@ try_new_volume ()
 
       if (real_s_totsize - real_s_sizeleft != continued_file_offset)
 	{
-	  WARN ((0, 0, _("This volume is out of sequence")));
+	  char totsizebuf[UINTMAX_STRSIZE_BOUND];
+	  char s1buf[UINTMAX_STRSIZE_BOUND];
+	  char s2buf[UINTMAX_STRSIZE_BOUND];
+
+	  WARN ((0, 0, _("This volume is out of sequence (%s - %s != %s)"),
+		 STRINGIFY_BIGINT (real_s_totsize, totsizebuf),
+		 STRINGIFY_BIGINT (real_s_sizeleft, s1buf),
+		 STRINGIFY_BIGINT (continued_file_offset, s2buf)));
+	 
 	  return false;
 	}
     }
@@ -1581,11 +1589,18 @@ _gnu_flush_write (size_t buffer_level)
       return;
     }
 
+  if (status % BLOCKSIZE)
+    {
+      ERROR ((0, 0, _("write did not end on a block boundary")));
+      archive_write_error (status);
+    }
+  
   /* In multi-volume mode. */
   /* ENXIO is for the UNIX PC.  */
   if (status < 0 && errno != ENOSPC && errno != EIO && errno != ENXIO)
     archive_write_error (status);
 
+  real_s_sizeleft -= status;
   if (!new_volume (ACCESS_WRITE))
     return;
 
@@ -1597,6 +1612,7 @@ _gnu_flush_write (size_t buffer_level)
 
   copy_ptr = record_start->buffer + status;
   copy_size = buffer_level - status;
+		   
   /* Switch to the next buffer */
   record_index = !record_index;
   init_buffer ();

+ 1 - 1
tests/delete05.at

@@ -42,7 +42,7 @@ tar tf archive
 to
 ],
 [tar: tre: Not found in archive
-tar: Error exit delayed from previous errors
+tar: Exiting with failure status due to previous errors
 ])
 
 AT_CLEANUP

+ 1 - 1
tests/gzip.at

@@ -35,7 +35,7 @@ test $? = 2 || exit 1
 [
 gzip: stdin: unexpected end of file
 tar: Child returned status 1
-tar: Error exit delayed from previous errors
+tar: Exiting with failure status due to previous errors
 ],
 [],[])
 

+ 2 - 2
tests/ignfail.at

@@ -64,12 +64,12 @@ test $status = 0
 [
 -----
 tar: file: Cannot open: Permission denied
-tar: Error exit delayed from previous errors
+tar: Exiting with failure status due to previous errors
 -----
 tar: file: Warning: Cannot open: Permission denied
 -----
 tar: directory: Cannot open: Permission denied
-tar: Error exit delayed from previous errors
+tar: Exiting with failure status due to previous errors
 -----
 tar: directory: Warning: Cannot open: Permission denied
 ])

+ 1 - 1
tests/longv7.at

@@ -40,7 +40,7 @@ tar tf archive
 DIR/
 ],
 [tar: DIR/FILE: file name is too long (max 99); not dumped
-tar: Error exit delayed from previous errors
+tar: Exiting with failure status due to previous errors
 ],
 [],[],[v7])
 

+ 1 - 1
tests/lustar01.at

@@ -31,7 +31,7 @@ tar cf archive LONGNAME
 [2],
 [],
 [tar: LONGNAME: file name is too long (cannot be split); not dumped
-tar: Error exit delayed from previous errors
+tar: Exiting with failure status due to previous errors
 ],[],[],[ustar])
 
 AT_CLEANUP

+ 1 - 1
tests/lustar02.at

@@ -36,7 +36,7 @@ tar cf archive PREFIX_155
 [2],
 [],
 [tar: PREFIX_155/: file name is too long (cannot be split); not dumped
-tar: Error exit delayed from previous errors
+tar: Exiting with failure status due to previous errors
 ],[],[],[ustar])
 
 AT_CLEANUP

+ 1 - 1
tests/shortfile.at

@@ -33,7 +33,7 @@ tar tf foo
 [2],
 [],
 [tar: This does not look like a tar archive
-tar: Error exit delayed from previous errors
+tar: Exiting with failure status due to previous errors
 ],
 [],[],[gnu])