X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fextract.c;h=23c9305436a4ac744f635226677d955a35968b53;hp=1e31cdb07909fbf309f5f015cf1858c715817dc5;hb=343b098498118f1554bd476d00d8233ec0cb9a6b;hpb=554ca28c5628ae81a371198f5888a3fb5cd9f915 diff --git a/src/extract.c b/src/extract.c index 1e31cdb0..23c93054 100644 --- a/src/extract.c +++ b/src/extract.c @@ -93,7 +93,7 @@ dentry_resolve_and_zero_lte_refcnt(struct wim_dentry *dentry, void *_ctx) * "resolve" the inode's streams anyway by allocating new entries. */ if (ctx->extract_flags & WIMLIB_EXTRACT_FLAG_FROM_PIPE) force = true; - ret = inode_resolve_ltes(inode, ctx->wim->lookup_table, force); + ret = inode_resolve_streams(inode, ctx->wim->lookup_table, force); if (ret) return ret; for (unsigned i = 0; i <= inode->i_num_ads; i++) { @@ -669,6 +669,7 @@ extract_file_attributes(const tchar *path, struct apply_ctx *ctx, int ret; if (ctx->ops->set_file_attributes && + !(ctx->extract_flags & WIMLIB_EXTRACT_FLAG_NO_ATTRIBUTES) && !(dentry == ctx->extract_root && ctx->root_dentry_is_special)) { u32 attributes = dentry->d_inode->i_attributes; @@ -1508,7 +1509,7 @@ extract_streams_from_pipe(struct apply_ctx *ctx) if ((found_lte->resource_location != RESOURCE_NONEXISTENT) && !(found_lte->flags & WIM_RESHDR_FLAG_METADATA) - && (needed_lte = lookup_resource(lookup_table, found_lte->hash)) + && (needed_lte = lookup_stream(lookup_table, found_lte->hash)) && (needed_lte->out_refcnt)) { tchar *tmpfile_name = NULL; @@ -1707,17 +1708,6 @@ file_name_valid(utf16lechar *name, size_t num_chars, bool fix) return true; } -static bool -dentry_is_dot_or_dotdot(const struct wim_dentry *dentry) -{ - const utf16lechar *file_name = dentry->file_name; - return file_name != NULL && - file_name[0] == cpu_to_le16('.') && - (file_name[1] == cpu_to_le16('\0') || - (file_name[1] == cpu_to_le16('.') && - file_name[2] == cpu_to_le16('\0'))); -} - static int dentry_mark_skipped(struct wim_dentry *dentry, void *_ignore) { @@ -1755,14 +1745,6 @@ dentry_calculate_extraction_path(struct wim_dentry *dentry, void *_args) if (!dentry_is_supported(dentry, &ctx->supported_features)) goto skip_dentry; - if (dentry_is_dot_or_dotdot(dentry)) { - /* WIM files shouldn't contain . or .. entries. But if they are - * there, don't attempt to extract them. */ - WARNING("Skipping extraction of unexpected . or .. file " - "\"%"TS"\"", dentry_full_path(dentry)); - goto skip_dentry; - } - if (!ctx->ops->supports_case_sensitive_filenames) { struct wim_dentry *other;