Module: wine Branch: master Commit: b3a85a3fc40bf8d36a6f5b57a095cd1faa6359d0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b3a85a3fc40bf8d36a6f5b57a0...
Author: Paul Vriens paul.vriens.wine@gmail.com Date: Fri Nov 30 17:52:44 2007 +0100
kernel32: Add some simple tests for GetVersionExA.
---
dlls/kernel32/tests/version.c | 52 +++++++++++++++++++++++++++++++++++++++++ dlls/kernel32/version.c | 1 + 2 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/dlls/kernel32/tests/version.c b/dlls/kernel32/tests/version.c index 84d081b..ac4d814 100644 --- a/dlls/kernel32/tests/version.c +++ b/dlls/kernel32/tests/version.c @@ -43,12 +43,64 @@ static void init_function_pointers(void) KERNEL32_GET_PROC(VerSetConditionMask); }
+static void test_GetVersionEx(void) +{ + OSVERSIONINFOA infoA; + OSVERSIONINFOEXA infoExA; + BOOL ret; + + if (0) + { + /* Silently crashes on XP */ + ret = GetVersionExA(NULL); + } + + SetLastError(0xdeadbeef); + memset(&infoA,0,sizeof infoA); + ret = GetVersionExA(&infoA); + ok(!ret, "Expected GetVersionExA to fail\n"); + ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, + "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + infoA.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA) / 2; + ret = GetVersionExA(&infoA); + ok(!ret, "Expected GetVersionExA to fail\n"); + ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, + "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + infoA.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA) * 2; + ret = GetVersionExA(&infoA); + ok(!ret, "Expected GetVersionExA to fail\n"); + ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, + "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + infoA.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); + ret = GetVersionExA(&infoA); + ok(ret, "Expected GetVersionExA to succeed\n"); + ok(GetLastError() == 0xdeadbeef, + "Expected 0xdeadbeef, got %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + infoExA.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + ret = GetVersionExA((OSVERSIONINFOA *)&infoExA); + ok(ret, "Expected GetVersionExA to succeed\n"); + ok(GetLastError() == 0xdeadbeef, + "Expected 0xdeadbeef, got %d\n", GetLastError()); + +} + START_TEST(version) { OSVERSIONINFOEX info = { sizeof(info) }; BOOL ret;
init_function_pointers(); + + test_GetVersionEx(); + if(!pVerifyVersionInfoA || !pVerSetConditionMask) { skip("Needed functions not available\n"); diff --git a/dlls/kernel32/version.c b/dlls/kernel32/version.c index 3160983..48f9bb2 100644 --- a/dlls/kernel32/version.c +++ b/dlls/kernel32/version.c @@ -154,6 +154,7 @@ BOOL WINAPI GetVersionExA(OSVERSIONINFOA *v) { WARN("wrong OSVERSIONINFO size from app (got: %d)\n", v->dwOSVersionInfoSize ); + SetLastError(ERROR_INSUFFICIENT_BUFFER); return FALSE; }