/* 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;
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