diff --git a/dlls/kernel32/console.c b/dlls/kernel32/console.c index a5a66076c95..f682ca1452f 100644 --- a/dlls/kernel32/console.c +++ b/dlls/kernel32/console.c @@ -307,7 +307,6 @@ HANDLE WINAPI OpenConsoleW(LPCWSTR name, DWORD access, BOOL inherit, DWORD creat req->access = access; req->attributes = inherit ? OBJ_INHERIT : 0; req->share = FILE_SHARE_READ | FILE_SHARE_WRITE; - SetLastError(0); wine_server_call_err( req ); ret = wine_server_ptr_handle( reply->handle ); } diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c index 43017c1bc84..3d8ae9387d8 100644 --- a/dlls/kernel32/tests/console.c +++ b/dlls/kernel32/tests/console.c @@ -1062,6 +1062,25 @@ static void test_OpenConsoleW(void) "Expected GetLastError() to return %u for index %d, got %u\n", invalid_table[index].gle, index, GetLastError()); } + + /* OpenConsoleW should not touch the last error on success. */ + SetLastError(0xdeadbeef); + ret = pOpenConsoleW(coninW, GENERIC_READ | GENERIC_WRITE, FALSE, OPEN_EXISTING); + ok(ret != INVALID_HANDLE_VALUE, + "Expected OpenConsoleW to return a valid handle\n"); + ok(GetLastError() == 0xdeadbeef, + "Expected the last error to be untouched, got %u\n", GetLastError()); + if (ret != INVALID_HANDLE_VALUE) + CloseHandle(ret); + + SetLastError(0xdeadbeef); + ret = pOpenConsoleW(conoutW, GENERIC_READ | GENERIC_WRITE, FALSE, OPEN_EXISTING); + ok(ret != INVALID_HANDLE_VALUE, + "Expected OpenConsoleW to return a valid handle\n"); + ok(GetLastError() == 0xdeadbeef, + "Expected the last error to be untouched, got %u\n", GetLastError()); + if (ret != INVALID_HANDLE_VALUE) + CloseHandle(ret); } START_TEST(console)