X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fmount_image.c;h=bca9e4390e473c7987ae04f0522ccf6ab91901c7;hb=6a9854db6d6ff8f5dd3f28a82946dd1ed673a36a;hp=aaad08c3ca2b7a5a16a354fdf22a47150d5773bb;hpb=1c8d703526fa18ed9d6dd6afee82079fd906759f;p=wimlib diff --git a/src/mount_image.c b/src/mount_image.c index aaad08c3..bca9e439 100644 --- a/src/mount_image.c +++ b/src/mount_image.c @@ -1051,7 +1051,6 @@ renew_current_image(struct wimfs_context *ctx) goto err_put_replace_imd; new_blob->refcnt = 1; - new_blob->unhashed = 1; new_blob->is_metadata = 1; /* Make the image being moved available at a new index. Increments the @@ -1061,7 +1060,7 @@ renew_current_image(struct wimfs_context *ctx) if (ret) goto err_free_new_blob; - ret = xml_add_image(wim, ""); + ret = xml_add_image(wim->xml_info, NULL); if (ret) goto err_undo_append; @@ -1117,7 +1116,7 @@ commit_image(struct wimfs_context *ctx, int unmount_flags, mqd_t mq) } INIT_LIST_HEAD(&ctx->orig_blob_list); delete_empty_blobs(ctx); - xml_update_image_info(ctx->wim, ctx->wim->current_image); + mark_image_dirty(wim_get_current_image_metadata(ctx->wim)); write_flags = 0; @@ -2129,15 +2128,16 @@ wimlib_mount_image(WIMStruct *wim, int image, const char *dir, /* Get the metadata for the image to mount. */ imd = wim_get_current_image_metadata(wim); - if (imd->modified) { - /* To avoid complicating things, we don't support mounting - * images to which in-memory modifications have already been - * made. */ + /* To avoid complicating things, we don't support mounting images to + * which in-memory modifications have already been made. */ + if (is_image_dirty(imd)) { ERROR("Cannot mount a modified WIM image!"); return WIMLIB_ERR_INVALID_PARAM; } if (mount_flags & WIMLIB_MOUNT_FLAG_READWRITE) { + if (imd->refcnt > 1) + return WIMLIB_ERR_IMAGE_HAS_MULTIPLE_REFERENCES; ret = lock_wim_for_append(wim); if (ret) return ret; @@ -2208,10 +2208,6 @@ wimlib_mount_image(WIMStruct *wim, int image, const char *dir, * the file descriptor arrays */ prepare_inodes(&ctx); - /* If a read-write mount, mark the image as modified. */ - if (mount_flags & WIMLIB_MOUNT_FLAG_READWRITE) - imd->modified = 1; - /* Save the absolute path to the mountpoint directory. */ ctx.mountpoint_abspath = realpath(dir, NULL); if (ctx.mountpoint_abspath)