msvcr90: Added _get/set_invalid_parameter_handler implementation.
This commit is contained in:
parent
d91b71e0df
commit
254eab3827
|
@ -470,7 +470,7 @@
|
|||
@ stub _get_errno
|
||||
@ stub _get_fmode
|
||||
@ stub _get_heap_handle
|
||||
@ stub _get_invalid_parameter_handler
|
||||
@ cdecl _get_invalid_parameter_handler() msvcr90._get_invalid_parameter_handler
|
||||
@ cdecl _get_osfhandle(long) msvcrt._get_osfhandle
|
||||
@ stub _get_osplatform
|
||||
@ stub _get_osver
|
||||
|
@ -533,7 +533,7 @@
|
|||
@ stub _inp
|
||||
@ stub _inpd
|
||||
@ stub _inpw
|
||||
@ stub _invalid_parameter
|
||||
@ extern _invalid_parameter msvcrt._invalid_parameter
|
||||
@ stub _invalid_parameter_noinfo
|
||||
@ stub _invoke_watson
|
||||
@ extern _iob msvcrt._iob
|
||||
|
@ -873,7 +873,7 @@
|
|||
@ stub _set_errno
|
||||
@ cdecl _set_error_mode(long) msvcrt._set_error_mode
|
||||
@ stub _set_fmode
|
||||
@ stub _set_invalid_parameter_handler
|
||||
@ cdecl _set_invalid_parameter_handler(ptr) msvcr90._set_invalid_parameter_handler
|
||||
@ stub _set_malloc_crt_max_wait
|
||||
@ stub _set_output_format
|
||||
@ stub _set_printf_count_output
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
WINE_DEFAULT_DEBUG_CHANNEL(msvcr90);
|
||||
|
||||
typedef int (CDECL *_INITTERM_E_FN)(void);
|
||||
typedef void (__cdecl *_invalid_parameter_handler)(const wchar_t*, const wchar_t*, const wchar_t*, unsigned, unsigned*);
|
||||
|
||||
/*********************************************************************
|
||||
* DllMain (MSVCR90.@)
|
||||
|
@ -76,6 +77,30 @@ void * CDECL _encoded_null(void)
|
|||
return MSVCR90_encode_pointer(NULL);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _get_invalid_parameter_handler (MSVCR90.@)
|
||||
*/
|
||||
_invalid_parameter_handler CDECL _get_invalid_parameter_handler(void)
|
||||
{
|
||||
TRACE("\n");
|
||||
return *((_invalid_parameter_handler*)GetProcAddress(GetModuleHandleA("msvcrt.dll"), "_invalid_parameter"));
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _set_invalid_parameter_handler (MSVCR90.@)
|
||||
*/
|
||||
_invalid_parameter_handler CDECL _set_invalid_parameter_handler(_invalid_parameter_handler handler)
|
||||
{
|
||||
_invalid_parameter_handler *ptr = (_invalid_parameter_handler*)GetProcAddress(
|
||||
GetModuleHandleA("msvcrt.dll"), "_invalid_parameter");
|
||||
_invalid_parameter_handler old = *ptr;
|
||||
|
||||
TRACE("(%p)\n", handler);
|
||||
|
||||
*ptr = handler;
|
||||
return old;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _initterm_e (MSVCR90.@)
|
||||
*
|
||||
|
|
|
@ -462,7 +462,7 @@
|
|||
@ stub _get_errno
|
||||
@ stub _get_fmode
|
||||
@ stub _get_heap_handle
|
||||
@ stub _get_invalid_parameter_handler
|
||||
@ cdecl _get_invalid_parameter_handler()
|
||||
@ cdecl _get_osfhandle(long) msvcrt._get_osfhandle
|
||||
@ stub _get_output_format
|
||||
@ stub _get_pgmptr
|
||||
|
@ -521,7 +521,7 @@
|
|||
@ stub _inp
|
||||
@ stub _inpd
|
||||
@ stub _inpw
|
||||
@ stub _invalid_parameter
|
||||
@ extern _invalid_parameter msvcrt._invalid_parameter
|
||||
@ stub _invalid_parameter_noinfo
|
||||
@ stub _invoke_watson
|
||||
@ extern _iob msvcrt._iob
|
||||
|
@ -859,7 +859,7 @@
|
|||
@ stub _set_errno
|
||||
@ cdecl _set_error_mode(long) msvcrt._set_error_mode
|
||||
@ stub _set_fmode
|
||||
@ stub _set_invalid_parameter_handler
|
||||
@ cdecl _set_invalid_parameter_handler(ptr)
|
||||
@ stub _set_malloc_crt_max_wait
|
||||
@ stub _set_output_format
|
||||
@ stub _set_printf_count_output
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <errno.h>
|
||||
#include "wine/test.h"
|
||||
|
||||
static _invalid_parameter_handler (__cdecl *p_set_invalid_parameter_handler)(_invalid_parameter_handler);
|
||||
typedef int (__cdecl *_INITTERM_E_FN)(void);
|
||||
static int (__cdecl *p_initterm_e)(_INITTERM_E_FN *table, _INITTERM_E_FN *end);
|
||||
static void* (__cdecl *p_encode_pointer)(void *);
|
||||
|
@ -35,6 +36,17 @@ int cb_called[4];
|
|||
|
||||
/* ########## */
|
||||
|
||||
void __cdecl test_invalid_parameter_handler(const wchar_t *expression,
|
||||
const wchar_t *function, const wchar_t *file,
|
||||
unsigned line, unsigned *res)
|
||||
{
|
||||
ok(expression == NULL, "expression is not NULL\n");
|
||||
ok(function == NULL, "function is not NULL\n");
|
||||
ok(file == NULL, "file is not NULL\n");
|
||||
ok(line == 0, "line = %u\n", line);
|
||||
ok(res == NULL, "res = %p\n", res);
|
||||
}
|
||||
|
||||
static int initterm_cb0(void)
|
||||
{
|
||||
cb_called[0]++;
|
||||
|
@ -169,6 +181,11 @@ START_TEST(msvcr90)
|
|||
return;
|
||||
}
|
||||
|
||||
p_set_invalid_parameter_handler = (void *) GetProcAddress(hcrt, "_set_invalid_parameter_handler");
|
||||
if(p_set_invalid_parameter_handler)
|
||||
ok(p_set_invalid_parameter_handler(test_invalid_parameter_handler) == NULL,
|
||||
"Invalid parameter handler was already set\n");
|
||||
|
||||
p_initterm_e = (void *) GetProcAddress(hcrt, "_initterm_e");
|
||||
p_encode_pointer = (void *) GetProcAddress(hcrt, "_encode_pointer");
|
||||
p_decode_pointer = (void *) GetProcAddress(hcrt, "_decode_pointer");
|
||||
|
|
|
@ -117,6 +117,7 @@ char *MSVCRT__sys_errlist[] =
|
|||
};
|
||||
|
||||
unsigned int MSVCRT__sys_nerr = sizeof(MSVCRT__sys_errlist)/sizeof(MSVCRT__sys_errlist[0]) - 1;
|
||||
MSVCRT_invalid_parameter_handler MSVCRT_invalid_parameter = NULL;
|
||||
|
||||
/* INTERNAL: Set the crt and dos errno's from the OS error given. */
|
||||
void msvcrt_set_errno(int err)
|
||||
|
|
|
@ -75,6 +75,7 @@ typedef void (*__cdecl MSVCRT__se_translator_function)(unsigned int code, struct
|
|||
typedef void (*__cdecl MSVCRT__beginthread_start_routine_t)(void *);
|
||||
typedef unsigned int (__stdcall *MSVCRT__beginthreadex_start_routine_t)(void *);
|
||||
typedef int (*__cdecl MSVCRT__onexit_t)(void);
|
||||
typedef void (__cdecl *MSVCRT_invalid_parameter_handler)(const wchar_t*, const wchar_t*, const wchar_t*, unsigned, unsigned*);
|
||||
|
||||
typedef struct {long double x;} MSVCRT__LDOUBLE;
|
||||
|
||||
|
@ -124,6 +125,7 @@ extern LCID MSVCRT_current_lc_all_lcid;
|
|||
extern WORD MSVCRT__ctype [257];
|
||||
extern WORD MSVCRT_current_ctype[257];
|
||||
extern WORD* MSVCRT__pctype;
|
||||
extern MSVCRT_invalid_parameter_handler MSVCRT_invalid_parameter;
|
||||
|
||||
void msvcrt_set_errno(int);
|
||||
|
||||
|
|
|
@ -479,7 +479,7 @@
|
|||
@ stub _inp #(long) -i386
|
||||
@ stub _inpd #(long) -i386
|
||||
@ stub _inpw #(long) -i386
|
||||
# stub _invalid_parameter
|
||||
@ extern _invalid_parameter MSVCRT_invalid_parameter
|
||||
@ extern _iob MSVCRT__iob
|
||||
# stub _isalnum_l
|
||||
# stub _isalpha_l
|
||||
|
|
|
@ -53,6 +53,7 @@ static int (__cdecl *p_mbsnbcpy_s)(unsigned char * dst, size_t size, const unsig
|
|||
static int (__cdecl *p_wcscpy_s)(wchar_t *wcDest, size_t size, const wchar_t *wcSrc);
|
||||
static int (__cdecl *p_wcsupr_s)(wchar_t *str, size_t size);
|
||||
static size_t (__cdecl *p_strnlen)(const char *, size_t);
|
||||
static _invalid_parameter_handler *p_invalid_parameter;
|
||||
static int *p__mb_cur_max;
|
||||
static unsigned char *p_mbctype;
|
||||
|
||||
|
@ -61,6 +62,17 @@ static unsigned char *p_mbctype;
|
|||
|
||||
HMODULE hMsvcrt;
|
||||
|
||||
void __cdecl test_invalid_parameter_handler(const wchar_t *expression,
|
||||
const wchar_t *function, const wchar_t *file,
|
||||
unsigned line, unsigned *res)
|
||||
{
|
||||
ok(expression == NULL, "expression is not NULL\n");
|
||||
ok(function == NULL, "function is not NULL\n");
|
||||
ok(file == NULL, "file is not NULL\n");
|
||||
ok(line == 0, "line = %u\n", line);
|
||||
ok(res == NULL, "res = %p\n", res);
|
||||
}
|
||||
|
||||
static void test_swab( void ) {
|
||||
char original[] = "BADCFEHGJILKNMPORQTSVUXWZY@#";
|
||||
char expected1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ@#";
|
||||
|
@ -946,6 +958,9 @@ START_TEST(string)
|
|||
SET(pmemcmp,"memcmp");
|
||||
SET(p_mbctype,"_mbctype");
|
||||
SET(p__mb_cur_max,"__mb_cur_max");
|
||||
p_invalid_parameter = (void *)GetProcAddress( hMsvcrt,"_invalid_parameter");
|
||||
if(p_invalid_parameter)
|
||||
*p_invalid_parameter = test_invalid_parameter_handler;
|
||||
pstrcpy_s = (void *)GetProcAddress( hMsvcrt,"strcpy_s" );
|
||||
pstrcat_s = (void *)GetProcAddress( hMsvcrt,"strcat_s" );
|
||||
p_mbsnbcpy_s = (void *)GetProcAddress( hMsvcrt,"_mbsnbcpy_s" );
|
||||
|
|
|
@ -261,4 +261,8 @@ static inline ldiv_t __wine_msvcrt_ldiv(__msvcrt_long num, __msvcrt_long denom)
|
|||
|
||||
#include <poppack.h>
|
||||
|
||||
typedef void (__cdecl *_invalid_parameter_handler)(const wchar_t*, const wchar_t*, const wchar_t*, unsigned, unsigned*);
|
||||
_invalid_parameter_handler __cdecl _set_invalid_parameter_handler(_invalid_parameter_handler);
|
||||
_invalid_parameter_handler __cdecl _get_invalid_parameter_handler(void);
|
||||
|
||||
#endif /* __WINE_STDLIB_H */
|
||||
|
|
Loading…
Reference in New Issue