]> wimlib.net Git - wimlib/blobdiff - src/mount_image.c
Make wimlib-imagex less noisy when running on Windoze XP
[wimlib] / src / mount_image.c
index 0538fbc9a9da1d65dbc54e9306ad35e6b57e53aa..f816db1ea7ee1e6816e50ca3f0e53455ff41d82d 100644 (file)
@@ -2364,7 +2364,6 @@ wimlib_mount_image(WIMStruct *wim, int image, const char *dir,
        char *argv[16];
        int ret;
        char *dir_copy;
-       struct wim_lookup_table *joined_tab, *wim_tab_save;
        struct wim_image_metadata *imd;
        struct wimfs_context ctx;
        struct wim_inode *inode;
@@ -2372,41 +2371,37 @@ wimlib_mount_image(WIMStruct *wim, int image, const char *dir,
        DEBUG("Mount: wim = %p, image = %d, dir = %s, flags = %d, ",
              wim, image, dir, mount_flags);
 
-       if (!wim || !dir)
-               return WIMLIB_ERR_INVALID_PARAM;
+       if (!wim || !dir) {
+               ret = WIMLIB_ERR_INVALID_PARAM;
+               goto out;
+       }
 
        ret = verify_swm_set(wim, additional_swms, num_additional_swms);
        if (ret)
-               return ret;
+               goto out;
 
        if ((mount_flags & WIMLIB_MOUNT_FLAG_READWRITE) && (wim->hdr.total_parts != 1)) {
                ERROR("Cannot mount a split WIM read-write");
-               return WIMLIB_ERR_SPLIT_UNSUPPORTED;
+               ret = WIMLIB_ERR_SPLIT_UNSUPPORTED;
+               goto out;
        }
 
-       if (num_additional_swms) {
-               ret = new_joined_lookup_table(wim, additional_swms,
-                                             num_additional_swms,
-                                             &joined_tab);
-               if (ret)
-                       return ret;
-               wim_tab_save = wim->lookup_table;
-               wim->lookup_table = joined_tab;
-       }
+       if (num_additional_swms)
+               merge_lookup_tables(wim, additional_swms, num_additional_swms);
 
        if (mount_flags & WIMLIB_MOUNT_FLAG_READWRITE) {
                ret = wim_run_full_verifications(wim);
                if (ret)
-                       goto out;
+                       goto out_restore_lookup_table;
        }
 
        ret = wim_checksum_unhashed_streams(wim);
        if (ret)
-               goto out;
+               goto out_restore_lookup_table;
 
        ret = select_wim_image(wim, image);
        if (ret)
-               goto out;
+               goto out_restore_lookup_table;
 
        DEBUG("Selected image %d", image);
 
@@ -2416,20 +2411,20 @@ wimlib_mount_image(WIMStruct *wim, int image, const char *dir,
                ERROR("Cannot mount image that was just exported with "
                      "wimlib_export_image()");
                ret = WIMLIB_ERR_INVALID_PARAM;
-               goto out;
+               goto out_restore_lookup_table;
        }
 
        if (imd->modified) {
                ERROR("Cannot mount image that was added "
                      "with wimlib_add_image()");
                ret = WIMLIB_ERR_INVALID_PARAM;
-               goto out;
+               goto out_restore_lookup_table;
        }
 
        if (mount_flags & WIMLIB_MOUNT_FLAG_READWRITE) {
                ret = lock_wim(wim, wim->in_fd);
                if (ret)
-                       goto out;
+                       goto out_restore_lookup_table;
        }
 
        /* Use default stream interface if one was not specified */
@@ -2556,11 +2551,10 @@ out_unlock:
        wim->wim_locked = 0;
 out_free_message_queue_names:
        free_message_queue_names(&ctx);
+out_restore_lookup_table:
+       if (num_additional_swms)
+               unmerge_lookup_table(wim);
 out:
-       if (num_additional_swms) {
-               free_lookup_table(wim->lookup_table);
-               wim->lookup_table = wim_tab_save;
-       }
        return ret;
 }