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