]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
archive_read_support_filter_lrzip and archive_write_add_filter_lrzip
authorMichihiro NAKAJIMA <ggcueroad@gmail.com>
Sun, 7 Oct 2012 07:13:17 +0000 (16:13 +0900)
committerMichihiro NAKAJIMA <ggcueroad@gmail.com>
Sun, 7 Oct 2012 07:13:17 +0000 (16:13 +0900)
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.

libarchive/archive_read_support_filter_lrzip.c
libarchive/archive_write_add_filter_lrzip.c
libarchive/test/test_read_filter_lrzip.c
libarchive/test/test_write_compress_lrzip.c

index d0cf31de79d03b09680fd0416feab6d0de2d8743..08051d2780469dfb245eb97cc496666a98861fef 100644 (file)
@@ -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;
index 5602c87039d48d254fa74757508275d1c1cb5754..4e2fa8aaa56eade518a15c78bdeefb5946143dd6 100644 (file)
 
 __FBSDID("$FreeBSD$");
 
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#include <time.h>
-
 #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);
 }
index 2f96fe930a0cca2e15be4162c1d6d5a46ea95f70..47dd78831728e6a64b9202382f20915f25741a4e 100644 (file)
@@ -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));
        }
 
index ca1e3f667e75d41dbb9b3c13d28b63ca21c7b415..27c382b15fc0d8637423c317204022faa030d175 100644 (file)
@@ -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));