X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fexport_image.c;h=a01928012bb1c92494eb74a70081408a481564cc;hb=fea0ee9f10fbcb85ff56ca06510e96186a7611ae;hp=9b9304ceed04369426a13a3624729cc72cfc5d12;hpb=40beb80283a2df7af88c8359ca41adb814585e9a;p=wimlib diff --git a/src/export_image.c b/src/export_image.c index 9b9304ce..a0192801 100644 --- a/src/export_image.c +++ b/src/export_image.c @@ -290,57 +290,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; -}