]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
filter: Set function pointers in add_filter
authorTobias Stoeckmann <tobias@stoeckmann.org>
Fri, 17 Jul 2026 15:18:06 +0000 (17:18 +0200)
committerTobias Stoeckmann <tobias@stoeckmann.org>
Fri, 17 Jul 2026 15:43:15 +0000 (17:43 +0200)
Set function pointers in add filter functions, not in open.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
libarchive/archive_write_add_filter_bzip2.c
libarchive/archive_write_add_filter_compress.c
libarchive/archive_write_add_filter_gzip.c
libarchive/archive_write_add_filter_lz4.c
libarchive/archive_write_add_filter_xz.c
libarchive/archive_write_add_filter_zstd.c

index 9ceb746f47287f72fc49b78ec9ff3d452db2d2d8..b917971562dc3f0cc30e5dd23906caa35075ca21 100644 (file)
@@ -98,6 +98,7 @@ archive_write_add_filter_bzip2(struct archive *_a)
        f->close = &archive_compressor_bzip2_close;
        f->free = &archive_compressor_bzip2_free;
        f->open = &archive_compressor_bzip2_open;
+       f->write = archive_compressor_bzip2_write;
        f->code = ARCHIVE_FILTER_BZIP2;
        f->name = "bzip2";
 #if defined(HAVE_BZLIB_H) && defined(BZ_CONFIG_ERROR)
@@ -199,7 +200,6 @@ archive_compressor_bzip2_open(struct archive_write_filter *f)
        memset(&data->stream, 0, sizeof(data->stream));
        data->stream.next_out = data->compressed;
        data->stream.avail_out = (uint32_t)data->compressed_buffer_size;
-       f->write = archive_compressor_bzip2_write;
 
        /* Initialize compression library */
        ret = BZ2_bzCompressInit(&(data->stream),
@@ -370,7 +370,6 @@ archive_compressor_bzip2_open(struct archive_write_filter *f)
                archive_strcat(&as, " -");
                archive_strappend_char(&as, '0' + data->compression_level);
        }
-       f->write = archive_compressor_bzip2_write;
 
        r = __archive_write_program_open(f, data->pdata, as.s);
        archive_string_free(&as);
index 0e9588585f3e7d2fa38836e9c82e0178582ada9a..11b314f4b5393dd59398767c4e1b27dbe9dd13a5 100644 (file)
@@ -134,6 +134,9 @@ archive_write_add_filter_compress(struct archive *_a)
        archive_check_magic(&a->archive, ARCHIVE_WRITE_MAGIC,
            ARCHIVE_STATE_NEW, "archive_write_add_filter_compress");
        f->open = &archive_compressor_compress_open;
+       f->write = archive_compressor_compress_write;
+       f->close = archive_compressor_compress_close;
+       f->free = archive_compressor_compress_free;
        f->code = ARCHIVE_FILTER_COMPRESS;
        f->name = "compress";
        return (ARCHIVE_OK);
@@ -174,10 +177,6 @@ archive_compressor_compress_open(struct archive_write_filter *f)
                return (ARCHIVE_FATAL);
        }
 
-       f->write = archive_compressor_compress_write;
-       f->close = archive_compressor_compress_close;
-       f->free = archive_compressor_compress_free;
-
        state->max_maxcode = 0x10000;   /* Should NEVER generate this code. */
        state->in_count = 0;            /* Length of input. */
        state->bit_buf = 0;
index 48245f943238fa219dfd03a89b35fea39339547e..9628fd39dfe307429a9d8c1b66b4fd1e02f2a46d 100644 (file)
@@ -111,6 +111,7 @@ archive_write_add_filter_gzip(struct archive *_a)
        }
        f->data = data;
        f->open = &archive_compressor_gzip_open;
+       f->write = archive_compressor_gzip_write;
        f->options = &archive_compressor_gzip_options;
        f->close = &archive_compressor_gzip_close;
        f->free = &archive_compressor_gzip_free;
