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