X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Flookup_table.c;h=ba832453e6750517aba7b98014426329db594ba5;hp=47e6038859fd0b60ed3a2aacf2cd4ed09ed37818;hb=c9482ee98e12fa3f1073e4fc3c56f5eef3c40f32;hpb=26ba6eaef7f310b682513696930013225f658044 diff --git a/src/lookup_table.c b/src/lookup_table.c index 47e60388..ba832453 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)", @@ -837,7 +842,9 @@ lookup_resource(WIMStruct *w, inode = dentry->d_inode; - wimlib_assert(inode->i_resolved); + if (!inode->i_resolved) + if (inode_resolve_ltes(inode, w->lookup_table)) + return -EIO; if (!(lookup_flags & LOOKUP_FLAG_DIRECTORY_OK) && inode_is_directory(inode)) @@ -870,19 +877,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 @@ -895,7 +889,6 @@ wim_resource_compression_type(const struct wim_lookup_table_entry *lte) int inode_resolve_ltes(struct wim_inode *inode, struct wim_lookup_table *table) { - int ret; const u8 *hash; if (!inode->i_resolved) {