From: Michihiro NAKAJIMA Date: Sun, 7 Oct 2012 07:13:17 +0000 (+0900) Subject: archive_read_support_filter_lrzip and archive_write_add_filter_lrzip X-Git-Tag: v3.1.0~40^2~81 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1d6fea42fa084eda2677610bac360ede509d5305;p=thirdparty%2Flibarchive.git archive_read_support_filter_lrzip and archive_write_add_filter_lrzip should return ARCHIVE_WARN instead of ARCHIVE_OK since those filters always use an external program, lrzip(1) and other filters do so if they use an external program instead of implemented code with the library. It is clear that returning ARCHIVE_WARN means the filter uses an external program. --- diff --git a/libarchive/archive_read_support_filter_lrzip.c b/libarchive/archive_read_support_filter_lrzip.c index d0cf31de7..08051d278 100644 --- a/libarchive/archive_read_support_filter_lrzip.c +++ b/libarchive/archive_read_support_filter_lrzip.c @@ -48,7 +48,8 @@ __FBSDID("$FreeBSD$"); #define LRZIP_HEADER_MAGIC "LRZI" #define LRZIP_HEADER_MAGIC_LEN 4 -static int lrzip_bidder_bid(struct archive_read_filter_bidder *, struct archive_read_filter *); +static int lrzip_bidder_bid(struct archive_read_filter_bidder *, + struct archive_read_filter *); static int lrzip_bidder_init(struct archive_read_filter *); @@ -59,7 +60,6 @@ lrzip_reader_free(struct archive_read_filter_bidder *self) return (ARCHIVE_OK); } - int archive_read_support_filter_lrzip(struct archive *_a) { @@ -77,14 +77,16 @@ archive_read_support_filter_lrzip(struct archive *_a) reader->init = lrzip_bidder_init; reader->options = NULL; reader->free = lrzip_reader_free; - return (ARCHIVE_OK); + /* This filter always uses an external program. */ + return (ARCHIVE_WARN); } /* * Bidder just verifies the header and returns the number of verified bits. */ static int -lrzip_bidder_bid(struct archive_read_filter_bidder *self, struct archive_read_filter *filter) +lrzip_bidder_bid(struct archive_read_filter_bidder *self, + struct archive_read_filter *filter) { const unsigned char *p; ssize_t avail, len; diff --git a/libarchive/archive_write_add_filter_lrzip.c b/libarchive/archive_write_add_filter_lrzip.c index 5602c8703..4e2fa8aaa 100644 --- a/libarchive/archive_write_add_filter_lrzip.c +++ b/libarchive/archive_write_add_filter_lrzip.c @@ -27,25 +27,16 @@ __FBSDID("$FreeBSD$"); -#ifdef HAVE_ERRNO_H -#include -#endif -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif -#include - #include "archive.h" -#include "archive_private.h" -#include "archive_write_private.h" - int archive_write_add_filter_lrzip(struct archive *a) { - return archive_write_add_filter_programl(a, "lrzip", "lrzip", + int r; + r = archive_write_add_filter_programl(a, "lrzip", "lrzip", "-q", NULL); + if (r == ARCHIVE_OK) + /* This filter always uses an external program. */ + r = ARCHIVE_WARN; + return (r); } diff --git a/libarchive/test/test_read_filter_lrzip.c b/libarchive/test/test_read_filter_lrzip.c index 2f96fe930..47dd78831 100644 --- a/libarchive/test/test_read_filter_lrzip.c +++ b/libarchive/test/test_read_filter_lrzip.c @@ -32,20 +32,14 @@ DEFINE_TEST(test_read_filter_lrzip) "d1/", "d1/f1", "d1/f2", "d1/f3", "f1", "f2", "f3", NULL }; struct archive_entry *ae; struct archive *a; - int i, r; + int i; if (!canLrzip()) { skipping("lrzip command-line program not found"); } assert((a = archive_read_new()) != NULL); - r = archive_read_support_filter_lrzip(a); - if (r == ARCHIVE_WARN) { - skipping("lrzip reading not fully supported on this platform"); - assertEqualInt(ARCHIVE_OK, archive_read_free(a)); - return; - } - assertEqualIntA(a, ARCHIVE_OK, r); + assertEqualIntA(a, ARCHIVE_WARN, archive_read_support_filter_lrzip(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); extract_reference_file(name); assertEqualIntA(a, ARCHIVE_OK, @@ -56,10 +50,6 @@ DEFINE_TEST(test_read_filter_lrzip) failure("Could not read file %d (%s) from %s", i, n[i], name); assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); - if (r != ARCHIVE_OK) { - archive_read_free(a); - return; - } assertEqualString(n[i], archive_entry_pathname(ae)); } diff --git a/libarchive/test/test_write_compress_lrzip.c b/libarchive/test/test_write_compress_lrzip.c index ca1e3f667..27c382b15 100644 --- a/libarchive/test/test_write_compress_lrzip.c +++ b/libarchive/test/test_write_compress_lrzip.c @@ -38,7 +38,7 @@ DEFINE_TEST(test_write_compress_lrzip) size_t buffsize, datasize; char path[16]; size_t used1, used2; - int i, r; + int i; if (!canLrzip()) { skipping("lrzip command-line program not found"); @@ -57,12 +57,7 @@ DEFINE_TEST(test_write_compress_lrzip) */ assert((a = archive_write_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_gnutar(a)); - r = archive_write_add_filter_lrzip(a); - if (r == ARCHIVE_FATAL) { - skipping("lrzip writing not supported on this platform"); - assertEqualInt(ARCHIVE_OK, archive_write_free(a)); - return; - } + assertEqualIntA(a, ARCHIVE_WARN, archive_write_add_filter_lrzip(a)); assertEqualIntA(a, ARCHIVE_OK, archive_write_set_bytes_per_block(a, 10)); assertEqualInt(ARCHIVE_FILTER_PROGRAM, archive_filter_code(a, 0)); @@ -85,7 +80,7 @@ DEFINE_TEST(test_write_compress_lrzip) assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); - assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_lrzip(a)); + assertEqualIntA(a, ARCHIVE_WARN, archive_read_support_filter_lrzip(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used1)); for (i = 0; i < 100; i++) { @@ -106,23 +101,23 @@ DEFINE_TEST(test_write_compress_lrzip) * don't crash or leak memory. */ assert((a = archive_write_new()) != NULL); - assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_lrzip(a)); + assertEqualIntA(a, ARCHIVE_WARN, archive_write_add_filter_lrzip(a)); assertEqualInt(ARCHIVE_OK, archive_write_free(a)); assert((a = archive_write_new()) != NULL); - assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_lrzip(a)); + assertEqualIntA(a, ARCHIVE_WARN, archive_write_add_filter_lrzip(a)); assertEqualInt(ARCHIVE_OK, archive_write_close(a)); assertEqualInt(ARCHIVE_OK, archive_write_free(a)); assert((a = archive_write_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_ustar(a)); - assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_lrzip(a)); + assertEqualIntA(a, ARCHIVE_WARN, archive_write_add_filter_lrzip(a)); assertEqualInt(ARCHIVE_OK, archive_write_close(a)); assertEqualInt(ARCHIVE_OK, archive_write_free(a)); assert((a = archive_write_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_ustar(a)); - assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_lrzip(a)); + assertEqualIntA(a, ARCHIVE_WARN, archive_write_add_filter_lrzip(a)); assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2)); assertEqualInt(ARCHIVE_OK, archive_write_close(a));