From: Pierre Schweitzer Date: Tue, 22 Feb 2011 18:43:38 +0000 (+0000) Subject: [KERNEL32] X-Git-Tag: ReactOS-0.3.13~175 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=f617d8910c272c78e4ad45b0b9d509eb2e7ef0ea [KERNEL32] Don't make GetBinaryTypeA() rely on Wine's strings conversions functions svn path=/trunk/; revision=50867 --- diff --git a/reactos/dll/win32/kernel32/file/bintype.c b/reactos/dll/win32/kernel32/file/bintype.c index e59a1c48c26..824121c395c 100644 --- a/reactos/dll/win32/kernel32/file/bintype.c +++ b/reactos/dll/win32/kernel32/file/bintype.c @@ -301,23 +301,43 @@ GetBinaryTypeW ( */ BOOL WINAPI -GetBinaryTypeA ( - LPCSTR lpApplicationName, - LPDWORD lpBinaryType - ) +GetBinaryTypeA(IN LPCSTR lpApplicationName, + OUT LPDWORD lpBinaryType) { - PWCHAR ApplicationNameW; + ANSI_STRING ApplicationNameString; + UNICODE_STRING ApplicationNameW; + BOOL StringAllocated = FALSE, Result; + NTSTATUS Status; - if(!lpApplicationName || !lpBinaryType) - { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } + RtlInitAnsiString(&ApplicationNameString, lpApplicationName); + + if (ApplicationNameString.Length * sizeof(WCHAR) >= NtCurrentTeb()->StaticUnicodeString.MaximumLength) + { + StringAllocated = TRUE; + Status = RtlAnsiStringToUnicodeString(&ApplicationNameW, &ApplicationNameString, TRUE); + } + else + { + Status = RtlAnsiStringToUnicodeString(&(NtCurrentTeb()->StaticUnicodeString), &ApplicationNameString, FALSE); + } + + if (!NT_SUCCESS(Status)) + { + BaseSetLastNTError(Status); + return FALSE; + } - if (!(ApplicationNameW = FilenameA2W(lpApplicationName, FALSE))) - return FALSE; + if (StringAllocated) + { + Result = GetBinaryTypeW(ApplicationNameW.Buffer, lpBinaryType); + RtlFreeUnicodeString(&ApplicationNameW); + } + else + { + Result = GetBinaryTypeW(NtCurrentTeb()->StaticUnicodeString.Buffer, lpBinaryType); + } - return GetBinaryTypeW(ApplicationNameW, lpBinaryType); + return Result; } /* EOF */