Module: wine Branch: master Commit: 8f31eb1edb06edc1efc81d3c39426aab3b31cbb0 URL: https://source.winehq.org/git/wine.git/?a=commit;h=8f31eb1edb06edc1efc81d3c3...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Oct 12 15:32:12 2021 +0200
ntdll: Export RtlNtStatusToDosError from Unix lib.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/unix/env.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+)
diff --git a/dlls/ntdll/unix/env.c b/dlls/ntdll/unix/env.c index 13bf85d2eb6..24f4fa5a588 100644 --- a/dlls/ntdll/unix/env.c +++ b/dlls/ntdll/unix/env.c @@ -59,6 +59,7 @@ #include "wine/condrv.h" #include "wine/debug.h" #include "unix_private.h" +#include "error.h"
WINE_DEFAULT_DEBUG_CHANNEL(environ);
@@ -2461,16 +2462,25 @@ NTSTATUS WINAPI NtQueryInstallUILanguage( LANGID *lang ) return STATUS_SUCCESS; }
+/********************************************************************** + * RtlUpcaseUnicodeChar (ntdll.so) + */ WCHAR WINAPI RtlUpcaseUnicodeChar( WCHAR wch ) { return ntdll_towupper( wch ); }
+/********************************************************************** + * RtlDowncaseUnicodeChar (ntdll.so) + */ WCHAR WINAPI RtlDowncaseUnicodeChar( WCHAR wch ) { return ntdll_towlower( wch ); }
+/********************************************************************** + * RtlUTF8ToUnicodeN (ntdll.so) + */ NTSTATUS WINAPI RtlUTF8ToUnicodeN( WCHAR *dst, DWORD dstlen, DWORD *reslen, const char *src, DWORD srclen ) { unsigned int res, len; @@ -2527,3 +2537,20 @@ NTSTATUS WINAPI RtlUTF8ToUnicodeN( WCHAR *dst, DWORD dstlen, DWORD *reslen, cons *reslen = (dstlen - (dstend - dst)) * sizeof(WCHAR); return status; } + +/********************************************************************** + * RtlNtStatusToDosError (ntdll.so) + */ +ULONG WINAPI RtlNtStatusToDosError( NTSTATUS status ) +{ + NtCurrentTeb()->LastStatusValue = status; + + if (!status || (status & 0x20000000)) return status; + if ((status & 0xf0000000) == 0xd0000000) status &= ~0x10000000; + + /* now some special cases */ + if (HIWORD(status) == 0xc001 || HIWORD(status) == 0x8007 || HIWORD(status) == 0xc007) + return LOWORD( status ); + + return map_status( status ); +}