]> wimlib.net Git - wimlib/blobdiff - programs/imagex.c
imagex.c: Rename `struct refglob_set' => `struct string_set'
[wimlib] / programs / imagex.c
index 031f555bf2d4e91c0fd987ec18bf44e83cd59733..fc932857dc8a0f1eebbc289fbf8d0ca5a8e5293f 100644 (file)
@@ -118,8 +118,6 @@ static FILE *imagex_info_file;
 
 enum {
        IMAGEX_ALLOW_OTHER_OPTION,
-       IMAGEX_AS_DELTA_FROM_OPTION,
-       IMAGEX_AS_UPDATE_OF_OPTION,
        IMAGEX_BOOT_OPTION,
        IMAGEX_CHECK_OPTION,
        IMAGEX_COMMAND_OPTION,
@@ -127,6 +125,7 @@ enum {
        IMAGEX_COMPRESS_OPTION,
        IMAGEX_CONFIG_OPTION,
        IMAGEX_DEBUG_OPTION,
+       IMAGEX_DELTA_FROM_OPTION,
        IMAGEX_DEREFERENCE_OPTION,
        IMAGEX_DEST_DIR_OPTION,
        IMAGEX_EXTRACT_XML_OPTION,
@@ -159,6 +158,7 @@ enum {
        IMAGEX_THREADS_OPTION,
        IMAGEX_TO_STDOUT_OPTION,
        IMAGEX_UNIX_DATA_OPTION,
+       IMAGEX_UPDATE_OF_OPTION,
        IMAGEX_VERBOSE_OPTION,
        IMAGEX_XML_OPTION,
 };
@@ -203,9 +203,8 @@ static const struct option capture_or_append_options[] = {
        {T("norpfix"),     no_argument,       NULL, IMAGEX_NORPFIX_OPTION},
        {T("pipable"),     no_argument,       NULL, IMAGEX_PIPABLE_OPTION},
        {T("not-pipable"), no_argument,       NULL, IMAGEX_NOT_PIPABLE_OPTION},
-       {T("as-update-of"),  required_argument, NULL, IMAGEX_AS_UPDATE_OF_OPTION},
-       {T("as-update-from"), required_argument, NULL, IMAGEX_AS_UPDATE_OF_OPTION},
-       {T("as-delta-from"),   required_argument, NULL, IMAGEX_AS_DELTA_FROM_OPTION},
+       {T("update-of"),   required_argument, NULL, IMAGEX_UPDATE_OF_OPTION},
+       {T("delta-from"),  required_argument, NULL, IMAGEX_DELTA_FROM_OPTION},
        {NULL, 0, NULL, 0},
 };
 
@@ -367,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 "
-                            "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;
 }
@@ -381,7 +382,7 @@ verify_image_is_single(int image)
 {
        if (image == WIMLIB_ALL_IMAGES) {
                imagex_error(T("Cannot specify all images for this action!"));
-               return -1;
+               return WIMLIB_ERR_INVALID_IMAGE;
        }
        return 0;
 }
@@ -414,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
-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);
@@ -936,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 &&
-           ((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
@@ -1205,7 +1208,7 @@ imagex_progress_func(enum wimlib_progress_msg msg,
                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 "
@@ -1274,9 +1277,9 @@ update_command_add_option(int op, const tchar *option,
                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;
@@ -1307,7 +1310,7 @@ update_command_add_nonoption(int op, const tchar *nonoption,
                        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)
@@ -1453,7 +1456,7 @@ static int
 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;
@@ -1463,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;
 
-       REFGLOB_SET(refglobs);
+       STRING_SET(refglobs);
 
        for_opt(c, apply_options) {
                switch (c) {
@@ -1480,7 +1483,7 @@ imagex_apply(int argc, tchar **argv, int cmd)
                        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;
@@ -1559,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;
@@ -1615,7 +1618,7 @@ imagex_apply(int argc, tchar **argv, int cmd)
 out_wimlib_free:
        wimlib_free(wim);
 out_free_refglobs:
-       refglob_set_destroy(&refglobs);
+       string_set_destroy(&refglobs);
        return ret;
 
 out_usage:
@@ -1731,9 +1734,9 @@ imagex_capture_or_append(int argc, tchar **argv, int cmd)
                case IMAGEX_NOT_PIPABLE_OPTION:
                        write_flags |= WIMLIB_WRITE_FLAG_NOT_PIPABLE;
                        break;
-               case IMAGEX_AS_UPDATE_OF_OPTION:
+               case IMAGEX_UPDATE_OF_OPTION:
                        if (template_image_name_or_num) {
-                               imagex_error(T("'--as-update-of' can only be "
+                               imagex_error(T("'--update-of' can only be "
                                               "specified one time!"));
                                goto out_err;
                        } else {
@@ -1750,14 +1753,14 @@ imagex_capture_or_append(int argc, tchar **argv, int cmd)
                                }
                        }
                        break;
-               case IMAGEX_AS_DELTA_FROM_OPTION:
+               case IMAGEX_DELTA_FROM_OPTION:
                        if (cmd != CMD_CAPTURE) {
-                               imagex_error(T("'--as-delta-from' is only "
+                               imagex_error(T("'--delta-from' is only "
                                               "valid for capture!"));
                                goto out_usage;
                        }
                        if (base_wimfile) {
-                               imagex_error(T("'--as-delta-from' can only be "
+                               imagex_error(T("'--delta-from' can only be "
                                               "specified one time!"));
                                goto out_err;
                        }
@@ -1801,8 +1804,8 @@ imagex_capture_or_append(int argc, tchar **argv, int cmd)
                set_fd_to_binary_mode(wim_fd);
        }
 
-       /* If template image was specified using --as-update-of=IMAGE rather
-        * than --as-update-of=WIMFILE:IMAGE, set the default WIMFILE.  */
+       /* If template image was specified using --update-of=IMAGE rather
+        * than --update-of=WIMFILE:IMAGE, set the default WIMFILE.  */
        if (template_image_name_or_num && !template_wimfile) {
                if (base_wimfile) {
                        /* Capturing delta WIM:  default to base WIM.  */
@@ -1815,7 +1818,7 @@ imagex_capture_or_append(int argc, tchar **argv, int cmd)
                        /* Capturing a normal (non-delta) WIM, so the WIM file
                         * *must* be explicitly specified.  */
                        imagex_error(T("For capture of non-delta WIM, "
-                                      "'--as-update-of' must specify "
+                                      "'--update-of' must specify "
                                       "WIMFILE:IMAGE!"));
                        goto out_usage;
                }
@@ -1981,7 +1984,7 @@ imagex_capture_or_append(int argc, tchar **argv, int cmd)
                        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') &&
@@ -2012,7 +2015,7 @@ imagex_capture_or_append(int argc, tchar **argv, int cmd)
        if (desc || flags_element || template_image_name_or_num) {
                /* User provided <DESCRIPTION> or <FLAGS> element, or an image
                 * on which the added one is to be based has been specified with
-                * --as-update-of.  Get the index of the image we just
+                * --update-of.  Get the index of the image we just
                 *  added, then use it to call the appropriate functions.  */
                struct wimlib_wim_info info;
 
@@ -2204,8 +2207,7 @@ imagex_dir(int argc, tchar **argv, int cmd)
        }
 
        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;
 
@@ -2268,7 +2270,7 @@ imagex_export(int argc, tchar **argv, int cmd)
        int image;
        struct stat stbuf;
        bool wim_is_new;
-       REFGLOB_SET(refglobs);
+       STRING_SET(refglobs);
        unsigned num_threads = 0;
 
        for_opt(c, export_options) {
@@ -2289,7 +2291,7 @@ imagex_export(int argc, tchar **argv, int cmd)
                                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;
@@ -2320,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;
-       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;
@@ -2362,7 +2363,8 @@ imagex_export(int argc, tchar **argv, int cmd)
                        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;
@@ -2411,7 +2413,7 @@ imagex_export(int argc, tchar **argv, int cmd)
        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;
@@ -2452,7 +2454,7 @@ 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:
@@ -2528,7 +2530,7 @@ static int
 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;
@@ -2537,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;
 
-       REFGLOB_SET(refglobs);
+       STRING_SET(refglobs);
 
        struct wimlib_extract_command *cmds;
        size_t num_cmds;
@@ -2551,7 +2553,7 @@ imagex_extract(int argc, tchar **argv, int cmd)
                        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;
@@ -2608,7 +2610,7 @@ imagex_extract(int argc, tchar **argv, int cmd)
        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;
@@ -2635,7 +2637,7 @@ 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:
@@ -2739,7 +2741,7 @@ imagex_info(int argc, tchar **argv, int cmd)
        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) {
@@ -2805,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"))) {
-               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 "
@@ -2998,7 +2999,7 @@ static int
 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;
@@ -3045,7 +3046,7 @@ imagex_mount_rw_or_ro(int argc, tchar **argv, int cmd)
 {
        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;
@@ -3054,7 +3055,7 @@ imagex_mount_rw_or_ro(int argc, tchar **argv, int cmd)
        int image;
        int ret;
 
-       REFGLOB_SET(refglobs);
+       STRING_SET(refglobs);
 
        if (cmd == CMD_MOUNTRW) {
                mount_flags |= WIMLIB_MOUNT_FLAG_READWRITE;
@@ -3086,7 +3087,7 @@ imagex_mount_rw_or_ro(int argc, tchar **argv, int cmd)
                        }
                        break;
                case IMAGEX_REF_OPTION:
-                       ret = refglob_set_append(&refglobs, optarg);
+                       ret = string_set_append(&refglobs, optarg);
                        if (ret)
                                goto out_free_refglobs;
                        break;
@@ -3134,7 +3135,7 @@ imagex_mount_rw_or_ro(int argc, tchar **argv, int cmd)
                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;
@@ -3149,7 +3150,7 @@ imagex_mount_rw_or_ro(int argc, tchar **argv, int cmd)
 out_free_wim:
        wimlib_free(wim);
 out_free_refglobs:
-       refglob_set_destroy(&refglobs);
+       string_set_destroy(&refglobs);
        return ret;
 
 out_usage:
@@ -3526,7 +3527,7 @@ imagex_update(int argc, tchar **argv, int cmd)
                        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;
@@ -3603,7 +3604,7 @@ T(
 "                    [--dereference] [--config=FILE] [--threads=NUM_THREADS]\n"
 "                    [--rebuild] [--unix-data] [--source-list] [--no-acls]\n"
 "                    [--strict-acls] [--rpfix] [--norpfix] [--pipable]\n"
-"                    [--not-pipable] [--as-update-of=[WIMFILE:]IMAGE]\n"
+"                    [--not-pipable] [--update-of=[WIMFILE:]IMAGE]\n"
 ),
 [CMD_APPLY] =
 T(
@@ -3621,7 +3622,7 @@ T(
 "                    [--verbose] [--dereference] [--config=FILE]\n"
 "                    [--threads=NUM_THREADS] [--unix-data] [--source-list]\n"
 "                    [--no-acls] [--strict-acls] [--norpfix] [--pipable]\n"
-"                    [--as-update-of=[WIMFILE:]IMAGE] [--as-delta-from=WIMFILE]\n"
+"                    [--update-of=[WIMFILE:]IMAGE] [--delta-from=WIMFILE]\n"
 ),
 [CMD_DELETE] =
 T(