[PATCH 3/4] kernel32: VerifyConsoleIoHandle does not set last error value
Peter Oberndorfer
kumbayo84 at arcor.de
Wed Sep 22 12:54:36 CDT 2010
---
VerifyConsoleIoHandle is called in WaitForMultipleObjectsEx
and cause wrong last error value
dlls/kernel32/console.c | 2 +-
dlls/kernel32/tests/console.c | 53 +++++++++++++++++++++++++++++++++++++++++
dlls/kernel32/tests/sync.c | 4 +-
3 files changed, 56 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/console.c b/dlls/kernel32/console.c
index 064cd53..45e6089 100644
--- a/dlls/kernel32/console.c
+++ b/dlls/kernel32/console.c
@@ -441,7 +441,7 @@ BOOL WINAPI VerifyConsoleIoHandle(HANDLE handle)
SERVER_START_REQ(get_console_mode)
{
req->handle = console_handle_unmap(handle);
- ret = !wine_server_call_err( req );
+ ret = !wine_server_call( req );
}
SERVER_END_REQ;
return ret;
diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c
index 3d8ae93..1bc0d34 100644
--- a/dlls/kernel32/tests/console.c
+++ b/dlls/kernel32/tests/console.c
@@ -27,6 +27,7 @@ static BOOL (WINAPI *pGetConsoleInputExeNameA)(DWORD, LPSTR);
static DWORD (WINAPI *pGetConsoleProcessList)(LPDWORD, DWORD);
static HANDLE (WINAPI *pOpenConsoleW)(LPCWSTR,DWORD,BOOL,DWORD);
static BOOL (WINAPI *pSetConsoleInputExeNameA)(LPCSTR);
+static BOOL (WINAPI *pVerifyConsoleIoHandle)(HANDLE handle);
/* DEFAULT_ATTRIB is used for all initial filling of the console.
* all modifications are made with TEST_ATTRIB so that we could check
@@ -68,6 +69,7 @@ static void init_function_pointers(void)
KERNEL32_GET_PROC(GetConsoleProcessList);
KERNEL32_GET_PROC(OpenConsoleW);
KERNEL32_GET_PROC(SetConsoleInputExeNameA);
+ KERNEL32_GET_PROC(VerifyConsoleIoHandle);
#undef KERNEL32_GET_PROC
}
@@ -1083,6 +1085,56 @@ static void test_OpenConsoleW(void)
CloseHandle(ret);
}
+static void test_VerifyConsoleIoHandle(void)
+{
+ BOOL ret;
+ DWORD error;
+ HANDLE handle;
+
+ if (!pVerifyConsoleIoHandle)
+ {
+ win_skip("VerifyConsoleIoHandle is not available\n");
+ return;
+ }
+
+ /* invalid handle */
+ SetLastError(0xdeadbeef);
+ ret = pVerifyConsoleIoHandle((HANDLE)0xdeadbee0);
+ error = GetLastError();
+ ok(!ret, "expected VerifyConsoleIoHandle to fail\n");
+ ok(error == 0xdeadbeef, "wrong GetLastError() %d\n", error);
+
+ /* invalid handle + 1 */
+ SetLastError(0xdeadbeef);
+ ret = pVerifyConsoleIoHandle((HANDLE)0xdeadbee1);
+ error = GetLastError();
+ ok(!ret, "expected VerifyConsoleIoHandle to fail\n");
+ ok(error == 0xdeadbeef, "wrong GetLastError() %d\n", error);
+
+ /* invalid handle + 2 */
+ SetLastError(0xdeadbeef);
+ ret = pVerifyConsoleIoHandle((HANDLE)0xdeadbee2);
+ error = GetLastError();
+ ok(!ret, "expected VerifyConsoleIoHandle to fail\n");
+ ok(error == 0xdeadbeef, "wrong GetLastError() %d\n", error);
+
+ /* invalid handle + 3 */
+ SetLastError(0xdeadbeef);
+ ret = pVerifyConsoleIoHandle((HANDLE)0xdeadbee3);
+ error = GetLastError();
+ ok(!ret, "expected VerifyConsoleIoHandle to fail\n");
+ ok(error == 0xdeadbeef, "wrong GetLastError() %d\n", error);
+
+ handle = GetStdHandle(STD_INPUT_HANDLE);
+ /* valid handle */
+ SetLastError(0xdeadbeef);
+ ret = pVerifyConsoleIoHandle(handle);
+ error = GetLastError();
+ ok(ret, "expected VerifyConsoleIoHandle to succeed\n");
+ ok(error == 0xdeadbeef, "wrong GetLastError() %d\n", error);
+}
+
+
START_TEST(console)
{
HANDLE hConIn, hConOut;
@@ -1134,4 +1186,5 @@ START_TEST(console)
test_GetConsoleProcessList();
test_OpenConsoleW();
+ test_VerifyConsoleIoHandle();
}
diff --git a/dlls/kernel32/tests/sync.c b/dlls/kernel32/tests/sync.c
index 6832857..5665995 100644
--- a/dlls/kernel32/tests/sync.c
+++ b/dlls/kernel32/tests/sync.c
@@ -1001,7 +1001,7 @@ static void test_WaitForSingleObject(void)
SetLastError(0xdeadbeef);
ret = WaitForSingleObject(modify_handle(nonsignaled, 3), 0);
ok(ret == WAIT_TIMEOUT, "expected WAIT_TIMEOUT, got %d\n", ret);
- todo_wine ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %d\n", GetLastError());
+ ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %d\n", GetLastError());
/* valid handle with different values for lower 2 bits */
SetLastError(0xdeadbeef);
@@ -1022,7 +1022,7 @@ static void test_WaitForSingleObject(void)
SetLastError(0xdeadbeef);
ret = WaitForSingleObject(modify_handle(signaled, 3), 0);
ok(ret == WAIT_OBJECT_0, "expected WAIT_OBJECT_0, got %d\n", ret);
- todo_wine ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %d\n", GetLastError());
+ ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %d\n", GetLastError());
CloseHandle(signaled);
CloseHandle(nonsignaled);
--
1.7.0.4
More information about the wine-patches
mailing list