1/* 2 * Copyright (C) 2004, 2005, 2008 Internet Systems Consortium, Inc. ("ISC") 3 * Copyright (C) 1997-2001 Internet Software Consortium. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 10 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 11 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 12 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 14 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15 * PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18/* 19 * $Id: assertions.h,v 1.5 2008/11/14 02:36:51 marka Exp $ 20 */ 21 22#ifndef ASSERTIONS_H 23#define ASSERTIONS_H 1 24 25typedef enum { 26 assert_require, assert_ensure, assert_insist, assert_invariant 27} assertion_type; 28 29typedef void (*assertion_failure_callback)(const char *, int, assertion_type, 30 const char *, int); 31 32/* coverity[+kill] */ 33extern assertion_failure_callback __assertion_failed; 34void set_assertion_failure_callback(assertion_failure_callback f); 35const char *assertion_type_to_text(assertion_type type); 36 37#if defined(CHECK_ALL) || defined(__COVERITY__) 38#define CHECK_REQUIRE 1 39#define CHECK_ENSURE 1 40#define CHECK_INSIST 1 41#define CHECK_INVARIANT 1 42#endif 43 44#if defined(CHECK_NONE) && !defined(__COVERITY__) 45#define CHECK_REQUIRE 0 46#define CHECK_ENSURE 0 47#define CHECK_INSIST 0 48#define CHECK_INVARIANT 0 49#endif 50 51#ifndef CHECK_REQUIRE 52#define CHECK_REQUIRE 1 53#endif 54 55#ifndef CHECK_ENSURE 56#define CHECK_ENSURE 1 57#endif 58 59#ifndef CHECK_INSIST 60#define CHECK_INSIST 1 61#endif 62 63#ifndef CHECK_INVARIANT 64#define CHECK_INVARIANT 1 65#endif 66 67#if CHECK_REQUIRE != 0 68#define REQUIRE(cond) \ 69 ((void) ((cond) || \ 70 ((__assertion_failed)(__FILE__, __LINE__, assert_require, \ 71 #cond, 0), 0))) 72#define REQUIRE_ERR(cond) \ 73 ((void) ((cond) || \ 74 ((__assertion_failed)(__FILE__, __LINE__, assert_require, \ 75 #cond, 1), 0))) 76#else 77#define REQUIRE(cond) ((void) (cond)) 78#define REQUIRE_ERR(cond) ((void) (cond)) 79#endif /* CHECK_REQUIRE */ 80 81#if CHECK_ENSURE != 0 82#define ENSURE(cond) \ 83 ((void) ((cond) || \ 84 ((__assertion_failed)(__FILE__, __LINE__, assert_ensure, \ 85 #cond, 0), 0))) 86#define ENSURE_ERR(cond) \ 87 ((void) ((cond) || \ 88 ((__assertion_failed)(__FILE__, __LINE__, assert_ensure, \ 89 #cond, 1), 0))) 90#else 91#define ENSURE(cond) ((void) (cond)) 92#define ENSURE_ERR(cond) ((void) (cond)) 93#endif /* CHECK_ENSURE */ 94 95#if CHECK_INSIST != 0 96#define INSIST(cond) \ 97 ((void) ((cond) || \ 98 ((__assertion_failed)(__FILE__, __LINE__, assert_insist, \ 99 #cond, 0), 0))) 100#define INSIST_ERR(cond) \ 101 ((void) ((cond) || \ 102 ((__assertion_failed)(__FILE__, __LINE__, assert_insist, \ 103 #cond, 1), 0))) 104#else 105#define INSIST(cond) ((void) (cond)) 106#define INSIST_ERR(cond) ((void) (cond)) 107#endif /* CHECK_INSIST */ 108 109#if CHECK_INVARIANT != 0 110#define INVARIANT(cond) \ 111 ((void) ((cond) || \ 112 ((__assertion_failed)(__FILE__, __LINE__, assert_invariant, \ 113 #cond, 0), 0))) 114#define INVARIANT_ERR(cond) \ 115 ((void) ((cond) || \ 116 ((__assertion_failed)(__FILE__, __LINE__, assert_invariant, \ 117 #cond, 1), 0))) 118#else 119#define INVARIANT(cond) ((void) (cond)) 120#define INVARIANT_ERR(cond) ((void) (cond)) 121#endif /* CHECK_INVARIANT */ 122#endif /* ASSERTIONS_H */ 123/*! \file */ 124