]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
zstd: Address comments by @terrelln
authorSean Purcell <me@seanp.xyz>
Tue, 25 Apr 2017 22:10:28 +0000 (15:10 -0700)
committerSean Purcell <iburinoc@gmail.com>
Tue, 16 May 2017 03:06:49 +0000 (23:06 -0400)
libarchive/archive_read_support_filter_zstd.c
libarchive/archive_write_add_filter_zstd.c
tar/creation_set.c

index ea12206fea808e0daa867483b3c564559aca69bb..ebe1a22245ac2c81e3d1fd16e4093909ed3dc663 100644 (file)
@@ -86,7 +86,7 @@ archive_read_support_filter_zstd(struct archive *_a)
        struct archive_read_filter_bidder *bidder;
 
        archive_check_magic(_a, ARCHIVE_READ_MAGIC,
-           ARCHIVE_STATE_NEW, "archive_read_support_filter_gzip");
+           ARCHIVE_STATE_NEW, "archive_read_support_filter_zstd");
 
        if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
                return (ARCHIVE_FATAL);
@@ -173,23 +173,17 @@ zstd_bidder_init(struct archive_read_filter *self)
 
        state = (struct private_data *)calloc(sizeof(*state), 1);
        out_block = (unsigned char *)malloc(out_block_size);
-       if (state == NULL || out_block == NULL) {
-               free(out_block);
-               free(state);
-               archive_set_error(&self->archive->archive, ENOMEM,
-                   "Can't allocate data for zstd decompression");
-               return (ARCHIVE_FATAL);
-       }
 
        self->data = state;
 
        state->dstream = ZSTD_createDStream();
 
-       if (!state->dstream) {
+       if (state == NULL || out_block == NULL || state->dstream == NULL) {
                free(out_block);
                free(state);
+        ZSTD_freeDStream(state->dstream); /* supports free on NULL */
                archive_set_error(&self->archive->archive, ENOMEM,
-                   "Can't create zstd decompressor object");
+                   "Can't allocate data for zstd decompression");
                return (ARCHIVE_FATAL);
        }
 
@@ -223,8 +217,6 @@ zstd_filter_read(struct archive_read_filter *self, const void **p)
                if (!state->in_frame) {
                        const size_t ret = ZSTD_initDStream(state->dstream);
                        if (ZSTD_isError(ret)) {
-                               free(state->out_block);
-                               free(state);
                                archive_set_error(&self->archive->archive,
                                    ARCHIVE_ERRNO_MISC,
                                    "Error initializing zstd decompressor: %s",
index 2b56040a035393ce5a2ba95cdd63f59155c464fd..671fc6affbaa31aaa0952e9af40e0105ff0867cf 100644 (file)
@@ -114,7 +114,6 @@ archive_write_add_filter_zstd(struct archive *_a)
                archive_set_error(&a->archive, ENOMEM, "Out of memory");
                return (ARCHIVE_FATAL);
        }
-       data->compression_level = 0;
        archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
            "Using external zstd program");
        return (ARCHIVE_WARN);
index d47edd76648f86952014a4b49f6bb4b7f4eafe67..42ce127e9e3310d4e8b7bdc3598b954d3c342d73 100644 (file)
@@ -76,14 +76,14 @@ get_filter_code(const char *suffix)
                { ".lrz",       "lrzip" },
                { ".lz",        "lzip" },
                { ".lz4",       "lz4" },
-               { ".zstd",      "zstd"},
+               { ".zst",       "zstd"},
                { ".lzo",       "lzop" },
                { ".lzma",      "lzma" },
                { ".uu",        "uuencode" },
                { ".xz",        "xz" },
                { NULL,         NULL }
        };
-       
+
        return get_suffix_code(filters, suffix);
 }