wim_reshdr_to_data(const struct wim_reshdr *reshdr, WIMStruct *wim, void **buf_ret)
{
struct wim_resource_descriptor rdesc;
- struct blob_descriptor *blob;
- int ret;
+ struct blob_descriptor blob;
wim_res_hdr_to_desc(reshdr, wim, &rdesc);
+ blob_set_is_located_in_nonsolid_wim_resource(&blob, &rdesc);
- blob = new_blob_descriptor();
- if (!blob)
- return WIMLIB_ERR_NOMEM;
-
- blob_set_is_located_in_wim_resource(blob, &rdesc);
- blob->flags = rdesc.flags;
- blob->size = rdesc.uncompressed_size;
- blob->offset_in_res = 0;
-
- ret = read_full_blob_into_alloc_buf(blob, buf_ret);
-
- blob_unset_is_located_in_wim_resource(blob);
- free_blob_descriptor(blob);
- return ret;
+ return read_full_blob_into_alloc_buf(&blob, buf_ret);
}
int
u8 hash[SHA1_HASH_SIZE])
{
struct wim_resource_descriptor rdesc;
+ struct blob_descriptor blob;
int ret;
- struct blob_descriptor *blob;
wim_res_hdr_to_desc(reshdr, wim, &rdesc);
+ blob_set_is_located_in_nonsolid_wim_resource(&blob, &rdesc);
+ blob.unhashed = 1;
- blob = new_blob_descriptor();
- if (blob == NULL)
- return WIMLIB_ERR_NOMEM;
-
- blob_set_is_located_in_wim_resource(blob, &rdesc);
- blob->flags = rdesc.flags;
- blob->size = rdesc.uncompressed_size;
- blob->offset_in_res = 0;
- blob->unhashed = 1;
-
- ret = sha1_blob(blob);
-
- blob_unset_is_located_in_wim_resource(blob);
- copy_hash(hash, blob->hash);
- free_blob_descriptor(blob);
- return ret;
+ ret = sha1_blob(&blob);
+ if (ret)
+ return ret;
+ copy_hash(hash, blob.hash);
+ return 0;
}
struct blobifier_context {
*/
int
read_blob_list(struct list_head *blob_list,
- size_t list_head_offset,
- const struct read_blob_list_callbacks *cbs,
- int flags)
+ size_t list_head_offset,
+ const struct read_blob_list_callbacks *cbs,
+ int flags)
{
int ret;
struct list_head *cur, *next;
{
blob = (struct blob_descriptor*)((u8*)cur - list_head_offset);
- if (blob->flags & WIM_RESHDR_FLAG_SOLID &&
+ if (blob->blob_location == BLOB_IN_WIM &&
blob->size != blob->rdesc->uncompressed_size)
{
-
struct blob_descriptor *blob_next, *blob_last;
struct list_head *next2;
u64 blob_count;