]> wimlib.net Git - wimlib/blobdiff - programs/imagex.c
imagex.c: Rename `struct refglob_set' => `struct string_set'
[wimlib] / programs / imagex.c
index ae463ba170ee073f7e40d017da40263226c5b04c..fc932857dc8a0f1eebbc289fbf8d0ca5a8e5293f 100644 (file)
@@ -366,11 +366,13 @@ verify_image_exists(int image, const tchar *image_name, const tchar *wim_name)
        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 "
        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;
 }
        }
        return 0;
 }
@@ -380,7 +382,7 @@ verify_image_is_single(int image)
 {
        if (image == WIMLIB_ALL_IMAGES) {
                imagex_error(T("Cannot specify all images for this action!"));
 {
        if (image == WIMLIB_ALL_IMAGES) {
                imagex_error(T("Cannot specify all images for this action!"));
-               return -1;
+               return WIMLIB_ERR_INVALID_IMAGE;
        }
        return 0;
 }
        }
        return 0;
 }
@@ -413,61 +415,63 @@ get_compression_type(const tchar *optarg)
        }
 }
 
        }
 }
 
-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
 
 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;
                }
                        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;
 }
 
        return 0;
 }
 
+static void
+string_set_destroy(struct string_set *set)
+{
+       free(set->strings);
+}
+
 static int
 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);
 }
 
                                               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,
 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 (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);
                        imagex_error(T("\"%"TS"\" is part of a split WIM. "
                                       "Use --ref to specify the other parts."),
                                     wimfile);
