From cdccc69c62579b0c13b35fad0728079652b8f3c9 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Tue, 31 Jan 2023 11:21:30 +0100 Subject: Move library source into src sub-directory Signed-off-by: David Oberhollenzer --- lib/common/src/compress.c | 88 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 lib/common/src/compress.c (limited to 'lib/common/src/compress.c') diff --git a/lib/common/src/compress.c b/lib/common/src/compress.c new file mode 100644 index 0000000..1e0ca06 --- /dev/null +++ b/lib/common/src/compress.c @@ -0,0 +1,88 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * compress.c + * + * Copyright (C) 2019 David Oberhollenzer + */ +#include "config.h" +#include "compress_cli.h" + +#include +#include + +static int cmp_ids[] = { + SQFS_COMP_XZ, + SQFS_COMP_ZSTD, + SQFS_COMP_GZIP, + SQFS_COMP_LZ4, + SQFS_COMP_LZO, +}; + +SQFS_COMPRESSOR compressor_get_default(void) +{ + sqfs_compressor_config_t cfg; + sqfs_compressor_t *temp; + size_t i; + int ret; + + for (i = 0; i < sizeof(cmp_ids) / sizeof(cmp_ids[0]); ++i) { + sqfs_compressor_config_init(&cfg, cmp_ids[i], + SQFS_DEFAULT_BLOCK_SIZE, 0); + + ret = sqfs_compressor_create(&cfg, &temp); + + if (ret == 0) { + sqfs_drop(temp); + return cmp_ids[i]; + } + } + +#ifdef WITH_LZO + return SQFS_COMP_LZO; +#else + assert(0); +#endif +} + +void compressor_print_available(void) +{ + sqfs_compressor_config_t cfg; + sqfs_compressor_t *temp; + bool have_compressor; + int i, ret, defcomp; + const char *name; + + defcomp = compressor_get_default(); + + fputs("Available SquashFS block compressors:\n", stdout); + + for (i = SQFS_COMP_MIN; i <= SQFS_COMP_MAX; ++i) { + sqfs_compressor_config_init(&cfg, i, + SQFS_DEFAULT_BLOCK_SIZE, 0); + + ret = sqfs_compressor_create(&cfg, &temp); + have_compressor = false; + + if (ret == 0) { + sqfs_drop(temp); + have_compressor = true; + } else { +#ifdef WITH_LZO + if (i == SQFS_COMP_LZO) + have_compressor = true; +#endif + } + + if (have_compressor) { + name = sqfs_compressor_name_from_id(i); + + if (defcomp == i) { + printf("\t%s (default)\n", name); + } else { + printf("\t%s\n", name); + } + } + } + + fputc('\n', stdout); +} -- cgit v1.2.3