]> wimlib.net Git - wimlib/blobdiff - src/blob_table.c
Various cleanups
[wimlib] / src / blob_table.c
index 2d346e3539ecca661b774802a98f046dd7873960..891c0a5a442b266327cc6dabce5011dc9e3c93f7 100644 (file)
@@ -156,8 +156,6 @@ clone_blob_descriptor(const struct blob_descriptor *old)
                }
                break;
 #endif
-       default:
-               break;
        }
        return new;
 
@@ -318,7 +316,7 @@ enlarge_blob_table(struct blob_table *table)
        size_t old_capacity, new_capacity;
        struct hlist_head *old_array, *new_array;
        struct blob_descriptor *blob;
-       struct hlist_node *cur, *tmp;
+       struct hlist_node *tmp;
        size_t i;
 
        old_capacity = table->capacity;
@@ -331,7 +329,7 @@ enlarge_blob_table(struct blob_table *table)
        table->capacity = new_capacity;
 
        for (i = 0; i < old_capacity; i++) {
-               hlist_for_each_entry_safe(blob, cur, tmp, &old_array[i], hash_list) {
+               hlist_for_each_entry_safe(blob, tmp, &old_array[i], hash_list) {
                        hlist_del(&blob->hash_list);
                        blob_table_insert_raw(table, blob);
                }
@@ -366,10 +364,9 @@ lookup_blob(const struct blob_table *table, const u8 *hash)
 {
        size_t i;
        struct blob_descriptor *blob;
-       struct hlist_node *pos;
 
        i = load_size_t_unaligned(hash) % table->capacity;
-       hlist_for_each_entry(blob, pos, &table->array[i], hash_list)
+       hlist_for_each_entry(blob, &table->array[i], hash_list)
                if (hashes_equal(hash, blob->hash))
                        return blob;
        return NULL;
@@ -382,11 +379,11 @@ for_blob_in_table(struct blob_table *table,
                  int (*visitor)(struct blob_descriptor *, void *), void *arg)
 {
        struct blob_descriptor *blob;
-       struct hlist_node *pos, *tmp;
+       struct hlist_node *tmp;
        int ret;
 
        for (size_t i = 0; i < table->capacity; i++) {
-               hlist_for_each_entry_safe(blob, pos, tmp, &table->array[i],
+               hlist_for_each_entry_safe(blob, tmp, &table->array[i],
                                          hash_list)
                {
                        ret = visitor(blob, arg);
@@ -1358,7 +1355,8 @@ blob_to_wimlib_resource_entry(const struct blob_descriptor *blob,
                wentry->is_spanned = (res_flags & WIM_RESHDR_FLAG_SPANNED) != 0;
                wentry->packed = (res_flags & WIM_RESHDR_FLAG_SOLID) != 0;
        }
-       copy_hash(wentry->sha1_hash, blob->hash);
+       if (!blob->unhashed)
+               copy_hash(wentry->sha1_hash, blob->hash);
        wentry->reference_count = blob->refcnt;
        wentry->is_metadata = blob->is_metadata;
 }
@@ -1394,10 +1392,17 @@ wimlib_iterate_lookup_table(WIMStruct *wim, int flags,
        if (wim_has_metadata(wim)) {
                int ret;
                for (int i = 0; i < wim->hdr.image_count; i++) {
-                       ret = do_iterate_blob(wim->image_metadata[i]->metadata_blob,
-                                             &ctx);
+                       struct blob_descriptor *blob;
+                       struct wim_image_metadata *imd = wim->image_metadata[i];
+
+                       ret = do_iterate_blob(imd->metadata_blob, &ctx);
                        if (ret)
                                return ret;
+                       image_for_each_unhashed_blob(blob, imd) {
+                               ret = do_iterate_blob(blob, &ctx);
+                               if (ret)
+                                       return ret;
+                       }
                }
        }
        return for_blob_in_table(wim->blob_table, do_iterate_blob, &ctx);