mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 00:55:48 +00:00
[UCRT] Properly implement parameter checking macros
Partly copied from corecrt_internal_strtox.h, partly imported from dotnet runtime (https://github.com/dotnet/runtime/blob/release/8.0/src/coreclr/pal/src/safecrt/internal.h)
This commit is contained in:
parent
a857b28008
commit
c1145f0c89
1 changed files with 71 additions and 16 deletions
|
@ -75,29 +75,84 @@ extern char __ImageBase;
|
||||||
#define _CRT_SECURITYCRITICAL_ATTRIBUTE
|
#define _CRT_SECURITYCRITICAL_ATTRIBUTE
|
||||||
#define _CRT_SECURITYSAFECRITICAL_ATTRIBUTE
|
#define _CRT_SECURITYSAFECRITICAL_ATTRIBUTE
|
||||||
|
|
||||||
#define _VALIDATE_RETURN(expr, errorcode, retexpr) \
|
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
if (!(expr)) return (retexpr);
|
//
|
||||||
|
// Parameter validation macros
|
||||||
|
// Partly duplicated in corecrt_internal_strtox.h
|
||||||
|
//
|
||||||
|
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
|
||||||
#define _VALIDATE_RETURN_VOID(expr, errorcode) \
|
#ifdef _DEBUG
|
||||||
if (!(expr)) return;
|
#define _INVALID_PARAMETER(expr) _invalid_parameter(expr, __FUNCTIONW__, __FILEW__, __LINE__, 0)
|
||||||
|
#else
|
||||||
|
#define _INVALID_PARAMETER(expr) _invalid_parameter_noinfo()
|
||||||
|
#endif
|
||||||
|
|
||||||
#define _VALIDATE_RETURN_NOERRNO(expr, retexpr) \
|
#define _VALIDATE_RETURN(expr, errorcode, retexpr) \
|
||||||
if (!(expr)) return (retexpr);
|
{ \
|
||||||
|
int _Expr_val = !!(expr); \
|
||||||
|
_ASSERT_EXPR((_Expr_val), _CRT_WIDE(#expr)); \
|
||||||
|
if (!(_Expr_val)) \
|
||||||
|
{ \
|
||||||
|
*_errno() = (errorcode); \
|
||||||
|
_INVALID_PARAMETER(_CRT_WIDE(#expr)); \
|
||||||
|
return (retexpr); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
#define _VALIDATE_RETURN_ERRCODE(expr, errorcode) \
|
#define _VALIDATE_RETURN_VOID(expr, errorcode) \
|
||||||
if (!(expr)) return (errorcode);
|
{ \
|
||||||
|
int _Expr_val = !!(expr); \
|
||||||
|
_ASSERT_EXPR((_Expr_val), _CRT_WIDE(#expr)); \
|
||||||
|
if (!(_Expr_val)) \
|
||||||
|
{ \
|
||||||
|
*_errno() = (errorcode); \
|
||||||
|
_INVALID_PARAMETER(_CRT_WIDE(#expr)); \
|
||||||
|
return; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
#define _VALIDATE_CLEAR_OSSERR_RETURN(expr, errorcode, retexpr) \
|
#define _VALIDATE_RETURN_NOERRNO(expr, retexpr) \
|
||||||
if (!(expr)) return (retexpr);
|
{ \
|
||||||
|
int _Expr_val = !!(expr); \
|
||||||
|
_ASSERT_EXPR((_Expr_val), _CRT_WIDE(#expr)); \
|
||||||
|
if (!(_Expr_val)) \
|
||||||
|
{ \
|
||||||
|
_INVALID_PARAMETER(_CRT_WIDE(#expr)); \
|
||||||
|
return (retexpr); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
#define _VALIDATE_CLEAR_OSSERR_RETURN_ERRCODE(expr, errorcode) \
|
#define _VALIDATE_RETURN_ERRCODE(expr, errorcode) \
|
||||||
if (!(expr)) return (errorcode);
|
_VALIDATE_RETURN(expr, errorcode, errorcode)
|
||||||
|
|
||||||
#define _VALIDATE_RETURN_NOEXC(expr, errorcode, retexpr) \
|
#define _VALIDATE_CLEAR_OSSERR_RETURN(expr, errorcode, retexpr) \
|
||||||
if (!(expr)) return (retexpr);
|
{ \
|
||||||
|
int _Expr_val = !!(expr); \
|
||||||
|
_ASSERT_EXPR((_Expr_val), _CRT_WIDE(#expr)); \
|
||||||
|
if (!(_Expr_val)) \
|
||||||
|
{ \
|
||||||
|
*__doserrno() = 0L; \
|
||||||
|
*_errno() = errorcode; \
|
||||||
|
_INVALID_PARAMETER(_CRT_WIDE(#expr) ); \
|
||||||
|
return (retexpr); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
#define _VALIDATE_RETURN_ERRCODE_NOEXC(expr, errorcode) \
|
#define _VALIDATE_CLEAR_OSSERR_RETURN_ERRCODE(expr, errorcode) \
|
||||||
if (!(expr)) return (errorcode);
|
_VALIDATE_CLEAR_OSSERR_RETURN(expr, errorcode, errorcode)
|
||||||
|
|
||||||
|
#define _VALIDATE_RETURN_NOEXC(expr, errorcode, retexpr) \
|
||||||
|
{ \
|
||||||
|
if (!(expr)) \
|
||||||
|
{ \
|
||||||
|
*_errno() = errorcode; \
|
||||||
|
return (retexpr); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _VALIDATE_RETURN_ERRCODE_NOEXC(expr, errorcode) \
|
||||||
|
_VALIDATE_RETURN_NOEXC(expr, errorcode, errorcode)
|
||||||
|
|
||||||
#define _malloc_crt malloc
|
#define _malloc_crt malloc
|
||||||
#define _free_crt free
|
#define _free_crt free
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue