]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Improve error messages by including the name of the external program being used
authorTim Kientzle <kientzle@acm.org>
Sun, 31 Jan 2016 20:33:03 +0000 (12:33 -0800)
committerTim Kientzle <kientzle@acm.org>
Sun, 31 Jan 2016 20:33:03 +0000 (12:33 -0800)
libarchive/archive_write_add_filter_grzip.c
libarchive/archive_write_add_filter_lrzip.c
libarchive/archive_write_add_filter_lz4.c
libarchive/archive_write_add_filter_lzop.c
libarchive/archive_write_add_filter_program.c
libarchive/archive_write_private.h

index 8dc287eae0330cc3b6152fb31a101ca50cd48c45..371102d74c05e12a8c523f9c1bea24feaca94bd5 100644 (file)
@@ -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");
index da1cf5e4c9ba3d9d554b170ae838524933c42ab6..e215f8903259ec94beb1f4f7eb49b3670dd814cf 100644 (file)
@@ -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");
index 21d4cf9c3081a73ce649cfbd2fb3faed9231eb21..426e140abe108353a3abdc85f3741ffaa1a07d76 100644 (file)
@@ -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");
index c666551d1da8f031114db619593d91ea21d0be41..ad705c4a068720aeee480fb4ae5cd534a9fec976 100644 (file)
@@ -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");
index ad3b8531ff7979f21aa61f6735761407488c74ef..31a1b6f96786532021ae96dc480e935ff399982c 100644 (file)
@@ -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);
index 0c3cc0c6f4d0662f6482469f119003cac4631656..0dfd1b1bca918f1934d8c8f7cccc6eb5a16a495f 100644 (file)
@@ -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 *);