]> wimlib.net Git - wimlib/blobdiff - programs/imagex.c
imagex_mount_rw_or_no(): Fix early return
[wimlib] / programs / imagex.c
index 7cfc91c087bb66e6914b9031fcd4f2ec3e96ae04..5ab9aeba8ce96425e51141909011079de5470bef 100644 (file)
@@ -361,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:
@@ -407,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);*/
@@ -426,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);
@@ -637,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) {
@@ -1007,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
@@ -1485,7 +1489,7 @@ static int imagex_mount_rw_or_ro(int argc, const char **argv)
        if (mount_flags & WIMLIB_MOUNT_FLAG_READWRITE) {
                ret = file_writable(wimfile);
                if (ret != 0)
-                       return ret;
+                       goto out;
        }
 
        ret = wimlib_mount_image(w, image, dir, mount_flags, additional_swms,
@@ -1783,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;