blob: 578b6ce16a884e23906cf7d3e5fbf6ccac573c07 [file] [log] [blame]
#ifndef SNMP_ASSERT_H
#define SNMP_ASSERT_H
#ifdef NETSNMP_USE_ASSERT
# include <assert.h>
#else
# include <net-snmp/library/snmp_logging.h>
#endif
/*
* MACROs don't need extern "C"
*/
/*
* define __STRING for systems (*cough* sun *cough*) that don't have it
*/
#ifndef __STRING
# if defined(__STDC__) || defined(_MSC_VER)
# define __STRING(x) #x
# else
# define __STRING(x) "x"
# endif /* __STDC__ */
#endif /* __STRING */
#define netsnmp_static_assert(x) \
do { switch(0) { case (x): case 0: ; } } while(0)
/*
* always use assert if requested
*/
#ifdef NETSNMP_USE_ASSERT
/* void netsnmp_assert( int );*/
# define netsnmp_assert(x) assert( x )
#else
/*
* if asserts weren't requested, just log, unless NETSNMP_NO_DEBUGGING specified
*/
# ifndef NETSNMP_NO_DEBUGGING
# ifdef HAVE_CPP_UNDERBAR_FUNCTION_DEFINED
# define netsnmp_assert(x) do { \
if ( x ) \
; \
else \
snmp_log(LOG_ERR,"netsnmp_assert %s failed %s:%d %s()\n", \
__STRING(x),__FILE__,__LINE__,__FUNCTION__); \
}while(0)
# else
# define netsnmp_assert(x) do { \
if( x )\
; \
else \
snmp_log(LOG_ERR,"netsnmp_assert %s failed %s:%d\n", \
__STRING(x),__FILE__,__LINE__); \
}while(0)
# endif
# else /* NO DEBUGGING */
# define netsnmp_assert(x)
# endif /* NO DEBUGGING */
#endif /* not NETSNMP_USE_ASSERT */
#endif /* SNMP_ASSERT_H */