From: Tim Kientzle Date: Wed, 1 Apr 2009 07:32:55 +0000 (-0400) Subject: If the necessary libraries are missing for gzip/bzip2 writing, X-Git-Tag: v2.7.0~48 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=87f7a7c58a8035af82756579a552bfea92e7f8c6;p=thirdparty%2Flibarchive.git If the necessary libraries are missing for gzip/bzip2 writing, have the public setup function return ARCHIVE_FATAL and a suitable error message. Alter the write tests to simply skip if the initial compression setup returns ARCHIVE_FATAL. This should fix these tests on platforms without zlib/bzlib. SVN-Revision: 893 --- diff --git a/libarchive/archive_write_set_compression_bzip2.c b/libarchive/archive_write_set_compression_bzip2.c index 78c97919d..219ab478b 100644 --- a/libarchive/archive_write_set_compression_bzip2.c +++ b/libarchive/archive_write_set_compression_bzip2.c @@ -24,6 +24,7 @@ */ #include "archive_platform.h" +#undef HAVE_BZLIB_H __FBSDID("$FreeBSD: src/lib/libarchive/archive_write_set_compression_bzip2.c,v 1.13 2007/12/30 04:58:21 kientzle Exp $"); @@ -47,9 +48,10 @@ __FBSDID("$FreeBSD: src/lib/libarchive/archive_write_set_compression_bzip2.c,v 1 #ifndef HAVE_BZLIB_H int -archive_write_set_compression_bzip2(struct archive *_a) +archive_write_set_compression_bzip2(struct archive *a) { - /* Unsupported bzip2 compression, we don't have bzlib */ + archive_set_error(a, ARCHIVE_ERRNO_MISC, + "bzip2 compression not supported on this platform"); return (ARCHIVE_FATAL); } #else diff --git a/libarchive/archive_write_set_compression_gzip.c b/libarchive/archive_write_set_compression_gzip.c index 9ec467a67..8a55c9a76 100644 --- a/libarchive/archive_write_set_compression_gzip.c +++ b/libarchive/archive_write_set_compression_gzip.c @@ -24,6 +24,7 @@ */ #include "archive_platform.h" +#undef HAVE_ZLIB_H __FBSDID("$FreeBSD: src/lib/libarchive/archive_write_set_compression_gzip.c,v 1.16 2008/02/21 03:21:50 kientzle Exp $"); @@ -47,9 +48,10 @@ __FBSDID("$FreeBSD: src/lib/libarchive/archive_write_set_compression_gzip.c,v 1. #ifndef HAVE_ZLIB_H int -archive_write_set_compression_gzip(struct archive *_a) +archive_write_set_compression_gzip(struct archive *a) { - /* Unsupported gzip compression, we don't have zlib */ + archive_set_error(a, ARCHIVE_ERRNO_MISC, + "gzip compression not supported on this platform"); return (ARCHIVE_FATAL); } #else @@ -122,9 +124,6 @@ archive_compressor_gzip_init(struct archive_write *a) config = (struct private_config *)a->compressor.config; - a->archive.compression_code = ARCHIVE_COMPRESSION_GZIP; - a->archive.compression_name = "gzip"; - if (a->client_opener != NULL) { ret = (a->client_opener)(&a->archive, a->client_data); if (ret != ARCHIVE_OK) diff --git a/libarchive/test/test_write_compress_bzip2.c b/libarchive/test/test_write_compress_bzip2.c index f34904ce3..256288f81 100644 --- a/libarchive/test/test_write_compress_bzip2.c +++ b/libarchive/test/test_write_compress_bzip2.c @@ -41,7 +41,7 @@ DEFINE_TEST(test_write_compress_bzip2) size_t buffsize, datasize; char path[16]; size_t used1, used2; - int i; + int i, r; buffsize = 2000000; assert(NULL != (buff = (char *)malloc(buffsize))); @@ -55,7 +55,12 @@ DEFINE_TEST(test_write_compress_bzip2) */ assert((a = archive_write_new()) != NULL); assertA(0 == archive_write_set_format_ustar(a)); - assertA(0 == archive_write_set_compression_bzip2(a)); + r = archive_write_set_compression_bzip2(a); + if (r == ARCHIVE_FATAL) { + skipping("bzip2 writing not supported on this platform"); + assertEqualInt(ARCHIVE_OK, archive_write_finish(a)); + return; + } assertEqualIntA(a, ARCHIVE_OK, archive_write_set_bytes_per_block(a, 10)); assertEqualInt(ARCHIVE_COMPRESSION_BZIP2, archive_compression(a)); diff --git a/libarchive/test/test_write_compress_gzip.c b/libarchive/test/test_write_compress_gzip.c index 386b91dd5..4b9c84ca6 100644 --- a/libarchive/test/test_write_compress_gzip.c +++ b/libarchive/test/test_write_compress_gzip.c @@ -55,7 +55,12 @@ DEFINE_TEST(test_write_compress_gzip) */ assert((a = archive_write_new()) != NULL); assertA(0 == archive_write_set_format_ustar(a)); - assertA(0 == archive_write_set_compression_gzip(a)); + r = archive_write_set_compression_gzip(a); + if (r == ARCHIVE_FATAL) { + skipping("gzip writing not supported on this platform"); + assertEqualInt(ARCHIVE_OK, archive_write_finish(a)); + return; + } assertEqualIntA(a, ARCHIVE_OK, archive_write_set_bytes_per_block(a, 10)); assertEqualInt(ARCHIVE_COMPRESSION_GZIP, archive_compression(a)); @@ -82,7 +87,7 @@ DEFINE_TEST(test_write_compress_gzip) r = archive_read_support_compression_gzip(a); if (r == ARCHIVE_WARN) { skipping("Can't verify gzip writing by reading back;" - " gzip reading not fully supported"); + " gzip reading not fully supported on this platform"); } else { assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_all(a)); @@ -143,7 +148,7 @@ DEFINE_TEST(test_write_compress_gzip) assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); r = archive_read_support_compression_gzip(a); if (r == ARCHIVE_WARN) { - skipping("gzip decompression not fully supported"); + skipping("gzip reading not fully supported on this platform"); } else { assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_all(a)); @@ -197,7 +202,7 @@ DEFINE_TEST(test_write_compress_gzip) assertA(0 == archive_read_support_compression_all(a)); r = archive_read_support_compression_gzip(a); if (r == ARCHIVE_WARN) { - skipping("gzip decompression not fully supported"); + skipping("gzip reading not fully supported on this platform"); } else { assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used2));