X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=programs%2Fimagex.c;h=90eac384f1eed5aedc07f6b407805e09ffdb856c;hp=96f9a9342926734c7e47bf469b8414491075c31f;hb=e291204c47c40a230fd0fd10f099cb5f675f72a2;hpb=ce81b1490c131f0be20c21661bc8f954d45c417c diff --git a/programs/imagex.c b/programs/imagex.c index 96f9a934..90eac384 100644 --- a/programs/imagex.c +++ b/programs/imagex.c @@ -398,15 +398,21 @@ static int imagex_progress_func(enum wimlib_progress_msg msg, putchar('\n'); break; case WIMLIB_PROGRESS_MSG_EXTRACT_IMAGE_BEGIN: - printf("Applying image %d (%s) to `%s'\n", + printf("Applying image %d (%s) from `%s' to %s `%s'\n", info->extract.image, info->extract.image_name, + info->extract.wimfile_name, + ((info->extract.extract_flags & WIMLIB_EXTRACT_FLAG_NTFS) ? + "NTFS volume" : "directory"), info->extract.target); break; - /*case WIMLIB_PROGRESS_MSG_EXTRACT_IMAGE_END:*/ - /*printf("Done applying image %d!\n",*/ - /*info->extract.image);*/ - /*break;*/ + case WIMLIB_PROGRESS_MSG_EXTRACT_IMAGE_END: + printf("Done applying WIM image.\n"); + if (info->extract.extract_flags & WIMLIB_EXTRACT_FLAG_NTFS) { + printf("Unmounting NTFS volume `%s'...\n", + info->extract.target); + } + break; /*case WIMLIB_PROGRESS_MSG_EXTRACT_DIR_STRUCTURE_BEGIN:*/ /*printf("Applying directory structure to %s\n",*/ /*info->extract.target);*/ @@ -617,11 +623,8 @@ static int imagex_apply(int argc, const char **argv) ret = stat(target, &stbuf); if (ret == 0) { - if (S_ISBLK(stbuf.st_mode) || S_ISREG(stbuf.st_mode)) { + if (S_ISBLK(stbuf.st_mode) || S_ISREG(stbuf.st_mode)) extract_flags |= WIMLIB_EXTRACT_FLAG_NTFS; - printf("Applying `%s' image %d to NTFS volume `%s'\n", - wimfile, image, target); - } } else { if (errno != ENOENT) { imagex_error_with_errno("Failed to stat `%s'", target); @@ -1097,6 +1100,7 @@ static int imagex_info(int argc, const char **argv) int open_flags = WIMLIB_OPEN_FLAG_SPLIT_OK; int part_number; int total_parts; + int num_images; for_opt(c, info_options) { switch (c) { @@ -1162,7 +1166,7 @@ static int imagex_info(int argc, const char **argv) image = wimlib_resolve_image(w, image_num_or_name); if (image == WIMLIB_NO_IMAGE && strcmp(image_num_or_name, "0") != 0) { imagex_error("The image `%s' does not exist", - image_num_or_name); + image_num_or_name); if (boot) imagex_error("If you would like to set the boot " "index to 0, specify image \"0\" with " @@ -1171,7 +1175,18 @@ static int imagex_info(int argc, const char **argv) goto out; } - if (image == WIMLIB_ALL_IMAGES && wimlib_get_num_images(w) > 1) { + num_images = wimlib_get_num_images(w); + + if (num_images == 0) { + if (boot) { + imagex_error("--boot is meaningless on a WIM with no " + "images"); + ret = WIMLIB_ERR_INVALID_IMAGE; + goto out; + } + } + + if (image == WIMLIB_ALL_IMAGES && num_images > 1) { if (boot) { imagex_error("Cannot specify the --boot flag " "without specifying a specific " @@ -1229,13 +1244,14 @@ static int imagex_info(int argc, const char **argv) "file `%s' for " "writing ", xml_out_file); + ret = -1; goto out; } ret = wimlib_extract_xml_data(w, fp); if (fclose(fp) != 0) { imagex_error("Failed to close the file `%s'", xml_out_file); - goto out; + ret = -1; } if (ret != 0) @@ -1255,7 +1271,8 @@ static int imagex_info(int argc, const char **argv) /* Modification operations */ if (total_parts != 1) { imagex_error("Modifying a split WIM is not supported."); - return -1; + ret = -1; + goto out; } if (image == WIMLIB_ALL_IMAGES) image = 1; @@ -1263,7 +1280,8 @@ static int imagex_info(int argc, const char **argv) if (image == WIMLIB_NO_IMAGE && new_name) { imagex_error("Cannot specify new_name (`%s') when " "using image 0", new_name); - return -1; + ret = -1; + goto out; } if (boot) { @@ -1311,18 +1329,18 @@ static int imagex_info(int argc, const char **argv) /* Only call wimlib_overwrite() if something actually needs to * be changed. */ if (boot || new_name || new_desc || - check != wimlib_has_integrity_table(w)) { + (check && !wimlib_has_integrity_table(w))) + { + int write_flags; ret = file_writable(wimfile); if (ret != 0) return ret; - int write_flags; - if (check) { + if (check) write_flags = WIMLIB_WRITE_FLAG_CHECK_INTEGRITY; - } else { + else write_flags = 0; - } ret = wimlib_overwrite(w, write_flags, 1, imagex_progress_func); @@ -1330,7 +1348,7 @@ static int imagex_info(int argc, const char **argv) ret = 0; } else { printf("The file `%s' was not modified because nothing " - "needed to be done.\n", wimfile); + "needed to be done.\n", wimfile); ret = 0; } }