Piotr Caban : msvcr90: Added implementation of __sys_nerr and __sys_errlist .

Alexandre Julliard julliard at winehq.org
Thu Mar 25 11:44:47 CDT 2010


Module: wine
Branch: master
Commit: f7cc8f695b954bf98bd34bb7adccc09378349a1a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f7cc8f695b954bf98bd34bb7adccc09378349a1a

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed Mar 24 22:40:40 2010 +0100

msvcr90: Added implementation of __sys_nerr and __sys_errlist.

---

 dlls/msvcr80/msvcr80.spec    |    4 ++--
 dlls/msvcr90/msvcr90.c       |   16 ++++++++++++++++
 dlls/msvcr90/msvcr90.spec    |    4 ++--
 dlls/msvcr90/tests/msvcr90.c |   30 ++++++++++++++++++++++++++++++
 4 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index 66b56b0..7512d91 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -239,8 +239,8 @@
 @ cdecl __setusermatherr(ptr) msvcrt.__setusermatherr
 @ stub __strncnt
 @ stub __swprintf_l
-@ stub __sys_errlist
-@ stub __sys_nerr
+@ cdecl __sys_errlist() msvcr90.__sys_errlist
+@ cdecl __sys_nerr() msvcr90.__sys_nerr
 @ cdecl __threadhandle() msvcrt.__threadhandle
 @ cdecl __threadid() msvcrt.__threadid
 @ stub __timezone
diff --git a/dlls/msvcr90/msvcr90.c b/dlls/msvcr90/msvcr90.c
index 4fa65b5..a1994d8 100644
--- a/dlls/msvcr90/msvcr90.c
+++ b/dlls/msvcr90/msvcr90.c
@@ -123,3 +123,19 @@ int CDECL _initterm_e(_INITTERM_E_FN *table, _INITTERM_E_FN *end)
     }
     return res;
 }
+
+/*********************************************************************
+ * __sys_nerr (MSVCR90.@)
+ */
+int* CDECL __sys_nerr(void)
+{
+        return (int*)GetProcAddress(GetModuleHandleA("msvcrt.dll"), "_sys_nerr");
+}
+
+/*********************************************************************
+ *  __sys_errlist (MSVCR90.@)
+ */
+char** CDECL __sys_errlist(void)
+{
+    return (char**)GetProcAddress(GetModuleHandleA("msvcrt.dll"), "_sys_errlist");
+}
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 0255b96..74b1614 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -231,8 +231,8 @@
 @ cdecl __setusermatherr(ptr) msvcrt.__setusermatherr
 @ stub __strncnt
 @ stub __swprintf_l
-@ stub __sys_errlist
-@ stub __sys_nerr
+@ cdecl __sys_errlist()
+@ cdecl __sys_nerr()
 @ cdecl __threadhandle() msvcrt.__threadhandle
 @ cdecl __threadid() msvcrt.__threadid
 @ stub __timezone
diff --git a/dlls/msvcr90/tests/msvcr90.c b/dlls/msvcr90/tests/msvcr90.c
index 03d75ee..5fe00b2 100644
--- a/dlls/msvcr90/tests/msvcr90.c
+++ b/dlls/msvcr90/tests/msvcr90.c
@@ -31,6 +31,10 @@ static int (__cdecl *p_initterm_e)(_INITTERM_E_FN *table, _INITTERM_E_FN *end);
 static void* (__cdecl *p_encode_pointer)(void *);
 static void* (__cdecl *p_decode_pointer)(void *);
 static void* (__cdecl *p_encoded_null)(void);
+static int *p_sys_nerr;
+static int* (__cdecl *p__sys_nerr)(void);
+static char **p_sys_errlist;
+static char** (__cdecl *p__sys_errlist)(void);
 
 int cb_called[4];
 
@@ -168,6 +172,27 @@ static void test__encode_pointer(void)
     ok(p_encoded_null() == p_encode_pointer(NULL), "Error encoding null\n");
 }
 
+static void test_error_messages(void)
+{
+    int *size, size_copy;
+
+    if(!p_sys_nerr || !p__sys_nerr || !p_sys_errlist || !p__sys_errlist) {
+        win_skip("Skipping test_error_messages tests\n");
+        return;
+    }
+
+    size = p__sys_nerr();
+    size_copy = *size;
+    ok(*p_sys_nerr == *size, "_sys_nerr = %u, size = %u\n", *p_sys_nerr, *size);
+
+    *size = 20;
+    ok(*p_sys_nerr == *size, "_sys_nerr = %u, size = %u\n", *p_sys_nerr, *size);
+
+    *size = size_copy;
+
+    ok(*p_sys_errlist == *(p__sys_errlist()), "p_sys_errlist != p__sys_errlist()\n");
+}
+
 /* ########## */
 
 START_TEST(msvcr90)
@@ -190,7 +215,12 @@ START_TEST(msvcr90)
     p_encode_pointer = (void *) GetProcAddress(hcrt, "_encode_pointer");
     p_decode_pointer = (void *) GetProcAddress(hcrt, "_decode_pointer");
     p_encoded_null = (void *) GetProcAddress(hcrt, "_encoded_null");
+    p_sys_nerr = (void *) GetProcAddress(hcrt, "_sys_nerr");
+    p__sys_nerr = (void *) GetProcAddress(hcrt, "__sys_nerr");
+    p_sys_errlist = (void *) GetProcAddress(hcrt, "_sys_errlist");
+    p__sys_errlist = (void *) GetProcAddress(hcrt, "__sys_errlist");
 
     test__initterm_e();
     test__encode_pointer();
+    test_error_messages();
 }




More information about the wine-cvs mailing list