From: Tim Kientzle Date: Sun, 31 Jan 2016 20:33:03 +0000 (-0800) Subject: Improve error messages by including the name of the external program being used X-Git-Tag: v3.1.900a~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=67028d9f3c484810c3485f13737f01dbaa204ea8;p=thirdparty%2Flibarchive.git Improve error messages by including the name of the external program being used --- diff --git a/libarchive/archive_write_add_filter_grzip.c b/libarchive/archive_write_add_filter_grzip.c index 8dc287eae..371102d74 100644 --- a/libarchive/archive_write_add_filter_grzip.c +++ b/libarchive/archive_write_add_filter_grzip.c @@ -63,7 +63,7 @@ archive_write_add_filter_grzip(struct archive *_a) archive_set_error(_a, ENOMEM, "Can't allocate memory"); return (ARCHIVE_FATAL); } - data->pdata = __archive_write_program_allocate(); + data->pdata = __archive_write_program_allocate("grzip"); if (data->pdata == NULL) { free(data); archive_set_error(_a, ENOMEM, "Can't allocate memory"); diff --git a/libarchive/archive_write_add_filter_lrzip.c b/libarchive/archive_write_add_filter_lrzip.c index da1cf5e4c..e215f8903 100644 --- a/libarchive/archive_write_add_filter_lrzip.c +++ b/libarchive/archive_write_add_filter_lrzip.c @@ -69,7 +69,7 @@ archive_write_add_filter_lrzip(struct archive *_a) archive_set_error(_a, ENOMEM, "Can't allocate memory"); return (ARCHIVE_FATAL); } - data->pdata = __archive_write_program_allocate(); + data->pdata = __archive_write_program_allocate("lrzip"); if (data->pdata == NULL) { free(data); archive_set_error(_a, ENOMEM, "Can't allocate memory"); diff --git a/libarchive/archive_write_add_filter_lz4.c b/libarchive/archive_write_add_filter_lz4.c index 21d4cf9c3..426e140ab 100644 --- a/libarchive/archive_write_add_filter_lz4.c +++ b/libarchive/archive_write_add_filter_lz4.c @@ -137,7 +137,7 @@ archive_write_add_filter_lz4(struct archive *_a) * We don't have lz4 library, and execute external lz4 program * instead. */ - data->pdata = __archive_write_program_allocate(); + data->pdata = __archive_write_program_allocate("lz4"); if (data->pdata == NULL) { free(data); archive_set_error(&a->archive, ENOMEM, "Out of memory"); diff --git a/libarchive/archive_write_add_filter_lzop.c b/libarchive/archive_write_add_filter_lzop.c index c666551d1..ad705c4a0 100644 --- a/libarchive/archive_write_add_filter_lzop.c +++ b/libarchive/archive_write_add_filter_lzop.c @@ -173,7 +173,7 @@ archive_write_add_filter_lzop(struct archive *_a) data->compression_level = 5; return (ARCHIVE_OK); #else - data->pdata = __archive_write_program_allocate(); + data->pdata = __archive_write_program_allocate("lzop"); if (data->pdata == NULL) { free(data); archive_set_error(_a, ENOMEM, "Can't allocate memory"); diff --git a/libarchive/archive_write_add_filter_program.c b/libarchive/archive_write_add_filter_program.c index ad3b8531f..31a1b6f96 100644 --- a/libarchive/archive_write_add_filter_program.c +++ b/libarchive/archive_write_add_filter_program.c @@ -68,6 +68,7 @@ struct archive_write_program_data { char *child_buf; size_t child_buf_len, child_buf_avail; + char *program_name; }; struct private_data { @@ -105,7 +106,7 @@ archive_write_add_filter_program(struct archive *_a, const char *cmd) if (data->cmd == NULL) goto memerr; - data->pdata = __archive_write_program_allocate(); + data->pdata = __archive_write_program_allocate(cmd); if (data->pdata == NULL) goto memerr; @@ -174,7 +175,7 @@ archive_compressor_program_free(struct archive_write_filter *f) * Allocate resources for executing an external program. */ struct archive_write_program_data * -__archive_write_program_allocate(void) +__archive_write_program_allocate(const char *program) { struct archive_write_program_data *data; @@ -183,6 +184,7 @@ __archive_write_program_allocate(void) return (data); data->child_stdin = -1; data->child_stdout = -1; + data->program_name = strdup(program); return (data); } @@ -323,7 +325,6 @@ int __archive_write_program_write(struct archive_write_filter *f, struct archive_write_program_data *data, const void *buff, size_t length) { - struct private_data *private = (struct private_data *)f->data; ssize_t ret; const char *buf; @@ -335,7 +336,7 @@ __archive_write_program_write(struct archive_write_filter *f, ret = child_write(f, data, buf, length); if (ret == -1 || ret == 0) { archive_set_error(f->archive, EIO, - "Can't write to program: %s", private->cmd); + "Can't write to program: %s", data->program_name); return (ARCHIVE_FATAL); } length -= ret; @@ -351,7 +352,6 @@ int __archive_write_program_close(struct archive_write_filter *f, struct archive_write_program_data *data) { - struct private_data *private = (struct private_data *)f->data; int ret, r1, status; ssize_t bytes_read; @@ -375,7 +375,7 @@ __archive_write_program_close(struct archive_write_filter *f, if (bytes_read == -1) { archive_set_error(f->archive, errno, - "Error reading from program: %s", private->cmd); + "Error reading from program: %s", data->program_name); ret = ARCHIVE_FATAL; goto cleanup; } @@ -405,7 +405,7 @@ cleanup: if (status != 0) { archive_set_error(f->archive, EIO, - "Error closing program: %s", private->cmd); + "Error closing program: %s", data->program_name); ret = ARCHIVE_FATAL; } r1 = __archive_write_close_filter(f->next_filter); diff --git a/libarchive/archive_write_private.h b/libarchive/archive_write_private.h index 0c3cc0c6f..0dfd1b1bc 100644 --- a/libarchive/archive_write_private.h +++ b/libarchive/archive_write_private.h @@ -144,7 +144,7 @@ __archive_write_format_header_ustar(struct archive_write *, char buff[512], struct archive_string_conv *); struct archive_write_program_data; -struct archive_write_program_data * __archive_write_program_allocate(void); +struct archive_write_program_data * __archive_write_program_allocate(const char *program_name); int __archive_write_program_free(struct archive_write_program_data *); int __archive_write_program_open(struct archive_write_filter *, struct archive_write_program_data *, const char *);