X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fextract.c;h=ae591bbef6f33cf41d9b5d407b054de35a871b58;hp=a087a76d48adbfad43409e8fe75d038c09906c1a;hb=7e6ea29df780d210dc718b7ae7bf74faf3826efb;hpb=465a630d28e93b09e55ca07b1a6cae8def3b42f5 diff --git a/src/extract.c b/src/extract.c index a087a76d..ae591bbe 100644 --- a/src/extract.c +++ b/src/extract.c @@ -1143,7 +1143,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->skeleton_extracted + && other_dentry->in_extraction_tree) { DEBUG("Creating %"TS" before %"TS" " "to guarantee correct DOS name extraction", @@ -1623,6 +1624,8 @@ dentry_calculate_extraction_path(struct wim_dentry *dentry, void *_args) struct apply_ctx *ctx = _args; int ret; + dentry->in_extraction_tree = 1; + if (dentry == ctx->extract_root || dentry->extraction_skipped) return 0; @@ -1742,6 +1745,7 @@ dentry_reset_needs_extraction(struct wim_dentry *dentry, void *_ignore) { struct wim_inode *inode = dentry->d_inode; + dentry->in_extraction_tree = 0; dentry->extraction_skipped = 0; dentry->was_hardlinked = 0; dentry->skeleton_extracted = 0; @@ -2776,8 +2780,7 @@ wimlib_extract_image_from_pipe(int pipe_fd, const tchar *image_num_or_name, * wimlib_open_wim(), getting a WIMStruct in this way will result in * an empty lookup table, no XML data read, and no filename set. */ ret = open_wim_as_WIMStruct(&pipe_fd, - WIMLIB_OPEN_FLAG_FROM_PIPE | - WIMLIB_OPEN_FLAG_SPLIT_OK, + WIMLIB_OPEN_FLAG_FROM_PIPE, &pwm, progress_func); if (ret) return ret;