X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Flookup_table.c;h=955aac35661faf7dfcf6cc37669a32fb36de5858;hp=95708866c9197614588f23ecc0caa26ceac71d02;hb=fced769402ff6ef0bf75fe9e4dcb2880891469e0;hpb=30ba1eb06caca0b20a47d8dd75a117c82d730da7 diff --git a/src/lookup_table.c b/src/lookup_table.c index 95708866..955aac35 100644 --- a/src/lookup_table.c +++ b/src/lookup_table.c @@ -355,16 +355,18 @@ struct wim_lookup_table_entry_disk { struct resource_entry_disk resource_entry; /* Which part of the split WIM this stream is in; indexed from 1. */ - u16 part_number; + le16 part_number; /* Reference count of this stream over all WIM images. */ - u32 refcnt; + le32 refcnt; /* SHA1 message digest of the uncompressed data of this stream, or * optionally all zeroes if this stream is of zero length. */ u8 hash[SHA1_HASH_SIZE]; } _packed_attribute; +#define WIM_LOOKUP_TABLE_ENTRY_DISK_SIZE 50 + /* * Reads the lookup table from a WIM file. * @@ -382,6 +384,10 @@ read_lookup_table(WIMStruct *w) struct wim_lookup_table_entry_disk table_buf[BUFFER_SIZE / sizeof(struct wim_lookup_table_entry_disk)] _aligned_attribute(8); + + BUILD_BUG_ON(sizeof(struct wim_lookup_table_entry_disk) != + WIM_LOOKUP_TABLE_ENTRY_DISK_SIZE); + off_t offset; size_t buf_entries_remaining; const struct wim_lookup_table_entry_disk *disk_entry; @@ -457,12 +463,12 @@ read_lookup_table(WIMStruct *w) && (cur_entry->resource_entry.size != cur_entry->resource_entry.original_size)) { - #ifdef ENABLE_ERROR_MESSAGES - ERROR("Found uncompressed resource with original size " - "not the same as compressed size"); - ERROR("The lookup table entry for the resource is as follows:"); - print_lookup_table_entry(cur_entry, stderr); - #endif + if (wimlib_print_errors) { + ERROR("Found uncompressed resource with original size " + "not the same as compressed size"); + ERROR("The lookup table entry for the resource is as follows:"); + print_lookup_table_entry(cur_entry, stderr); + } ret = WIMLIB_ERR_INVALID_LOOKUP_TABLE_ENTRY; goto out_free_cur_entry; } @@ -470,10 +476,10 @@ read_lookup_table(WIMStruct *w) if (cur_entry->resource_entry.flags & WIM_RESHDR_FLAG_METADATA) { /* Lookup table entry for a metadata resource */ if (cur_entry->refcnt != 1) { - #ifdef ENABLE_ERROR_MESSAGES - ERROR("Found metadata resource with refcnt != 1:"); - print_lookup_table_entry(cur_entry, stderr); - #endif + if (wimlib_print_errors) { + ERROR("Found metadata resource with refcnt != 1:"); + print_lookup_table_entry(cur_entry, stderr); + } ret = WIMLIB_ERR_INVALID_LOOKUP_TABLE_ENTRY; goto out_free_cur_entry; } @@ -510,14 +516,14 @@ read_lookup_table(WIMStruct *w) * metadata resource */ duplicate_entry = __lookup_resource(table, cur_entry->hash); if (duplicate_entry) { - #ifdef ENABLE_ERROR_MESSAGES - ERROR("The WIM lookup table contains two entries with the " - "same SHA1 message digest!"); - ERROR("The first entry is:"); - print_lookup_table_entry(duplicate_entry, stderr); - ERROR("The second entry is:"); - print_lookup_table_entry(cur_entry, stderr); - #endif + if (wimlib_print_errors) { + ERROR("The WIM lookup table contains two entries with the " + "same SHA1 message digest!"); + ERROR("The first entry is:"); + print_lookup_table_entry(duplicate_entry, stderr); + ERROR("The second entry is:"); + print_lookup_table_entry(cur_entry, stderr); + } ret = WIMLIB_ERR_INVALID_LOOKUP_TABLE_ENTRY; goto out_free_cur_entry; } @@ -752,9 +758,11 @@ do_print_lookup_table_entry(struct wim_lookup_table_entry *lte, void *fp) * Prints the lookup table of a WIM file. */ WIMLIBAPI void -wimlib_print_lookup_table(WIMStruct *w) +wimlib_print_lookup_table(WIMStruct *wim) { - for_lookup_table_entry(w->lookup_table, + for (int i = 0; i < wim->hdr.image_count; i++) + print_lookup_table_entry(wim->image_metadata[i]->metadata_lte, stdout); + for_lookup_table_entry(wim->lookup_table, do_print_lookup_table_entry, stdout); }