]> wimlib.net Git - wimlib/blobdiff - src/lookup_table.c
Remove verify_dentry(); separate refcnt recalc. from verify_inode()
[wimlib] / src / lookup_table.c
index 95708866c9197614588f23ecc0caa26ceac71d02..955aac35661faf7dfcf6cc37669a32fb36de5858 100644 (file)
@@ -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);
 }