windows-nt/Source/XPSP1/NT/base/crts/crtw32/rtc/userapi.cpp
2020-09-26 16:20:57 +08:00

90 lines
2.1 KiB
C++

/***
*userapi.cpp - RTC support
*
* Copyright (c) 1998-2001, Microsoft Corporation. All rights reserved.
*
*
*Revision History:
* 07-28-98 JWM Module incorporated into CRTs (from KFrei)
* 07-30-98 JWM errnum is now type _RTC_ErrorNumber throughout.
* 10-09-98 KBF moved _RTC_IsEnabled to init.cpp (it now works for
* EXE/DLL combos)
* 05-11-99 KBF Error if RTC support define not enabled
* 05-26-99 KBF Updated for -RTCu, -RTClv cancelled
*
****/
#ifndef _RTC
#error RunTime Check support not enabled!
#endif
#include "rtcpriv.h"
static const char *_RTC_errlist[_RTC_ILLEGAL] =
{
"Stack pointer corruption",
"Cast to smaller type causing loss of data",
"Stack memory corruption",
"Local variable used before initialization"
#ifdef _RTC_ADVMEM
,
"Accessing invalid memory",
"Accessing memory from different heap blocks"
#endif
};
static _RTC_error_fn _RTC_ErrorReportFunc = 0;
int __cdecl
_RTC_NumErrors(void)
{
return _RTC_ILLEGAL;
}
const char * __cdecl
_RTC_GetErrDesc(_RTC_ErrorNumber errnum)
{
if (errnum < 0 || errnum >= _RTC_ILLEGAL)
return 0;
return _RTC_errlist[errnum];
}
int __cdecl
_RTC_SetErrorType(_RTC_ErrorNumber errnum, int type)
{
if (errnum >= 0 && errnum < _RTC_ILLEGAL)
{
int res = _RTC_ErrorLevels[errnum];
_RTC_ErrorLevels[errnum] = type;
return res;
} else
return -1;
}
_RTC_error_fn __cdecl
_RTC_SetErrorFunc(_RTC_error_fn func)
{
// We've got a global data structure: add this to the error func list
_RTC_error_fn res;
res = _RTC_ErrorReportFunc;
_RTC_ErrorReportFunc = func;
return res;
}
_RTC_error_fn
_RTC_GetErrorFunc(LPCVOID addr)
{
#ifdef _RTC_ADVMEM
MEMORY_BASIC_INFORMATION mbi;
if (!_RTC_globptr || !VirtualQuery(addr, &mbi, sizeof(mbi)))
return _RTC_ErrorReportFunc;
for (_RTC_Funcs *fn = _RTC_globptr->callbacks; fn; fn = fn->next)
if (fn->allocationBase == mbi.AllocationBase)
return fn->err;
#endif
return _RTC_ErrorReportFunc;
}