]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Make lrzip and lzop write filters set correct filter name and code
authorMichihiro NAKAJIMA <ggcueroad@gmail.com>
Mon, 8 Oct 2012 22:22:36 +0000 (07:22 +0900)
committerMichihiro NAKAJIMA <ggcueroad@gmail.com>
Mon, 8 Oct 2012 22:22:36 +0000 (07:22 +0900)
even if thery actually use archive_write_filter_program.

libarchive/archive_write_add_filter_lrzip.c
libarchive/archive_write_add_filter_lzop.c
libarchive/archive_write_add_filter_program.c
libarchive/archive_write_private.h
libarchive/test/test_write_filter_lrzip.c
libarchive/test/test_write_filter_lzop.c

index 4e2fa8aaa56eade518a15c78bdeefb5946143dd6..917b2b83e47dbf0de491bf6aedf6d058bb676bb9 100644 (file)
 __FBSDID("$FreeBSD$");
 
 #include "archive.h"
+#include "archive_write_private.h"
 
 int
 archive_write_add_filter_lrzip(struct archive *a)
 {
+       char * const argv[] = { "lrzip", "-q", NULL };
        int r;
-       r = archive_write_add_filter_programl(a, "lrzip", "lrzip",
-                  "-q", NULL);
+
+       r = __archive_write_programv(a, "lrzip", ARCHIVE_FILTER_LRZIP,
+               "lrzip", argv);
        if (r == ARCHIVE_OK)
                /* This filter always uses an external program. */
                r = ARCHIVE_WARN;
index 3b963d83bdec294bdf31065aa3ee87d9efb832f1..d453438f3851c756318f010e04c76a400559945e 100644 (file)
 __FBSDID("$FreeBSD$");
 
 #include "archive.h"
+#include "archive_write_private.h"
 
 int
 archive_write_add_filter_lzop(struct archive *a)
 {
+       char * const argv[] = { "lzop", NULL };
        int r;
-       r = archive_write_add_filter_programl(a, "lzop", "lzop", NULL);
+
+       r = __archive_write_programv(a, "lzop", ARCHIVE_FILTER_LZOP,
+               "lzop", argv);
        /* Return ARCHIVE_WARN since this always uses an external program. */
        if (r == ARCHIVE_OK)
                r = ARCHIVE_WARN;
index dc72d39b1faa14933a3b447b773135cf47b547b8..cccf705977ea01551cc578ecfed821860903f9d7 100644 (file)
@@ -78,8 +78,6 @@ static int archive_compressor_program_write(struct archive_write_filter *,
                    const void *, size_t);
 static int archive_compressor_program_close(struct archive_write_filter *);
 static int archive_compressor_program_free(struct archive_write_filter *);
-static int write_add_filter_programv(struct archive *, const char *,
-    char * const *);
 
 /*
  * Add a filter to this write handle that passes all data through an
@@ -101,7 +99,8 @@ archive_write_add_filter_program(struct archive *_a, const char *cmd)
                return (ARCHIVE_FATAL);
        }
        argv[1] = NULL;
-       r = write_add_filter_programv(_a, cmd, argv);
+       r = __archive_write_programv(_a, NULL, ARCHIVE_FILTER_PROGRAM,
+               cmd, argv);
        free(argv[0]);
        return (r);
 }
@@ -150,7 +149,8 @@ archive_write_add_filter_programl(struct archive *_a, const char *cmd,
                argv[1] = NULL;
        }
 
-       r = write_add_filter_programv(_a, cmd, argv);
+       r = __archive_write_programv(_a, NULL, ARCHIVE_FILTER_PROGRAM,
+               cmd, argv);
        for (i = 0; argv[i] != NULL; i++)
                free(argv[i]);
        free(argv);
@@ -174,12 +174,13 @@ archive_write_add_filter_programv(struct archive *_a, const char *cmd,
        archive_check_magic(_a, ARCHIVE_WRITE_MAGIC,
            ARCHIVE_STATE_NEW, "archive_write_add_filter_programv");
 
-       return write_add_filter_programv(_a, cmd, argv);
+       return __archive_write_programv(_a, NULL, ARCHIVE_FILTER_PROGRAM,
+                  cmd, argv);
 }
 
-static int
-write_add_filter_programv(struct archive *_a, const char *cmd,
-    char * const argv[])
+int
+__archive_write_programv(struct archive *_a, const char *name, int code,
+    const char *cmd, char * const argv[])
 {
 
        struct archive_write_filter *f = __archive_write_allocate_filter(_a);
@@ -209,20 +210,22 @@ write_add_filter_programv(struct archive *_a, const char *cmd,
                l += strlen(data->argv[i]) + 1;
        }
 
-       /* Make up a description string. */
-       if (archive_string_ensure(&data->description, l) == NULL)
-               goto memerr;
-       archive_strcpy(&data->description, prefix);
-       archive_strcat(&data->description, cmd);
-       for (i = 0; argv[i] != NULL; i++) {
-               archive_strappend_char(&data->description, ' ');
-               archive_strcat(&data->description, data->argv[i]);
-       }
-
-       f->name = data->description.s;
+       if (name == NULL) {
+               /* Make up a description string. */
+               if (archive_string_ensure(&data->description, l) == NULL)
+                       goto memerr;
+               archive_strcpy(&data->description, prefix);
+               archive_strcat(&data->description, cmd);
+               for (i = 0; argv[i] != NULL; i++) {
+                       archive_strappend_char(&data->description, ' ');
+                       archive_strcat(&data->description, data->argv[i]);
+               }
+               f->name = data->description.s;
+       } else
+               f->name = name;
+       f->code = code;
        f->data = data;
        f->open = &archive_compressor_program_open;
-       f->code = ARCHIVE_COMPRESSION_PROGRAM;
        f->free = archive_compressor_program_free;
        return (ARCHIVE_OK);
 memerr:
index 06a24a8a611fa17108173fcfcfa36c92c01cfe13..5a311f3ca11fbdcccfe185c06fcd952ab5b76f22 100644 (file)
@@ -133,4 +133,8 @@ __archive_write_format_header_ustar(struct archive_write *, char buff[512],
     struct archive_entry *, int tartype, int strict,
     struct archive_string_conv *);
 
+int
+__archive_write_programv(struct archive *, const char *, int, const char *,
+    char * const *);
+
 #endif
index e04ddb02bb3cd7e02c59e4f609a3447d1bce36ec..f28c8358363d4055ca7693540175a0a79362990e 100644 (file)
@@ -60,8 +60,8 @@ DEFINE_TEST(test_write_filter_lrzip)
        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));
