]> wimlib.net Git - wimlib/blobdiff - programs/imagex.c
wimexport: Add --chunk-size, --pack-streams
[wimlib] / programs / imagex.c
index 33274616d6604700058f396c5d9f239aea898cec..51db7174d1645751ef3c0179b32cca8d52fa8792 100644 (file)
@@ -142,7 +142,6 @@ enum {
        IMAGEX_NORPFIX_OPTION,
        IMAGEX_NOCHECK_OPTION,
        IMAGEX_NO_ACLS_OPTION,
-       IMAGEX_NO_PACK_STREAMS_OPTION,
        IMAGEX_NOT_PIPABLE_OPTION,
        IMAGEX_PACK_STREAMS_OPTION,
        IMAGEX_PATH_OPTION,
@@ -232,6 +231,8 @@ static const struct option export_options[] = {
        {T("nocheck"),     no_argument,       NULL, IMAGEX_NOCHECK_OPTION},
        {T("no-check"),    no_argument,       NULL, IMAGEX_NOCHECK_OPTION},
        {T("compress"),    required_argument, NULL, IMAGEX_COMPRESS_OPTION},
+       {T("pack-streams"),no_argument,       NULL, IMAGEX_PACK_STREAMS_OPTION},
+       {T("chunk-size"),  required_argument, NULL, IMAGEX_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},
@@ -293,7 +294,6 @@ static const struct option optimize_options[] = {
        {T("recompress-slow"), no_argument,     NULL, IMAGEX_COMPRESS_SLOW_OPTION},
        {T("chunk-size"),  required_argument, NULL, IMAGEX_CHUNK_SIZE_OPTION},
        {T("pack-streams"),no_argument,       NULL, IMAGEX_PACK_STREAMS_OPTION},
-       {T("no-pack-streams"), no_argument,   NULL, IMAGEX_NO_PACK_STREAMS_OPTION},
        {T("threads"),     required_argument, NULL, IMAGEX_THREADS_OPTION},
        {T("pipable"),     no_argument,       NULL, IMAGEX_PIPABLE_OPTION},
        {T("not-pipable"), no_argument,       NULL, IMAGEX_NOT_PIPABLE_OPTION},
@@ -2412,6 +2412,7 @@ imagex_export(int argc, tchar **argv, int cmd)
        bool wim_is_new;
        STRING_SET(refglobs);
        unsigned num_threads = 0;
+       uint32_t chunk_size = UINT32_MAX;
 
        for_opt(c, export_options) {
                switch (c) {
@@ -2430,6 +2431,14 @@ imagex_export(int argc, tchar **argv, int cmd)
                        if (compression_type == WIMLIB_COMPRESSION_TYPE_INVALID)
                                goto out_err;
                        break;
+               case IMAGEX_PACK_STREAMS_OPTION:
+                       write_flags |= WIMLIB_WRITE_FLAG_PACK_STREAMS;
+                       break;
+               case IMAGEX_CHUNK_SIZE_OPTION:
+                       chunk_size = parse_chunk_size(optarg);
+                       if (chunk_size == UINT32_MAX)
+                               goto out_err;
+                       break;
                case IMAGEX_REF_OPTION:
                        ret = string_set_append(&refglobs, optarg);
                        if (ret)
@@ -2547,7 +2556,17 @@ imagex_export(int argc, tchar **argv, int cmd)
                if (ret)
                        goto out_free_src_wim;
 
-               wimlib_set_output_chunk_size(dest_wim, src_info.chunk_size);
+               /* Use same chunk size if compression type is the same.  */
+               if (compression_type == src_info.compression_type &&
+                   chunk_size == UINT32_MAX)
+                       wimlib_set_output_chunk_size(dest_wim, src_info.chunk_size);
+       }
+
+       if (chunk_size != UINT32_MAX) {
+               /* Set destination chunk size.  */
+               ret = wimlib_set_output_chunk_size(dest_wim, chunk_size);
+               if (ret)
+                       goto out_free_dest_wim;
        }
 
        image = wimlib_resolve_image(src_wim, src_image_num_or_name);
@@ -3365,9 +3384,6 @@ imagex_optimize(int argc, tchar **argv, int cmd)
                        write_flags |= WIMLIB_WRITE_FLAG_PACK_STREAMS;
                        write_flags |= WIMLIB_WRITE_FLAG_RECOMPRESS;
                        break;
-               case IMAGEX_NO_PACK_STREAMS_OPTION:
-                       write_flags |= WIMLIB_WRITE_FLAG_NO_PACK_STREAMS;
-                       break;
                case IMAGEX_THREADS_OPTION:
                        num_threads = parse_num_threads(optarg);
                        if (num_threads == UINT_MAX)