From: Michihiro NAKAJIMA Date: Mon, 8 Oct 2012 22:22:36 +0000 (+0900) Subject: Make lrzip and lzop write filters set correct filter name and code X-Git-Tag: v3.1.0~40^2~69 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e9dfd0a9cabeb29543a451fe07901ac76fc8c812;p=thirdparty%2Flibarchive.git Make lrzip and lzop write filters set correct filter name and code even if thery actually use archive_write_filter_program. --- diff --git a/libarchive/archive_write_add_filter_lrzip.c b/libarchive/archive_write_add_filter_lrzip.c index 4e2fa8aaa..917b2b83e 100644 --- a/libarchive/archive_write_add_filter_lrzip.c +++ b/libarchive/archive_write_add_filter_lrzip.c @@ -28,13 +28,16 @@ __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; diff --git a/libarchive/archive_write_add_filter_lzop.c b/libarchive/archive_write_add_filter_lzop.c index 3b963d83b..d453438f3 100644 --- a/libarchive/archive_write_add_filter_lzop.c +++ b/libarchive/archive_write_add_filter_lzop.c @@ -28,12 +28,16 @@ __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; diff --git a/libarchive/archive_write_add_filter_program.c b/libarchive/archive_write_add_filter_program.c index dc72d39b1..cccf70597 100644 --- a/libarchive/archive_write_add_filter_program.c +++ b/libarchive/archive_write_add_filter_program.c @@ -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: diff --git a/libarchive/archive_write_private.h b/libarchive/archive_write_private.h index 06a24a8a6..5a311f3ca 100644 --- a/libarchive/archive_write_private.h +++ b/libarchive/archive_write_private.h @@ -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 diff --git a/libarchive/test/test_write_filter_lrzip.c b/libarchive/test/test_write_filter_lrzip.c index e04ddb02b..f28c83583 100644 --- a/libarchive/test/test_write_filter_lrzip.c +++ b/libarchive/test/test_write_filter_lrzip.c @@ -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); diff --git a/libarchive/test/test_write_filter_lzop.c b/libarchive/test/test_write_filter_lzop.c index d16a8cace..083e80e13 100644 --- a/libarchive/test/test_write_filter_lzop.c +++ b/libarchive/test/test_write_filter_lzop.c @@ -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));