xref: /netbsd-src/external/bsd/ntp/dist/include/ntp_assert.h (revision b1c86f5f087524e68db12794ee9c3e3da1ab17a0)
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