X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fblob_table.c;h=ab8d08467e717a9fd093488094453cecc394e586;hb=7453f4a4245219a9c01a70902283f6ebb2a65123;hp=5d464a979d5ed0ac2f9c71b734600746c238586f;hpb=8b676e7d340fb8197824745eb387e1d3154e6f60;p=wimlib diff --git a/src/blob_table.c b/src/blob_table.c index 5d464a97..ab8d0846 100644 --- a/src/blob_table.c +++ b/src/blob_table.c @@ -9,7 +9,7 @@ */ /* - * 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 @@ -54,21 +54,13 @@ struct blob_table { 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) @@ -1015,9 +1007,6 @@ read_blob_table(WIMStruct *wim) } 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. @@ -1064,7 +1053,10 @@ read_blob_table(WIMStruct *wim) * 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. */ @@ -1099,8 +1091,6 @@ read_blob_table(WIMStruct *wim) 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; }