X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fwim.c;h=4a8e6a8be828c8a5282a0993ea96daf4a0f8293e;hp=811ea2afa35e5aebd2c56663ca90f0edc5988a5e;hb=4b8dbcb1723bacdd692ea57184cb49ce3d2b7774;hpb=e1ab245c9f04e34deb2f078b5ab4b98af8cb7b3b diff --git a/src/wim.c b/src/wim.c index 811ea2af..4a8e6a8b 100644 --- a/src/wim.c +++ b/src/wim.c @@ -57,7 +57,7 @@ static int image_print_metadata(WIMStruct *w) { DEBUG("Printing metadata for image %d", w->current_image); - print_security_data(wim_security_data(w)); + print_wim_security_data(wim_security_data(w)); return for_dentry_in_tree(wim_root_dentry(w), print_dentry, w->lookup_table); } @@ -366,15 +366,16 @@ wimlib_print_files(WIMStruct *w, int image) /* Sets the index of the bootable image. */ WIMLIBAPI int -wimlib_set_boot_idx(WIMStruct *w, int boot_idx) +wimlib_set_boot_idx(WIMStruct *wim, int boot_idx) { - if (w->hdr.total_parts != 1) { - ERROR("Cannot modify the boot index of a split WIM!"); - return WIMLIB_ERR_SPLIT_UNSUPPORTED; - } - if (boot_idx < 0 || boot_idx > w->hdr.image_count) + int ret; + + ret = can_modify_wim(wim); + if (ret) + return ret; + if (boot_idx < 0 || boot_idx > wim->hdr.image_count) return WIMLIB_ERR_INVALID_IMAGE; - w->hdr.boot_idx = boot_idx; + wim->hdr.boot_idx = boot_idx; return 0; } @@ -555,7 +556,7 @@ destroy_image_metadata(struct wim_image_metadata *imd, { free_dentry_tree(imd->root_dentry, table); imd->root_dentry = NULL; - free_security_data(imd->security_data); + free_wim_security_data(imd->security_data); imd->security_data = NULL; if (free_metadata_lte) { @@ -671,6 +672,33 @@ wim_checksum_unhashed_streams(WIMStruct *w) return 0; } +int +can_modify_wim(WIMStruct *wim) +{ + if (wim->hdr.total_parts != 1) { + ERROR("Cannot modify \"%"TS"\": is part of a spanned set", + wim->filename); + return WIMLIB_ERR_SPLIT_UNSUPPORTED; + } + if (wim->hdr.flags & WIM_HDR_FLAG_READONLY) { + ERROR("Cannot modify \"%"TS"\": is marked read-only", + wim->filename); + return WIMLIB_ERR_WIM_IS_MARKED_READONLY; + } + return 0; +} + +int +can_delete_from_wim(WIMStruct *wim) +{ + int ret; + + ret = can_modify_wim(wim); + if (ret == 0 && !wim->all_images_verified) + ret = wim_run_full_verifications(wim); + return ret; +} + /* Frees the memory for the WIMStruct, including all internal memory; also * closes all files associated with the WIMStruct. */ WIMLIBAPI void