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