Jacek Caban : kernelbase: Use IOCTL_CONDRV_GET_TITLE in GetConsoleTitleW.

Alexandre Julliard julliard at winehq.org
Fri Aug 14 16:39:31 CDT 2020


Module: wine
Branch: master
Commit: 7444aa42306cd0e091dd46efc2e0be3c7c61b2fa
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=7444aa42306cd0e091dd46efc2e0be3c7c61b2fa

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Aug 14 13:27:10 2020 +0200

kernelbase: Use IOCTL_CONDRV_GET_TITLE in GetConsoleTitleW.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/tests/console.c |  9 +++++++++
 dlls/kernelbase/console.c     | 21 ++++++++-------------
 2 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c
index ee050e887a..1fc23992ba 100644
--- a/dlls/kernel32/tests/console.c
+++ b/dlls/kernel32/tests/console.c
@@ -3589,7 +3589,9 @@ static void test_GetConsoleScreenBufferInfoEx(HANDLE std_output)
 
 static void test_FreeConsole(void)
 {
+    WCHAR title[16];
     HANDLE handle;
+    DWORD size;
     UINT cp;
     BOOL ret;
 
@@ -3637,6 +3639,13 @@ static void test_FreeConsole(void)
     ok(!cp, "cp = %x\n", cp);
     ok(GetLastError() == ERROR_INVALID_HANDLE, "last error %u\n", GetLastError());
 
+    SetLastError(0xdeadbeef);
+    memset( title, 0xc0, sizeof(title) );
+    size = GetConsoleTitleW( title, ARRAY_SIZE(title) );
+    ok(!size, "GetConsoleTitleW returned %u\n", size);
+    ok(title[0] == 0xc0c0, "title byffer changed\n");
+    ok(GetLastError() == ERROR_INVALID_HANDLE, "last error %u\n", GetLastError());
+
     if (!skip_nt)
     {
         SetStdHandle( STD_INPUT_HANDLE, (HANDLE)0xdeadbeef );
diff --git a/dlls/kernelbase/console.c b/dlls/kernelbase/console.c
index 8f4bde8d05..a3271712d9 100644
--- a/dlls/kernelbase/console.c
+++ b/dlls/kernelbase/console.c
@@ -739,20 +739,15 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetConsoleScreenBufferInfoEx( HANDLE handle,
  */
 DWORD WINAPI DECLSPEC_HOTPATCH GetConsoleTitleW( LPWSTR title, DWORD size )
 {
-    DWORD ret = 0;
+    if (!size) return 0;
 
-    SERVER_START_REQ( get_console_input_info )
-    {
-        req->handle = 0;
-        wine_server_set_reply( req, title, (size - 1) * sizeof(WCHAR) );
-        if (!wine_server_call_err( req ))
-        {
-            ret = wine_server_reply_size(reply) / sizeof(WCHAR);
-            title[ret] = 0;
-        }
-    }
-    SERVER_END_REQ;
-    return ret;
+    if (!console_ioctl( RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle, IOCTL_CONDRV_GET_TITLE,
+                        NULL, 0, title, (size - 1) * sizeof(WCHAR), &size ))
+        return 0;
+
+    size /= sizeof(WCHAR);
+    title[size] = 0;
+    return size + 1;
 }
 
 




More information about the wine-cvs mailing list