diff options
Diffstat (limited to 'sendmail/include/sm/assert.h')
-rw-r--r-- | sendmail/include/sm/assert.h | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/sendmail/include/sm/assert.h b/sendmail/include/sm/assert.h new file mode 100644 index 0000000..6b86536 --- /dev/null +++ b/sendmail/include/sm/assert.h @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Id: assert.h,v 1.10 2001/06/07 20:04:53 ca Exp $ + */ + +/* +** libsm abnormal program termination and assertion checking +** See libsm/assert.html for documentation. +*/ + +#ifndef SM_ASSERT_H +# define SM_ASSERT_H + +# include <sm/gen.h> +# include <sm/debug.h> + +/* +** abnormal program termination +*/ + +typedef void (*SM_ABORT_HANDLER_T) __P((const char *, int, const char *)); + +extern SM_DEAD(void +sm_abort_at __P(( + const char *, + int, + const char *))); + +extern void +sm_abort_sethandler __P(( + SM_ABORT_HANDLER_T)); + +extern SM_DEAD(void PRINTFLIKE(1, 2) +sm_abort __P(( + char *, + ...))); + +/* +** assertion checking +*/ + +# ifndef SM_CHECK_ALL +# define SM_CHECK_ALL 1 +# endif /* ! SM_CHECK_ALL */ + +# ifndef SM_CHECK_REQUIRE +# define SM_CHECK_REQUIRE SM_CHECK_ALL +# endif /* ! SM_CHECK_REQUIRE */ + +# ifndef SM_CHECK_ENSURE +# define SM_CHECK_ENSURE SM_CHECK_ALL +# endif /* ! SM_CHECK_ENSURE */ + +# ifndef SM_CHECK_ASSERT +# define SM_CHECK_ASSERT SM_CHECK_ALL +# endif /* ! SM_CHECK_ASSERT */ + +# if SM_CHECK_REQUIRE +# if defined(__STDC__) || defined(__cplusplus) +# define SM_REQUIRE(cond) \ + ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ + "SM_REQUIRE(" #cond ") failed"), 0))) +# else /* defined(__STDC__) || defined(__cplusplus) */ +# define SM_REQUIRE(cond) \ + ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ + "SM_REQUIRE(cond) failed"), 0))) +# endif /* defined(__STDC__) || defined(__cplusplus) */ +# else /* SM_CHECK_REQUIRE */ +# define SM_REQUIRE(cond) ((void) 0) +# endif /* SM_CHECK_REQUIRE */ + +# define SM_REQUIRE_ISA(obj, magic) \ + SM_REQUIRE((obj) != NULL && (obj)->sm_magic == (magic)) + +# if SM_CHECK_ENSURE +# if defined(__STDC__) || defined(__cplusplus) +# define SM_ENSURE(cond) \ + ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ + "SM_ENSURE(" #cond ") failed"), 0))) +# else /* defined(__STDC__) || defined(__cplusplus) */ +# define SM_ENSURE(cond) \ + ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ + "SM_ENSURE(cond) failed"), 0))) +# endif /* defined(__STDC__) || defined(__cplusplus) */ +# else /* SM_CHECK_ENSURE */ +# define SM_ENSURE(cond) ((void) 0) +# endif /* SM_CHECK_ENSURE */ + +# if SM_CHECK_ASSERT +# if defined(__STDC__) || defined(__cplusplus) +# define SM_ASSERT(cond) \ + ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ + "SM_ASSERT(" #cond ") failed"), 0))) +# else /* defined(__STDC__) || defined(__cplusplus) */ +# define SM_ASSERT(cond) \ + ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ + "SM_ASSERT(cond) failed"), 0))) +# endif /* defined(__STDC__) || defined(__cplusplus) */ +# else /* SM_CHECK_ASSERT */ +# define SM_ASSERT(cond) ((void) 0) +# endif /* SM_CHECK_ASSERT */ + +extern SM_DEBUG_T SmExpensiveRequire; +extern SM_DEBUG_T SmExpensiveEnsure; +extern SM_DEBUG_T SmExpensiveAssert; + +#endif /* ! SM_ASSERT_H */ |