X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=programs%2Fimagex.c;h=b45d2d4b99232e0c2d1ba4daf3445318d58967e5;hp=ed0a977625ed136859fb3e38c52123c9d78b2cdd;hb=e8c3ca2d1d0cac3d64985b45a9f654d2029a7518;hpb=f67a3b3e3420dc5f5078ce021af9293913c18cf0 diff --git a/programs/imagex.c b/programs/imagex.c index ed0a9776..b45d2d4b 100644 --- a/programs/imagex.c +++ b/programs/imagex.c @@ -22,7 +22,10 @@ * along with this program. If not, see . */ -#include "config.h" +#ifdef HAVE_CONFIG_H +# include "config.h" /* Need for PACKAGE_VERSION, etc. */ +#endif + #include "wimlib.h" #include "wimlib_tchar.h" @@ -40,7 +43,7 @@ #include #ifdef HAVE_ALLOCA_H -#include +# include #endif #ifdef __WIN32__ @@ -80,7 +83,7 @@ enum imagex_op_type { }; static void usage(int cmd_type); -static void usage_all(); +static void usage_all(void); static bool imagex_be_quiet = false; @@ -169,7 +172,7 @@ IMAGEX_PROGNAME" unmount DIRECTORY [--commit] [--check] [--rebuild]\n" ), [UPDATE] = T( -IMAGEX_PROGNAME" update WIMFILE IMAGE [--check] [--rebuild]\n" +IMAGEX_PROGNAME" update WIMFILE [IMAGE_NUM | IMAGE_NAME] [--check] [--rebuild]\n" " [--threads=NUM_THREADS] [DEFAULT_ADD_OPTIONS]\n" " [DEFAULT_DELETE_OPTIONS] < CMDFILE\n" ), @@ -179,14 +182,15 @@ IMAGEX_PROGNAME" update WIMFILE IMAGE [--check] [--rebuild]\n" static void recommend_man_page(const tchar *cmd_name) { + const tchar *format_str; #ifdef __WIN32__ - tprintf(T("See "IMAGEX_PROGNAME"-%"TS".pdf in the " - "doc directory for more details.\n"), - cmd_name); + format_str = T("See "IMAGEX_PROGNAME"%"TS"%"TS".pdf in the " + "doc directory for more details.\n"); #else - tprintf(T("Try `man "IMAGEX_PROGNAME"-%"TS"' " - "for more details.\n"), cmd_name); + format_str = T("Try `man "IMAGEX_PROGNAME"%"TS"%"TS"' " + "for more details.\n"); #endif + tprintf(format_str, *cmd_name ? T("-") : T(""), cmd_name); } enum { @@ -342,9 +346,16 @@ static const struct option update_options[] = { {T("threads"), required_argument, NULL, IMAGEX_THREADS_OPTION}, {T("check"), no_argument, NULL, IMAGEX_CHECK_OPTION}, {T("rebuild"), no_argument, NULL, IMAGEX_REBUILD_OPTION}, + + /* Default delete options */ {T("force"), no_argument, NULL, IMAGEX_FORCE_OPTION}, {T("recursive"), no_argument, NULL, IMAGEX_RECURSIVE_OPTION}, + + /* Global add option */ {T("config"), required_argument, NULL, IMAGEX_CONFIG_OPTION}, + + /* Default add options */ + {T("verbose"), no_argument, NULL, IMAGEX_VERBOSE_OPTION}, {T("dereference"), no_argument, NULL, IMAGEX_DEREFERENCE_OPTION}, {T("unix-data"), no_argument, NULL, IMAGEX_UNIX_DATA_OPTION}, {T("noacls"), no_argument, NULL, IMAGEX_NO_ACLS_OPTION}, @@ -1233,7 +1244,9 @@ update_command_add_option(int op, const tchar *option, bool recognized = true; switch (op) { case WIMLIB_UPDATE_OP_ADD: - if (!tstrcmp(option, T("--unix-data"))) + if (!tstrcmp(option, T("--verbose"))) + cmd->add.add_flags |= WIMLIB_ADD_IMAGE_FLAG_VERBOSE; + else if (!tstrcmp(option, T("--unix-data"))) cmd->add.add_flags |= WIMLIB_ADD_IMAGE_FLAG_UNIX_DATA; else if (!tstrcmp(option, T("--no-acls")) || !tstrcmp(option, T("--noacls"))) cmd->add.add_flags |= WIMLIB_ADD_IMAGE_FLAG_NO_ACLS; @@ -1252,7 +1265,7 @@ update_command_add_option(int op, const tchar *option, else recognized = false; break; - case WIMLIB_UPDATE_OP_RENAME: + default: recognized = false; break; } @@ -1347,8 +1360,8 @@ parse_update_command(tchar *line, size_t len, if (!update_command_add_option(op, next_string, command)) { imagex_error(T("Unrecognized option \"%"TS"\" to " - "update command on line %zu"), - next_string, line_number); + "update command \"%"TS"\" on line %zu"), + next_string, command_name, line_number); return false; } @@ -2248,7 +2261,7 @@ imagex_extract(int argc, tchar **argv) win32_acquire_restore_privileges(); #endif - ret = wimlib_extract_files(wim, image, 0, cmds, num_cmds, + ret = wimlib_extract_files(wim, image, cmds, num_cmds, 0, additional_swms, num_additional_swms, imagex_progress_func); if (ret == 0) { @@ -2902,7 +2915,7 @@ imagex_update(int argc, tchar **argv) WIMStruct *wim; int ret; int open_flags = 0; - int write_flags = WIMLIB_WRITE_FLAG_SOFT_DELETE; + int write_flags = 0; int update_flags = 0; int default_add_flags = WIMLIB_ADD_IMAGE_FLAG_EXCLUDE_VERBOSE; int default_delete_flags = 0; @@ -2919,6 +2932,7 @@ imagex_update(int argc, tchar **argv) for_opt(c, update_options) { switch (c) { + /* Generic or write options */ case IMAGEX_THREADS_OPTION: num_threads = parse_num_threads(optarg); if (num_threads == UINT_MAX) { @@ -2933,15 +2947,24 @@ imagex_update(int argc, tchar **argv) case IMAGEX_REBUILD_OPTION: write_flags |= WIMLIB_WRITE_FLAG_REBUILD; break; + + /* Default delete options */ case IMAGEX_FORCE_OPTION: default_delete_flags |= WIMLIB_DELETE_FLAG_FORCE; break; case IMAGEX_RECURSIVE_OPTION: default_delete_flags |= WIMLIB_DELETE_FLAG_RECURSIVE; break; + + /* Global add option */ case IMAGEX_CONFIG_OPTION: config_file = optarg; break; + + /* Default add options */ + case IMAGEX_VERBOSE_OPTION: + default_add_flags |= WIMLIB_ADD_IMAGE_FLAG_VERBOSE; + break; case IMAGEX_DEREFERENCE_OPTION: default_add_flags |= WIMLIB_ADD_IMAGE_FLAG_DEREFERENCE; break; @@ -3090,7 +3113,7 @@ static const struct imagex_command imagex_commands[] = { }; static void -version() +version(void) { static const tchar *s = T( @@ -3153,7 +3176,7 @@ usage(int cmd_type) } static void -usage_all() +usage_all(void) { tfputs(T("Usage:\n"), stdout); for (int i = 0; i < ARRAY_LEN(usage_strings); i++) @@ -3165,9 +3188,9 @@ usage_all() "\n" " The compression TYPE may be \"maximum\", \"fast\", or \"none\".\n" "\n" -" Try `man "IMAGEX_PROGNAME"' for more information.\n" ); tfputs(extra, stdout); + recommend_man_page(T("")); } /* Entry point for wimlib's ImageX implementation. On UNIX the command