From: Jonathan Dieter Date: Sat, 18 Sep 2021 16:53:50 +0000 (+0100) Subject: Add support for specifying compression-format in zck X-Git-Tag: archive/raspbian/1.2.1+ds1-1+rpi1^2~7^2~1^2~18^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=96af8ecdd4af07323d2b4968016d9d38095169a1;p=zchunk.git Add support for specifying compression-format in zck Signed-off-by: Jonathan Dieter --- diff --git a/src/zck.c b/src/zck.c index 9d8f01e..ac33a30 100644 --- a/src/zck.c +++ b/src/zck.c @@ -48,18 +48,20 @@ static char doc[] = "zck - Create a new zchunk file"; static char args_doc[] = ""; static struct argp_option options[] = { - {"verbose", 'v', 0, 0, - "Increase verbosity (can be specified more than once for debugging)"}, - {"output", 'o', "FILE", 0, + {"output", 'o', "FILE", 0, "Output to specified FILE"}, - {"split", 's', "STRING", 0, "Split chunks at beginning of STRING"}, - {"dict", 'D', "FILE", 0, + {"split", 's', "STRING", 0, "Split chunks at beginning of STRING"}, + {"dict", 'D', "FILE", 0, "Set zstd compression dictionary to FILE"}, - {"manual-chunk", 'm', 0, 0, + {"manual-chunk", 'm', 0, 0, "Don't do any automatic chunking (implies -s)"}, - {"uncompressed", 'u', 0, 0, + {"uncompressed", 'u', 0, 0, "Add extension in header for uncompressed data"}, - {"version", 'V', 0, 0, "Show program version"}, + {"version", 'V', 0, 0, "Show program version"}, + {"compression-format", 200, "none/zstd", 0, + "Set compression format for file (none/zstd) (default: zstd)", 1}, + {"verbose", 'v', 0, 0, + "Increase verbosity (can be specified more than once for debugging)", 1}, { 0 } }; @@ -70,6 +72,7 @@ struct arguments { bool manual_chunk; char *output; char *dict; + char *compression_format; bool exit; bool uncompressed; }; @@ -101,6 +104,9 @@ static error_t parse_opt (int key, char *arg, struct argp_state *state) { case 'u': arguments->uncompressed = true; break; + case 200: + arguments->compression_format = arg; + break; case 'V': version(); arguments->exit = true; @@ -135,6 +141,7 @@ int main (int argc, char *argv[]) { /* Defaults */ arguments.log_level = ZCK_LOG_ERROR; + arguments.compression_format = "zstd"; int retval = argp_parse(&argp, argc, argv, 0, 0, &arguments); if(retval || arguments.exit) @@ -228,7 +235,22 @@ int main (int argc, char *argv[]) { exit(1); } } - + if(arguments.compression_format) { + if(strncmp(arguments.compression_format, "zstd", 4) == 0) { + if(!zck_set_ioption(zck, ZCK_COMP_TYPE, ZCK_COMP_ZSTD)) { + dprintf(STDERR_FILENO, "%s\n", zck_get_error(zck)); + exit(1); + } + } else if(strncmp(arguments.compression_format, "none", 4) == 0) { + if(!zck_set_ioption(zck, ZCK_COMP_TYPE, ZCK_COMP_NONE)) { + dprintf(STDERR_FILENO, "%s\n", zck_get_error(zck)); + exit(1); + } + } else { + dprintf(STDERR_FILENO, "Unknown compression type: %s\n", arguments.compression_format); + exit(1); + } + } if(arguments.uncompressed) { if(!zck_set_ioption(zck, ZCK_UNCOMP_HEADER, 1)) { dprintf(STDERR_FILENO, "%s\n", zck_get_error(zck));