if (image == WIMLIB_NO_IMAGE) {
imagex_error(T("\"%"TS"\" is not a valid image in \"%"TS"\"!\n"
" Please specify a 1-based image index or "
- "image name.\n"
- " You may use `%"TS"' to list the images "
- "contained in a WIM."),
- image_name, wim_name, get_cmd_string(CMD_INFO, false));
- return -1;
+ "image name. To list the images\n"
+ " contained in the WIM archive, run\n"
+ "\n"
+ " %"TS" \"%"TS"\"\n"),
+ image_name, wim_name,
+ get_cmd_string(CMD_INFO, false), wim_name);
+ return WIMLIB_ERR_INVALID_IMAGE;
}
return 0;
}
{
if (image == WIMLIB_ALL_IMAGES) {
imagex_error(T("Cannot specify all images for this action!"));
- return -1;
+ return WIMLIB_ERR_INVALID_IMAGE;
}
return 0;
}
}
}
-struct refglob_set {
- const tchar **globs;
- unsigned num_globs;
- unsigned num_alloc_globs;
+struct string_set {
+ const tchar **strings;
+ unsigned num_strings;
+ unsigned num_alloc_strings;
};
-#define REFGLOB_SET_INITIALIZER \
- { .globs = NULL, .num_globs = 0, .num_alloc_globs = 0, }
+#define STRING_SET_INITIALIZER \
+ { .strings = NULL, .num_strings = 0, .num_alloc_strings = 0, }
-#define REFGLOB_SET(_refglobs) \
- struct refglob_set _refglobs = REFGLOB_SET_INITIALIZER
+#define STRING_SET(_strings) \
+ struct string_set _strings = STRING_SET_INITIALIZER
static int
-refglob_set_append(struct refglob_set *set, const tchar *glob)
+string_set_append(struct string_set *set, const tchar *glob)
{
- unsigned num_alloc_globs = set->num_alloc_globs;
+ unsigned num_alloc_strings = set->num_alloc_strings;
- if (set->num_globs == num_alloc_globs) {
- const tchar **new_globs;
+ if (set->num_strings == num_alloc_strings) {
+ const tchar **new_strings;
- num_alloc_globs += 4;
- new_globs = realloc(set->globs, sizeof(set->globs[0]) * num_alloc_globs);
- if (!new_globs) {
+ num_alloc_strings += 4;
+ new_strings = realloc(set->strings,
+ sizeof(set->strings[0]) * num_alloc_strings);
+ if (!new_strings) {
imagex_error(T("Out of memory!"));
return -1;
}
- set->globs = new_globs;
- set->num_alloc_globs = num_alloc_globs;
+ set->strings = new_strings;
+ set->num_alloc_strings = num_alloc_strings;
}
- set->globs[set->num_globs++] = glob;
+ set->strings[set->num_strings++] = glob;
return 0;
}
+static void
+string_set_destroy(struct string_set *set)
+{
+ free(set->strings);
+}
+
static int
-wim_reference_globs(WIMStruct *wim, struct refglob_set *set, int open_flags)
+wim_reference_globs(WIMStruct *wim, struct string_set *set, int open_flags)
{
- return wimlib_reference_resource_files(wim, set->globs, set->num_globs,
+ return wimlib_reference_resource_files(wim, set->strings,
+ set->num_strings,
WIMLIB_REF_FLAG_GLOB_ENABLE,
open_flags,
imagex_progress_func);
}
-static void
-refglob_set_destroy(struct refglob_set *set)
-{
- free(set->globs);
-}
-
static void
do_resource_not_found_warning(const tchar *wimfile,
const struct wimlib_wim_info *info,
- const struct refglob_set *refglobs)
+ const struct string_set *refglobs)
{
if (info->total_parts > 1) {
- if (refglobs->num_globs == 0) {
+ if (refglobs->num_strings == 0) {
imagex_error(T("\"%"TS"\" is part of a split WIM. "
"Use --ref to specify the other parts."),
wimfile);
size_t num_wchars;
if (num_bytes >= 2 &&
- ((text[0] == 0xff && text[1] == 0xfe) ||
- (text[0] <= 0x7f && text[1] == 0x00)))
+ (((unsigned char)text[0] == 0xff && (unsigned char)text[1] == 0xfe) ||
+ ((unsigned char)text[0] <= 0x7f && (unsigned char)text[1] == 0x00)))
{
/* File begins with 0xfeff, the BOM for UTF-16LE, or it begins
* with something that looks like an ASCII character encoded as
case WIMLIB_UPDATE_OP_DELETE:
imagex_printf(T("Deleted WIM path "
"\""WIMLIB_WIM_PATH_SEPARATOR_STRING "%"TS"\"\n"),
- info->update.command->delete.wim_path);
+ info->update.command->delete_.wim_path);
break;
case WIMLIB_UPDATE_OP_RENAME:
imagex_printf(T("Renamed WIM path "
break;
case WIMLIB_UPDATE_OP_DELETE:
if (!tstrcmp(option, T("--force")))
- cmd->delete.delete_flags |= WIMLIB_DELETE_FLAG_FORCE;
+ cmd->delete_.delete_flags |= WIMLIB_DELETE_FLAG_FORCE;
else if (!tstrcmp(option, T("--recursive")))
- cmd->delete.delete_flags |= WIMLIB_DELETE_FLAG_RECURSIVE;
+ cmd->delete_.delete_flags |= WIMLIB_DELETE_FLAG_RECURSIVE;
else
recognized = false;
break;
cmd->add.wim_target_path = (tchar*)nonoption;
break;
case WIMLIB_UPDATE_OP_DELETE:
- cmd->delete.wim_path = (tchar*)nonoption;
+ cmd->delete_.wim_path = (tchar*)nonoption;
break;
case WIMLIB_UPDATE_OP_RENAME:
if (num_nonoptions == 0)
imagex_apply(int argc, tchar **argv, int cmd)
{
int c;
- int open_flags = WIMLIB_OPEN_FLAG_SPLIT_OK;
+ int open_flags = 0;
int image = WIMLIB_NO_IMAGE;
WIMStruct *wim;
struct wimlib_wim_info info;
const tchar *image_num_or_name = NULL;
int extract_flags = WIMLIB_EXTRACT_FLAG_SEQUENTIAL;
- REFGLOB_SET(refglobs);
+ STRING_SET(refglobs);
for_opt(c, apply_options) {
switch (c) {
extract_flags |= WIMLIB_EXTRACT_FLAG_VERBOSE;
break;
case IMAGEX_REF_OPTION:
- ret = refglob_set_append(&refglobs, optarg);
+ ret = string_set_append(&refglobs, optarg);
if (ret)
goto out_free_refglobs;
break;
}
}
- if (refglobs.num_globs) {
+ if (refglobs.num_strings) {
if (wim == NULL) {
imagex_error(T("Can't specify --ref when applying from stdin!"));
ret = -1;
out_wimlib_free:
wimlib_free(wim);
out_free_refglobs:
- refglob_set_destroy(&refglobs);
+ string_set_destroy(&refglobs);
return ret;
out_usage:
unsigned long n;
struct wimlib_wim_info info;
- wimlib_get_wim_info(wim, &info);
+ wimlib_get_wim_info(template_wim, &info);
n = tstrtoul(template_image_name_or_num + 1, &tmp, 10);
if (n >= 1 && n <= info.image_count &&
*tmp == T('\0') &&
}
wimfile = argv[0];
- ret = wimlib_open_wim(wimfile, WIMLIB_OPEN_FLAG_SPLIT_OK, &wim,
- imagex_progress_func);
+ ret = wimlib_open_wim(wimfile, 0, &wim, imagex_progress_func);
if (ret)
goto out;
int image;
struct stat stbuf;
bool wim_is_new;
- REFGLOB_SET(refglobs);
+ STRING_SET(refglobs);
unsigned num_threads = 0;
for_opt(c, export_options) {
goto out_err;
break;
case IMAGEX_REF_OPTION:
- ret = refglob_set_append(&refglobs, optarg);
+ ret = string_set_append(&refglobs, optarg);
if (ret)
goto out_free_refglobs;
break;
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 | WIMLIB_OPEN_FLAG_SPLIT_OK, &src_wim,
+ ret = wimlib_open_wim(src_wimfile, open_flags, &src_wim,
imagex_progress_func);
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,
+ ret = wimlib_open_wim(dest_wimfile,
+ open_flags | WIMLIB_OPEN_FLAG_WRITE_ACCESS,
&dest_wim, imagex_progress_func);
if (ret)
goto out_free_src_wim;
if (ret)
goto out_free_dest_wim;
- if (refglobs.num_globs) {
+ if (refglobs.num_strings) {
ret = wim_reference_globs(src_wim, &refglobs, open_flags);
if (ret)
goto out_free_dest_wim;
out_free_src_wim:
wimlib_free(src_wim);
out_free_refglobs:
- refglob_set_destroy(&refglobs);
+ string_set_destroy(&refglobs);
return ret;
out_usage:
imagex_extract(int argc, tchar **argv, int cmd)
{
int c;
- int open_flags = WIMLIB_OPEN_FLAG_SPLIT_OK;
+ int open_flags = 0;
int image;
WIMStruct *wim;
int ret;
tchar *dest_dir = T(".");
int extract_flags = WIMLIB_EXTRACT_FLAG_SEQUENTIAL | WIMLIB_EXTRACT_FLAG_NORPFIX;
- REFGLOB_SET(refglobs);
+ STRING_SET(refglobs);
struct wimlib_extract_command *cmds;
size_t num_cmds;
extract_flags |= WIMLIB_EXTRACT_FLAG_VERBOSE;
break;
case IMAGEX_REF_OPTION:
- ret = refglob_set_append(&refglobs, optarg);
+ ret = string_set_append(&refglobs, optarg);
if (ret)
goto out_free_refglobs;
break;
if (ret)
goto out_wimlib_free;
- if (refglobs.num_globs) {
+ if (refglobs.num_strings) {
ret = wim_reference_globs(wim, &refglobs, open_flags);
if (ret)
goto out_wimlib_free;
out_free_cmds:
free_extract_commands(cmds, num_cmds, dest_dir);
out_free_refglobs:
- refglob_set_destroy(&refglobs);
+ string_set_destroy(&refglobs);
return ret;
out_usage:
WIMStruct *wim;
int image;
int ret;
- int open_flags = WIMLIB_OPEN_FLAG_SPLIT_OK;
+ int open_flags = 0;
struct wimlib_wim_info info;
for_opt(c, info_options) {
image = wimlib_resolve_image(wim, image_num_or_name);
ret = WIMLIB_ERR_INVALID_IMAGE;
if (image == WIMLIB_NO_IMAGE && tstrcmp(image_num_or_name, T("0"))) {
- imagex_error(T("The image \"%"TS"\" does not exist in \"%"TS"\""),
- image_num_or_name, wimfile);
+ verify_image_exists(image, image_num_or_name, wimfile);
if (boot) {
imagex_error(T("If you would like to set the boot "
"index to 0, specify image \"0\" with "
imagex_join(int argc, tchar **argv, int cmd)
{
int c;
- int swm_open_flags = WIMLIB_OPEN_FLAG_SPLIT_OK;
+ int swm_open_flags = 0;
int wim_write_flags = 0;
const tchar *output_path;
int ret;
{
int c;
int mount_flags = 0;
- int open_flags = WIMLIB_OPEN_FLAG_SPLIT_OK;
+ int open_flags = 0;
const tchar *staging_dir = NULL;
const tchar *wimfile;
const tchar *dir;
int image;
int ret;
- REFGLOB_SET(refglobs);
+ STRING_SET(refglobs);
if (cmd == CMD_MOUNTRW) {
mount_flags |= WIMLIB_MOUNT_FLAG_READWRITE;
}
break;
case IMAGEX_REF_OPTION:
- ret = refglob_set_append(&refglobs, optarg);
+ ret = string_set_append(&refglobs, optarg);
if (ret)
goto out_free_refglobs;
break;
dir = argv[1];
}
- if (refglobs.num_globs) {
+ if (refglobs.num_strings) {
ret = wim_reference_globs(wim, &refglobs, open_flags);
if (ret)
goto out_free_wim;
out_free_wim:
wimlib_free(wim);
out_free_refglobs:
- refglob_set_destroy(&refglobs);
+ string_set_destroy(&refglobs);
return ret;
out_usage:
cmds[i].add.config = config;
break;
case WIMLIB_UPDATE_OP_DELETE:
- cmds[i].delete.delete_flags |= default_delete_flags;
+ cmds[i].delete_.delete_flags |= default_delete_flags;
break;
default:
break;