-       assertEqualString("Program: lrzip lrzip -q", archive_filter_name(a, 0));
+       assertEqualInt(ARCHIVE_FILTER_LRZIP, archive_filter_code(a, 0));
+       assertEqualString("lrzip", archive_filter_name(a, 0));
        assertEqualIntA(a, ARCHIVE_OK,
                archive_write_open_memory(a, buff, buffsize, &used1));
        assert((ae = archive_entry_new()) != NULL);
index d16a8cacea77c7d6298fb5f0b8b1f53dd16ad865..083e80e13d215594dad1aaa9b06a5a07219bd236 100644 (file)
@@ -64,8 +64,8 @@ DEFINE_TEST(test_write_filter_lzop)
        assertEqualIntA(a, ARCHIVE_OK,
                archive_write_set_bytes_in_last_block(a, blocksize));
        assertEqualInt(blocksize, archive_write_get_bytes_in_last_block(a));
-       assertEqualInt(ARCHIVE_FILTER_PROGRAM, archive_filter_code(a, 0));
-       assertEqualString("Program: lzop lzop", archive_filter_name(a, 0));
+       assertEqualInt(ARCHIVE_FILTER_LZOP, archive_filter_code(a, 0));
+       assertEqualString("lzop", archive_filter_name(a, 0));
        assertEqualIntA(a, ARCHIVE_OK,
                archive_write_open_memory(a, buff, buffsize, &used1));
        assertEqualInt(blocksize, archive_write_get_bytes_in_last_block(a));