1 /* 2 * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 9 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 10 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 11 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 12 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 13 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 14 * PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 /* 18 * $Id: assertions.h,v 1.5 2022/07/03 16:00:11 florian Exp $ 19 */ 20 /*! \file isc/assertions.h 21 */ 22 23 #ifndef ISC_ASSERTIONS_H 24 #define ISC_ASSERTIONS_H 1 25 26 #include <sys/types.h> 27 28 /*% isc assertion type */ 29 typedef enum { 30 isc_assertiontype_require, 31 isc_assertiontype_ensure, 32 isc_assertiontype_insist, 33 isc_assertiontype_invariant 34 } isc_assertiontype_t; 35 36 typedef void (*isc_assertioncallback_t)(const char *, int, isc_assertiontype_t, 37 const char *); 38 39 __dead void isc_assertion_failed(const char *, int, isc_assertiontype_t, 40 const char *); 41 42 const char * 43 isc_assertion_typetotext(isc_assertiontype_t type); 44 45 #define ISC_REQUIRE(cond) \ 46 ((void) ((cond) || \ 47 ((isc_assertion_failed)(__FILE__, __LINE__, \ 48 isc_assertiontype_require, \ 49 #cond), 0))) 50 #define ISC_ENSURE(cond) \ 51 ((void) ((cond) || \ 52 ((isc_assertion_failed)(__FILE__, __LINE__, \ 53 isc_assertiontype_ensure, \ 54 #cond), 0))) 55 #define ISC_INSIST(cond) \ 56 ((void) ((cond) || \ 57 ((isc_assertion_failed)(__FILE__, __LINE__, \ 58 isc_assertiontype_insist, \ 59 #cond), 0))) 60 61 #define ISC_INVARIANT(cond) \ 62 ((void) ((cond) || \ 63 ((isc_assertion_failed)(__FILE__, __LINE__, \ 64 isc_assertiontype_invariant, \ 65 #cond), 0))) 66 67 #endif /* ISC_ASSERTIONS_H */ 68