mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
3.3 KiB
81 lines
3.3 KiB
|
|
//
|
|
// WARNING: IsValidPtrIn and IsValidPtrOut are defined as macros
|
|
// here. They are also defined as ISVALIDPTRIN and ISVALIDPTROUT
|
|
// in compobj\valid.cxx, which are functions. The functions are
|
|
// used to keep backward compatibility, while the macros are
|
|
// smaller and faster to use.
|
|
//
|
|
|
|
#define IsValidPtrIn(pv,cb) (!IsBadReadPtr ((pv),(cb)))
|
|
#define IsValidPtrOut(pv,cb) (!IsBadWritePtr((pv),(cb)))
|
|
|
|
STDAPI_(BOOL) IsValidInterface( void FAR* pv );
|
|
STDAPI_(BOOL) IsValidIid( REFIID riid );
|
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
//** POINTER IN validation macros:
|
|
#define VDATEPTRIN( pv, TYPE ) if (!IsValidPtrIn( (pv), sizeof(TYPE))) \
|
|
return (FnAssert(#pv,"Invalid in ptr", _szAssertFile, __LINE__),ResultFromScode(E_INVALIDARG))
|
|
#define GEN_VDATEPTRIN( pv, TYPE, retval ) if (!IsValidPtrIn( (pv), sizeof(TYPE))) \
|
|
return (FnAssert(#pv,"Invalid in ptr", _szAssertFile, __LINE__), retval)
|
|
#define VOID_VDATEPTRIN( pv, TYPE ) if (!IsValidPtrIn( (pv), sizeof(TYPE))) {\
|
|
FnAssert(#pv,"Invalid in ptr", _szAssertFile, __LINE__); return; }
|
|
|
|
//** POINTER OUT validation macros:
|
|
#define VDATEPTROUT( pv, TYPE ) if (!IsValidPtrOut( (pv), sizeof(TYPE))) \
|
|
return (FnAssert(#pv,"Invalid out ptr", _szAssertFile, __LINE__),ResultFromScode(E_INVALIDARG))
|
|
#define GEN_VDATEPTROUT( pv, TYPE, retval ) if (!IsValidPtrOut( (pv), sizeof(TYPE))) \
|
|
return (FnAssert(#pv,"Invalid out ptr", _szAssertFile, __LINE__), retval)
|
|
|
|
//** INTERFACE validation macro:
|
|
#define GEN_VDATEIFACE( pv, retval ) if (!IsValidInterface(pv)) \
|
|
return (FnAssert(#pv,"Invalid interface", _szAssertFile, __LINE__), retval)
|
|
#define VDATEIFACE( pv ) if (!IsValidInterface(pv)) \
|
|
return (FnAssert(#pv,"Invalid interface", _szAssertFile, __LINE__),ResultFromScode(E_INVALIDARG))
|
|
#define VOID_VDATEIFACE( pv ) if (!IsValidInterface(pv)) {\
|
|
FnAssert(#pv,"Invalid interface", _szAssertFile, __LINE__); return; }
|
|
|
|
//** INTERFACE ID validation macro:
|
|
#define VDATEIID( iid ) if (!IsValidIid( iid )) \
|
|
return (FnAssert(#iid,"Invalid iid", _szAssertFile, __LINE__),ResultFromScode(E_INVALIDARG))
|
|
#define GEN_VDATEIID( iid, retval ) if (!IsValidIid( iid )) {\
|
|
FnAssert(#iid,"Invalid iid", _szAssertFile, __LINE__); return retval; }
|
|
#else
|
|
|
|
|
|
|
|
// --assertless macros for non-debug case
|
|
//** POINTER IN validation macros:
|
|
#define VDATEPTRIN( pv, TYPE ) if (!IsValidPtrIn( (pv), sizeof(TYPE))) \
|
|
return (ResultFromScode(E_INVALIDARG))
|
|
#define GEN_VDATEPTRIN( pv, TYPE, retval ) if (!IsValidPtrIn( (pv), sizeof(TYPE))) \
|
|
return (retval)
|
|
#define VOID_VDATEPTRIN( pv, TYPE ) if (!IsValidPtrIn( (pv), sizeof(TYPE))) {\
|
|
return; }
|
|
|
|
//** POINTER OUT validation macros:
|
|
#define VDATEPTROUT( pv, TYPE ) if (!IsValidPtrOut( (pv), sizeof(TYPE))) \
|
|
return (ResultFromScode(E_INVALIDARG))
|
|
|
|
#define GEN_VDATEPTROUT( pv, TYPE, retval ) if (!IsValidPtrOut( (pv), sizeof(TYPE))) \
|
|
return (retval)
|
|
|
|
//** INTERFACE validation macro:
|
|
#define VDATEIFACE( pv ) if (!IsValidInterface(pv)) \
|
|
return (ResultFromScode(E_INVALIDARG))
|
|
#define VOID_VDATEIFACE( pv ) if (!IsValidInterface(pv)) \
|
|
return;
|
|
#define GEN_VDATEIFACE( pv, retval ) if (!IsValidInterface(pv)) \
|
|
return (retval)
|
|
|
|
//** INTERFACE ID validation macro:
|
|
#define VDATEIID( iid ) if (!IsValidIid( iid )) \
|
|
return (ResultFromScode(E_INVALIDARG))
|
|
#define GEN_VDATEIID( iid, retval ) if (!IsValidIid( iid )) \
|
|
return retval;
|
|
|
|
#endif
|
|
|