]> wimlib.net Git - wimlib/blobdiff - src/mount.c
wimlib_mount(): Refuse to mount split wim read-write
[wimlib] / src / mount.c
index 6bc1fdff0e2e2c110f0bdff031413d019b1aadf9..4dc28f1fbc2c8fee36904530dff7c565b44c5d81 100644 (file)
@@ -497,11 +497,9 @@ out_delete_staging_file:
 }
 
 /*
- * Creates a randomly named staging directory and returns its name into the
- * static variable staging_dir_name.
- *
- * If the staging directory cannot be created, staging_dir_name is set to NULL.
- * */
+ * Creates a randomly named staging directory and saves its name in the
+ * filesystem context structure.
+ */
 static int make_staging_dir(struct wimfs_context *ctx)
 {
        /* XXX Give the user an option of where to stage files */
@@ -876,7 +874,7 @@ static int rebuild_wim(struct wimfs_context *ctx, bool check_integrity)
 
 
        DEBUG("Closing all staging file descriptors.");
-       list_for_each_entry(lte, &ctx->staging_list, staging_list) {
+       list_for_each_entry_safe(lte, tmp, &ctx->staging_list, staging_list) {
                ret = inode_close_fds(lte->lte_inode);
                if (ret != 0)
                        return ret;
@@ -1856,6 +1854,11 @@ WIMLIBAPI int wimlib_mount(WIMStruct *wim, int image, const char *dir,
        if (ret != 0)
                return ret;
 
+       if ((flags & WIMLIB_MOUNT_FLAG_READWRITE) && (wim->hdr.total_parts != 1)) {
+               ERROR("Cannot mount a split WIM read-write");
+               return WIMLIB_ERR_SPLIT_UNSUPPORTED;
+       }
+
        if (num_additional_swms) {
                ret = new_joined_lookup_table(wim, additional_swms,
                                              num_additional_swms,