xref: /openbsd-src/usr.bin/dig/lib/isc/assertions.c (revision b9558d14c675017cf470d7469a47201d05e39444)
15185a700Sflorian /*
25185a700Sflorian  * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
35185a700Sflorian  *
45185a700Sflorian  * Permission to use, copy, modify, and/or distribute this software for any
55185a700Sflorian  * purpose with or without fee is hereby granted, provided that the above
65185a700Sflorian  * copyright notice and this permission notice appear in all copies.
75185a700Sflorian  *
85185a700Sflorian  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
95185a700Sflorian  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
105185a700Sflorian  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
115185a700Sflorian  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
125185a700Sflorian  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
135185a700Sflorian  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
145185a700Sflorian  * PERFORMANCE OF THIS SOFTWARE.
155185a700Sflorian  */
165185a700Sflorian 
17*b9558d14Sjsg /* $Id: assertions.c,v 1.5 2020/02/25 05:00:43 jsg Exp $ */
185185a700Sflorian 
195185a700Sflorian /*! \file */
205185a700Sflorian 
215185a700Sflorian #include <stdio.h>
225185a700Sflorian #include <stdlib.h>
235185a700Sflorian 
245185a700Sflorian #include <isc/assertions.h>
255185a700Sflorian 
265185a700Sflorian /*%
275185a700Sflorian  * Forward.
285185a700Sflorian  */
295185a700Sflorian static void
305185a700Sflorian default_callback(const char *, int, isc_assertiontype_t, const char *);
315185a700Sflorian 
325185a700Sflorian static isc_assertioncallback_t isc_assertion_failed_cb = default_callback;
335185a700Sflorian 
345185a700Sflorian /*%
355185a700Sflorian  * Public.
365185a700Sflorian  */
375185a700Sflorian 
385185a700Sflorian /*% assertion failed handler */
395185a700Sflorian void
isc_assertion_failed(const char * file,int line,isc_assertiontype_t type,const char * cond)405185a700Sflorian isc_assertion_failed(const char *file, int line, isc_assertiontype_t type,
415185a700Sflorian 		     const char *cond)
425185a700Sflorian {
435185a700Sflorian 	isc_assertion_failed_cb(file, line, type, cond);
445185a700Sflorian 	abort();
455185a700Sflorian 	/* NOTREACHED */
465185a700Sflorian }
475185a700Sflorian 
485185a700Sflorian /*% Type to Text */
495185a700Sflorian const char *
isc_assertion_typetotext(isc_assertiontype_t type)505185a700Sflorian isc_assertion_typetotext(isc_assertiontype_t type) {
515185a700Sflorian 	const char *result;
525185a700Sflorian 
535185a700Sflorian 	/*
545185a700Sflorian 	 * These strings have purposefully not been internationalized
555185a700Sflorian 	 * because they are considered to essentially be keywords of
565185a700Sflorian 	 * the ISC development environment.
575185a700Sflorian 	 */
585185a700Sflorian 	switch (type) {
595185a700Sflorian 	case isc_assertiontype_require:
605185a700Sflorian 		result = "REQUIRE";
615185a700Sflorian 		break;
625185a700Sflorian 	case isc_assertiontype_ensure:
635185a700Sflorian 		result = "ENSURE";
645185a700Sflorian 		break;
655185a700Sflorian 	case isc_assertiontype_insist:
665185a700Sflorian 		result = "INSIST";
675185a700Sflorian 		break;
685185a700Sflorian 	case isc_assertiontype_invariant:
695185a700Sflorian 		result = "INVARIANT";
705185a700Sflorian 		break;
715185a700Sflorian 	default:
725185a700Sflorian 		result = NULL;
735185a700Sflorian 	}
745185a700Sflorian 	return (result);
755185a700Sflorian }
765185a700Sflorian 
775185a700Sflorian /*
785185a700Sflorian  * Private.
795185a700Sflorian  */
805185a700Sflorian 
815185a700Sflorian static void
default_callback(const char * file,int line,isc_assertiontype_t type,const char * cond)825185a700Sflorian default_callback(const char *file, int line, isc_assertiontype_t type,
835185a700Sflorian 		 const char *cond)
845185a700Sflorian {
855185a700Sflorian 	fprintf(stderr, "%s:%d: %s(%s) %s\n",
865185a700Sflorian 		file, line, isc_assertion_typetotext(type), cond, "failed");
875185a700Sflorian 	fflush(stderr);
885185a700Sflorian }
89