From c9d3c2e1628e5b28a553ae098b3b9f3019c45a63 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Tue, 21 May 2019 12:16:37 +0200 Subject: Add command line flag for compressor options, pass them to compressors Signed-off-by: David Oberhollenzer --- mkfs/mkfs.c | 9 ++++++++- mkfs/mkfs.h | 1 + mkfs/options.c | 11 +++++++++-- 3 files changed, 18 insertions(+), 3 deletions(-) (limited to 'mkfs') diff --git a/mkfs/mkfs.c b/mkfs/mkfs.c index dac0a34..c958d73 100644 --- a/mkfs/mkfs.c +++ b/mkfs/mkfs.c @@ -47,6 +47,12 @@ int main(int argc, char **argv) process_command_line(&info.opt, argc, argv); + if (info.opt.comp_extra != NULL && + strcmp(info.opt.comp_extra, "help") == 0) { + compressor_print_help(info.opt.compressor); + return EXIT_SUCCESS; + } + if (sqfs_super_init(&info.super, info.opt.blksz, info.opt.def_mtime, info.opt.compressor)) { return EXIT_FAILURE; @@ -85,7 +91,8 @@ int main(int argc, char **argv) fstree_sort(&info.fs); info.cmp = compressor_create(info.super.compression_id, true, - info.super.block_size); + info.super.block_size, + info.opt.comp_extra); if (info.cmp == NULL) { fputs("Error creating compressor\n", stderr); goto out_outfd; diff --git a/mkfs/mkfs.h b/mkfs/mkfs.h index a555500..ca998ac 100644 --- a/mkfs/mkfs.h +++ b/mkfs/mkfs.h @@ -29,6 +29,7 @@ typedef struct { const char *infile; const char *outfile; const char *selinux; + char *comp_extra; } options_t; typedef struct { diff --git a/mkfs/options.c b/mkfs/options.c index d7bdf16..14c648d 100644 --- a/mkfs/options.c +++ b/mkfs/options.c @@ -16,6 +16,7 @@ static struct option long_opts[] = { { "block-size", required_argument, NULL, 'b' }, { "dev-block-size", required_argument, NULL, 'B' }, { "defaults", required_argument, NULL, 'd' }, + { "comp-extra", required_argument, NULL, 'X' }, { "force", no_argument, NULL, 'f' }, { "quiet", no_argument, NULL, 'q' }, #ifdef WITH_SELINUX @@ -26,9 +27,9 @@ static struct option long_opts[] = { }; #ifdef WITH_SELINUX -static const char *short_opts = "s:c:b:B:d:fqhV"; +static const char *short_opts = "s:X:c:b:B:d:fqhV"; #else -static const char *short_opts = "c:b:B:d:fqhV"; +static const char *short_opts = "X:c:b:B:d:fqhV"; #endif enum { @@ -91,6 +92,9 @@ static const char *help_string = "\n" " --compressor, -c Select the compressor to use.\n" " directories (defaults to 'xz').\n" +" --comp-extra, -X A comma seperated list of extra options for\n" +" the selected compressor. Specify 'help' to\n" +" get a list of available options.\n" " --block-size, -b Block size to use for Squashfs image.\n" " Defaults to %u.\n" " --dev-block-size, -B Device block size to padd the image to.\n" @@ -276,6 +280,9 @@ void process_command_line(options_t *opt, int argc, char **argv) case 'q': opt->quiet = true; break; + case 'X': + opt->comp_extra = optarg; + break; #ifdef WITH_SELINUX case 's': opt->selinux = optarg; -- cgit v1.2.3