- if (found_blob->blob_location != BLOB_NONEXISTENT)
- blob_unset_is_located_in_wim_resource(found_blob);
- ret = read_pwm_blob_header(ctx->wim, found_blob, rdesc,
- PWM_ALLOW_WIM_HDR, &pwm_hdr);
+ ret = read_pwm_blob_header(ctx->wim, hash, &reshdr, &pwm_hdr);
+
+ if (ret == PWM_FOUND_WIM_HDR) {
+ u16 part_number = le16_to_cpu(pwm_hdr.part_number);
+ u16 total_parts = le16_to_cpu(pwm_hdr.total_parts);
+
+ if (part_number == ctx->progress.extract.part_number &&
+ total_parts == ctx->progress.extract.total_parts &&
+ !memcmp(pwm_hdr.guid, ctx->progress.extract.guid, WIM_GUID_LEN))
+ continue;
+
+ memcpy(ctx->progress.extract.guid, pwm_hdr.guid, WIM_GUID_LEN);
+ ctx->progress.extract.part_number = part_number;
+ ctx->progress.extract.total_parts = total_parts;
+ ret = extract_progress(ctx, WIMLIB_PROGRESS_MSG_EXTRACT_SPWM_PART_BEGIN);
+ if (ret)
+ return ret;
+
+ continue;
+ }
+