1201428Sjilles/* $NetBSD$ */ 2201428Sjilles 3201428Sjilles/* 4201428Sjilles * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") 5201428Sjilles * Copyright (C) 1997-2001 Internet Software Consortium. 6201428Sjilles * 7201428Sjilles * Permission to use, copy, modify, and/or distribute this software for any 8201428Sjilles * purpose with or without fee is hereby granted, provided that the above 9201428Sjilles * copyright notice and this permission notice appear in all copies. 10201428Sjilles * 11201428Sjilles * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 12201428Sjilles * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 13201428Sjilles * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 14201428Sjilles * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 15201428Sjilles * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 16201428Sjilles * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17201428Sjilles * PERFORMANCE OF THIS SOFTWARE. 18201428Sjilles */ 19201428Sjilles 20201428Sjilles/* Id: assertions.c,v 1.23 2008/10/15 23:47:31 tbox Exp */ 21201428Sjilles 22201428Sjilles/*! \file */ 23201428Sjilles 24201428Sjilles#include <config.h> 25204016Sjilles 26201428Sjilles#include <stdio.h> 27201428Sjilles#include <stdlib.h> 28201428Sjilles 29201428Sjilles#include <isc/assertions.h> 30201428Sjilles#include <isc/msgs.h> 31201428Sjilles 32201428Sjilles/*% 33201428Sjilles * Forward. 34201428Sjilles */ 35201428Sjilles/* coverity[+kill] */ 36201428Sjillesstatic void 37201428Sjillesdefault_callback(const char *, int, isc_assertiontype_t, const char *); 38201428Sjilles 39201428Sjilles/*% 40201428Sjilles * Public. 41201428Sjilles */ 42201428Sjilles 43201428SjillesLIBISC_EXTERNAL_DATA isc_assertioncallback_t isc_assertion_failed = 44201428Sjilles default_callback; 45201428Sjilles 46201428Sjilles/*% Set callback. */ 47201428Sjillesvoid 48201428Sjillesisc_assertion_setcallback(isc_assertioncallback_t cb) { 49201428Sjilles if (cb == NULL) 50201428Sjilles isc_assertion_failed = default_callback; 51201428Sjilles else 52201428Sjilles isc_assertion_failed = cb; 53201428Sjilles} 54201428Sjilles 55201428Sjilles/*% Type to Text */ 56201428Sjillesconst char * 57201428Sjillesisc_assertion_typetotext(isc_assertiontype_t type) { 58201428Sjilles const char *result; 59201428Sjilles 60201428Sjilles /* 61201428Sjilles * These strings have purposefully not been internationalized 62201428Sjilles * because they are considered to essentially be keywords of 63201428Sjilles * the ISC development environment. 64201428Sjilles */ 65201428Sjilles switch (type) { 66201428Sjilles case isc_assertiontype_require: 67201428Sjilles result = "REQUIRE"; 68201428Sjilles break; 69201428Sjilles case isc_assertiontype_ensure: 70201428Sjilles result = "ENSURE"; 71201428Sjilles break; 72201428Sjilles case isc_assertiontype_insist: 73201428Sjilles result = "INSIST"; 74201428Sjilles break; 75209652Sjilles case isc_assertiontype_invariant: 76201428Sjilles result = "INVARIANT"; 77201428Sjilles break; 78 default: 79 result = NULL; 80 } 81 return (result); 82} 83 84/* 85 * Private. 86 */ 87 88static void 89default_callback(const char *file, int line, isc_assertiontype_t type, 90 const char *cond) 91{ 92 fprintf(stderr, "%s:%d: %s(%s) %s.\n", 93 file, line, isc_assertion_typetotext(type), cond, 94 isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, 95 ISC_MSG_FAILED, "failed")); 96 fflush(stderr); 97 abort(); 98 /* NOTREACHED */ 99} 100