-- v3: kernelbase: Return full title length from GetConsoleTitle() kernel32/tests: Add tests for GetConsoleTitle()
From: Hugh McMaster hugh.mcmaster@outlook.com
--- dlls/kernel32/tests/console.c | 72 +++++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 16 deletions(-)
diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c index 5d65b0b75e7..b10254bc161 100644 --- a/dlls/kernel32/tests/console.c +++ b/dlls/kernel32/tests/console.c @@ -4230,28 +4230,66 @@ static void test_SetConsoleScreenBufferInfoEx(HANDLE std_output) CloseHandle(std_input); }
-static void test_console_title(void) +static void test_GetConsoleTitleA(void) { - WCHAR buf[64]; - BOOL ret; + char buf[64], str[] = "test"; + DWORD ret; + + ret = SetConsoleTitleA(str); + ok(ret, "SetConsoleTitleA failed: %lu\n", GetLastError()); + + ret = GetConsoleTitleA(NULL, 0); + ok(!ret, "Unexpected string length; error %lu\n", GetLastError()); + + ret = GetConsoleTitleA(buf, 0); + ok(!ret, "Unexpected string length; error %lu\n", GetLastError()); + + ret = GetConsoleTitleA(buf, ARRAY_SIZE(buf)); + ok(ret, "GetConsoleTitleW failed: %lu\n", GetLastError()); + ok(ret == strlen(str), "Got string length %lu, expected %Iu\n", ret, strlen(str)); + ok(!strcmp(buf, str), "Title = %s\n", wine_dbgstr_a(buf)); + + ret = SetConsoleTitleA(""); + ok(ret, "SetConsoleTitleA failed: %lu\n", GetLastError()); + + ret = GetConsoleTitleA(buf, ARRAY_SIZE(buf)); + ok(!ret, "Unexpected string length; error %lu\n", GetLastError()); +} + +static void test_GetConsoleTitleW(void) +{ + WCHAR buf[64], str[] = L"test"; + DWORD ret;
- ret = SetConsoleTitleW(L"test"); + ret = SetConsoleTitleW(str); ok(ret, "SetConsoleTitleW failed: %lu\n", GetLastError());
+ ret = GetConsoleTitleW(NULL, 0); + ok(!ret, "Unexpected string length; error %lu\n", GetLastError()); + + ret = GetConsoleTitleW(buf, 0); + ok(!ret, "Unexpected string length; error %lu\n", GetLastError()); + ret = GetConsoleTitleW(buf, ARRAY_SIZE(buf)); ok(ret, "GetConsoleTitleW failed: %lu\n", GetLastError()); - ok(!wcscmp(buf, L"test"), "title = %s\n", wine_dbgstr_w(buf)); + todo_wine ok(ret == wcslen(str), "Got string length %lu, expected %Iu\n", ret, wcslen(str)); + ok(!wcscmp(buf, str), "Title = %s\n", wine_dbgstr_w(buf));
- if (!skip_nt) - { - ret = GetConsoleTitleW(buf, 2); - ok(ret, "GetConsoleTitleW failed: %lu\n", GetLastError()); - ok(!wcscmp(buf, L"t"), "title = %s\n", wine_dbgstr_w(buf)); + ret = GetConsoleTitleW(buf, 2); + ok(ret, "GetConsoleTitleW failed: %lu\n", GetLastError()); + todo_wine ok(ret == wcslen(str), "Got string length %lu, expected %Iu\n", ret, wcslen(str)); + if (!skip_nt) ok(!wcscmp(buf, L"t"), "Title = %s\n", wine_dbgstr_w(buf));
- ret = GetConsoleTitleW(buf, 4); - ok(ret, "GetConsoleTitleW failed: %lu\n", GetLastError()); - ok(!wcscmp(buf, L"tes"), "title = %s\n", wine_dbgstr_w(buf)); - } + ret = GetConsoleTitleW(buf, 4); + ok(ret, "GetConsoleTitleW failed: %lu\n", GetLastError()); + ok(ret == wcslen(str), "Got string length %lu, expected %Iu\n", ret, wcslen(str)); + if (!skip_nt) ok(!wcscmp(buf, L"tes"), "Title = %s\n", wine_dbgstr_w(buf)); + + ret = SetConsoleTitleW(L""); + ok(ret, "SetConsoleTitleW failed: %lu\n", GetLastError()); + + ret = GetConsoleTitleW(buf, ARRAY_SIZE(buf)); + todo_wine ok(!ret, "Unexpected string length; error %lu\n", GetLastError()); }
static void test_file_info(HANDLE input, HANDLE output) @@ -4584,7 +4622,8 @@ static void test_pseudo_console_child(HANDLE input, HANDLE output) hwnd = GetConsoleWindow(); ok(IsWindow(hwnd), "no console window\n");
- test_console_title(); + test_GetConsoleTitleA(); + test_GetConsoleTitleW(); test_WriteConsoleInputW(input); }
@@ -5017,7 +5056,8 @@ START_TEST(console) test_GetConsoleScreenBufferInfoEx(hConOut); test_SetConsoleScreenBufferInfoEx(hConOut); test_file_info(hConIn, hConOut); - test_console_title(); + test_GetConsoleTitleA(); + test_GetConsoleTitleW(); if (!test_current) { test_pseudo_console();
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=124477
Your paranoid android.
=== w8 (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 27 console.c:2352: Test failed: [13] Expected count to be 0, got 27 console.c:2352: Test failed: [15] Expected count to be 0, got 27 console.c:2442: Test failed: [9] Expected count to be 0, got 27 console.c:2442: Test failed: [13] Expected count to be 0, got 27 console.c:2442: Test failed: [15] Expected count to be 0, got 27 console.c:2532: Test failed: [9] Expected count to be 0, got 27 console.c:2532: Test failed: [13] Expected count to be 0, got 27 console.c:2532: Test failed: [15] Expected count to be 0, got 27 console.c:2948: Test failed: [9] Expected count to be 0, got 27 console.c:2948: Test failed: [13] Expected count to be 0, got 27 console.c:2948: Test failed: [15] Expected count to be 0, got 27 console.c:3038: Test failed: [9] Expected count to be 0, got 27 console.c:3038: Test failed: [13] Expected count to be 0, got 27 console.c:3038: Test failed: [15] Expected count to be 0, got 27 console.c:3127: Test failed: [9] Expected count to be 0, got 27 console.c:3127: Test failed: [13] Expected count to be 0, got 27 console.c:3127: Test failed: [15] Expected count to be 0, got 27
=== w8adm (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 27 console.c:2352: Test failed: [13] Expected count to be 0, got 27 console.c:2352: Test failed: [15] Expected count to be 0, got 27 console.c:2442: Test failed: [9] Expected count to be 0, got 27 console.c:2442: Test failed: [13] Expected count to be 0, got 27 console.c:2442: Test failed: [15] Expected count to be 0, got 27 console.c:2532: Test failed: [9] Expected count to be 0, got 27 console.c:2532: Test failed: [13] Expected count to be 0, got 27 console.c:2532: Test failed: [15] Expected count to be 0, got 27 console.c:2948: Test failed: [9] Expected count to be 0, got 27 console.c:2948: Test failed: [13] Expected count to be 0, got 27 console.c:2948: Test failed: [15] Expected count to be 0, got 27 console.c:3038: Test failed: [9] Expected count to be 0, got 27 console.c:3038: Test failed: [13] Expected count to be 0, got 27 console.c:3038: Test failed: [15] Expected count to be 0, got 27 console.c:3127: Test failed: [9] Expected count to be 0, got 27 console.c:3127: Test failed: [13] Expected count to be 0, got 27 console.c:3127: Test failed: [15] Expected count to be 0, got 27
=== w864 (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 27 console.c:2352: Test failed: [13] Expected count to be 0, got 27 console.c:2352: Test failed: [15] Expected count to be 0, got 27 console.c:2442: Test failed: [9] Expected count to be 0, got 27 console.c:2442: Test failed: [13] Expected count to be 0, got 27 console.c:2442: Test failed: [15] Expected count to be 0, got 27 console.c:2532: Test failed: [9] Expected count to be 0, got 27 console.c:2532: Test failed: [13] Expected count to be 0, got 27 console.c:2532: Test failed: [15] Expected count to be 0, got 27 console.c:2948: Test failed: [9] Expected count to be 0, got 27 console.c:2948: Test failed: [13] Expected count to be 0, got 27 console.c:2948: Test failed: [15] Expected count to be 0, got 27 console.c:3038: Test failed: [9] Expected count to be 0, got 27 console.c:3038: Test failed: [13] Expected count to be 0, got 27 console.c:3038: Test failed: [15] Expected count to be 0, got 27 console.c:3127: Test failed: [9] Expected count to be 0, got 27 console.c:3127: Test failed: [13] Expected count to be 0, got 27 console.c:3127: Test failed: [15] Expected count to be 0, got 27
=== w1064v1507 (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 32 console.c:2352: Test failed: [13] Expected count to be 0, got 32 console.c:2352: Test failed: [15] Expected count to be 0, got 32 console.c:2442: Test failed: [9] Expected count to be 0, got 32 console.c:2442: Test failed: [13] Expected count to be 0, got 32 console.c:2442: Test failed: [15] Expected count to be 0, got 32 console.c:2532: Test failed: [9] Expected count to be 0, got 32 console.c:2532: Test failed: [13] Expected count to be 0, got 32 console.c:2532: Test failed: [15] Expected count to be 0, got 32 console.c:2948: Test failed: [9] Expected count to be 0, got 32 console.c:2948: Test failed: [13] Expected count to be 0, got 32 console.c:2948: Test failed: [15] Expected count to be 0, got 32 console.c:3038: Test failed: [9] Expected count to be 0, got 32 console.c:3038: Test failed: [13] Expected count to be 0, got 32 console.c:3038: Test failed: [15] Expected count to be 0, got 32 console.c:3127: Test failed: [9] Expected count to be 0, got 32 console.c:3127: Test failed: [13] Expected count to be 0, got 32 console.c:3127: Test failed: [15] Expected count to be 0, got 32
=== w1064v1809 (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 29 console.c:2352: Test failed: [13] Expected count to be 0, got 29 console.c:2352: Test failed: [15] Expected count to be 0, got 29 console.c:2442: Test failed: [9] Expected count to be 0, got 29 console.c:2442: Test failed: [13] Expected count to be 0, got 29 console.c:2442: Test failed: [15] Expected count to be 0, got 29 console.c:2532: Test failed: [9] Expected count to be 0, got 29 console.c:2532: Test failed: [13] Expected count to be 0, got 29 console.c:2532: Test failed: [15] Expected count to be 0, got 29 console.c:2948: Test failed: [9] Expected count to be 0, got 29 console.c:2948: Test failed: [13] Expected count to be 0, got 29 console.c:2948: Test failed: [15] Expected count to be 0, got 29 console.c:3038: Test failed: [9] Expected count to be 0, got 29 console.c:3038: Test failed: [13] Expected count to be 0, got 29 console.c:3038: Test failed: [15] Expected count to be 0, got 29 console.c:3127: Test failed: [9] Expected count to be 0, got 29 console.c:3127: Test failed: [13] Expected count to be 0, got 29 console.c:3127: Test failed: [15] Expected count to be 0, got 29
=== w1064 (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 15 console.c:2352: Test failed: [13] Expected count to be 0, got 15 console.c:2352: Test failed: [15] Expected count to be 0, got 15 console.c:2442: Test failed: [9] Expected count to be 0, got 15 console.c:2442: Test failed: [13] Expected count to be 0, got 15 console.c:2442: Test failed: [15] Expected count to be 0, got 15 console.c:2532: Test failed: [9] Expected count to be 0, got 15 console.c:2532: Test failed: [13] Expected count to be 0, got 15 console.c:2532: Test failed: [15] Expected count to be 0, got 15 console.c:2948: Test failed: [9] Expected count to be 0, got 15 console.c:2948: Test failed: [13] Expected count to be 0, got 15 console.c:2948: Test failed: [15] Expected count to be 0, got 15 console.c:3038: Test failed: [9] Expected count to be 0, got 15 console.c:3038: Test failed: [13] Expected count to be 0, got 15 console.c:3038: Test failed: [15] Expected count to be 0, got 15 console.c:3127: Test failed: [9] Expected count to be 0, got 15 console.c:3127: Test failed: [13] Expected count to be 0, got 15 console.c:3127: Test failed: [15] Expected count to be 0, got 15
=== w1064_tsign (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 15 console.c:2352: Test failed: [13] Expected count to be 0, got 15 console.c:2352: Test failed: [15] Expected count to be 0, got 15 console.c:2442: Test failed: [9] Expected count to be 0, got 15 console.c:2442: Test failed: [13] Expected count to be 0, got 15 console.c:2442: Test failed: [15] Expected count to be 0, got 15 console.c:2532: Test failed: [9] Expected count to be 0, got 15 console.c:2532: Test failed: [13] Expected count to be 0, got 15 console.c:2532: Test failed: [15] Expected count to be 0, got 15 console.c:2948: Test failed: [9] Expected count to be 0, got 15 console.c:2948: Test failed: [13] Expected count to be 0, got 15 console.c:2948: Test failed: [15] Expected count to be 0, got 15 console.c:3038: Test failed: [9] Expected count to be 0, got 15 console.c:3038: Test failed: [13] Expected count to be 0, got 15 console.c:3038: Test failed: [15] Expected count to be 0, got 15 console.c:3127: Test failed: [9] Expected count to be 0, got 15 console.c:3127: Test failed: [13] Expected count to be 0, got 15 console.c:3127: Test failed: [15] Expected count to be 0, got 15
=== w10pro64 (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 15 console.c:2352: Test failed: [13] Expected count to be 0, got 15 console.c:2352: Test failed: [15] Expected count to be 0, got 15 console.c:2442: Test failed: [9] Expected count to be 0, got 15 console.c:2442: Test failed: [13] Expected count to be 0, got 15 console.c:2442: Test failed: [15] Expected count to be 0, got 15 console.c:2532: Test failed: [9] Expected count to be 0, got 15 console.c:2532: Test failed: [13] Expected count to be 0, got 15 console.c:2532: Test failed: [15] Expected count to be 0, got 15 console.c:2948: Test failed: [9] Expected count to be 0, got 15 console.c:2948: Test failed: [13] Expected count to be 0, got 15 console.c:2948: Test failed: [15] Expected count to be 0, got 15 console.c:3038: Test failed: [9] Expected count to be 0, got 15 console.c:3038: Test failed: [13] Expected count to be 0, got 15 console.c:3038: Test failed: [15] Expected count to be 0, got 15 console.c:3127: Test failed: [9] Expected count to be 0, got 15 console.c:3127: Test failed: [13] Expected count to be 0, got 15 console.c:3127: Test failed: [15] Expected count to be 0, got 15
From: Hugh McMaster hugh.mcmaster@outlook.com
--- dlls/kernel32/tests/console.c | 6 +++--- dlls/kernelbase/console.c | 34 ++++++++++++++++++++++++---------- include/wine/condrv.h | 7 +++++++ programs/conhost/conhost.c | 13 ++++++++----- 4 files changed, 42 insertions(+), 18 deletions(-)
diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c index b10254bc161..c145aa4cb59 100644 --- a/dlls/kernel32/tests/console.c +++ b/dlls/kernel32/tests/console.c @@ -4272,12 +4272,12 @@ static void test_GetConsoleTitleW(void)
ret = GetConsoleTitleW(buf, ARRAY_SIZE(buf)); ok(ret, "GetConsoleTitleW failed: %lu\n", GetLastError()); - todo_wine ok(ret == wcslen(str), "Got string length %lu, expected %Iu\n", ret, wcslen(str)); + ok(ret == wcslen(str), "Got string length %lu, expected %Iu\n", ret, wcslen(str)); ok(!wcscmp(buf, str), "Title = %s\n", wine_dbgstr_w(buf));
ret = GetConsoleTitleW(buf, 2); ok(ret, "GetConsoleTitleW failed: %lu\n", GetLastError()); - todo_wine ok(ret == wcslen(str), "Got string length %lu, expected %Iu\n", ret, wcslen(str)); + ok(ret == wcslen(str), "Got string length %lu, expected %Iu\n", ret, wcslen(str)); if (!skip_nt) ok(!wcscmp(buf, L"t"), "Title = %s\n", wine_dbgstr_w(buf));
ret = GetConsoleTitleW(buf, 4); @@ -4289,7 +4289,7 @@ static void test_GetConsoleTitleW(void) ok(ret, "SetConsoleTitleW failed: %lu\n", GetLastError());
ret = GetConsoleTitleW(buf, ARRAY_SIZE(buf)); - todo_wine ok(!ret, "Unexpected string length; error %lu\n", GetLastError()); + ok(!ret, "Unexpected string length; error %lu\n", GetLastError()); }
static void test_file_info(HANDLE input, HANDLE output) diff --git a/dlls/kernelbase/console.c b/dlls/kernelbase/console.c index 590198cf7bf..40020c9fabf 100644 --- a/dlls/kernelbase/console.c +++ b/dlls/kernelbase/console.c @@ -1011,13 +1011,15 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetConsoleTitleA( LPSTR title, DWORD size ) WCHAR *ptr = HeapAlloc( GetProcessHeap(), 0, sizeof(WCHAR) * size ); DWORD ret;
- if (!ptr) return 0; - ret = GetConsoleTitleW( ptr, size ); - if (ret) + if (!ptr) { - WideCharToMultiByte( GetConsoleOutputCP(), 0, ptr, ret + 1, title, size, NULL, NULL); - ret = strlen(title); + SetLastError( ERROR_NOT_ENOUGH_MEMORY ); + return 0; } + + if ((ret = GetConsoleTitleW( ptr, size ))) + WideCharToMultiByte( GetConsoleOutputCP(), 0, ptr, -1, title, size, NULL, NULL); + HeapFree( GetProcessHeap(), 0, ptr ); return ret; } @@ -1028,15 +1030,27 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetConsoleTitleA( LPSTR title, DWORD size ) */ DWORD WINAPI DECLSPEC_HOTPATCH GetConsoleTitleW( LPWSTR title, DWORD size ) { - if (!size) return 0; + struct condrv_title_params *params; + size_t max_size = sizeof(*params) + size * sizeof(WCHAR); + + if (!title || !size) return 0; + + if (!(params = HeapAlloc( GetProcessHeap(), 0, max_size ))) + { + SetLastError( ERROR_NOT_ENOUGH_MEMORY ); + return 0; + }
if (!console_ioctl( RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle, IOCTL_CONDRV_GET_TITLE, - NULL, 0, title, (size - 1) * sizeof(WCHAR), &size )) + &size, sizeof(size), params, max_size, &size )) return 0;
- size /= sizeof(WCHAR); - title[size] = 0; - return size + 1; + size -= sizeof(*params); + memcpy( title, params->buffer, size ); + title[ size / sizeof(WCHAR) ] = 0; + size = params->title_len; + HeapFree( GetProcessHeap(), 0, params ); + return size; }
diff --git a/include/wine/condrv.h b/include/wine/condrv.h index 3355d7177b0..51534720444 100644 --- a/include/wine/condrv.h +++ b/include/wine/condrv.h @@ -159,6 +159,13 @@ struct condrv_output_info_params #define SET_CONSOLE_OUTPUT_INFO_POPUP_ATTR 0x0040 #define SET_CONSOLE_OUTPUT_INFO_FONT 0x0080
+/* IOCTL_CONDRV_GET_TITLE params */ +struct condrv_title_params +{ + unsigned int title_len; + WCHAR buffer[1]; +}; + /* IOCTL_CONDRV_FILL_OUTPUT params */ struct condrv_fill_output_params { diff --git a/programs/conhost/conhost.c b/programs/conhost/conhost.c index 792daeb520f..02a4c3a6fd8 100644 --- a/programs/conhost/conhost.c +++ b/programs/conhost/conhost.c @@ -2675,12 +2675,15 @@ static NTSTATUS console_input_ioctl( struct console *console, unsigned int code,
case IOCTL_CONDRV_GET_TITLE: { - WCHAR *result; - if (in_size) return STATUS_INVALID_PARAMETER; + struct condrv_title_params *params; + DWORD buffer_len = *(DWORD *)in_data - 1; + size_t title_len = console->title ? wcslen( console->title ) : 0; + size_t str_size = min( buffer_len, title_len ) * sizeof(WCHAR); + *out_size = sizeof(*params) + str_size; + if (!(params = alloc_ioctl_buffer( *out_size ))) return STATUS_NO_MEMORY; TRACE( "returning title %s\n", debugstr_w(console->title) ); - *out_size = min( *out_size, console->title ? wcslen( console->title ) * sizeof(WCHAR) : 0 ); - if (!(result = alloc_ioctl_buffer( *out_size ))) return STATUS_NO_MEMORY; - if (*out_size) memcpy( result, console->title, *out_size ); + if (str_size) memcpy( params->buffer, console->title, str_size ); + params->title_len = title_len; return STATUS_SUCCESS; }
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=124478
Your paranoid android.
=== w8 (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 27 console.c:2352: Test failed: [13] Expected count to be 0, got 27 console.c:2352: Test failed: [15] Expected count to be 0, got 27 console.c:2442: Test failed: [9] Expected count to be 0, got 27 console.c:2442: Test failed: [13] Expected count to be 0, got 27 console.c:2442: Test failed: [15] Expected count to be 0, got 27 console.c:2532: Test failed: [9] Expected count to be 0, got 27 console.c:2532: Test failed: [13] Expected count to be 0, got 27 console.c:2532: Test failed: [15] Expected count to be 0, got 27 console.c:2948: Test failed: [9] Expected count to be 0, got 27 console.c:2948: Test failed: [13] Expected count to be 0, got 27 console.c:2948: Test failed: [15] Expected count to be 0, got 27 console.c:3038: Test failed: [9] Expected count to be 0, got 27 console.c:3038: Test failed: [13] Expected count to be 0, got 27 console.c:3038: Test failed: [15] Expected count to be 0, got 27 console.c:3127: Test failed: [9] Expected count to be 0, got 27 console.c:3127: Test failed: [13] Expected count to be 0, got 27 console.c:3127: Test failed: [15] Expected count to be 0, got 27
=== w8adm (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 27 console.c:2352: Test failed: [13] Expected count to be 0, got 27 console.c:2352: Test failed: [15] Expected count to be 0, got 27 console.c:2442: Test failed: [9] Expected count to be 0, got 27 console.c:2442: Test failed: [13] Expected count to be 0, got 27 console.c:2442: Test failed: [15] Expected count to be 0, got 27 console.c:2532: Test failed: [9] Expected count to be 0, got 27 console.c:2532: Test failed: [13] Expected count to be 0, got 27 console.c:2532: Test failed: [15] Expected count to be 0, got 27 console.c:2948: Test failed: [9] Expected count to be 0, got 27 console.c:2948: Test failed: [13] Expected count to be 0, got 27 console.c:2948: Test failed: [15] Expected count to be 0, got 27 console.c:3038: Test failed: [9] Expected count to be 0, got 27 console.c:3038: Test failed: [13] Expected count to be 0, got 27 console.c:3038: Test failed: [15] Expected count to be 0, got 27 console.c:3127: Test failed: [9] Expected count to be 0, got 27 console.c:3127: Test failed: [13] Expected count to be 0, got 27 console.c:3127: Test failed: [15] Expected count to be 0, got 27
=== w864 (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 27 console.c:2352: Test failed: [13] Expected count to be 0, got 27 console.c:2352: Test failed: [15] Expected count to be 0, got 27 console.c:2442: Test failed: [9] Expected count to be 0, got 27 console.c:2442: Test failed: [13] Expected count to be 0, got 27 console.c:2442: Test failed: [15] Expected count to be 0, got 27 console.c:2532: Test failed: [9] Expected count to be 0, got 27 console.c:2532: Test failed: [13] Expected count to be 0, got 27 console.c:2532: Test failed: [15] Expected count to be 0, got 27 console.c:2948: Test failed: [9] Expected count to be 0, got 27 console.c:2948: Test failed: [13] Expected count to be 0, got 27 console.c:2948: Test failed: [15] Expected count to be 0, got 27 console.c:3038: Test failed: [9] Expected count to be 0, got 27 console.c:3038: Test failed: [13] Expected count to be 0, got 27 console.c:3038: Test failed: [15] Expected count to be 0, got 27 console.c:3127: Test failed: [9] Expected count to be 0, got 27 console.c:3127: Test failed: [13] Expected count to be 0, got 27 console.c:3127: Test failed: [15] Expected count to be 0, got 27
=== w1064v1507 (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 32 console.c:2352: Test failed: [13] Expected count to be 0, got 32 console.c:2352: Test failed: [15] Expected count to be 0, got 32 console.c:2442: Test failed: [9] Expected count to be 0, got 32 console.c:2442: Test failed: [13] Expected count to be 0, got 32 console.c:2442: Test failed: [15] Expected count to be 0, got 32 console.c:2532: Test failed: [9] Expected count to be 0, got 32 console.c:2532: Test failed: [13] Expected count to be 0, got 32 console.c:2532: Test failed: [15] Expected count to be 0, got 32 console.c:2948: Test failed: [9] Expected count to be 0, got 32 console.c:2948: Test failed: [13] Expected count to be 0, got 32 console.c:2948: Test failed: [15] Expected count to be 0, got 32 console.c:3038: Test failed: [9] Expected count to be 0, got 32 console.c:3038: Test failed: [13] Expected count to be 0, got 32 console.c:3038: Test failed: [15] Expected count to be 0, got 32 console.c:3127: Test failed: [9] Expected count to be 0, got 32 console.c:3127: Test failed: [13] Expected count to be 0, got 32 console.c:3127: Test failed: [15] Expected count to be 0, got 32
=== w1064v1809 (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 29 console.c:2352: Test failed: [13] Expected count to be 0, got 29 console.c:2352: Test failed: [15] Expected count to be 0, got 29 console.c:2442: Test failed: [9] Expected count to be 0, got 29 console.c:2442: Test failed: [13] Expected count to be 0, got 29 console.c:2442: Test failed: [15] Expected count to be 0, got 29 console.c:2532: Test failed: [9] Expected count to be 0, got 29 console.c:2532: Test failed: [13] Expected count to be 0, got 29 console.c:2532: Test failed: [15] Expected count to be 0, got 29 console.c:2948: Test failed: [9] Expected count to be 0, got 29 console.c:2948: Test failed: [13] Expected count to be 0, got 29 console.c:2948: Test failed: [15] Expected count to be 0, got 29 console.c:3038: Test failed: [9] Expected count to be 0, got 29 console.c:3038: Test failed: [13] Expected count to be 0, got 29 console.c:3038: Test failed: [15] Expected count to be 0, got 29 console.c:3127: Test failed: [9] Expected count to be 0, got 29 console.c:3127: Test failed: [13] Expected count to be 0, got 29 console.c:3127: Test failed: [15] Expected count to be 0, got 29
=== w1064 (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 15 console.c:2352: Test failed: [13] Expected count to be 0, got 15 console.c:2352: Test failed: [15] Expected count to be 0, got 15 console.c:2442: Test failed: [9] Expected count to be 0, got 15 console.c:2442: Test failed: [13] Expected count to be 0, got 15 console.c:2442: Test failed: [15] Expected count to be 0, got 15 console.c:2532: Test failed: [9] Expected count to be 0, got 15 console.c:2532: Test failed: [13] Expected count to be 0, got 15 console.c:2532: Test failed: [15] Expected count to be 0, got 15 console.c:2948: Test failed: [9] Expected count to be 0, got 15 console.c:2948: Test failed: [13] Expected count to be 0, got 15 console.c:2948: Test failed: [15] Expected count to be 0, got 15 console.c:3038: Test failed: [9] Expected count to be 0, got 15 console.c:3038: Test failed: [13] Expected count to be 0, got 15 console.c:3038: Test failed: [15] Expected count to be 0, got 15 console.c:3127: Test failed: [9] Expected count to be 0, got 15 console.c:3127: Test failed: [13] Expected count to be 0, got 15 console.c:3127: Test failed: [15] Expected count to be 0, got 15
=== w1064 (testbot log) ===
WineRunTask.pl:error: The previous 1 run(s) terminated abnormally
=== w1064_tsign (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 15 console.c:2352: Test failed: [13] Expected count to be 0, got 15 console.c:2352: Test failed: [15] Expected count to be 0, got 15 console.c:2442: Test failed: [9] Expected count to be 0, got 15 console.c:2442: Test failed: [13] Expected count to be 0, got 15 console.c:2442: Test failed: [15] Expected count to be 0, got 15 console.c:2532: Test failed: [9] Expected count to be 0, got 15 console.c:2532: Test failed: [13] Expected count to be 0, got 15 console.c:2532: Test failed: [15] Expected count to be 0, got 15 console.c:2948: Test failed: [9] Expected count to be 0, got 15 console.c:2948: Test failed: [13] Expected count to be 0, got 15 console.c:2948: Test failed: [15] Expected count to be 0, got 15 console.c:3038: Test failed: [9] Expected count to be 0, got 15 console.c:3038: Test failed: [13] Expected count to be 0, got 15 console.c:3038: Test failed: [15] Expected count to be 0, got 15 console.c:3127: Test failed: [9] Expected count to be 0, got 15 console.c:3127: Test failed: [13] Expected count to be 0, got 15 console.c:3127: Test failed: [15] Expected count to be 0, got 15
=== w10pro64 (32 bit report) ===
kernel32: console.c:2352: Test failed: [9] Expected count to be 0, got 15 console.c:2352: Test failed: [13] Expected count to be 0, got 15 console.c:2352: Test failed: [15] Expected count to be 0, got 15 console.c:2442: Test failed: [9] Expected count to be 0, got 15 console.c:2442: Test failed: [13] Expected count to be 0, got 15 console.c:2442: Test failed: [15] Expected count to be 0, got 15 console.c:2532: Test failed: [9] Expected count to be 0, got 15 console.c:2532: Test failed: [13] Expected count to be 0, got 15 console.c:2532: Test failed: [15] Expected count to be 0, got 15 console.c:2948: Test failed: [9] Expected count to be 0, got 15 console.c:2948: Test failed: [13] Expected count to be 0, got 15 console.c:2948: Test failed: [15] Expected count to be 0, got 15 console.c:3038: Test failed: [9] Expected count to be 0, got 15 console.c:3038: Test failed: [13] Expected count to be 0, got 15 console.c:3038: Test failed: [15] Expected count to be 0, got 15 console.c:3127: Test failed: [9] Expected count to be 0, got 15 console.c:3127: Test failed: [13] Expected count to be 0, got 15 console.c:3127: Test failed: [15] Expected count to be 0, got 15
eric pouech (@epo) commented about dlls/kernelbase/console.c:
WCHAR *ptr = HeapAlloc( GetProcessHeap(), 0, sizeof(WCHAR) * size ); DWORD ret;
- if (!ptr) return 0;
- ret = GetConsoleTitleW( ptr, size );
- if (ret)
- if (!ptr) {
WideCharToMultiByte( GetConsoleOutputCP(), 0, ptr, ret + 1, title, size, NULL, NULL);
ret = strlen(title);
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
I don't think you need to call SetLastError; HeapAlloc should already have set it
eric pouech (@epo) commented about dlls/kernelbase/console.c:
{
- if (!size) return 0;
struct condrv_title_params *params;
size_t max_size = sizeof(*params) + size * sizeof(WCHAR);
if (!title || !size) return 0;
if (!(params = HeapAlloc( GetProcessHeap(), 0, max_size )))
{
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
return 0;
}
if (!console_ioctl( RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle, IOCTL_CONDRV_GET_TITLE,
NULL, 0, title, (size - 1) * sizeof(WCHAR), &size ))
&size, sizeof(size), params, max_size, &size ))
you could even simplify further by not passing &size as an input parameter to the ioctl (the information is redundant with the output buffer size)
you can compute the expected size on conhost side from the expected output butffer size (see IOCTL_CONDRV_PEEK as an example)
eric pouech (@epo) commented about dlls/kernelbase/console.c:
if (!(params = HeapAlloc( GetProcessHeap(), 0, max_size )))
{
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
return 0;
}
if (!console_ioctl( RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle, IOCTL_CONDRV_GET_TITLE,
NULL, 0, title, (size - 1) * sizeof(WCHAR), &size ))
&size, sizeof(size), params, max_size, &size )) return 0;
- size /= sizeof(WCHAR);
- title[size] = 0;
- return size + 1;
- size -= sizeof(*params);
you could be paranoid by checking that size is >= sizeof(*params)