X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Flookup_table.c;h=199ea22188bd74e3237f8a0c4e8bef0bc4ed5580;hp=c1bd00d33e3e25caf0bf31dd81f3eeebe51702b2;hb=1da527afb0ea8fb58838b6ade3a93aea198191da;hpb=f847472bcb4fb6b766fcdebfe88ebaa01a5bce63 diff --git a/src/lookup_table.c b/src/lookup_table.c index c1bd00d3..199ea221 100644 --- a/src/lookup_table.c +++ b/src/lookup_table.c @@ -447,6 +447,11 @@ read_lookup_table(WIMStruct *w) cur_entry->refcnt = le32_to_cpu(disk_entry->refcnt); copy_hash(cur_entry->hash, disk_entry->hash); + if (cur_entry->resource_entry.flags & WIM_RESHDR_FLAG_COMPRESSED) + cur_entry->compression_type = w->compression_type; + else + BUILD_BUG_ON(WIMLIB_COMPRESSION_TYPE_NONE != 0); + if (cur_entry->part_number != w->hdr.part_number) { WARNING("A lookup table entry in part %hu of the WIM " "points to part %hu (ignoring it)", @@ -544,13 +549,15 @@ read_lookup_table(WIMStruct *w) } } - if (w->hdr.part_number == 1 && w->current_image != w->hdr.image_count) - { - ERROR("The WIM header says there are %u images " - "in the WIM, but we only found %d metadata " - "resources!", w->hdr.image_count, w->current_image); - ret = WIMLIB_ERR_IMAGE_COUNT; - goto out_free_lookup_table; + if (w->hdr.part_number == 1 && w->current_image != w->hdr.image_count) { + WARNING("The header of \"%"TS"\" says there are %u images in\n" + " the WIM, but we only found %d metadata resources! Acting as if\n" + " the header specified only %d images instead.", + w->filename, w->hdr.image_count, + w->current_image, w->current_image); + for (int i = w->current_image; i < w->hdr.image_count; i++) + put_image_metadata(w->image_metadata[i], NULL); + w->hdr.image_count = w->current_image; } DEBUG("Done reading lookup table."); w->lookup_table = table; @@ -872,19 +879,6 @@ out: } #endif -/* - * XXX Probably should store the compression type directly in the lookup table - * entry - */ -int -wim_resource_compression_type(const struct wim_lookup_table_entry *lte) -{ - if (!(lte->resource_entry.flags & WIM_RESHDR_FLAG_COMPRESSED) - || lte->resource_location != RESOURCE_IN_WIM) - return WIMLIB_COMPRESSION_TYPE_NONE; - return wimlib_get_compression_type(lte->wim); -} - /* Resolve an inode's lookup table entries * * This replaces the SHA1 hash fields (which are used to lookup an entry in the