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