X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=programs%2Fimagex.c;h=30ffd3740cae2ff2cf554ff5ea874eba5bb273cd;hp=90eac384f1eed5aedc07f6b407805e09ffdb856c;hb=084039079380f71fd330ba0fed5a58548ddf0587;hpb=57282732d032921cfb89f3b6b1715746d7aa14ec diff --git a/programs/imagex.c b/programs/imagex.c index 90eac384..30ffd374 100644 --- a/programs/imagex.c +++ b/programs/imagex.c @@ -105,7 +105,7 @@ static const char *usage_strings[] = { [SPLIT] = "imagex split WIMFILE SPLIT_WIMFILE PART_SIZE_MB [--check]\n", [UNMOUNT] = -"imagex unmount DIRECTORY [--commit] [--check]\n", +"imagex unmount DIRECTORY [--commit] [--check] [--rebuild]\n", }; static const struct option common_options[] = { @@ -187,8 +187,9 @@ static const struct option split_options[] = { }; static const struct option unmount_options[] = { - {"commit", no_argument, NULL, 'c'}, - {"check", no_argument, NULL, 'C'}, + {"commit", no_argument, NULL, 'c'}, + {"check", no_argument, NULL, 'C'}, + {"rebuild", no_argument, NULL, 'R'}, {NULL, 0, NULL, 0}, }; @@ -360,7 +361,7 @@ static int imagex_progress_func(enum wimlib_progress_msg msg, info->write_streams.completed_bytes >> 20, info->write_streams.total_bytes >> 20, percent_done); - if (info->write_streams.completed_bytes == info->write_streams.total_bytes) + if (info->write_streams.completed_bytes >= info->write_streams.total_bytes) putchar('\n'); break; case WIMLIB_PROGRESS_MSG_SCAN_BEGIN: @@ -406,13 +407,6 @@ static int imagex_progress_func(enum wimlib_progress_msg msg, "NTFS volume" : "directory"), info->extract.target); 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);*/ @@ -425,12 +419,21 @@ static int imagex_progress_func(enum wimlib_progress_msg msg, info->extract.completed_bytes >> 20, info->extract.total_bytes >> 20, percent_done); - if (info->extract.completed_bytes == info->extract.total_bytes) + if (info->extract.completed_bytes >= info->extract.total_bytes) putchar('\n'); break; case WIMLIB_PROGRESS_MSG_EXTRACT_DENTRY: puts(info->extract.cur_path); break; + case WIMLIB_PROGRESS_MSG_APPLY_TIMESTAMPS: + printf("Setting timestamps on all extracted files...\n"); + break; + case WIMLIB_PROGRESS_MSG_EXTRACT_IMAGE_END: + if (info->extract.extract_flags & WIMLIB_EXTRACT_FLAG_NTFS) { + printf("Unmounting NTFS volume `%s'...\n", + info->extract.target); + } + break; case WIMLIB_PROGRESS_MSG_JOIN_STREAMS: percent_done = TO_PERCENT(info->join.completed_bytes, info->join.total_bytes); @@ -636,6 +639,8 @@ static int imagex_apply(int argc, const char **argv) ret = wimlib_extract_image(w, image, target, extract_flags, additional_swms, num_additional_swms, imagex_progress_func); + if (ret == 0) + printf("Done applying WIM image.\n"); out: wimlib_free(w); if (additional_swms) { @@ -1006,7 +1011,7 @@ static int imagex_export(int argc, const char **argv) ret = file_writable(dest_wimfile); if (ret != 0) - return ret; + goto out; dest_ctype = wimlib_get_compression_type(dest_w); if (compression_type_specified @@ -1636,6 +1641,9 @@ static int imagex_unmount(int argc, const char **argv) case 'C': unmount_flags |= WIMLIB_UNMOUNT_FLAG_CHECK_INTEGRITY; break; + case 'R': + unmount_flags |= WIMLIB_UNMOUNT_FLAG_REBUILD; + break; default: usage(UNMOUNT); return -1; @@ -1779,7 +1787,7 @@ int main(int argc, const char **argv) imagex_error("Exiting with error code %d:\n" " %s.", ret, wimlib_get_error_string(ret)); - if (ret == WIMLIB_ERR_NTFS_3G) + if (ret == WIMLIB_ERR_NTFS_3G && errno != 0) imagex_error_with_errno("errno"); } return ret;