+2008-06-26 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ * 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 <gray@gnu.org.ua>
* doc/tar.texi (exclude): Document support for new VCS.
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.
quote.h
quotearg.c
quotearg.h
+rawmemchr.c
+rawmemchr.valgrind
readlink.c
realloc.c
ref-add.sed
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
stpcpy.c
strcasecmp.c
strchrnul.c
+strchrnul.valgrind
strdup.c
streq.h
strerror.c
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;
}
}
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;
copy_ptr = record_start->buffer + status;
copy_size = buffer_level - status;
+
/* Switch to the next buffer */
record_index = !record_index;
init_buffer ();
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
[
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
],
[],[])
[
-----
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
])
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])
[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
[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
[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])