msvcr90: Added implementation of __sys_nerr and __sys_errlist.

This commit is contained in:
Piotr Caban 2010-03-24 22:40:40 +01:00 committed by Alexandre Julliard
parent 254eab3827
commit f7cc8f695b
4 changed files with 50 additions and 4 deletions

View file

@ -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

View file

@ -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");
}

View file

@ -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

View file

@ -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();
}