1 /* $NetBSD: ntp_assert.h,v 1.1.1.1 2009/12/13 16:54:50 kardel Exp $ */ 2 3 /* 4 * ntp_assert.h - design by contract stuff 5 * 6 * example: 7 * 8 * int foo(char *a) { 9 * int result; 10 * int value; 11 * 12 * NTP_REQUIRE(a != NULL); 13 * ... 14 * bar(&value); 15 * NTP_INSIST(value > 2); 16 * ... 17 * 18 * NTP_ENSURE(result != 12); 19 * return result; 20 * } 21 * 22 * open question: when would we use NTP_INVARIANT()? 23 */ 24 25 #ifndef NTP_ASSERT_H 26 #define NTP_ASSERT_H 27 28 # ifdef CALYSTO 29 30 extern void calysto_assume(unsigned char cnd); /* assume this always holds */ 31 extern void calysto_assert(unsigned char cnd); /* check whether this holds */ 32 #define NTP_REQUIRE(x) calysto_assert(x) 33 #define NTP_INSIST(x) calysto_assume(x) /* DLH calysto_assert()? */ 34 #define NTP_INVARIANT(x) calysto_assume(x) 35 #define NTP_ENSURE(x) calysto_assert(x) 36 37 # elif defined(__COVERITY__) 38 39 /* 40 * Coverity has special knowledge that assert(x) terminates the process 41 * if x is not true. Rather than teach it about our assertion macros, 42 * just use the one it knows about for Coverity Prevent scans. This 43 * means our assertion code (and ISC's) escapes Coverity analysis, but 44 * that seems to be a reasonable trade-off. 45 */ 46 47 #define NTP_REQUIRE(x) assert(x) 48 #define NTP_INSIST(x) assert(x) 49 #define NTP_INVARIANT(x) assert(x) 50 #define NTP_ENSURE(x) assert(x) 51 52 # else /* neither Coverity nor Calysto */ 53 54 #include "isc/assertions.h" 55 56 #define NTP_REQUIRE(x) ISC_REQUIRE(x) 57 #define NTP_INSIST(x) ISC_INSIST(x) 58 #define NTP_INVARIANT(x) ISC_INVARIANT(x) 59 #define NTP_ENSURE(x) ISC_ENSURE(x) 60 61 # endif /* neither Coverity nor Calysto */ 62 #endif /* NTP_ASSERT_H */ 63