@@ -935,8 +939,8 @@ translate_text_to_tstr(char *text, size_t num_bytes, size_t *num_tchars_ret)
        size_t num_wchars;
 
        if (num_bytes >= 2 &&
        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
        {
                /* File begins with 0xfeff, the BOM for UTF-16LE, or it begins
                 * with something that looks like an ASCII character encoded as
@@ -1452,7 +1456,7 @@ static int
 imagex_apply(int argc, tchar **argv, int cmd)
 {
        int c;
 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;
        int image = WIMLIB_NO_IMAGE;
        WIMStruct *wim;
        struct wimlib_wim_info info;
@@ -1462,7 +1466,7 @@ imagex_apply(int argc, tchar **argv, int cmd)
        const tchar *image_num_or_name = NULL;
        int extract_flags = WIMLIB_EXTRACT_FLAG_SEQUENTIAL;
 
        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) {
 
        for_opt(c, apply_options) {
                switch (c) {
@@ -1479,7 +1483,7 @@ imagex_apply(int argc, tchar **argv, int cmd)
                        extract_flags |= WIMLIB_EXTRACT_FLAG_VERBOSE;
                        break;
                case IMAGEX_REF_OPTION:
                        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_free_refglobs;
                        break;
@@ -1558,7 +1562,7 @@ imagex_apply(int argc, tchar **argv, int cmd)
                }
        }
 
                }
        }
 
-       if (refglobs.num_globs) {
+       if (refglobs.num_strings) {
                if (wim == NULL) {
                        imagex_error(T("Can't specify --ref when applying from stdin!"));
                        ret = -1;
                if (wim == NULL) {
                        imagex_error(T("Can't specify --ref when applying from stdin!"));
                        ret = -1;
@@ -1614,7 +1618,7 @@ imagex_apply(int argc, tchar **argv, int cmd)
 out_wimlib_free:
        wimlib_free(wim);
 out_free_refglobs:
 out_wimlib_free:
        wimlib_free(wim);
 out_free_refglobs:
-       refglob_set_destroy(&refglobs);
+       string_set_destroy(&refglobs);
        return ret;
 
 out_usage:
        return ret;
 
 out_usage:
@@ -1980,7 +1984,7 @@ imagex_capture_or_append(int argc, tchar **argv, int cmd)
                        unsigned long n;
                        struct wimlib_wim_info info;
 
                        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') &&
                        n = tstrtoul(template_image_name_or_num + 1, &tmp, 10);
                        if (n >= 1 && n <= info.image_count &&
                            *tmp == T('\0') &&
@@ -2203,8 +2207,7 @@ imagex_dir(int argc, tchar **argv, int cmd)
        }
 
        wimfile = argv[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;
 
        if (ret)
                goto out;
 
@@ -2267,7 +2270,7 @@ imagex_export(int argc, tchar **argv, int cmd)
        int image;
        struct stat stbuf;
        bool wim_is_new;
        int image;
        struct stat stbuf;
        bool wim_is_new;
-       REFGLOB_SET(refglobs);
+       STRING_SET(refglobs);
        unsigned num_threads = 0;
 
        for_opt(c, export_options) {
        unsigned num_threads = 0;
 
        for_opt(c, export_options) {
@@ -2288,7 +2291,7 @@ imagex_export(int argc, tchar **argv, int cmd)
                                goto out_err;
                        break;
                case IMAGEX_REF_OPTION:
                                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;
                        if (ret)
                                goto out_free_refglobs;
                        break;
@@ -2319,8 +2322,7 @@ imagex_export(int argc, tchar **argv, int cmd)
        dest_wimfile          = argv[2];
        dest_name             = (argc >= 4) ? argv[3] : NULL;
        dest_desc             = (argc >= 5) ? argv[4] : NULL;
        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;
                              imagex_progress_func);
        if (ret)
                goto out_free_refglobs;
@@ -2361,7 +2363,8 @@ imagex_export(int argc, tchar **argv, int cmd)
                        ret = -1;
                        goto out_free_src_wim;
                }
                        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;
                                      &dest_wim, imagex_progress_func);
                if (ret)
                        goto out_free_src_wim;
@@ -2410,7 +2413,7 @@ imagex_export(int argc, tchar **argv, int cmd)
        if (ret)
                goto out_free_dest_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;
                ret = wim_reference_globs(src_wim, &refglobs, open_flags);
                if (ret)
                        goto out_free_dest_wim;
@@ -2451,7 +2454,7 @@ out_free_dest_wim:
 out_free_src_wim:
        wimlib_free(src_wim);
 out_free_refglobs:
 out_free_src_wim:
        wimlib_free(src_wim);
 out_free_refglobs:
-       refglob_set_destroy(&refglobs);
+       string_set_destroy(&refglobs);
        return ret;
 
 out_usage:
        return ret;
 
 out_usage:
@@ -2527,7 +2530,7 @@ static int
 imagex_extract(int argc, tchar **argv, int cmd)
 {
        int c;
 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;
        int image;
        WIMStruct *wim;
        int ret;
@@ -2536,7 +2539,7 @@ imagex_extract(int argc, tchar **argv, int cmd)
        tchar *dest_dir = T(".");
        int extract_flags = WIMLIB_EXTRACT_FLAG_SEQUENTIAL | WIMLIB_EXTRACT_FLAG_NORPFIX;
 
        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;
 
        struct wimlib_extract_command *cmds;
        size_t num_cmds;
@@ -2550,7 +2553,7 @@ imagex_extract(int argc, tchar **argv, int cmd)
                        extract_flags |= WIMLIB_EXTRACT_FLAG_VERBOSE;
                        break;
                case IMAGEX_REF_OPTION:
                        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_free_refglobs;
                        break;
@@ -2607,7 +2610,7 @@ imagex_extract(int argc, tchar **argv, int cmd)
        if (ret)
                goto out_wimlib_free;
 
        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;
                ret = wim_reference_globs(wim, &refglobs, open_flags);
                if (ret)
                        goto out_wimlib_free;
@@ -2634,7 +2637,7 @@ out_wimlib_free:
 out_free_cmds:
        free_extract_commands(cmds, num_cmds, dest_dir);
 out_free_refglobs:
 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:
        return ret;
 
 out_usage:
@@ -2738,7 +2741,7 @@ imagex_info(int argc, tchar **argv, int cmd)
        WIMStruct *wim;
        int image;
        int ret;
        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) {
        struct wimlib_wim_info info;
 
        for_opt(c, info_options) {
@@ -2804,8 +2807,7 @@ imagex_info(int argc, tchar **argv, int cmd)
        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"))) {
        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 "
                if (boot) {
                        imagex_error(T("If you would like to set the boot "
                                       "index to 0, specify image \"0\" with "
@@ -2997,7 +2999,7 @@ static int
 imagex_join(int argc, tchar **argv, int cmd)
 {
        int c;
 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 wim_write_flags = 0;
        const tchar *output_path;
        int ret;
@@ -3044,7 +3046,7 @@ imagex_mount_rw_or_ro(int argc, tchar **argv, int cmd)
 {
        int c;
        int mount_flags = 0;
 {
        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;
        const tchar *staging_dir = NULL;
        const tchar *wimfile;
        const tchar *dir;
@@ -3053,7 +3055,7 @@ imagex_mount_rw_or_ro(int argc, tchar **argv, int cmd)
        int image;
        int ret;
 
        int image;
        int ret;
 
-       REFGLOB_SET(refglobs);
+       STRING_SET(refglobs);
 
        if (cmd == CMD_MOUNTRW) {
                mount_flags |= WIMLIB_MOUNT_FLAG_READWRITE;
 
        if (cmd == CMD_MOUNTRW) {
                mount_flags |= WIMLIB_MOUNT_FLAG_READWRITE;
@@ -3085,7 +3087,7 @@ imagex_mount_rw_or_ro(int argc, tchar **argv, int cmd)
                        }
                        break;
                case IMAGEX_REF_OPTION:
                        }
                        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_free_refglobs;
                        break;
@@ -3133,7 +3135,7 @@ imagex_mount_rw_or_ro(int argc, tchar **argv, int cmd)
                dir = argv[1];
        }
 
                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;
                ret = wim_reference_globs(wim, &refglobs, open_flags);
                if (ret)
                        goto out_free_wim;
@@ -3148,7 +3150,7 @@ imagex_mount_rw_or_ro(int argc, tchar **argv, int cmd)
 out_free_wim:
        wimlib_free(wim);
 out_free_refglobs:
 out_free_wim:
        wimlib_free(wim);
 out_free_refglobs:
-       refglob_set_destroy(&refglobs);
+       string_set_destroy(&refglobs);
        return ret;
 
 out_usage:
        return ret;
 
 out_usage: