Reactos
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}