*/
/*
- * Copyright (C) 2012, 2013, 2014, 2015 Eric Biggers
+ * Copyright (C) 2012-2016 Eric Biggers
*
* This file is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
size_t mask; /* capacity - 1; capacity is a power of 2 */
};
-static size_t
-next_power_of_2(size_t n)
-{
- if (n <= 1)
- return 1;
- return (size_t)1 << (1 + flsw(n - 1));
-}
-
struct blob_table *
new_blob_table(size_t capacity)
{
struct blob_table *table;
struct hlist_head *array;
- capacity = next_power_of_2(capacity);
+ capacity = roundup_pow_of_2(capacity);
table = MALLOC(sizeof(struct blob_table));
if (table == NULL)
}
if (reshdr.flags & WIM_RESHDR_FLAG_METADATA) {
-
- cur_blob->is_metadata = 1;
-
/* Blob table entry for a metadata resource. */
/* Metadata entries with no references must be ignored.
* this overrides the actual locations of the metadata
* resources themselves in the WIM file as well as any
* information written in the XML data. */
- wim->image_metadata[image_index++]->metadata_blob = cur_blob;
+ wim->image_metadata[image_index] = new_unloaded_image_metadata(cur_blob);
+ if (!wim->image_metadata[image_index])
+ goto oom;
+ image_index++;
} else {
/* Blob table entry for a non-metadata blob. */
if (wim->hdr.part_number == 1 && image_index != wim->hdr.image_count) {
WARNING("Could not find metadata resources for all images");
- for (u32 i = image_index; i < wim->hdr.image_count; i++)
- put_image_metadata(wim->image_metadata[i], NULL);
wim->hdr.image_count = image_index;
}