]> wimlib.net Git - wimlib/blobdiff - src/extract.c
extract_trees(): Correctly destroy stream list in error path
[wimlib] / src / extract.c
index 623fbf7ccfaaa9717112208081f8fa9fa1302b35..9cbac117f54438d25372c90cb43dd4df4c327bb5 100644 (file)
@@ -1658,17 +1658,11 @@ dentry_reset_extraction_list_node(struct wim_dentry *dentry)
        dentry->extraction_list = (struct list_head){NULL, NULL};
 }
 
-static void
-dentry_delete_from_list(struct wim_dentry *dentry)
+static int
+dentry_delete_from_list(struct wim_dentry *dentry, void *_ignore)
 {
        list_del(&dentry->extraction_list);
        dentry_reset_extraction_list_node(dentry);
-}
-
-static int
-do_dentry_delete_from_list(struct wim_dentry *dentry, void *_ignore)
-{
-       dentry_delete_from_list(dentry);
        return 0;
 }
 
@@ -1885,7 +1879,7 @@ out_replace:
        return 0;
 
 skip_dentry:
-       for_dentry_in_tree(dentry, do_dentry_delete_from_list, NULL);
+       for_dentry_in_tree(dentry, dentry_delete_from_list, NULL);
        return 0;
 }
 
@@ -2515,7 +2509,7 @@ extract_trees(WIMStruct *wim, struct wim_dentry **trees, size_t num_trees,
        INIT_LIST_HEAD(&ctx.stream_list);
        ret = dentry_list_ref_streams(&dentry_list, &ctx);
        if (ret)
-               goto out_finish_or_abort_extract;
+               goto out_destroy_stream_list;
 
        if (extract_flags & WIMLIB_EXTRACT_FLAG_FROM_PIPE) {
                /* When extracting from a pipe, the number of bytes of data to