X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fwin32_apply.c;h=fcb2c001abd128e77861b021b5e8fbf8a87eccd5;hb=f45c157ceb31b97c4393c57b65a0e9b8fc2a3630;hp=2926883cd343991d8dd7a6f3702beebf29b198c5;hpb=5f95262bcecc05136368999e079973e4771b24a3;p=wimlib diff --git a/src/win32_apply.c b/src/win32_apply.c index 2926883c..fcb2c001 100644 --- a/src/win32_apply.c +++ b/src/win32_apply.c @@ -517,9 +517,18 @@ prepare_target(struct list_head *dentry_list, struct win32_apply_ctx *ctx) /* Open handle to the target directory (possibly creating it). */ - status = (*func_RtlDosPathNameToNtPathName_U_WithStatus)(ctx->common.target, - &ctx->target_ntpath, - NULL, NULL); + if (func_RtlDosPathNameToNtPathName_U_WithStatus) { + status = (*func_RtlDosPathNameToNtPathName_U_WithStatus)(ctx->common.target, + &ctx->target_ntpath, + NULL, NULL); + } else { + if ((*func_RtlDosPathNameToNtPathName_U)(ctx->common.target, + &ctx->target_ntpath, + NULL, NULL)) + status = STATUS_SUCCESS; + else + status = STATUS_NO_MEMORY; + } if (!NT_SUCCESS(status)) { if (status == STATUS_NO_MEMORY) { return WIMLIB_ERR_NOMEM; @@ -1761,7 +1770,10 @@ end_extract_stream(struct wim_lookup_table_entry *stream, int status, void *_ctx dentry = list_first_entry(&ctx->reparse_dentries, struct wim_dentry, tmp_list); build_extraction_path(dentry, ctx); - ERROR("Invalid reparse point", current_path(ctx)); + ERROR("Reparse data of \"%ls\" has size " + "%"PRIu64" bytes (exceeds %u bytes)", + current_path(ctx), stream->size, + REPARSE_DATA_MAX_SIZE); return WIMLIB_ERR_INVALID_REPARSE_DATA; } /* In the WIM format, reparse streams are just the reparse data