Hans Leidekker : kernel32: GetConsoleInputExeNameW returns TRUE even when it fails.

Alexandre Julliard julliard at winehq.org
Mon Dec 10 08:54:24 CST 2007


Module: wine
Branch: master
Commit: c6dd1f1599974c4c2cacb17c4cd5ff589cfb343b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c6dd1f1599974c4c2cacb17c4cd5ff589cfb343b

Author: Hans Leidekker <hans at it.vu.nl>
Date:   Sat Dec  8 22:54:27 2007 +0100

kernel32: GetConsoleInputExeNameW returns TRUE even when it fails.

---

 dlls/kernel32/console.c |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/dlls/kernel32/console.c b/dlls/kernel32/console.c
index 1f24614..65312d2 100644
--- a/dlls/kernel32/console.c
+++ b/dlls/kernel32/console.c
@@ -1013,14 +1013,15 @@ BOOL WINAPI GetConsoleInputExeNameW(DWORD buflen, LPWSTR buffer)
  */
 BOOL WINAPI GetConsoleInputExeNameA(DWORD buflen, LPSTR buffer)
 {
-    WCHAR *bufferW;
-    BOOL ret;
+    TRACE("%u %p\n", buflen, buffer);
 
-    if (!(bufferW = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR) * buflen))) return FALSE;
-    if ((ret = GetConsoleInputExeNameW(buflen, bufferW)))
-        WideCharToMultiByte(CP_ACP, 0, bufferW, -1, buffer, buflen, NULL, NULL);
-    HeapFree(GetProcessHeap(), 0, bufferW);
-    return ret;
+    RtlEnterCriticalSection(&CONSOLE_CritSect);
+    if (WideCharToMultiByte(CP_ACP, 0, input_exe, -1, NULL, 0, NULL, NULL) <= buflen)
+        WideCharToMultiByte(CP_ACP, 0, input_exe, -1, buffer, buflen, NULL, NULL);
+    else SetLastError(ERROR_BUFFER_OVERFLOW);
+    RtlLeaveCriticalSection(&CONSOLE_CritSect);
+
+    return TRUE;
 }
 
 /***********************************************************************




More information about the wine-cvs mailing list