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)",
}
}
- 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;
}
#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