even if thery actually use archive_write_filter_program.
__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;
__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;
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
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);
}
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);
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);
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:
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
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);
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));