]> wimlib.net Git - wimlib/blobdiff - src/extract.c
extract_streams_from_pipe(): Fix
[wimlib] / src / extract.c
index 549c92f7d1ec7b0df10e967609d26db31a2fc125..1907e699315e16e7c94029af63c4872b2e887af8 100644 (file)
@@ -1257,7 +1257,7 @@ extract_stream_instances(struct wim_lookup_table_entry *lte,
                        goto out_free_lte_tmp;
                }
                filedes_init(&fd, raw_fd);
-               ret = extract_wim_resource_to_fd(lte, &fd, lte->size);
+               ret = extract_stream_to_fd(lte, &fd, lte->size);
                if (filedes_close(&fd) && !ret)
                        ret = WIMLIB_ERR_WRITE;
                if (ret)
@@ -1365,6 +1365,9 @@ read_pwm_stream_header(WIMStruct *pwm, struct wim_lookup_table_entry *lte,
        reshdr.uncompressed_size = le64_to_cpu(buf.stream_hdr.uncompressed_size);
        wim_res_hdr_to_spec(&reshdr, pwm, rspec);
        lte_bind_wim_resource_spec(lte, rspec);
+       lte->flags = rspec->flags;
+       lte->size = rspec->uncompressed_size;
+       lte->offset_in_res = 0;
        return 0;
 
 read_error:
@@ -1443,6 +1446,9 @@ extract_streams_from_pipe(struct apply_ctx *ctx)
                {
                        lte_unbind_wim_resource_spec(found_lte);
                        lte_bind_wim_resource_spec(needed_lte, rspec);
+                       needed_lte->offset_in_res = found_lte->offset_in_res;
+                       needed_lte->flags = found_lte->flags;
+                       needed_lte->size = found_lte->size;
                        ret = extract_stream_instances(needed_lte, ctx, false);
                        lte_unbind_wim_resource_spec(needed_lte);
 
@@ -1538,7 +1544,7 @@ extract_dentry_to_stdout(struct wim_dentry *dentry)
                if (lte) {
                        struct filedes _stdout;
                        filedes_init(&_stdout, STDOUT_FILENO);
-                       ret = extract_wim_resource_to_fd(lte, &_stdout, lte->size);
+                       ret = extract_stream_to_fd(lte, &_stdout, lte->size);
                }
        }
        return ret;