assert.h revision 261363
1/* 2 * Copyright (c) 2000-2001 Proofpoint, Inc. and its suppliers. 3 * All rights reserved. 4 * 5 * By using this file, you agree to the terms and conditions set 6 * forth in the LICENSE file which can be found at the top level of 7 * the sendmail distribution. 8 * 9 * $Id: assert.h,v 1.11 2013/11/22 20:51:31 ca Exp $ 10 */ 11 12/* 13** libsm abnormal program termination and assertion checking 14** See libsm/assert.html for documentation. 15*/ 16 17#ifndef SM_ASSERT_H 18# define SM_ASSERT_H 19 20# include <sm/gen.h> 21# include <sm/debug.h> 22 23/* 24** abnormal program termination 25*/ 26 27typedef void (*SM_ABORT_HANDLER_T) __P((const char *, int, const char *)); 28 29extern SM_DEAD(void 30sm_abort_at __P(( 31 const char *, 32 int, 33 const char *))); 34 35extern void 36sm_abort_sethandler __P(( 37 SM_ABORT_HANDLER_T)); 38 39extern SM_DEAD(void PRINTFLIKE(1, 2) 40sm_abort __P(( 41 char *, 42 ...))); 43 44/* 45** assertion checking 46*/ 47 48# ifndef SM_CHECK_ALL 49# define SM_CHECK_ALL 1 50# endif /* ! SM_CHECK_ALL */ 51 52# ifndef SM_CHECK_REQUIRE 53# define SM_CHECK_REQUIRE SM_CHECK_ALL 54# endif /* ! SM_CHECK_REQUIRE */ 55 56# ifndef SM_CHECK_ENSURE 57# define SM_CHECK_ENSURE SM_CHECK_ALL 58# endif /* ! SM_CHECK_ENSURE */ 59 60# ifndef SM_CHECK_ASSERT 61# define SM_CHECK_ASSERT SM_CHECK_ALL 62# endif /* ! SM_CHECK_ASSERT */ 63 64# if SM_CHECK_REQUIRE 65# if defined(__STDC__) || defined(__cplusplus) 66# define SM_REQUIRE(cond) \ 67 ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ 68 "SM_REQUIRE(" #cond ") failed"), 0))) 69# else /* defined(__STDC__) || defined(__cplusplus) */ 70# define SM_REQUIRE(cond) \ 71 ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ 72 "SM_REQUIRE(cond) failed"), 0))) 73# endif /* defined(__STDC__) || defined(__cplusplus) */ 74# else /* SM_CHECK_REQUIRE */ 75# define SM_REQUIRE(cond) ((void) 0) 76# endif /* SM_CHECK_REQUIRE */ 77 78# define SM_REQUIRE_ISA(obj, magic) \ 79 SM_REQUIRE((obj) != NULL && (obj)->sm_magic == (magic)) 80 81# if SM_CHECK_ENSURE 82# if defined(__STDC__) || defined(__cplusplus) 83# define SM_ENSURE(cond) \ 84 ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ 85 "SM_ENSURE(" #cond ") failed"), 0))) 86# else /* defined(__STDC__) || defined(__cplusplus) */ 87# define SM_ENSURE(cond) \ 88 ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ 89 "SM_ENSURE(cond) failed"), 0))) 90# endif /* defined(__STDC__) || defined(__cplusplus) */ 91# else /* SM_CHECK_ENSURE */ 92# define SM_ENSURE(cond) ((void) 0) 93# endif /* SM_CHECK_ENSURE */ 94 95# if SM_CHECK_ASSERT 96# if defined(__STDC__) || defined(__cplusplus) 97# define SM_ASSERT(cond) \ 98 ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ 99 "SM_ASSERT(" #cond ") failed"), 0))) 100# else /* defined(__STDC__) || defined(__cplusplus) */ 101# define SM_ASSERT(cond) \ 102 ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ 103 "SM_ASSERT(cond) failed"), 0))) 104# endif /* defined(__STDC__) || defined(__cplusplus) */ 105# else /* SM_CHECK_ASSERT */ 106# define SM_ASSERT(cond) ((void) 0) 107# endif /* SM_CHECK_ASSERT */ 108 109extern SM_DEBUG_T SmExpensiveRequire; 110extern SM_DEBUG_T SmExpensiveEnsure; 111extern SM_DEBUG_T SmExpensiveAssert; 112 113#endif /* ! SM_ASSERT_H */ 114