]> wimlib.net Git - wimlib/blobdiff - programs/imagex.c
New format for UNIX data
[wimlib] / programs / imagex.c
index 4979ee32b475f99f8791d628da8f1457ee6793e5..7cb29890a16105601ba0c9dea74a1f248688bd9e 100644 (file)
@@ -285,6 +285,7 @@ static const struct option export_options[] = {
        {T("rebuild"),     no_argument,       NULL, IMAGEX_REBUILD_OPTION},
        {T("pipable"),     no_argument,       NULL, IMAGEX_PIPABLE_OPTION},
        {T("not-pipable"), no_argument,       NULL, IMAGEX_NOT_PIPABLE_OPTION},
+       {T("wimboot"),     no_argument,       NULL, IMAGEX_WIMBOOT_OPTION},
        {NULL, 0, NULL, 0},
 };
 
@@ -2426,6 +2427,11 @@ print_dentry_detailed(const struct wimlib_dir_entry *dentry)
        tprintf(T("Link Group ID       = 0x%016"PRIx64"\n"), dentry->hard_link_group_id);
        tprintf(T("Link Count          = %"PRIu32"\n"), dentry->num_links);
 
+       if (dentry->unix_mode != 0) {
+               tprintf(T("UNIX Data           = uid:%"PRIu32" gid:%"PRIu32" mode:0%"PRIo32"\n"),
+                       dentry->unix_uid, dentry->unix_gid, dentry->unix_mode);
+       }
+
        for (uint32_t i = 0; i <= dentry->num_named_streams; i++) {
                if (dentry->streams[i].stream_name) {
                        tprintf(T("\tData stream \"%"TS"\":\n"),
@@ -2617,6 +2623,9 @@ imagex_export(int argc, tchar **argv, int cmd)
                case IMAGEX_NOT_PIPABLE_OPTION:
                        write_flags |= WIMLIB_WRITE_FLAG_NOT_PIPABLE;
                        break;
+               case IMAGEX_WIMBOOT_OPTION:
+                       export_flags |= WIMLIB_EXPORT_FLAG_WIMBOOT;
+                       break;
                default:
                        goto out_usage;
                }
@@ -2707,11 +2716,13 @@ imagex_export(int argc, tchar **argv, int cmd)
 
                if (compression_type == WIMLIB_COMPRESSION_TYPE_INVALID) {
                        /* The user did not specify a compression type; default
-                        * to that of the source WIM, unless --pack-streams or
-                        * --solid was specified.   */
+                        * to that of the source WIM, unless --pack-streams,
+                        * --solid, or --wimboot was specified.   */
 
                        if (write_flags & WIMLIB_WRITE_FLAG_PACK_STREAMS)
                                compression_type = WIMLIB_COMPRESSION_TYPE_LZMS;
+                       else if (export_flags & WIMLIB_EXPORT_FLAG_WIMBOOT)
+                               compression_type = WIMLIB_COMPRESSION_TYPE_XPRESS;
                        else
                                compression_type = src_info.compression_type;
                }
@@ -2719,10 +2730,17 @@ imagex_export(int argc, tchar **argv, int cmd)
                if (ret)
                        goto out_free_src_wim;
 
-               /* Use same chunk size if compression type is the same.  */
-               if (compression_type == src_info.compression_type &&
-                   chunk_size == UINT32_MAX)
+               if ((export_flags & WIMLIB_EXPORT_FLAG_WIMBOOT)
+                   && compression_type == WIMLIB_COMPRESSION_TYPE_XPRESS)
+               {
+                       /* For --wimboot export, use small XPRESS chunks.  */
+                       wimlib_set_output_chunk_size(dest_wim, 4096);
+               } else if (compression_type == src_info.compression_type &&
+                          chunk_size == UINT32_MAX)
+               {
+                       /* Use same chunk size if compression type is the same.  */
                        wimlib_set_output_chunk_size(dest_wim, src_info.chunk_size);
+               }
        }
 
        if (chunk_size != UINT32_MAX) {