X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fexport_image.c;h=6d38855db04e9d8c4b9d403e56e9cf05b6b89bbf;hp=9b9304ceed04369426a13a3624729cc72cfc5d12;hb=d364e4a9e3a18a144b35c47ce213e09087978d1b;hpb=40beb80283a2df7af88c8359ca41adb814585e9a diff --git a/src/export_image.c b/src/export_image.c index 9b9304ce..6d38855d 100644 --- a/src/export_image.c +++ b/src/export_image.c @@ -247,7 +247,8 @@ WIMLIBAPI int wimlib_export_image(WIMStruct *src_wim, goto out_free_ltes; ret = xml_export_image(src_wim->wim_info, src_image, - &dest_wim->wim_info, dest_name, dest_description); + &dest_wim->wim_info, dest_name, + dest_description); if (ret != 0) goto out_free_ltes; @@ -267,10 +268,8 @@ WIMLIBAPI int wimlib_export_image(WIMStruct *src_wim, for_dentry_in_tree(root, add_lte_to_dest_wim, &wims); wimlib_assert(list_empty(&wims.lte_list_head)); - if (export_flags & WIMLIB_EXPORT_FLAG_BOOT) { - DEBUG("Setting boot_idx to %d", dest_wim->hdr.image_count); + if (export_flags & WIMLIB_EXPORT_FLAG_BOOT) wimlib_set_boot_idx(dest_wim, dest_wim->hdr.image_count); - } ret = 0; goto out; @@ -290,57 +289,3 @@ out: } return ret; } - -static int image_run_full_verifications(WIMStruct *w) -{ - return for_dentry_in_tree(wim_root_dentry(w), verify_dentry, w); -} - -static int lte_fix_refcnt(struct lookup_table_entry *lte, void *ctr) -{ - if (lte->refcnt != lte->real_refcnt) { - WARNING("The following lookup table entry has a reference " - "count of %u, but", lte->refcnt); - WARNING("We found %u references to it", - lte->real_refcnt); - print_lookup_table_entry(lte); - lte->refcnt = lte->real_refcnt; - ++*(unsigned long *)ctr; - } - return 0; -} - -/* Ideally this would be unnecessary... however, the WIMs for Windows 8 are - * screwed up because some lookup table entries are referenced more times than - * their stated reference counts. So theoretically, if we delete all the - * references to a stream and then remove it, it might still be referenced - * somewhere else, making a file be missing from the WIM... So, work around this - * problem by looking at ALL the images to re-calculate the reference count of - * EVERY lookup table entry. This only absolutely has to be done before an image - * is deleted or before an image is mounted read-write. */ -int wim_run_full_verifications(WIMStruct *w) -{ - int ret; - - for_lookup_table_entry(w->lookup_table, lte_zero_real_refcnt, NULL); - w->all_images_verified = true; - w->full_verification_in_progress = true; - ret = for_image(w, WIMLIB_ALL_IMAGES, image_run_full_verifications); - w->full_verification_in_progress = false; - if (ret == 0) { - unsigned long num_ltes_with_bogus_refcnt = 0; - for (int i = 0; i < w->hdr.image_count; i++) - w->image_metadata[i].metadata_lte->real_refcnt++; - for_lookup_table_entry(w->lookup_table, lte_fix_refcnt, - &num_ltes_with_bogus_refcnt); - if (num_ltes_with_bogus_refcnt != 0) { - WARNING("A total of %lu entries in the WIM's stream " - "lookup table had to have\n" - " their reference counts fixed.", - num_ltes_with_bogus_refcnt); - } - } else { - w->all_images_verified = false; - } - return ret; -}