X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fextract.c;h=5fcf52480ee2ca9cd95712c0edb905da843ba642;hp=efce477e0a122cd076799ea0cb7ad3af67f79eed;hb=b82856cb22783df0e19990eb68d3694753f52220;hpb=bf06d7c97be31ca199d19af76cdfd2dc5c38c6de diff --git a/src/extract.c b/src/extract.c index efce477e..5fcf5248 100644 --- a/src/extract.c +++ b/src/extract.c @@ -233,19 +233,18 @@ read_blobs_from_pipe(struct apply_ctx *ctx, const struct read_blob_callbacks *cb if (ret) return ret; - wim_reshdr_to_desc(&reshdr, ctx->wim, &rdesc); - - if (!(rdesc.flags & WIM_RESHDR_FLAG_METADATA) + if (!(reshdr.flags & WIM_RESHDR_FLAG_METADATA) && (blob = lookup_blob(ctx->wim->blob_table, hash)) && (blob->out_refcnt)) { - blob_set_is_located_in_nonsolid_wim_resource(blob, &rdesc); + wim_reshdr_to_desc_and_blob(&reshdr, ctx->wim, &rdesc, blob); ret = read_blob_with_sha1(blob, cbs); blob_unset_is_located_in_wim_resource(blob); if (ret) return ret; ctx->num_blobs_remaining--; } else { + wim_reshdr_to_desc(&reshdr, ctx->wim, &rdesc); ret = skip_wim_resource(&rdesc); if (ret) return ret; @@ -1958,9 +1957,8 @@ wimlib_extract_image_from_pipe_with_progress(int pipe_fd, metadata_rdesc = MALLOC(sizeof(struct wim_resource_descriptor)); if (!metadata_rdesc) goto out_wimlib_free; - wim_reshdr_to_desc(&reshdr, pwm, metadata_rdesc); - blob_set_is_located_in_nonsolid_wim_resource(imd->metadata_blob, - metadata_rdesc); + wim_reshdr_to_desc_and_blob(&reshdr, pwm, metadata_rdesc, + imd->metadata_blob); if (i == image) { /* Metadata resource is for the image being extracted.