windows-nt/Source/XPSP1/NT/base/fs/utils/dfrg/inc/errmacro.h
2020-09-26 16:20:57 +08:00

182 lines
3.8 KiB
C

/**************************************************************************************************
FILENAME: ErrMacro.h
COPYRIGHT© 2001 Microsoft Corporation and Executive Software International, Inc.
DESCRIPTION:
Error handling macros.
**************************************************************************************************/
#include <assert.h>
// set up some aliases
#define require(exp) assert(exp)
#define ensure(exp) assert(exp)
#define invariant(exp) assert(exp)
#define LOG_ERR() LogErrForMacro(TEXT(__FILE__), TEXT(__TIMESTAMP__), __LINE__)
// handle logging to message window and or error log file
void LogErrForMacro(LPTSTR filename, LPTSTR timestamp, UINT lineno);
/****************************** EF DEFINITIONS ***************************************/
//EF's will return debugging information in debug mode, but will not compile in for release builds.
//If an error occurs, handle and return FALSE
#define EF(FunctionCall) \
{ \
if (!(FunctionCall)) { \
LOG_ERR(); \
return FALSE; \
} \
}
//If an error occurs, handle and continue on without returning
#define EH(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
} \
}
//If an error occurs, handle and return NULL
#define EN(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
return NULL; \
} \
}
//If an error occurs, handle and return VOID
#define EV(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
return; \
} \
}
//If an error occurs, handle and break (not return)
#define EB(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
break; \
} \
}
//If an error occurs, handle and continue (not return)
#define EC(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
continue; \
} \
}
//If an error occurs, handle and return E_FAIL
#define EE(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
return E_FAIL; \
} \
}
//If an error occurs, handle and return -1
#define EM(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
return -1; \
} \
}
/****************************** EF DEFINITIONS ***************************************/
//EF_ASSERTS's are the same as EF's, except they assert before returning.
//If an error occurs, handle and return FALSE
#define EF_ASSERT(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
assert(FALSE); \
return FALSE; \
} \
}
//If an error occurs, handle and continue on without returning
#define EH_ASSERT(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
assert(FALSE); \
} \
}
//If an error occurs, handle and return NULL
#define EN_ASSERT(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
assert(FALSE); \
return NULL; \
} \
}
//If an error occurs, handle and return VOID
#define EV_ASSERT(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
assert(FALSE); \
return; \
} \
}
//If an error occurs, handle and break (not return)
#define EB_ASSERT(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
assert(FALSE); \
break; \
} \
}
//If an error occurs, handle and continue (not return)
#define EC_ASSERT(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
assert(FALSE); \
continue; \
} \
}
//If an error occurs, handle and return E_FAIL
#define EE_ASSERT(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
assert(FALSE); \
return E_FAIL; \
} \
}
//If an error occurs, handle and return -1
#define EM_ASSERT(FunctionCall) \
{ \
if(!(FunctionCall)) { \
LOG_ERR(); \
assert(FALSE); \
return -1; \
} \
}