Reactos
at master 52 lines 1.6 kB view raw
1/* 2 * PROJECT: ReactOS CRT library 3 * LICENSE: MIT (https://spdx.org/licenses/MIT) 4 * PURPOSE: _invalid_parameter implementation 5 * COPYRIGHT: Timo Kreuzer <timo.kreuzer@reactos.org> 6 */ 7 8#include <precomp.h> 9 10#ifdef _MSVCRTEX_ 11#undef TRACE 12#undef ERR 13#define TRACE(...) 14#define ERR(...) 15#endif 16 17static _invalid_parameter_handler invalid_parameter_handler = NULL; 18 19/****************************************************************************** 20 * _invalid_parameter (MSVCRT.@) 21 */ 22void __cdecl _invalid_parameter(const wchar_t *expr, const wchar_t *func, 23 const wchar_t *file, unsigned int line, uintptr_t arg) 24{ 25 if (invalid_parameter_handler) invalid_parameter_handler( expr, func, file, line, arg ); 26 else 27 { 28 ERR( "%s:%u %s: %s %lx\n", debugstr_w(file), line, debugstr_w(func), debugstr_w(expr), arg ); 29#if _MSVCR_VER > 0 // FIXME: possible improvement: use a global variable in the DLL 30 RaiseException( STATUS_INVALID_CRUNTIME_PARAMETER, EXCEPTION_NONCONTINUABLE, 0, NULL ); 31#endif 32 } 33} 34 35/* _get_invalid_parameter_handler - not exported in native msvcrt, added in msvcr80 */ 36_invalid_parameter_handler CDECL _get_invalid_parameter_handler(void) 37{ 38 TRACE("\n"); 39 return invalid_parameter_handler; 40} 41 42/* _set_invalid_parameter_handler - not exproted in native msvcrt, added in msvcr80 */ 43_invalid_parameter_handler CDECL _set_invalid_parameter_handler( 44 _invalid_parameter_handler handler) 45{ 46 _invalid_parameter_handler old = invalid_parameter_handler; 47 48 TRACE("(%p)\n", handler); 49 50 invalid_parameter_handler = handler; 51 return old; 52}