X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=programs%2Fimagex.c;h=5dd523228ae7a53a808c36db7de3379d5e9a06c6;hb=1c893605029270ae2b75ad1d90517aebdb78eb14;hp=9ebe277181dee6b7eb559f26131214f51b177c7d;hpb=913e96c7a1c138973912eb4b133a27796fd59e2e;p=wimlib diff --git a/programs/imagex.c b/programs/imagex.c index 9ebe2771..5dd52322 100644 --- a/programs/imagex.c +++ b/programs/imagex.c @@ -144,6 +144,7 @@ enum { IMAGEX_NO_ACLS_OPTION, IMAGEX_NO_WILDCARDS_OPTION, IMAGEX_NOT_PIPABLE_OPTION, + IMAGEX_PACK_CHUNK_SIZE_OPTION, IMAGEX_PACK_STREAMS_OPTION, IMAGEX_PATH_OPTION, IMAGEX_PIPABLE_OPTION, @@ -195,6 +196,8 @@ static const struct option capture_or_append_options[] = { {T("compress"), required_argument, NULL, IMAGEX_COMPRESS_OPTION}, {T("compress-slow"), no_argument, NULL, IMAGEX_COMPRESS_SLOW_OPTION}, {T("chunk-size"), required_argument, NULL, IMAGEX_CHUNK_SIZE_OPTION}, + {T("pack-chunk-size"), required_argument, NULL, IMAGEX_PACK_CHUNK_SIZE_OPTION}, + {T("solid-chunk-size"),required_argument, NULL, IMAGEX_PACK_CHUNK_SIZE_OPTION}, {T("pack-streams"), no_argument, NULL, IMAGEX_PACK_STREAMS_OPTION}, {T("solid"), no_argument, NULL, IMAGEX_PACK_STREAMS_OPTION}, {T("config"), required_argument, NULL, IMAGEX_CONFIG_OPTION}, @@ -237,6 +240,8 @@ static const struct option export_options[] = { {T("pack-streams"),no_argument, NULL, IMAGEX_PACK_STREAMS_OPTION}, {T("solid"), no_argument, NULL, IMAGEX_PACK_STREAMS_OPTION}, {T("chunk-size"), required_argument, NULL, IMAGEX_CHUNK_SIZE_OPTION}, + {T("pack-chunk-size"), required_argument, NULL, IMAGEX_PACK_CHUNK_SIZE_OPTION}, + {T("solid-chunk-size"),required_argument, NULL, IMAGEX_PACK_CHUNK_SIZE_OPTION}, {T("ref"), required_argument, NULL, IMAGEX_REF_OPTION}, {T("threads"), required_argument, NULL, IMAGEX_THREADS_OPTION}, {T("rebuild"), no_argument, NULL, IMAGEX_REBUILD_OPTION}, @@ -299,6 +304,8 @@ static const struct option optimize_options[] = { {T("compress-slow"), no_argument, NULL, IMAGEX_COMPRESS_SLOW_OPTION}, {T("recompress-slow"), no_argument, NULL, IMAGEX_COMPRESS_SLOW_OPTION}, {T("chunk-size"), required_argument, NULL, IMAGEX_CHUNK_SIZE_OPTION}, + {T("pack-chunk-size"), required_argument, NULL, IMAGEX_PACK_CHUNK_SIZE_OPTION}, + {T("solid-chunk-size"),required_argument, NULL, IMAGEX_PACK_CHUNK_SIZE_OPTION}, {T("pack-streams"),no_argument, NULL, IMAGEX_PACK_STREAMS_OPTION}, {T("solid"), no_argument, NULL, IMAGEX_PACK_STREAMS_OPTION}, {T("threads"), required_argument, NULL, IMAGEX_THREADS_OPTION}, @@ -1751,6 +1758,7 @@ imagex_capture_or_append(int argc, tchar **argv, int cmd) int write_flags = 0; int compression_type = WIMLIB_COMPRESSION_TYPE_INVALID; uint32_t chunk_size = UINT32_MAX; + uint32_t pack_chunk_size = UINT32_MAX; const tchar *wimfile; int wim_fd; const tchar *name; @@ -1814,6 +1822,11 @@ imagex_capture_or_append(int argc, tchar **argv, int cmd) if (chunk_size == UINT32_MAX) goto out_err; break; + case IMAGEX_PACK_CHUNK_SIZE_OPTION: + pack_chunk_size = parse_chunk_size(optarg); + if (pack_chunk_size == UINT32_MAX) + goto out_err; + break; case IMAGEX_PACK_STREAMS_OPTION: write_flags |= WIMLIB_WRITE_FLAG_PACK_STREAMS; break; @@ -2061,6 +2074,11 @@ imagex_capture_or_append(int argc, tchar **argv, int cmd) if (ret) goto out_free_wim; } + if (pack_chunk_size != UINT32_MAX) { + ret = wimlib_set_output_pack_chunk_size(wim, pack_chunk_size); + if (ret) + goto out_free_wim; + } #ifndef __WIN32__ /* Detect if source is regular file or block device and set NTFS volume @@ -2454,6 +2472,7 @@ imagex_export(int argc, tchar **argv, int cmd) STRING_SET(refglobs); unsigned num_threads = 0; uint32_t chunk_size = UINT32_MAX; + uint32_t pack_chunk_size = UINT32_MAX; for_opt(c, export_options) { switch (c) { @@ -2480,6 +2499,11 @@ imagex_export(int argc, tchar **argv, int cmd) if (chunk_size == UINT32_MAX) goto out_err; break; + case IMAGEX_PACK_CHUNK_SIZE_OPTION: + pack_chunk_size = parse_chunk_size(optarg); + if (pack_chunk_size == UINT32_MAX) + goto out_err; + break; case IMAGEX_REF_OPTION: ret = string_set_append(&refglobs, optarg); if (ret) @@ -2609,6 +2633,11 @@ imagex_export(int argc, tchar **argv, int cmd) if (ret) goto out_free_dest_wim; } + if (pack_chunk_size != UINT32_MAX) { + ret = wimlib_set_output_pack_chunk_size(dest_wim, pack_chunk_size); + if (ret) + goto out_free_dest_wim; + } image = wimlib_resolve_image(src_wim, src_image_num_or_name); ret = verify_image_exists(image, src_image_num_or_name, src_wimfile); @@ -3408,6 +3437,7 @@ imagex_optimize(int argc, tchar **argv, int cmd) int write_flags = WIMLIB_WRITE_FLAG_REBUILD; int compression_type = WIMLIB_COMPRESSION_TYPE_INVALID; uint32_t chunk_size = UINT32_MAX; + uint32_t pack_chunk_size = UINT32_MAX; int ret; WIMStruct *wim; const tchar *wimfile; @@ -3442,6 +3472,11 @@ imagex_optimize(int argc, tchar **argv, int cmd) if (chunk_size == UINT32_MAX) goto out_err; break; + case IMAGEX_PACK_CHUNK_SIZE_OPTION: + pack_chunk_size = parse_chunk_size(optarg); + if (pack_chunk_size == UINT32_MAX) + goto out_err; + break; case IMAGEX_PACK_STREAMS_OPTION: write_flags |= WIMLIB_WRITE_FLAG_PACK_STREAMS; write_flags |= WIMLIB_WRITE_FLAG_RECOMPRESS; @@ -3486,6 +3521,11 @@ imagex_optimize(int argc, tchar **argv, int cmd) if (ret) goto out_wimlib_free; } + if (pack_chunk_size != UINT32_MAX) { + ret = wimlib_set_output_pack_chunk_size(wim, pack_chunk_size); + if (ret) + goto out_wimlib_free; + } old_size = file_get_size(wimfile); tprintf(T("\"%"TS"\" original size: "), wimfile);