From 7070857b47373dafc1ab93fadec79243da589a1a Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Sat, 4 May 2019 20:47:39 +0200 Subject: Rename lzma compressor to xz, zlib compressor to gzip Stick to the terminology that SquashFS uses. SquashFS uses "lzma" to refere to lzma1, "xz" to refere to lzma2 and confusingly "gzip" to refere to raw zlib deflate. We can avoid a lot of confusion by _consistently_ using the same terminology. Signed-off-by: David Oberhollenzer --- configure.ac | 38 +++++++++--------- lib/Makemodule.am | 12 +++--- lib/comp/compressor.c | 8 ++-- lib/comp/gzip.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++ lib/comp/internal.h | 4 +- lib/comp/lzma.c | 90 ------------------------------------------ lib/comp/xz.c | 90 ++++++++++++++++++++++++++++++++++++++++++ lib/comp/zlib.c | 107 -------------------------------------------------- mkfs/Makemodule.am | 4 +- unpack/Makemodule.am | 4 +- 10 files changed, 232 insertions(+), 232 deletions(-) create mode 100644 lib/comp/gzip.c delete mode 100644 lib/comp/lzma.c create mode 100644 lib/comp/xz.c delete mode 100644 lib/comp/zlib.c diff --git a/configure.ac b/configure.ac index 51c61a4..4cb29bd 100644 --- a/configure.ac +++ b/configure.ac @@ -41,41 +41,41 @@ AC_SUBST([WARN_CFLAGS]) ##### config options ##### -AC_ARG_WITH([zlib], - [AS_HELP_STRING([--without-zlib], - [Build without zlib compression support])], +AC_ARG_WITH([gzip], + [AS_HELP_STRING([--without-gzip], + [Build without gzip compression support])], [case "${withval}" in - yes) AM_CONDITIONAL([WITH_ZLIB], [true]) ;; - no) AM_CONDITIONAL([WITH_ZLIB], [false]) ;; - *) AC_MSG_ERROR([bad value ${withval} for --without-zlib]) ;; + yes) AM_CONDITIONAL([WITH_GZIP], [true]) ;; + no) AM_CONDITIONAL([WITH_GZIP], [false]) ;; + *) AC_MSG_ERROR([bad value ${withval} for --without-gzip]) ;; esac], - [AM_CONDITIONAL([WITH_ZLIB], [true])]) + [AM_CONDITIONAL([WITH_GZIP], [true])]) -AC_ARG_WITH([lzma], - [AS_HELP_STRING([--without-lzma], - [Build without lzma compression support])], +AC_ARG_WITH([xz], + [AS_HELP_STRING([--without-xz], + [Build without xz compression support])], [case "${withval}" in - yes) AM_CONDITIONAL([WITH_LZMA], [true]) ;; - no) AM_CONDITIONAL([WITH_LZMA], [false]) ;; - *) AC_MSG_ERROR([bad value ${withval} for --without-lzma]) ;; + yes) AM_CONDITIONAL([WITH_XZ], [true]) ;; + no) AM_CONDITIONAL([WITH_XZ], [false]) ;; + *) AC_MSG_ERROR([bad value ${withval} for --without-xz]) ;; esac], - [AM_CONDITIONAL([WITH_LZMA], [true])]) + [AM_CONDITIONAL([WITH_XZ], [true])]) ##### search for dependencies ##### need_zlib="no" -need_lzma="no" +need_xz="no" -AM_COND_IF([WITH_ZLIB], [need_zlib="yes"]) -AM_COND_IF([WITH_LZMA], [need_lzma="yes"]) +AM_COND_IF([WITH_GZIP], [need_zlib="yes"]) +AM_COND_IF([WITH_XZ], [need_xz="yes"]) if test "x$need_zlib" = "xyes"; then PKG_CHECK_MODULES(ZLIB, [zlib], [], [AC_MSG_ERROR([cannot find zlib])]) fi -if test "x$need_lzma" = "xyes"; then +if test "x$need_xz" = "xyes"; then PKG_CHECK_MODULES(XZ, [liblzma >= 5.0.0], [], - [AC_MSG_ERROR([cannot find lzma])]) + [AC_MSG_ERROR([cannot find xz sdk])]) fi ##### generate output ##### diff --git a/lib/Makemodule.am b/lib/Makemodule.am index 691d6df..d174c99 100644 --- a/lib/Makemodule.am +++ b/lib/Makemodule.am @@ -21,18 +21,18 @@ libutil_a_SOURCES = lib/util/canonicalize_name.c lib/util/write_retry.c libutil_a_SOURCES += lib/util/read_retry.c include/util.h libutil_a_SOURCES += lib/util/print_version.c lib/util/mkdir_p.c -if WITH_ZLIB -libcompress_a_SOURCES += lib/comp/zlib.c +if WITH_GZIP +libcompress_a_SOURCES += lib/comp/gzip.c libcompress_a_CFLAGS += $(ZLIB_CFLAGS) -libcompress_a_CPPFLAGS += -DWITH_ZLIB +libcompress_a_CPPFLAGS += -DWITH_GZIP endif -if WITH_LZMA -libcompress_a_SOURCES += lib/comp/lzma.c +if WITH_XZ +libcompress_a_SOURCES += lib/comp/xz.c libcompress_a_CFLAGS += $(XZ_CFLAGS) -libcompress_a_CPPFLAGS += -DWITH_LZMA +libcompress_a_CPPFLAGS += -DWITH_XZ endif noinst_LIBRARIES += libfstree.a libcompress.a libutil.a libsquashfs.a diff --git a/lib/comp/compressor.c b/lib/comp/compressor.c index 3bc2b4d..1ede111 100644 --- a/lib/comp/compressor.c +++ b/lib/comp/compressor.c @@ -6,11 +6,11 @@ typedef compressor_t *(*compressor_fun_t)(bool compress, size_t block_size); static compressor_fun_t compressors[SQFS_COMP_MAX + 1] = { -#ifdef WITH_ZLIB - [SQFS_COMP_GZIP] = create_zlib_compressor, +#ifdef WITH_GZIP + [SQFS_COMP_GZIP] = create_gzip_compressor, #endif -#ifdef WITH_LZMA - [SQFS_COMP_XZ] = create_lzma_compressor, +#ifdef WITH_XZ + [SQFS_COMP_XZ] = create_xz_compressor, #endif }; diff --git a/lib/comp/gzip.c b/lib/comp/gzip.c new file mode 100644 index 0000000..ea634b8 --- /dev/null +++ b/lib/comp/gzip.c @@ -0,0 +1,107 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +#include +#include +#include +#include +#include + +#include "internal.h" + +typedef struct { + compressor_t base; + + z_stream strm; + bool compress; + + size_t block_size; +} gzip_compressor_t; + +static void gzip_destroy(compressor_t *base) +{ + gzip_compressor_t *gzip = (gzip_compressor_t *)base; + + if (gzip->compress) { + deflateEnd(&gzip->strm); + } else { + inflateEnd(&gzip->strm); + } + + free(gzip); +} + +static ssize_t gzip_do_block(compressor_t *base, const uint8_t *in, + size_t size, uint8_t *out, size_t outsize) +{ + gzip_compressor_t *gzip = (gzip_compressor_t *)base; + size_t written; + int ret; + + if (gzip->compress) { + ret = deflateReset(&gzip->strm); + } else { + ret = inflateReset(&gzip->strm); + } + + if (ret != Z_OK) { + fputs("resetting zlib stream failed\n", stderr); + return -1; + } + + gzip->strm.next_in = (void *)in; + gzip->strm.avail_in = size; + gzip->strm.next_out = out; + gzip->strm.avail_out = outsize; + + if (gzip->compress) { + ret = deflate(&gzip->strm, Z_FINISH); + } else { + ret = inflate(&gzip->strm, Z_FINISH); + } + + if (ret == Z_STREAM_END) { + written = gzip->strm.total_out; + + if (gzip->compress && written >= size) + return 0; + + return (ssize_t)written; + } + + if (ret != Z_OK) { + fputs("gzip block processing failed\n", stderr); + return -1; + } + + return 0; +} + +compressor_t *create_gzip_compressor(bool compress, size_t block_size) +{ + gzip_compressor_t *gzip = calloc(1, sizeof(*gzip)); + compressor_t *base = (compressor_t *)gzip; + int ret; + + if (gzip == NULL) { + perror("creating gzip compressor"); + return NULL; + } + + gzip->compress = compress; + gzip->block_size = block_size; + base->do_block = gzip_do_block; + base->destroy = gzip_destroy; + + if (compress) { + ret = deflateInit(&gzip->strm, Z_BEST_COMPRESSION); + } else { + ret = inflateInit(&gzip->strm); + } + + if (ret != Z_OK) { + fputs("internal error creating zlib stream\n", stderr); + free(gzip); + return NULL; + } + + return base; +} diff --git a/lib/comp/internal.h b/lib/comp/internal.h index 17fffe1..d1cf1f2 100644 --- a/lib/comp/internal.h +++ b/lib/comp/internal.h @@ -4,8 +4,8 @@ #include "compress.h" -compressor_t *create_lzma_compressor(bool compress, size_t block_size); +compressor_t *create_xz_compressor(bool compress, size_t block_size); -compressor_t *create_zlib_compressor(bool compress, size_t block_size); +compressor_t *create_gzip_compressor(bool compress, size_t block_size); #endif /* INTERNAL_H */ diff --git a/lib/comp/lzma.c b/lib/comp/lzma.c deleted file mode 100644 index 3169c33..0000000 --- a/lib/comp/lzma.c +++ /dev/null @@ -1,90 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -#include -#include -#include -#include -#include - -#include "internal.h" - -typedef struct { - compressor_t base; - size_t block_size; -} lzma_compressor_t; - -static ssize_t lzma_comp_block(compressor_t *base, const uint8_t *in, - size_t size, uint8_t *out, size_t outsize) -{ - lzma_compressor_t *lzma = (lzma_compressor_t *)base; - lzma_filter filters[5]; - lzma_options_lzma opt; - size_t written = 0; - lzma_ret ret; - - if (lzma_lzma_preset(&opt, LZMA_PRESET_DEFAULT)) { - fputs("error initializing LZMA options\n", stderr); - return -1; - } - - opt.dict_size = lzma->block_size; - - filters[0].id = LZMA_FILTER_LZMA2; - filters[0].options = &opt; - - filters[1].id = LZMA_VLI_UNKNOWN; - filters[1].options = NULL; - - ret = lzma_stream_buffer_encode(filters, LZMA_CHECK_CRC32, NULL, - in, size, out, &written, outsize); - - if (ret == LZMA_OK) - return (written >= size) ? 0 : written; - - if (ret != LZMA_BUF_ERROR) { - fputs("lzma block compress failed\n", stderr); - return -1; - } - - return 0; -} - -static ssize_t lzma_uncomp_block(compressor_t *base, const uint8_t *in, - size_t size, uint8_t *out, size_t outsize) -{ - uint64_t memlimit = 32 * 1024 * 1024; - size_t dest_pos = 0; - size_t src_pos = 0; - lzma_ret ret; - (void)base; - - ret = lzma_stream_buffer_decode(&memlimit, 0, NULL, - in, &src_pos, size, - out, &dest_pos, outsize); - - if (ret == LZMA_OK && size == src_pos) - return (ssize_t)dest_pos; - - fputs("lzma block extract failed\n", stderr); - return -1; -} - -static void lzma_destroy(compressor_t *base) -{ - free(base); -} - -compressor_t *create_lzma_compressor(bool compress, size_t block_size) -{ - lzma_compressor_t *lzma = calloc(1, sizeof(*lzma)); - compressor_t *base = (compressor_t *)lzma; - - if (lzma == NULL) { - perror("creating lzma stream"); - return NULL; - } - - lzma->block_size = block_size; - base->destroy = lzma_destroy; - base->do_block = compress ? lzma_comp_block : lzma_uncomp_block; - return base; -} diff --git a/lib/comp/xz.c b/lib/comp/xz.c new file mode 100644 index 0000000..98d740c --- /dev/null +++ b/lib/comp/xz.c @@ -0,0 +1,90 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +#include +#include +#include +#include +#include + +#include "internal.h" + +typedef struct { + compressor_t base; + size_t block_size; +} xz_compressor_t; + +static ssize_t xz_comp_block(compressor_t *base, const uint8_t *in, + size_t size, uint8_t *out, size_t outsize) +{ + xz_compressor_t *xz = (xz_compressor_t *)base; + lzma_filter filters[5]; + lzma_options_lzma opt; + size_t written = 0; + lzma_ret ret; + + if (lzma_lzma_preset(&opt, LZMA_PRESET_DEFAULT)) { + fputs("error initializing xz options\n", stderr); + return -1; + } + + opt.dict_size = xz->block_size; + + filters[0].id = LZMA_FILTER_LZMA2; + filters[0].options = &opt; + + filters[1].id = LZMA_VLI_UNKNOWN; + filters[1].options = NULL; + + ret = lzma_stream_buffer_encode(filters, LZMA_CHECK_CRC32, NULL, + in, size, out, &written, outsize); + + if (ret == LZMA_OK) + return (written >= size) ? 0 : written; + + if (ret != LZMA_BUF_ERROR) { + fputs("xz block compress failed\n", stderr); + return -1; + } + + return 0; +} + +static ssize_t xz_uncomp_block(compressor_t *base, const uint8_t *in, + size_t size, uint8_t *out, size_t outsize) +{ + uint64_t memlimit = 32 * 1024 * 1024; + size_t dest_pos = 0; + size_t src_pos = 0; + lzma_ret ret; + (void)base; + + ret = lzma_stream_buffer_decode(&memlimit, 0, NULL, + in, &src_pos, size, + out, &dest_pos, outsize); + + if (ret == LZMA_OK && size == src_pos) + return (ssize_t)dest_pos; + + fputs("xz block extract failed\n", stderr); + return -1; +} + +static void xz_destroy(compressor_t *base) +{ + free(base); +} + +compressor_t *create_xz_compressor(bool compress, size_t block_size) +{ + xz_compressor_t *xz = calloc(1, sizeof(*xz)); + compressor_t *base = (compressor_t *)xz; + + if (xz == NULL) { + perror("creating xz compressor"); + return NULL; + } + + xz->block_size = block_size; + base->destroy = xz_destroy; + base->do_block = compress ? xz_comp_block : xz_uncomp_block; + return base; +} diff --git a/lib/comp/zlib.c b/lib/comp/zlib.c deleted file mode 100644 index f151132..0000000 --- a/lib/comp/zlib.c +++ /dev/null @@ -1,107 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -#include -#include -#include -#include -#include - -#include "internal.h" - -typedef struct { - compressor_t base; - - z_stream strm; - bool compress; - - size_t block_size; -} zlib_compressor_t; - -static void zlib_destroy(compressor_t *base) -{ - zlib_compressor_t *zlib = (zlib_compressor_t *)base; - - if (zlib->compress) { - deflateEnd(&zlib->strm); - } else { - inflateEnd(&zlib->strm); - } - - free(zlib); -} - -static ssize_t zlib_do_block(compressor_t *base, const uint8_t *in, - size_t size, uint8_t *out, size_t outsize) -{ - zlib_compressor_t *zlib = (zlib_compressor_t *)base; - size_t written; - int ret; - - if (zlib->compress) { - ret = deflateReset(&zlib->strm); - } else { - ret = inflateReset(&zlib->strm); - } - - if (ret != Z_OK) { - fputs("resetting zlib stream failed\n", stderr); - return -1; - } - - zlib->strm.next_in = (void *)in; - zlib->strm.avail_in = size; - zlib->strm.next_out = out; - zlib->strm.avail_out = outsize; - - if (zlib->compress) { - ret = deflate(&zlib->strm, Z_FINISH); - } else { - ret = inflate(&zlib->strm, Z_FINISH); - } - - if (ret == Z_STREAM_END) { - written = zlib->strm.total_out; - - if (zlib->compress && written >= size) - return 0; - - return (ssize_t)written; - } - - if (ret != Z_OK) { - fputs("zlib block processing failed\n", stderr); - return -1; - } - - return 0; -} - -compressor_t *create_zlib_compressor(bool compress, size_t block_size) -{ - zlib_compressor_t *zlib = calloc(1, sizeof(*zlib)); - compressor_t *base = (compressor_t *)zlib; - int ret; - - if (zlib == NULL) { - perror("creating zlib stream"); - return NULL; - } - - zlib->compress = compress; - zlib->block_size = block_size; - base->do_block = zlib_do_block; - base->destroy = zlib_destroy; - - if (compress) { - ret = deflateInit(&zlib->strm, Z_BEST_COMPRESSION); - } else { - ret = inflateInit(&zlib->strm); - } - - if (ret != Z_OK) { - fputs("internal error creating zlib stream\n", stderr); - free(zlib); - return NULL; - } - - return base; -} diff --git a/mkfs/Makemodule.am b/mkfs/Makemodule.am index fb56fcf..3914e71 100644 --- a/mkfs/Makemodule.am +++ b/mkfs/Makemodule.am @@ -2,11 +2,11 @@ mksquashfs_SOURCES = mkfs/mksquashfs.c mkfs/mksquashfs.h mkfs/block.c mksquashfs_SOURCES += mkfs/options.c mkfs/meta.c mksquashfs_LDADD = libsquashfs.a libfstree.a libcompress.a libutil.a -if WITH_LZMA +if WITH_XZ mksquashfs_LDADD += $(XZ_LIBS) endif -if WITH_ZLIB +if WITH_GZIP mksquashfs_LDADD += $(ZLIB_LIBS) endif diff --git a/unpack/Makemodule.am b/unpack/Makemodule.am index 7d71bf5..ccb5707 100644 --- a/unpack/Makemodule.am +++ b/unpack/Makemodule.am @@ -4,11 +4,11 @@ unsquashfs_SOURCES += unpack/list_files.c unpack/extract_file.c unsquashfs_SOURCES += unpack/restore_fstree.c unsquashfs_LDADD = libsquashfs.a libfstree.a libcompress.a libutil.a -if WITH_LZMA +if WITH_XZ unsquashfs_LDADD += $(XZ_LIBS) endif -if WITH_ZLIB +if WITH_GZIP unsquashfs_LDADD += $(ZLIB_LIBS) endif -- cgit v1.2.3