Paul Vriens : kernel32: Add some simple tests for GetVersionExA.
Alexandre Julliard
julliard at winehq.org
Mon Dec 3 09:17:41 CST 2007
Module: wine
Branch: master
Commit: b3a85a3fc40bf8d36a6f5b57a095cd1faa6359d0
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b3a85a3fc40bf8d36a6f5b57a095cd1faa6359d0
Author: Paul Vriens <paul.vriens.wine at 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;
}
More information about the wine-cvs
mailing list