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
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;
}
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;
ret = size;
break;
case BLOB_IN_STAGING_FILE:
- ret = raw_pread(&fd->f_staging_fd, buf, size, offset);
+ ret = pread(fd->f_staging_fd.fd, buf, size, offset);
if (ret < 0)
ret = -errno;
break;
struct wimfs_fd *fd = WIMFS_FD(fi);
ssize_t ret;
- ret = raw_pwrite(&fd->f_staging_fd, buf, size, offset);
+ ret = pwrite(fd->f_staging_fd.fd, buf, size, offset);
if (ret < 0)
return -errno;
/* 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;
* 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)