Module: wine Branch: master Commit: f7cc8f695b954bf98bd34bb7adccc09378349a1a URL: http://source.winehq.org/git/wine.git/?a=commit;h=f7cc8f695b954bf98bd34bb7ad...
Author: Piotr Caban piotr@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(); }