static void recommend_man_page(int cmd, FILE *fp);
static const tchar *get_cmd_string(int cmd, bool nospace);
-static int imagex_progress_func(enum wimlib_progress_msg msg,
- const union wimlib_progress_info *info);
-
static bool imagex_be_quiet = false;
static FILE *imagex_info_file;
IMAGEX_EXTRACT_XML_OPTION,
IMAGEX_FLAGS_OPTION,
IMAGEX_FORCE_OPTION,
- IMAGEX_HARDLINK_OPTION,
IMAGEX_HEADER_OPTION,
IMAGEX_INCLUDE_INVALID_NAMES_OPTION,
IMAGEX_LAZY_OPTION,
IMAGEX_STAGING_DIR_OPTION,
IMAGEX_STREAMS_INTERFACE_OPTION,
IMAGEX_STRICT_ACLS_OPTION,
- IMAGEX_SYMLINK_OPTION,
IMAGEX_THREADS_OPTION,
IMAGEX_TO_STDOUT_OPTION,
IMAGEX_UNIX_DATA_OPTION,
static const struct option apply_options[] = {
{T("check"), no_argument, NULL, IMAGEX_CHECK_OPTION},
- {T("hardlink"), no_argument, NULL, IMAGEX_HARDLINK_OPTION},
- {T("symlink"), no_argument, NULL, IMAGEX_SYMLINK_OPTION},
{T("verbose"), no_argument, NULL, IMAGEX_VERBOSE_OPTION},
{T("ref"), required_argument, NULL, IMAGEX_REF_OPTION},
{T("unix-data"), no_argument, NULL, IMAGEX_UNIX_DATA_OPTION},
{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},
};
{T("check"), no_argument, NULL, IMAGEX_CHECK_OPTION},
{T("rebuild"), no_argument, NULL, IMAGEX_REBUILD_OPTION},
{T("lazy"), no_argument, NULL, IMAGEX_LAZY_OPTION},
+ {T("force"), no_argument, NULL, IMAGEX_FORCE_OPTION},
{T("new-image"), no_argument, NULL, IMAGEX_NEW_IMAGE_OPTION},
{NULL, 0, NULL, 0},
};
static int
get_compression_type(const tchar *optarg)
{
- if (!tstrcasecmp(optarg, T("maximum")) || !tstrcasecmp(optarg, T("lzx")))
+ if (!tstrcasecmp(optarg, T("maximum")) ||
+ !tstrcasecmp(optarg, T("lzx")) ||
+ !tstrcasecmp(optarg, T("max")))
return WIMLIB_COMPRESSION_TYPE_LZX;
else if (!tstrcasecmp(optarg, T("fast")) || !tstrcasecmp(optarg, T("xpress")))
return WIMLIB_COMPRESSION_TYPE_XPRESS;
.nice_match_length = 96,
.num_optim_passes = 4,
.max_search_depth = 100,
- .max_matches_per_pos = 10,
.main_nostat_cost = 15,
.len_nostat_cost = 15,
.aligned_nostat_cost = 7,
.max_match_length = UINT32_MAX,
.nice_match_length = 96,
.max_search_depth = 100,
- .max_matches_per_pos = 10,
.optim_array_length = 1024,
};
return wimlib_reference_resource_files(wim, set->strings,
set->num_strings,
WIMLIB_REF_FLAG_GLOB_ENABLE,
- open_flags,
- imagex_progress_func);
+ open_flags);
}
static void
last_scan_progress = *scan;
}
}
-
/* Progress callback function passed to various wimlib functions. */
-static int
+static enum wimlib_progress_status
imagex_progress_func(enum wimlib_progress_msg msg,
- const union wimlib_progress_info *info)
+ union wimlib_progress_info *info,
+ void *_ignored_context)
{
unsigned percent_done;
unsigned unit_shift;
const tchar *unit_name;
if (imagex_be_quiet)
- return 0;
+ return WIMLIB_PROGRESS_STATUS_CONTINUE;
switch (msg) {
case WIMLIB_PROGRESS_MSG_WRITE_STREAMS:
{
"absolute symbolic links as-is)\n"),
info->scan.cur_path, info->scan.symlink_target);
break;
+ case WIMLIB_SCAN_DENTRY_FIXED_SYMLINK:
+ /* Symlink fixups are enabled by default. This is
+ * mainly intended for Windows, which for some reason
+ * uses absolute junctions (with drive letters!) in the
+ * default installation. On UNIX-like systems, warn the
+ * user when fixing the target of an absolute symbolic
+ * link, so they know to disable this if they want.
+ * (Although, more likely they will get the warning
+ * about an absolute symbolic link with an out-of-tree
+ * target first.) */
+ #ifndef __WIN32__
+ imagex_printf(T("\nWARNING: Adjusted target of "
+ "absolute symbolic link \"%"TS"\"\n"
+ " (Use --norpfix to capture "
+ "absolute symbolic links as-is)\n"),
+ info->scan.cur_path);
+ #endif
+ break;
}
break;
case WIMLIB_PROGRESS_MSG_SCAN_END:
info->extract.total_parts);
}
break;
- case WIMLIB_PROGRESS_MSG_APPLY_TIMESTAMPS:
- imagex_printf(T("Setting timestamps on all extracted files...\n"));
- break;
- case WIMLIB_PROGRESS_MSG_EXTRACT_IMAGE_END:
- if (info->extract.extract_flags & WIMLIB_EXTRACT_FLAG_NTFS) {
- imagex_printf(T("Unmounting NTFS volume \"%"TS"\"...\n"),
- info->extract.target);
- }
- break;
case WIMLIB_PROGRESS_MSG_SPLIT_BEGIN_PART:
percent_done = TO_PERCENT(info->split.completed_bytes,
info->split.total_bytes);
imagex_printf(T("Updating \"%"TS"\" in WIM image\n"),
info->replace.path_in_wim);
break;
+ case WIMLIB_PROGRESS_MSG_WIMBOOT_EXCLUDE:
+ imagex_printf(T("\nExtracting \"%"TS"\" as normal file (not WIMBoot pointer)\n"),
+ info->wimboot_exclude.path_in_wim);
+ break;
+ case WIMLIB_PROGRESS_MSG_UNMOUNT_BEGIN:
+ if (info->unmount.mount_flags & WIMLIB_MOUNT_FLAG_READWRITE) {
+ if (info->unmount.unmount_flags & WIMLIB_UNMOUNT_FLAG_COMMIT) {
+ imagex_printf(T("Committing changes to %"TS" (image %d)\n"),
+ info->unmount.mounted_wim,
+ info->unmount.mounted_image);
+ } else {
+ imagex_printf(T("Discarding changes to %"TS" (image %d)\n"),
+ info->unmount.mounted_wim,
+ info->unmount.mounted_image);
+ imagex_printf(T("\t(Use --commit to keep changes.)\n"));
+ }
+ }
+ break;
default:
break;
}
fflush(imagex_info_file);
- return 0;
+ return WIMLIB_PROGRESS_STATUS_CONTINUE;
}
static unsigned
}
/* Apply one image, or all images, from a WIM file to a directory, OR apply
- * one image from a WIM file to a NTFS volume. */
+ * one image from a WIM file to an NTFS volume. */
static int
imagex_apply(int argc, tchar **argv, int cmd)
{
case IMAGEX_CHECK_OPTION:
open_flags |= WIMLIB_OPEN_FLAG_CHECK_INTEGRITY;
break;
- case IMAGEX_HARDLINK_OPTION:
- extract_flags |= WIMLIB_EXTRACT_FLAG_HARDLINK;
- break;
- case IMAGEX_SYMLINK_OPTION:
- extract_flags |= WIMLIB_EXTRACT_FLAG_SYMLINK;
- break;
case IMAGEX_VERBOSE_OPTION:
/* No longer does anything. */
break;
}
wim = NULL;
} else {
- ret = wimlib_open_wim(wimfile, open_flags, &wim,
- imagex_progress_func);
+ ret = wimlib_open_wim_with_progress(wimfile, open_flags, &wim,
+ imagex_progress_func, NULL);
if (ret)
goto out_free_refglobs;
#ifndef __WIN32__
{
- /* Interpret a regular file or block device target as a NTFS
+ /* Interpret a regular file or block device target as an NTFS
* volume. */
struct stat stbuf;
#endif
if (wim) {
- ret = wimlib_extract_image(wim, image, target, extract_flags,
- imagex_progress_func);
+ ret = wimlib_extract_image(wim, image, target, extract_flags);
} else {
set_fd_to_binary_mode(STDIN_FILENO);
- ret = wimlib_extract_image_from_pipe(STDIN_FILENO,
- image_num_or_name,
- target, extract_flags,
- imagex_progress_func);
+ ret = wimlib_extract_image_from_pipe_with_progress(
+ STDIN_FILENO,
+ image_num_or_name,
+ target,
+ extract_flags,
+ imagex_progress_func,
+ NULL);
}
if (ret == 0) {
imagex_printf(T("Done applying WIM image.\n"));
if (compression_type == WIMLIB_COMPRESSION_TYPE_INVALID) {
+ /* No compression type specified. Use the default. */
+
if (add_image_flags & WIMLIB_ADD_IMAGE_FLAG_WIMBOOT) {
+ /* With --wimboot, default to XPRESS compression. */
compression_type = WIMLIB_COMPRESSION_TYPE_XPRESS;
+ } else if (write_flags & WIMLIB_WRITE_FLAG_PACK_STREAMS) {
+ /* With --pack-streams or --solid, default to LZMS
+ * compression. (However, this will not affect packed
+ * resources!) */
+ compression_type = WIMLIB_COMPRESSION_TYPE_LZMS;
} else {
+ /* Otherwise, default to LZX compression in fast mode.
+ */
compression_type = WIMLIB_COMPRESSION_TYPE_LZX;
if (!compress_slow && pack_ctype != WIMLIB_COMPRESSION_TYPE_LZX) {
struct wimlib_lzx_compressor_params params = {
}
/* Open the existing WIM, or create a new one. */
- if (cmd == CMD_APPEND)
- ret = wimlib_open_wim(wimfile, open_flags, &wim,
- imagex_progress_func);
- else
+ if (cmd == CMD_APPEND) {
+ ret = wimlib_open_wim_with_progress(wimfile, open_flags, &wim,
+ imagex_progress_func, NULL);
+ if (ret)
+ goto out_free_capture_sources;
+ } else {
ret = wimlib_create_new_wim(compression_type, &wim);
- if (ret)
- goto out_free_capture_sources;
+ if (ret)
+ goto out_free_capture_sources;
+ wimlib_register_progress_function(wim, imagex_progress_func, NULL);
+ }
/* Set chunk size if non-default. */
if (chunk_size != UINT32_MAX) {
}
for (size_t i = 0; i < base_wimfiles.num_strings; i++) {
- ret = wimlib_open_wim(base_wimfiles.strings[i],
- open_flags, &base_wims[i],
- imagex_progress_func);
+ ret = wimlib_open_wim_with_progress(
+ base_wimfiles.strings[i],
+ open_flags, &base_wims[i],
+ imagex_progress_func, NULL);
if (ret)
goto out_free_base_wims;
} else if (template_wimfile == wimfile) {
template_wim = wim;
} else {
- ret = wimlib_open_wim(template_wimfile, open_flags,
- &template_wim, imagex_progress_func);
+ ret = wimlib_open_wim_with_progress(template_wimfile,
+ open_flags,
+ &template_wim,
+ imagex_progress_func,
+ NULL);
if (ret)
goto out_free_base_wims;
}
num_sources,
name,
config_file,
- add_image_flags,
- imagex_progress_func);
+ add_image_flags);
if (ret)
goto out_free_template_wim;
info.image_count,
template_wim,
template_image,
- 0, NULL);
+ 0);
if (ret)
goto out_free_template_wim;
}
/* Write the new WIM or overwrite the existing WIM with the new image
* appended. */
if (cmd == CMD_APPEND) {
- ret = wimlib_overwrite(wim, write_flags, num_threads,
- imagex_progress_func);
+ ret = wimlib_overwrite(wim, write_flags, num_threads);
} else if (wimfile) {
ret = wimlib_write(wim, wimfile, WIMLIB_ALL_IMAGES,
- write_flags, num_threads,
- imagex_progress_func);
+ write_flags, num_threads);
} else {
ret = wimlib_write_to_fd(wim, wim_fd, WIMLIB_ALL_IMAGES,
- write_flags, num_threads,
- imagex_progress_func);
+ write_flags, num_threads);
}
out_free_template_wim:
/* template_wim may alias base_wims[0] or wim. */
wimfile = argv[0];
image_num_or_name = argv[1];
- ret = wimlib_open_wim(wimfile, open_flags, &wim,
- imagex_progress_func);
+ ret = wimlib_open_wim_with_progress(wimfile, open_flags, &wim,
+ imagex_progress_func, NULL);
if (ret)
goto out;
goto out_wimlib_free;
}
- ret = wimlib_overwrite(wim, write_flags, 0, imagex_progress_func);
+ ret = wimlib_overwrite(wim, write_flags, 0);
if (ret) {
imagex_error(T("Failed to write the file \"%"TS"\" with image "
"deleted"), wimfile);
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" rdev:0x%"PRIx32"\n"),
+ dentry->unix_uid, dentry->unix_gid,
+ dentry->unix_mode, dentry->unix_rdev);
+ }
+
for (uint32_t i = 0; i <= dentry->num_named_streams; i++) {
if (dentry->streams[i].stream_name) {
tprintf(T("\tData stream \"%"TS"\":\n"),
}
wimfile = argv[0];
- ret = wimlib_open_wim(wimfile, 0, &wim, imagex_progress_func);
+ ret = wimlib_open_wim_with_progress(wimfile, 0, &wim,
+ imagex_progress_func, NULL);
if (ret)
goto out;
{
int c;
int open_flags = 0;
- int export_flags = 0;
+ int export_flags = WIMLIB_EXPORT_FLAG_GIFT;
int write_flags = 0;
int compression_type = WIMLIB_COMPRESSION_TYPE_INVALID;
const tchar *src_wimfile;
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;
}
dest_wimfile = argv[2];
dest_name = (argc >= 4) ? argv[3] : NULL;
dest_desc = (argc >= 5) ? argv[4] : NULL;
- ret = wimlib_open_wim(src_wimfile, open_flags, &src_wim,
- imagex_progress_func);
+ ret = wimlib_open_wim_with_progress(src_wimfile, open_flags, &src_wim,
+ imagex_progress_func, NULL);
if (ret)
goto out_free_refglobs;
ret = -1;
goto out_free_src_wim;
}
- ret = wimlib_open_wim(dest_wimfile,
- open_flags | WIMLIB_OPEN_FLAG_WRITE_ACCESS,
- &dest_wim, imagex_progress_func);
+ ret = wimlib_open_wim_with_progress(dest_wimfile,
+ open_flags |
+ WIMLIB_OPEN_FLAG_WRITE_ACCESS,
+ &dest_wim,
+ imagex_progress_func,
+ NULL);
if (ret)
goto out_free_src_wim;
if (compression_type == WIMLIB_COMPRESSION_TYPE_INVALID) {
/* The user did not specify a compression type; default
- * to that of the source WIM. */
-
- compression_type = src_info.compression_type;
+ * 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;
}
ret = wimlib_create_new_wim(compression_type, &dest_wim);
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)
+ wimlib_register_progress_function(dest_wim,
+ imagex_progress_func, NULL);
+
+ 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) {
}
ret = wimlib_export_image(src_wim, image, dest_wim, dest_name,
- dest_desc, export_flags, imagex_progress_func);
+ dest_desc, export_flags);
if (ret) {
if (ret == WIMLIB_ERR_RESOURCE_NOT_FOUND) {
do_resource_not_found_warning(src_wimfile,
}
if (!wim_is_new)
- ret = wimlib_overwrite(dest_wim, write_flags, num_threads,
- imagex_progress_func);
+ ret = wimlib_overwrite(dest_wim, write_flags, num_threads);
else if (dest_wimfile)
ret = wimlib_write(dest_wim, dest_wimfile, WIMLIB_ALL_IMAGES,
- write_flags, num_threads,
- imagex_progress_func);
+ write_flags, num_threads);
else
ret = wimlib_write_to_fd(dest_wim, dest_wim_fd,
WIMLIB_ALL_IMAGES, write_flags,
- num_threads, imagex_progress_func);
+ num_threads);
out_free_dest_wim:
wimlib_free(dest_wim);
out_free_src_wim:
extract_flags |= WIMLIB_EXTRACT_FLAG_TO_STDOUT;
imagex_info_file = stderr;
imagex_be_quiet = true;
+ set_fd_to_binary_mode(STDOUT_FILENO);
break;
case IMAGEX_INCLUDE_INVALID_NAMES_OPTION:
extract_flags |= WIMLIB_EXTRACT_FLAG_REPLACE_INVALID_FILENAMES;
argc -= 2;
argv += 2;
- ret = wimlib_open_wim(wimfile, open_flags, &wim, imagex_progress_func);
+ ret = wimlib_open_wim_with_progress(wimfile, open_flags, &wim,
+ imagex_progress_func, NULL);
if (ret)
goto out_free_refglobs;
ret = wimlib_extract_paths(wim, image, dest_dir,
(const tchar **)argv,
num_paths,
- extract_flags | notlist_extract_flags,
- imagex_progress_func);
+ extract_flags | notlist_extract_flags);
argc -= num_paths;
argv += num_paths;
} else {
ret = wimlib_extract_pathlist(wim, image, dest_dir,
argv[0] + 1,
- extract_flags,
- imagex_progress_func);
+ extract_flags);
argc--;
argv++;
}
if (check)
open_flags |= WIMLIB_OPEN_FLAG_CHECK_INTEGRITY;
- ret = wimlib_open_wim(wimfile, open_flags, &wim, imagex_progress_func);
+ ret = wimlib_open_wim_with_progress(wimfile, open_flags, &wim,
+ imagex_progress_func, NULL);
if (ret)
goto out;
write_flags |= WIMLIB_WRITE_FLAG_CHECK_INTEGRITY;
if (nocheck)
write_flags |= WIMLIB_WRITE_FLAG_NO_CHECK_INTEGRITY;
- ret = wimlib_overwrite(wim, write_flags, 1,
- imagex_progress_func);
+ ret = wimlib_overwrite(wim, write_flags, 1);
} else {
imagex_printf(T("The file \"%"TS"\" was not modified "
"because nothing needed to be done.\n"),
goto out_usage;
}
output_path = argv[0];
- ret = wimlib_join((const tchar * const *)++argv,
- --argc,
- output_path,
- swm_open_flags,
- wim_write_flags,
- imagex_progress_func);
+ ret = wimlib_join_with_progress((const tchar * const *)++argv,
+ --argc,
+ output_path,
+ swm_open_flags,
+ wim_write_flags,
+ imagex_progress_func,
+ NULL);
out:
return ret;
wimfile = argv[0];
- ret = wimlib_open_wim(wimfile, open_flags, &wim, imagex_progress_func);
+ ret = wimlib_open_wim_with_progress(wimfile, open_flags, &wim,
+ imagex_progress_func, NULL);
if (ret)
goto out_free_refglobs;
wimfile = argv[0];
- ret = wimlib_open_wim(wimfile, open_flags, &wim, imagex_progress_func);
+ ret = wimlib_open_wim_with_progress(wimfile, open_flags, &wim,
+ imagex_progress_func, NULL);
if (ret)
goto out;
else
tprintf(T("%"PRIu64" KiB\n"), old_size >> 10);
- ret = wimlib_overwrite(wim, write_flags, num_threads,
- imagex_progress_func);
+ ret = wimlib_overwrite(wim, write_flags, num_threads);
if (ret) {
imagex_error(T("Optimization of \"%"TS"\" failed."), wimfile);
goto out_wimlib_free;
"floating-point number of megabytes."));
goto out_err;
}
- ret = wimlib_open_wim(argv[0], open_flags, &wim, imagex_progress_func);
+ ret = wimlib_open_wim_with_progress(argv[0], open_flags, &wim,
+ imagex_progress_func, NULL);
if (ret)
goto out;
- ret = wimlib_split(wim, argv[1], part_size, write_flags, imagex_progress_func);
+ ret = wimlib_split(wim, argv[1], part_size, write_flags);
wimlib_free(wim);
out:
return ret;
unmount_flags |= WIMLIB_UNMOUNT_FLAG_REBUILD;
break;
case IMAGEX_LAZY_OPTION:
- unmount_flags |= WIMLIB_UNMOUNT_FLAG_LAZY;
+ case IMAGEX_FORCE_OPTION:
+ /* Now, unmount is lazy by default. However, committing
+ * the image will fail with
+ * WIMLIB_ERR_MOUNTED_IMAGE_IS_BUSY if there are open
+ * file descriptors on the WIM image. The
+ * WIMLIB_UNMOUNT_FLAG_FORCE option forces these file
+ * descriptors to be closed. */
+ unmount_flags |= WIMLIB_UNMOUNT_FLAG_FORCE;
break;
case IMAGEX_NEW_IMAGE_OPTION:
unmount_flags |= WIMLIB_UNMOUNT_FLAG_NEW_IMAGE;
"without --commit also specified!"));
goto out_err;
}
- imagex_printf(T("Committing changes as new image...\n"));
}
- ret = wimlib_unmount_image(argv[0], unmount_flags,
- imagex_progress_func);
- if (ret)
+ ret = wimlib_unmount_image_with_progress(argv[0], unmount_flags,
+ imagex_progress_func, NULL);
+ if (ret) {
imagex_error(T("Failed to unmount \"%"TS"\""), argv[0]);
+ if (ret == WIMLIB_ERR_MOUNTED_IMAGE_IS_BUSY) {
+ imagex_printf(T(
+ "\tNote: Use --commit --force to force changes "
+ "to be committed, regardless\n"
+ "\t of open files.\n"));
+ }
+ }
out:
return ret;
goto out_usage;
wimfile = argv[0];
- ret = wimlib_open_wim(wimfile, open_flags, &wim, imagex_progress_func);
+ ret = wimlib_open_wim_with_progress(wimfile, open_flags, &wim,
+ imagex_progress_func, NULL);
if (ret)
goto out_free_command_str;
}
/* Execute the update commands */
- ret = wimlib_update_image(wim, image, cmds, num_cmds, update_flags,
- imagex_progress_func);
+ ret = wimlib_update_image(wim, image, cmds, num_cmds, update_flags);
if (ret)
goto out_free_cmds;
cmd.add.config_file = NULL;
cmd.add.add_flags = 0;
- ret = wimlib_update_image(wim, image, &cmd, 1,
- update_flags, imagex_progress_func);
+ ret = wimlib_update_image(wim, image, &cmd, 1, update_flags);
if (ret)
goto out_free_cmds;
}
/* Overwrite the updated WIM */
- ret = wimlib_overwrite(wim, write_flags, num_threads,
- imagex_progress_func);
+ ret = wimlib_overwrite(wim, write_flags, num_threads);
out_free_cmds:
free(cmds);
out_free_cmd_file_contents:
" %"TS" WIMFILE [(IMAGE_NUM | IMAGE_NAME | all)]\n"
" (DIRECTORY | NTFS_VOLUME) [--check] [--ref=\"GLOB\"]\n"
" [--no-acls] [--strict-acls] [--no-attributes]\n"
-" [--rpfix] [--norpfix] [--hardlink] [--symlink]\n"
-" [--include-invalid-names] [--wimboot]\n"
+" [--rpfix] [--norpfix] [--include-invalid-names]\n"
+" [--wimboot] [--unix-data]\n"
),
[CMD_CAPTURE] =
T(
" [--dereference] [--config=FILE] [--threads=NUM_THREADS]\n"
" [--source-list] [--no-acls] [--strict-acls] [--rpfix]\n"
" [--norpfix] [--update-of=[WIMFILE:]IMAGE]\n"
-" [--delta-from=WIMFILE] [--wimboot]\n"
+" [--delta-from=WIMFILE] [--wimboot] [--unix-data]\n"
),
[CMD_DELETE] =
T(
T(
" %"TS" WIMFILE [(IMAGE_NUM | IMAGE_NAME)] DIRECTORY\n"
" [--check] [--streams-interface=INTERFACE]\n"
-" [--ref=\"GLOB\"] [--allow-other]\n"
+" [--ref=\"GLOB\"] [--allow-other] [--unix-data]\n"
),
[CMD_MOUNTRW] =
T(
" %"TS" WIMFILE [(IMAGE_NUM | IMAGE_NAME)] DIRECTORY\n"
" [--check] [--streams-interface=INTERFACE]\n"
-" [--staging-dir=CMD_DIR] [--allow-other]\n"
+" [--staging-dir=CMD_DIR] [--allow-other] [--unix-data]\n"
),
#endif
[CMD_OPTIMIZE] =
#if WIM_MOUNTING_SUPPORTED
[CMD_UNMOUNT] =
T(
-" %"TS" DIRECTORY [--commit] [--check] [--rebuild] [--lazy]\n"
-" [--new-image]\n"
+" %"TS" DIRECTORY [--commit] [--force] [--new-image]\n"
+" [--check] [--rebuild]\n"
),
#endif
[CMD_UPDATE] =
/* Entry point for wimlib's ImageX implementation. On UNIX the command
* arguments will just be 'char' strings (ideally UTF-8 encoded, but could be
- * something else), while an Windows the command arguments will be UTF-16LE
+ * something else), while on Windows the command arguments will be UTF-16LE
* encoded 'wchar_t' strings. */
int
#ifdef __WIN32__