if (ret)
goto out;
- if ((mount_flags & WIMLIB_MOUNT_FLAG_READWRITE) && (wim->hdr.total_parts != 1)) {
- ERROR("Cannot mount a split WIM read-write");
- ret = WIMLIB_ERR_SPLIT_UNSUPPORTED;
- goto out;
- }
-
- 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);
+ ret = can_delete_from_wim(wim);
if (ret)
- goto out_restore_lookup_table;
+ goto out;
}
- ret = wim_checksum_unhashed_streams(wim);
- if (ret)
- goto out_restore_lookup_table;
+ if (num_additional_swms)
+ merge_lookup_tables(wim, additional_swms, num_additional_swms);
ret = select_wim_image(wim, image);
if (ret)
DEBUG("Resolving lookup table entries and assigning inode numbers");
ctx.next_ino = 1;
image_for_each_inode(inode, imd) {
- inode_resolve_ltes(inode, wim->lookup_table);
+ ret = inode_resolve_ltes(inode, wim->lookup_table);
+ if (ret)
+ goto out_delete_staging_dir;
inode->i_ino = ctx.next_ino++;
}
DEBUG("(next_ino = %"PRIu64")", ctx.next_ino);
/* Try to delete the staging directory if a deletion wasn't yet
* attempted due to an earlier error */
+out_delete_staging_dir:
if (ctx.staging_dir_name)
delete_staging_dir(&ctx);
out_free_dir_copy: