X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fextract.c;h=4448a6ea271722200d74bab3d018661c9868c7d5;hp=115d5ead871486172627e7b0aa74d0e562edf1a0;hb=4f9ccdbed3ee79171d0b861c4ba93b54ce8feaac;hpb=df1050ef86e54f027912a15fe60bf67c8ab43d2c;ds=sidebyside diff --git a/src/extract.c b/src/extract.c index 115d5ead..4448a6ea 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", @@ -1377,13 +1378,22 @@ read_error: return ret; } +static int +skip_pwm_chunk_cb(const void *chunk, size_t chunk_size, void *_ctx) +{ + return 0; +} + /* Skip over an unneeded stream in a pipable WIM being read from a pipe. */ static int skip_pwm_stream(struct wim_lookup_table_entry *lte) { - return read_partial_wim_resource(lte, wim_resource_size(lte), - NULL, NULL, - WIMLIB_READ_RESOURCE_FLAG_SEEK_ONLY, + return read_partial_wim_resource(lte, + wim_resource_size(lte), + skip_pwm_chunk_cb, + wim_resource_chunk_size(lte), + NULL, + WIMLIB_READ_RESOURCE_FLAG_RAW_CHUNKS, 0); } @@ -1623,6 +1633,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 +1754,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; @@ -2061,7 +2074,7 @@ do_extract_warnings(struct apply_ctx *ctx) ctx->no_security_descriptors == 0) return; - WARNING("Extraction of \"%"TS"\" complete, but with one or more warnings:", + WARNING("Extraction to \"%"TS"\" complete, but with one or more warnings:", ctx->target); if (ctx->partial_security_descriptors != 0) { WARNING("- Could only partially set the security descriptor\n"