190792Sgshapiro/* 2261194Sgshapiro * Copyright (c) 2000-2001 Proofpoint, Inc. and its suppliers. 390792Sgshapiro * All rights reserved. 490792Sgshapiro * 590792Sgshapiro * By using this file, you agree to the terms and conditions set 690792Sgshapiro * forth in the LICENSE file which can be found at the top level of 790792Sgshapiro * the sendmail distribution. 890792Sgshapiro * 9266527Sgshapiro * $Id: assert.h,v 1.11 2013-11-22 20:51:31 ca Exp $ 1090792Sgshapiro */ 1190792Sgshapiro 1290792Sgshapiro/* 1390792Sgshapiro** libsm abnormal program termination and assertion checking 1490792Sgshapiro** See libsm/assert.html for documentation. 1590792Sgshapiro*/ 1690792Sgshapiro 1790792Sgshapiro#ifndef SM_ASSERT_H 1890792Sgshapiro# define SM_ASSERT_H 1990792Sgshapiro 2090792Sgshapiro# include <sm/gen.h> 2190792Sgshapiro# include <sm/debug.h> 2290792Sgshapiro 2390792Sgshapiro/* 2490792Sgshapiro** abnormal program termination 2590792Sgshapiro*/ 2690792Sgshapiro 2790792Sgshapirotypedef void (*SM_ABORT_HANDLER_T) __P((const char *, int, const char *)); 2890792Sgshapiro 2990792Sgshapiroextern SM_DEAD(void 3090792Sgshapirosm_abort_at __P(( 3190792Sgshapiro const char *, 3290792Sgshapiro int, 3390792Sgshapiro const char *))); 3490792Sgshapiro 3590792Sgshapiroextern void 3690792Sgshapirosm_abort_sethandler __P(( 3790792Sgshapiro SM_ABORT_HANDLER_T)); 3890792Sgshapiro 3990792Sgshapiroextern SM_DEAD(void PRINTFLIKE(1, 2) 4090792Sgshapirosm_abort __P(( 4190792Sgshapiro char *, 4290792Sgshapiro ...))); 4390792Sgshapiro 4490792Sgshapiro/* 4590792Sgshapiro** assertion checking 4690792Sgshapiro*/ 4790792Sgshapiro 4890792Sgshapiro# ifndef SM_CHECK_ALL 4990792Sgshapiro# define SM_CHECK_ALL 1 5090792Sgshapiro# endif /* ! SM_CHECK_ALL */ 5190792Sgshapiro 5290792Sgshapiro# ifndef SM_CHECK_REQUIRE 5390792Sgshapiro# define SM_CHECK_REQUIRE SM_CHECK_ALL 5490792Sgshapiro# endif /* ! SM_CHECK_REQUIRE */ 5590792Sgshapiro 5690792Sgshapiro# ifndef SM_CHECK_ENSURE 5790792Sgshapiro# define SM_CHECK_ENSURE SM_CHECK_ALL 5890792Sgshapiro# endif /* ! SM_CHECK_ENSURE */ 5990792Sgshapiro 6090792Sgshapiro# ifndef SM_CHECK_ASSERT 6190792Sgshapiro# define SM_CHECK_ASSERT SM_CHECK_ALL 6290792Sgshapiro# endif /* ! SM_CHECK_ASSERT */ 6390792Sgshapiro 6490792Sgshapiro# if SM_CHECK_REQUIRE 6590792Sgshapiro# if defined(__STDC__) || defined(__cplusplus) 6690792Sgshapiro# define SM_REQUIRE(cond) \ 6790792Sgshapiro ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ 6890792Sgshapiro "SM_REQUIRE(" #cond ") failed"), 0))) 6990792Sgshapiro# else /* defined(__STDC__) || defined(__cplusplus) */ 7090792Sgshapiro# define SM_REQUIRE(cond) \ 7190792Sgshapiro ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ 7290792Sgshapiro "SM_REQUIRE(cond) failed"), 0))) 7390792Sgshapiro# endif /* defined(__STDC__) || defined(__cplusplus) */ 7490792Sgshapiro# else /* SM_CHECK_REQUIRE */ 7590792Sgshapiro# define SM_REQUIRE(cond) ((void) 0) 7690792Sgshapiro# endif /* SM_CHECK_REQUIRE */ 7790792Sgshapiro 7890792Sgshapiro# define SM_REQUIRE_ISA(obj, magic) \ 7990792Sgshapiro SM_REQUIRE((obj) != NULL && (obj)->sm_magic == (magic)) 8090792Sgshapiro 8190792Sgshapiro# if SM_CHECK_ENSURE 8290792Sgshapiro# if defined(__STDC__) || defined(__cplusplus) 8390792Sgshapiro# define SM_ENSURE(cond) \ 8490792Sgshapiro ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ 8590792Sgshapiro "SM_ENSURE(" #cond ") failed"), 0))) 8690792Sgshapiro# else /* defined(__STDC__) || defined(__cplusplus) */ 8790792Sgshapiro# define SM_ENSURE(cond) \ 8890792Sgshapiro ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ 8990792Sgshapiro "SM_ENSURE(cond) failed"), 0))) 9090792Sgshapiro# endif /* defined(__STDC__) || defined(__cplusplus) */ 9190792Sgshapiro# else /* SM_CHECK_ENSURE */ 9290792Sgshapiro# define SM_ENSURE(cond) ((void) 0) 9390792Sgshapiro# endif /* SM_CHECK_ENSURE */ 9490792Sgshapiro 9590792Sgshapiro# if SM_CHECK_ASSERT 9690792Sgshapiro# if defined(__STDC__) || defined(__cplusplus) 9790792Sgshapiro# define SM_ASSERT(cond) \ 9890792Sgshapiro ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ 9990792Sgshapiro "SM_ASSERT(" #cond ") failed"), 0))) 10090792Sgshapiro# else /* defined(__STDC__) || defined(__cplusplus) */ 10190792Sgshapiro# define SM_ASSERT(cond) \ 10290792Sgshapiro ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ 10390792Sgshapiro "SM_ASSERT(cond) failed"), 0))) 10490792Sgshapiro# endif /* defined(__STDC__) || defined(__cplusplus) */ 10590792Sgshapiro# else /* SM_CHECK_ASSERT */ 10690792Sgshapiro# define SM_ASSERT(cond) ((void) 0) 10790792Sgshapiro# endif /* SM_CHECK_ASSERT */ 10890792Sgshapiro 10990792Sgshapiroextern SM_DEBUG_T SmExpensiveRequire; 11090792Sgshapiroextern SM_DEBUG_T SmExpensiveEnsure; 11190792Sgshapiroextern SM_DEBUG_T SmExpensiveAssert; 11290792Sgshapiro 11390792Sgshapiro#endif /* ! SM_ASSERT_H */ 114