ctx->pathbuf.Length += ctx->target_ntpath.Length + sizeof(wchar_t);
ctx->pathbuf.Buffer[ctx->pathbuf.Length / sizeof(wchar_t)] = L'\0';
- wimlib_assert(ctx->pathbuf.Length >= 8 &&
+ wimlib_assert(ctx->pathbuf.Length >= 4 * sizeof(wchar_t) &&
!wmemcmp(ctx->pathbuf.Buffer, L"\\??\\", 4));
ctx->pathbuf.Buffer[1] = L'\\';
/* 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;
if (ret)
return ret;
if (in_prepopulate_list(dentry, ctx)) {
- if (ctx->common.progress_func) {
- union wimlib_progress_info info;
+ union wimlib_progress_info info;
- info.wimboot_exclude.path_in_wim = dentry->_full_path;
- info.wimboot_exclude.extraction_path = current_path(ctx);
+ info.wimboot_exclude.path_in_wim = dentry->_full_path;
+ info.wimboot_exclude.extraction_path = current_path(ctx);
- ctx->common.progress_func(WIMLIB_PROGRESS_MSG_WIMBOOT_EXCLUDE,
- &info);
- FREE(dentry->_full_path);
- dentry->_full_path = NULL;
- }
+ ret = call_progress(ctx->common.progfunc,
+ WIMLIB_PROGRESS_MSG_WIMBOOT_EXCLUDE,
+ &info, ctx->common.progctx);
+ FREE(dentry->_full_path);
+ dentry->_full_path = NULL;
+ return ret;
} else {
FREE(dentry->_full_path);
dentry->_full_path = NULL;
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