@@ -266,8 +267,6 @@ archive_compressor_gzip_open(struct archive_write_filter *f)
                }
        }
 
-       f->write = archive_compressor_gzip_write;
-
        /* Initialize compression library. */
        init_success = deflateInit2(&(data->stream),
            data->compression_level,
@@ -453,7 +452,6 @@ archive_compressor_gzip_open(struct archive_write_filter *f)
                /* Save timestamp. */
                archive_strcat(&as, " -N");
 
-       f->write = archive_compressor_gzip_write;
        r = __archive_write_program_open(f, data->pdata, as.s);
        archive_string_free(&as);
        return (r);
index 9f2f2694aa22925a91e4be48a716d92b00c2baab..5c4b1fc2a310522fc3e5d44a7f65395afd6907a5 100644 (file)
@@ -126,6 +126,7 @@ archive_write_add_filter_lz4(struct archive *_a)
        f->close = &archive_filter_lz4_close;
        f->free = &archive_filter_lz4_free;
        f->open = &archive_filter_lz4_open;
+       f->write = archive_filter_lz4_write;
        f->code = ARCHIVE_FILTER_LZ4;
        f->name = "lz4";
 #if defined(HAVE_LIBLZ4) && LZ4_VERSION_MAJOR >= 1 && LZ4_VERSION_MINOR >= 2
@@ -286,8 +287,6 @@ archive_filter_lz4_open(struct archive_write_filter *f)
                return (ARCHIVE_FATAL);
        }
 
-       f->write = archive_filter_lz4_write;
-
        return (ARCHIVE_OK);
 }
 
@@ -672,8 +671,6 @@ archive_filter_lz4_open(struct archive_write_filter *f)
        if (data->block_independence == 0)
                archive_strcat(&as, " -BD");
 
-       f->write = archive_filter_lz4_write;
-
        r = __archive_write_program_open(f, data->pdata, as.s);
        archive_string_free(&as);
        return (r);
index d8b6c5d6687e3f71875d425f9f7158ec718e4040..c72154cede7d6b385b648894d9ffc663e1d820ec 100644 (file)
@@ -156,6 +156,7 @@ common_setup(struct archive_write_filter *f)
        data->compression_level = LZMA_PRESET_DEFAULT;
        data->threads = 1;
        f->open = &archive_compressor_xz_open;
+       f->write = archive_compressor_xz_write;
        f->close = archive_compressor_xz_close;
        f->free = archive_compressor_xz_free;
        f->options = &archive_compressor_xz_options;
@@ -331,8 +332,6 @@ archive_compressor_xz_open(struct archive_write_filter *f)
                }
        }
 
-       f->write = archive_compressor_xz_write;
-
        /* Initialize compression library. */
        if (f->code == ARCHIVE_FILTER_LZIP) {
                const struct option_value *val =
index 8e68dfbae55bc84e07501a627c46f06ebf9ec142..81b3b095c39f02d0b8061ca1a797cd55b1dfaa8f 100644 (file)
@@ -127,6 +127,7 @@ archive_write_add_filter_zstd(struct archive *_a)
        }
        f->data = data;
        f->open = &archive_compressor_zstd_open;
+       f->write = archive_compressor_zstd_write;
        f->options = &archive_compressor_zstd_options;
        f->flush = &archive_compressor_zstd_flush;
        f->close = &archive_compressor_zstd_close;
@@ -397,8 +398,6 @@ archive_compressor_zstd_open(struct archive_write_filter *f)
                }
        }
 
-       f->write = archive_compressor_zstd_write;
-
        if (ZSTD_isError(ZSTD_initCStream(data->cstream,
            data->compression_level))) {
                archive_set_error(f->archive, ARCHIVE_ERRNO_MISC,
@@ -564,7 +563,6 @@ archive_compressor_zstd_open(struct archive_write_filter *f)
                archive_string_sprintf(&as, " --long=%d", data->long_distance);
        }
 
-       f->write = archive_compressor_zstd_write;
        r = __archive_write_program_open(f, data->pdata, as.s);
        archive_string_free(&as);
        return (r);