]> wimlib.net Git - wimlib/blobdiff - src/extract.c
Separate suffix array match-finder from LZX compressor
[wimlib] / src / extract.c
index 44076db02b58e4ecef6da9d617c51005d4f720e7..2e285f540aea90b815c52d5e95db786af027e1e0 100644 (file)
@@ -1147,7 +1147,8 @@ dentry_extract_skeleton(struct wim_dentry *dentry, void *_ctx)
                inode_for_each_dentry(other_dentry, dentry->d_inode) {
                        if (dentry_has_short_name(other_dentry)
                            && !other_dentry->skeleton_extracted
-                           && other_dentry->in_extraction_tree)
+                           && other_dentry->in_extraction_tree
+                           && !other_dentry->extraction_skipped)
                        {
                                DEBUG("Creating %"TS" before %"TS" "
                                      "to guarantee correct DOS name extraction",
@@ -1527,8 +1528,10 @@ extract_streams_from_pipe(struct apply_ctx *ctx)
 
                                /* Extract stream to temporary file.  */
                                ret = create_temporary_file(&tmpfile_fd, &tmpfile_name);
-                               if (ret)
+                               if (ret) {
+                                       lte_unbind_wim_resource_spec(needed_lte);
                                        goto out_free_found_lte;
+                               }
 
                                ret = extract_full_stream_to_fd(needed_lte,
                                                                &tmpfile_fd);
@@ -2374,7 +2377,12 @@ extract_trees(WIMStruct *wim, struct wim_dentry **trees, size_t num_trees,
         * directory tree.  (If not, extract_dentry_to_stdout() will
         * return an error.)  */
        if (extract_flags & WIMLIB_EXTRACT_FLAG_TO_STDOUT) {
-               ret = extract_dentry_to_stdout(ctx.extract_root);
+               ret = 0;
+               for (size_t i = 0; i < num_trees; i++) {
+                       ret = extract_dentry_to_stdout(trees[i]);
+                       if (ret)
+                               break;
+               }
                goto out_teardown_stream_list;
        }