xref: /freebsd/contrib/sendmail/include/sm/assert.h (revision e2c0e292e8a7ca00ba99bcfccc9e637f45c3e8b1)
140266059SGregory Neil Shapiro /*
25dd76dd0SGregory Neil Shapiro  * Copyright (c) 2000-2001 Proofpoint, Inc. and its suppliers.
340266059SGregory Neil Shapiro  *	All rights reserved.
440266059SGregory Neil Shapiro  *
540266059SGregory Neil Shapiro  * By using this file, you agree to the terms and conditions set
640266059SGregory Neil Shapiro  * forth in the LICENSE file which can be found at the top level of
740266059SGregory Neil Shapiro  * the sendmail distribution.
840266059SGregory Neil Shapiro  *
94313cc83SGregory Neil Shapiro  *	$Id: assert.h,v 1.11 2013-11-22 20:51:31 ca Exp $
1040266059SGregory Neil Shapiro  */
1140266059SGregory Neil Shapiro 
1240266059SGregory Neil Shapiro /*
1340266059SGregory Neil Shapiro **  libsm abnormal program termination and assertion checking
1440266059SGregory Neil Shapiro **  See libsm/assert.html for documentation.
1540266059SGregory Neil Shapiro */
1640266059SGregory Neil Shapiro 
1740266059SGregory Neil Shapiro #ifndef SM_ASSERT_H
1840266059SGregory Neil Shapiro # define SM_ASSERT_H
1940266059SGregory Neil Shapiro 
2040266059SGregory Neil Shapiro # include <sm/gen.h>
2140266059SGregory Neil Shapiro # include <sm/debug.h>
2240266059SGregory Neil Shapiro 
2340266059SGregory Neil Shapiro /*
2440266059SGregory Neil Shapiro **  abnormal program termination
2540266059SGregory Neil Shapiro */
2640266059SGregory Neil Shapiro 
2740266059SGregory Neil Shapiro typedef void (*SM_ABORT_HANDLER_T) __P((const char *, int, const char *));
2840266059SGregory Neil Shapiro 
2940266059SGregory Neil Shapiro extern SM_DEAD(void
3040266059SGregory Neil Shapiro sm_abort_at __P((
3140266059SGregory Neil Shapiro 	const char *,
3240266059SGregory Neil Shapiro 	int,
3340266059SGregory Neil Shapiro 	const char *)));
3440266059SGregory Neil Shapiro 
3540266059SGregory Neil Shapiro extern void
3640266059SGregory Neil Shapiro sm_abort_sethandler __P((
3740266059SGregory Neil Shapiro 	SM_ABORT_HANDLER_T));
3840266059SGregory Neil Shapiro 
3940266059SGregory Neil Shapiro extern SM_DEAD(void PRINTFLIKE(1, 2)
4040266059SGregory Neil Shapiro sm_abort __P((
4140266059SGregory Neil Shapiro 	char *,
4240266059SGregory Neil Shapiro 	...)));
4340266059SGregory Neil Shapiro 
4440266059SGregory Neil Shapiro /*
4540266059SGregory Neil Shapiro **  assertion checking
4640266059SGregory Neil Shapiro */
4740266059SGregory Neil Shapiro 
4840266059SGregory Neil Shapiro # ifndef SM_CHECK_ALL
4940266059SGregory Neil Shapiro #  define SM_CHECK_ALL		1
50*5b0945b5SGregory Neil Shapiro # endif
5140266059SGregory Neil Shapiro 
5240266059SGregory Neil Shapiro # ifndef SM_CHECK_REQUIRE
5340266059SGregory Neil Shapiro #  define SM_CHECK_REQUIRE	SM_CHECK_ALL
54*5b0945b5SGregory Neil Shapiro # endif
5540266059SGregory Neil Shapiro 
5640266059SGregory Neil Shapiro # ifndef SM_CHECK_ENSURE
5740266059SGregory Neil Shapiro #  define SM_CHECK_ENSURE	SM_CHECK_ALL
58*5b0945b5SGregory Neil Shapiro # endif
5940266059SGregory Neil Shapiro 
6040266059SGregory Neil Shapiro # ifndef SM_CHECK_ASSERT
6140266059SGregory Neil Shapiro #  define SM_CHECK_ASSERT	SM_CHECK_ALL
62*5b0945b5SGregory Neil Shapiro # endif
6340266059SGregory Neil Shapiro 
6440266059SGregory Neil Shapiro # if SM_CHECK_REQUIRE
6540266059SGregory Neil Shapiro #  if defined(__STDC__) || defined(__cplusplus)
6640266059SGregory Neil Shapiro #   define SM_REQUIRE(cond) \
6740266059SGregory Neil Shapiro 	((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \
6840266059SGregory Neil Shapiro 	"SM_REQUIRE(" #cond ") failed"), 0)))
6940266059SGregory Neil Shapiro #  else /* defined(__STDC__) || defined(__cplusplus) */
7040266059SGregory Neil Shapiro #   define SM_REQUIRE(cond) \
7140266059SGregory Neil Shapiro 	((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \
7240266059SGregory Neil Shapiro 	"SM_REQUIRE(cond) failed"), 0)))
7340266059SGregory Neil Shapiro #  endif /* defined(__STDC__) || defined(__cplusplus) */
7440266059SGregory Neil Shapiro # else /* SM_CHECK_REQUIRE */
7540266059SGregory Neil Shapiro #  define SM_REQUIRE(cond)	((void) 0)
7640266059SGregory Neil Shapiro # endif /* SM_CHECK_REQUIRE */
7740266059SGregory Neil Shapiro 
7840266059SGregory Neil Shapiro # define SM_REQUIRE_ISA(obj, magic) \
7940266059SGregory Neil Shapiro 		SM_REQUIRE((obj) != NULL && (obj)->sm_magic == (magic))
8040266059SGregory Neil Shapiro 
8140266059SGregory Neil Shapiro # if SM_CHECK_ENSURE
8240266059SGregory Neil Shapiro #  if defined(__STDC__) || defined(__cplusplus)
8340266059SGregory Neil Shapiro #   define SM_ENSURE(cond) \
8440266059SGregory Neil Shapiro 	((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \
8540266059SGregory Neil Shapiro 	"SM_ENSURE(" #cond ") failed"), 0)))
8640266059SGregory Neil Shapiro #  else /* defined(__STDC__) || defined(__cplusplus) */
8740266059SGregory Neil Shapiro #   define SM_ENSURE(cond) \
8840266059SGregory Neil Shapiro 	((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \
8940266059SGregory Neil Shapiro 	"SM_ENSURE(cond) failed"), 0)))
9040266059SGregory Neil Shapiro #  endif /* defined(__STDC__) || defined(__cplusplus) */
9140266059SGregory Neil Shapiro # else /* SM_CHECK_ENSURE */
9240266059SGregory Neil Shapiro #  define SM_ENSURE(cond)	((void) 0)
9340266059SGregory Neil Shapiro # endif /* SM_CHECK_ENSURE */
9440266059SGregory Neil Shapiro 
9540266059SGregory Neil Shapiro # if SM_CHECK_ASSERT
9640266059SGregory Neil Shapiro #  if defined(__STDC__) || defined(__cplusplus)
9740266059SGregory Neil Shapiro #   define SM_ASSERT(cond) \
9840266059SGregory Neil Shapiro 	((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \
9940266059SGregory Neil Shapiro 	"SM_ASSERT(" #cond ") failed"), 0)))
10040266059SGregory Neil Shapiro #  else /* defined(__STDC__) || defined(__cplusplus) */
10140266059SGregory Neil Shapiro #   define SM_ASSERT(cond) \
10240266059SGregory Neil Shapiro 	((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \
10340266059SGregory Neil Shapiro 	"SM_ASSERT(cond) failed"), 0)))
10440266059SGregory Neil Shapiro #  endif /* defined(__STDC__) || defined(__cplusplus) */
10540266059SGregory Neil Shapiro # else /* SM_CHECK_ASSERT */
10640266059SGregory Neil Shapiro #  define SM_ASSERT(cond)	((void) 0)
10740266059SGregory Neil Shapiro # endif /* SM_CHECK_ASSERT */
10840266059SGregory Neil Shapiro 
10940266059SGregory Neil Shapiro extern SM_DEBUG_T SmExpensiveRequire;
11040266059SGregory Neil Shapiro extern SM_DEBUG_T SmExpensiveEnsure;
11140266059SGregory Neil Shapiro extern SM_DEBUG_T SmExpensiveAssert;
11240266059SGregory Neil Shapiro 
11340266059SGregory Neil Shapiro #endif /* ! SM_ASSERT_H */
114