summaryrefslogtreecommitdiffstats
path: root/lib/libarchive
diff options
context:
space:
mode:
authormm <mm@FreeBSD.org>2011-12-20 20:06:33 +0000
committermm <mm@FreeBSD.org>2011-12-20 20:06:33 +0000
commitde78128d73d25a4377de7c74ce56bd3f3ee8abe7 (patch)
treec60338ab5a43518824f6505a33d7628e6358c6e4 /lib/libarchive
parent3e7916ec1c37c8aabb4a4dcd644f98e38eff81f1 (diff)
downloadFreeBSD-src-de78128d73d25a4377de7c74ce56bd3f3ee8abe7.zip
FreeBSD-src-de78128d73d25a4377de7c74ce56bd3f3ee8abe7.tar.gz
Update libarchive, tar and cpio to version 2.8.5
The following additional vendor revisions are applied: Revision 3740: Use archive_clear_error() to clear the error markers. Obtained from: http://code.google.com/p/libarchive MFC after: 2 weeks
Diffstat (limited to 'lib/libarchive')
-rw-r--r--lib/libarchive/archive.h15
-rw-r--r--lib/libarchive/archive_read.c2
-rw-r--r--lib/libarchive/archive_read_support_compression_bzip2.c2
-rw-r--r--lib/libarchive/archive_read_support_compression_uu.c4
-rw-r--r--lib/libarchive/archive_read_support_format_cpio.c6
-rw-r--r--lib/libarchive/archive_read_support_format_iso9660.c22
-rw-r--r--lib/libarchive/archive_read_support_format_tar.c2
-rw-r--r--lib/libarchive/archive_read_support_format_zip.c2
-rw-r--r--lib/libarchive/archive_string.h7
-rw-r--r--lib/libarchive/archive_write_disk.c2
-rw-r--r--lib/libarchive/archive_write_set_compression_xz.c3
-rw-r--r--lib/libarchive/archive_write_set_format_ar.c2
-rw-r--r--lib/libarchive/archive_write_set_format_shar.c3
-rw-r--r--lib/libarchive/archive_write_set_format_ustar.c2
-rw-r--r--lib/libarchive/config_freebsd.h1
-rw-r--r--lib/libarchive/libarchive-formats.51
-rw-r--r--lib/libarchive/libarchive.32
-rw-r--r--lib/libarchive/test/Makefile2
-rw-r--r--lib/libarchive/test/test_compat_zip.c2
-rw-r--r--lib/libarchive/test/test_read_format_iso_Z.c (renamed from lib/libarchive/test/test_read_format_iso_gz.c)6
20 files changed, 51 insertions, 37 deletions
diff --git a/lib/libarchive/archive.h b/lib/libarchive/archive.h
index 7075e26..bac93f0 100644
--- a/lib/libarchive/archive.h
+++ b/lib/libarchive/archive.h
@@ -52,7 +52,7 @@
/* These should match the types used in 'struct stat' */
#if defined(_WIN32) && !defined(__CYGWIN__)
#define __LA_INT64_T __int64
-# if defined(_SSIZE_T_DEFINED)
+# if defined(_SSIZE_T_DEFINED) || defined(_SSIZE_T_)
# define __LA_SSIZE_T ssize_t
# elif defined(_WIN64)
# define __LA_SSIZE_T __int64
@@ -98,6 +98,13 @@
# define __LA_DECL
#endif
+#if defined(__GNUC__) && __GNUC__ >= 3
+#define __LA_PRINTF(fmtarg, firstvararg) \
+ __attribute__((__format__ (__printf__, fmtarg, firstvararg)))
+#else
+#define __LA_PRINTF(fmtarg, firstvararg) /* nothing */
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -129,13 +136,13 @@ extern "C" {
* (ARCHIVE_API_VERSION * 1000000 + ARCHIVE_API_FEATURE * 1000)
* #endif
*/
-#define ARCHIVE_VERSION_NUMBER 2008004
+#define ARCHIVE_VERSION_NUMBER 2008005
__LA_DECL int archive_version_number(void);
/*
* Textual name/version of the library, useful for version displays.
*/
-#define ARCHIVE_VERSION_STRING "libarchive 2.8.4"
+#define ARCHIVE_VERSION_STRING "libarchive 2.8.5"
__LA_DECL const char * archive_version_string(void);
#if ARCHIVE_VERSION_NUMBER < 3000000
@@ -717,7 +724,7 @@ __LA_DECL const char *archive_format_name(struct archive *);
__LA_DECL int archive_format(struct archive *);
__LA_DECL void archive_clear_error(struct archive *);
__LA_DECL void archive_set_error(struct archive *, int _err,
- const char *fmt, ...);
+ const char *fmt, ...) __LA_PRINTF(3, 4);
__LA_DECL void archive_copy_error(struct archive *dest,
struct archive *src);
__LA_DECL int archive_file_count(struct archive *);
diff --git a/lib/libarchive/archive_read.c b/lib/libarchive/archive_read.c
index 7873d45..fb72407 100644
--- a/lib/libarchive/archive_read.c
+++ b/lib/libarchive/archive_read.c
@@ -715,7 +715,7 @@ archive_read_data_block(struct archive *_a,
/*
* Close the file and release most resources.
*
- * Be careful: client might just call read_new and then read_finish.
+ * Be careful: client might just call read_new and then read_free.
* Don't assume we actually read anything or performed any non-trivial
* initialization.
*/
diff --git a/lib/libarchive/archive_read_support_compression_bzip2.c b/lib/libarchive/archive_read_support_compression_bzip2.c
index fc419d4..891742f 100644
--- a/lib/libarchive/archive_read_support_compression_bzip2.c
+++ b/lib/libarchive/archive_read_support_compression_bzip2.c
@@ -350,4 +350,4 @@ bzip2_filter_close(struct archive_read_filter *self)
return (ret);
}
-#endif /* HAVE_BZLIB_H */
+#endif /* HAVE_BZLIB_H && BZ_CONFIG_ERROR */
diff --git a/lib/libarchive/archive_read_support_compression_uu.c b/lib/libarchive/archive_read_support_compression_uu.c
index cb1dae5..1b6a54c 100644
--- a/lib/libarchive/archive_read_support_compression_uu.c
+++ b/lib/libarchive/archive_read_support_compression_uu.c
@@ -488,9 +488,9 @@ read_more:
switch (uudecode->state) {
default:
case ST_FIND_HEAD:
- if (len - nl > 13 && memcmp(b, "begin ", 6) == 0)
+ if (len - nl >= 11 && memcmp(b, "begin ", 6) == 0)
l = 6;
- else if (len - nl > 18 &&
+ else if (len - nl >= 18 &&
memcmp(b, "begin-base64 ", 13) == 0)
l = 13;
else
diff --git a/lib/libarchive/archive_read_support_format_cpio.c b/lib/libarchive/archive_read_support_format_cpio.c
index 24f3d35..790fa7a 100644
--- a/lib/libarchive/archive_read_support_format_cpio.c
+++ b/lib/libarchive/archive_read_support_format_cpio.c
@@ -264,9 +264,9 @@ archive_read_format_cpio_read_header(struct archive_read *a,
/* Compare name to "TRAILER!!!" to test for end-of-archive. */
if (namelength == 11 && strcmp((const char *)h, "TRAILER!!!") == 0) {
- /* TODO: Store file location of start of block. */
- archive_set_error(&a->archive, 0, NULL);
- return (ARCHIVE_EOF);
+ /* TODO: Store file location of start of block. */
+ archive_clear_error(&a->archive);
+ return (ARCHIVE_EOF);
}
/* Detect and record hardlinks to previously-extracted entries. */
diff --git a/lib/libarchive/archive_read_support_format_iso9660.c b/lib/libarchive/archive_read_support_format_iso9660.c
index 0216461..6d8d304 100644
--- a/lib/libarchive/archive_read_support_format_iso9660.c
+++ b/lib/libarchive/archive_read_support_format_iso9660.c
@@ -934,14 +934,14 @@ read_children(struct archive_read *a, struct file_info *parent)
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Ignoring out-of-order directory (%s) %jd > %jd",
parent->name.s,
- iso9660->current_position,
- parent->offset);
+ (intmax_t)iso9660->current_position,
+ (intmax_t)parent->offset);
return (ARCHIVE_WARN);
}
if (parent->offset + parent->size > iso9660->volume_size) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Directory is beyond end-of-media: %s",
- parent->name);
+ parent->name.s);
return (ARCHIVE_WARN);
}
if (iso9660->current_position < parent->offset) {
@@ -1139,7 +1139,7 @@ archive_read_format_iso9660_read_header(struct archive_read *a,
if (file->offset + file->size > iso9660->volume_size) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "File is beyond end-of-media: %s", file->name);
+ "File is beyond end-of-media: %s", file->name.s);
iso9660->entry_bytes_remaining = 0;
iso9660->entry_sparse_offset = 0;
return (ARCHIVE_WARN);
@@ -1198,10 +1198,10 @@ archive_read_format_iso9660_read_header(struct archive_read *a,
if ((file->mode & AE_IFMT) != AE_IFDIR &&
file->offset < iso9660->current_position) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Ignoring out-of-order file @%x (%s) %jd < %jd",
- file,
+ "Ignoring out-of-order file (%s) %jd < %jd",
iso9660->pathname.s,
- file->offset, iso9660->current_position);
+ (intmax_t)file->offset,
+ (intmax_t)iso9660->current_position);
iso9660->entry_bytes_remaining = 0;
iso9660->entry_sparse_offset = 0;
return (ARCHIVE_WARN);
@@ -1524,8 +1524,8 @@ archive_read_format_iso9660_read_data(struct archive_read *a,
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Ignoring out-of-order file (%s) %jd < %jd",
iso9660->pathname.s,
- iso9660->entry_content->offset,
- iso9660->current_position);
+ (intmax_t)iso9660->entry_content->offset,
+ (intmax_t)iso9660->current_position);
*buff = NULL;
*size = 0;
*offset = iso9660->entry_sparse_offset;
@@ -1626,8 +1626,8 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
*/
if (location > 0 &&
(location + ((fsize + iso9660->logical_block_size -1)
- / iso9660->logical_block_size)) >
- (unsigned int)iso9660->volume_block) {
+ / iso9660->logical_block_size))
+ > (uint32_t)iso9660->volume_block) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Invalid location of extent of file");
return (NULL);
diff --git a/lib/libarchive/archive_read_support_format_tar.c b/lib/libarchive/archive_read_support_format_tar.c
index 20e1293..62be309 100644
--- a/lib/libarchive/archive_read_support_format_tar.c
+++ b/lib/libarchive/archive_read_support_format_tar.c
@@ -576,7 +576,7 @@ tar_read_header(struct archive_read *a, struct tar *tar,
h = __archive_read_ahead(a, 512, NULL);
if (h != NULL)
__archive_read_consume(a, 512);
- archive_set_error(&a->archive, 0, NULL);
+ archive_clear_error(&a->archive);
if (a->archive.archive_format_name == NULL) {
a->archive.archive_format = ARCHIVE_FORMAT_TAR;
a->archive.archive_format_name = "tar";
diff --git a/lib/libarchive/archive_read_support_format_zip.c b/lib/libarchive/archive_read_support_format_zip.c
index 0fa1fa3..a02a2c2 100644
--- a/lib/libarchive/archive_read_support_format_zip.c
+++ b/lib/libarchive/archive_read_support_format_zip.c
@@ -211,7 +211,7 @@ archive_read_format_zip_bid(struct archive_read *a)
/* Get 4k of data beyond where we stopped. */
buff = __archive_read_ahead(a, offset + 4096,
&bytes_avail);
- if (bytes_avail < offset + 1)
+ if (buff == NULL)
break;
p = (const char *)buff + offset;
while (p + 9 < (const char *)buff + bytes_avail) {
diff --git a/lib/libarchive/archive_string.h b/lib/libarchive/archive_string.h
index 68fbf16..f0655d1 100644
--- a/lib/libarchive/archive_string.h
+++ b/lib/libarchive/archive_string.h
@@ -44,6 +44,8 @@
#include <wchar.h>
#endif
+#include "archive.h"
+
/*
* Basic resizable/reusable string support a la Java's "StringBuffer."
*
@@ -134,10 +136,11 @@ void __archive_string_free(struct archive_string *);
/* Like 'vsprintf', but resizes the underlying string as necessary. */
void __archive_string_vsprintf(struct archive_string *, const char *,
- va_list);
+ va_list) __LA_PRINTF(2, 0);
#define archive_string_vsprintf __archive_string_vsprintf
-void __archive_string_sprintf(struct archive_string *, const char *, ...);
+void __archive_string_sprintf(struct archive_string *, const char *, ...)
+ __LA_PRINTF(2, 3);
#define archive_string_sprintf __archive_string_sprintf
/* Allocates a fresh buffer and converts as (assumed to be UTF-8) into it.
diff --git a/lib/libarchive/archive_write_disk.c b/lib/libarchive/archive_write_disk.c
index 8a4fd04..2319220 100644
--- a/lib/libarchive/archive_write_disk.c
+++ b/lib/libarchive/archive_write_disk.c
@@ -1730,7 +1730,7 @@ create_dir(struct archive_write_disk *a, char *path)
if (unlink(path) != 0) {
archive_set_error(&a->archive, errno,
"Can't create directory '%s': "
- "Conflicting file cannot be removed");
+ "Conflicting file cannot be removed", path);
return (ARCHIVE_FAILED);
}
} else if (errno != ENOENT && errno != ENOTDIR) {
diff --git a/lib/libarchive/archive_write_set_compression_xz.c b/lib/libarchive/archive_write_set_compression_xz.c
index d97bca7..15b6cc2 100644
--- a/lib/libarchive/archive_write_set_compression_xz.c
+++ b/lib/libarchive/archive_write_set_compression_xz.c
@@ -132,9 +132,10 @@ static int
archive_compressor_xz_init_stream(struct archive_write *a,
struct private_data *state)
{
+ static const lzma_stream lzma_stream_init_data = LZMA_STREAM_INIT;
int ret;
- state->stream = (lzma_stream)LZMA_STREAM_INIT;
+ state->stream = lzma_stream_init_data;
state->stream.next_out = state->compressed;
state->stream.avail_out = state->compressed_buffer_size;
if (a->archive.compression_code == ARCHIVE_COMPRESSION_XZ)
diff --git a/lib/libarchive/archive_write_set_format_ar.c b/lib/libarchive/archive_write_set_format_ar.c
index bffe07c..cb8ddaa 100644
--- a/lib/libarchive/archive_write_set_format_ar.c
+++ b/lib/libarchive/archive_write_set_format_ar.c
@@ -440,7 +440,7 @@ archive_write_ar_finish_entry(struct archive_write *a)
if (ar->entry_padding != 1) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Padding wrong size: %d should be 1 or 0",
- ar->entry_padding);
+ (int)ar->entry_padding);
return (ARCHIVE_WARN);
}
diff --git a/lib/libarchive/archive_write_set_format_shar.c b/lib/libarchive/archive_write_set_format_shar.c
index 6cb58e8..bd62768 100644
--- a/lib/libarchive/archive_write_set_format_shar.c
+++ b/lib/libarchive/archive_write_set_format_shar.c
@@ -537,8 +537,7 @@ archive_write_shar_finish_entry(struct archive_write *a)
}
if ((p = archive_entry_fflags_text(shar->entry)) != NULL) {
- archive_string_sprintf(&shar->work, "chflags %s ",
- p, archive_entry_pathname(shar->entry));
+ archive_string_sprintf(&shar->work, "chflags %s ", p);
shar_quote(&shar->work,
archive_entry_pathname(shar->entry), 1);
archive_strcat(&shar->work, "\n");
diff --git a/lib/libarchive/archive_write_set_format_ustar.c b/lib/libarchive/archive_write_set_format_ustar.c
index 2de0cf1..54893d4 100644
--- a/lib/libarchive/archive_write_set_format_ustar.c
+++ b/lib/libarchive/archive_write_set_format_ustar.c
@@ -168,7 +168,7 @@ archive_write_set_format_ustar(struct archive *_a)
/* Basic internal sanity test. */
if (sizeof(template_header) != 512) {
- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, "Internal: template_header wrong size: %d should be 512", sizeof(template_header));
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, "Internal: template_header wrong size: %d should be 512", (int)sizeof(template_header));
return (ARCHIVE_FATAL);
}
diff --git a/lib/libarchive/config_freebsd.h b/lib/libarchive/config_freebsd.h
index a39a1fb..b4694ea1 100644
--- a/lib/libarchive/config_freebsd.h
+++ b/lib/libarchive/config_freebsd.h
@@ -68,6 +68,7 @@
#endif
#define HAVE_BSDXML_H 1
+#define HAVE_BZLIB_H 1
#define HAVE_CHFLAGS 1
#define HAVE_CHOWN 1
#define HAVE_DECL_EXTATTR_NAMESPACE_USER 1
diff --git a/lib/libarchive/libarchive-formats.5 b/lib/libarchive/libarchive-formats.5
index ef4b6ca..e6849b9 100644
--- a/lib/libarchive/libarchive-formats.5
+++ b/lib/libarchive/libarchive-formats.5
@@ -65,6 +65,7 @@ Later variants have extended this by either appropriating undefined
areas of the header record, extending the header to multiple records,
or by storing special entries that modify the interpretation of
subsequent entries.
+.Pp
.Bl -tag -width indent
.It Cm gnutar
The
diff --git a/lib/libarchive/libarchive.3 b/lib/libarchive/libarchive.3
index 115a79c..70059dc 100644
--- a/lib/libarchive/libarchive.3
+++ b/lib/libarchive/libarchive.3
@@ -177,6 +177,8 @@ which provides a slightly more efficient interface.
You may prefer to use the higher-level
.Fn archive_read_data_skip ,
which reads and discards the data for this entry,
+.Fn archive_read_data_to_buffer ,
+which reads the data into an in-memory buffer,
.Fn archive_read_data_to_file ,
which copies the data to the provided file descriptor, or
.Fn archive_read_extract ,
diff --git a/lib/libarchive/test/Makefile b/lib/libarchive/test/Makefile
index ba72db7..e05ff1f 100644
--- a/lib/libarchive/test/Makefile
+++ b/lib/libarchive/test/Makefile
@@ -52,7 +52,7 @@ TESTS= \
test_read_format_gtar_gz.c \
test_read_format_gtar_lzma.c \
test_read_format_gtar_sparse.c \
- test_read_format_iso_gz.c \
+ test_read_format_iso_Z.c \
test_read_format_iso_multi_extent.c \
test_read_format_isorr_rr_moved.c \
test_read_format_isojoliet_bz2.c \
diff --git a/lib/libarchive/test/test_compat_zip.c b/lib/libarchive/test/test_compat_zip.c
index adb377c..7c1bde7 100644
--- a/lib/libarchive/test/test_compat_zip.c
+++ b/lib/libarchive/test/test_compat_zip.c
@@ -67,7 +67,7 @@ finish:
#if ARCHIVE_VERSION_NUMBER < 2000000
archive_read_finish(a);
#else
- assertEqualInt(ARCHIVE_OK, archive_read_finish(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
#endif
}
diff --git a/lib/libarchive/test/test_read_format_iso_gz.c b/lib/libarchive/test/test_read_format_iso_Z.c
index d0d6b3c..2d60d41 100644
--- a/lib/libarchive/test/test_read_format_iso_gz.c
+++ b/lib/libarchive/test/test_read_format_iso_Z.c
@@ -47,7 +47,7 @@ test1(void)
ARCHIVE_COMPRESSION_COMPRESS);
assertEqualInt(archive_format(a), ARCHIVE_FORMAT_ISO9660);
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
- assertEqualInt(ARCHIVE_OK, archive_read_finish(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
static
@@ -87,10 +87,10 @@ void test2(void)
ARCHIVE_COMPRESSION_COMPRESS);
assertEqualInt(archive_format(a), ARCHIVE_FORMAT_ISO9660);
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
- assertEqualInt(ARCHIVE_OK, archive_read_finish(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
-DEFINE_TEST(test_read_format_iso_gz)
+DEFINE_TEST(test_read_format_iso_Z)
{
test1();
test2();
OpenPOWER on IntegriCloud