Annotation of src/lib/libc/isc/assertions.c, Revision 1.7
1.7 ! joerg 1: /* $NetBSD: assertions.c,v 1.6 2009/04/12 17:07:17 christos Exp $ */
1.1 christos 2:
3: /*
1.6 christos 4: * Copyright (C) 2004, 2005, 2008 Internet Systems Consortium, Inc. ("ISC")
5: * Copyright (C) 1997, 1999, 2001 Internet Software Consortium.
1.1 christos 6: *
1.6 christos 7: * Permission to use, copy, modify, and/or distribute this software for any
1.1 christos 8: * purpose with or without fee is hereby granted, provided that the above
9: * copyright notice and this permission notice appear in all copies.
10: *
1.6 christos 11: * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
12: * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13: * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
14: * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15: * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
16: * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17: * PERFORMANCE OF THIS SOFTWARE.
1.1 christos 18: */
19:
1.2 christos 20: #include <sys/cdefs.h>
21: #if !defined(LINT) && !defined(CODECENTER) && !defined(lint)
22: #ifdef notdef
1.6 christos 23: static const char rcsid[] = "Id: assertions.c,v 1.5 2008/11/14 02:36:51 marka Exp";
1.2 christos 24: #else
1.7 ! joerg 25: __RCSID("$NetBSD: assertions.c,v 1.6 2009/04/12 17:07:17 christos Exp $");
1.2 christos 26: #endif
1.1 christos 27: #endif
28:
29: #include "port_before.h"
30:
31: #include <errno.h>
32: #include <stdio.h>
33: #include <stdlib.h>
34: #include <string.h>
35:
36: #include <isc/assertions.h>
37:
38: #include "port_after.h"
39:
40: /*
41: * Forward.
42: */
43:
1.7 ! joerg 44: __dead static void default_assertion_failed(const char *, int, assertion_type,
1.1 christos 45: const char *, int);
46:
47: /*
48: * Public.
49: */
50:
51: assertion_failure_callback __assertion_failed = default_assertion_failed;
52:
53: void
54: set_assertion_failure_callback(assertion_failure_callback f) {
55: if (f == NULL)
56: __assertion_failed = default_assertion_failed;
57: else
58: __assertion_failed = f;
59: }
60:
61: const char *
62: assertion_type_to_text(assertion_type type) {
63: const char *result;
64:
65: switch (type) {
66: case assert_require:
67: result = "REQUIRE";
68: break;
69: case assert_ensure:
70: result = "ENSURE";
71: break;
72: case assert_insist:
73: result = "INSIST";
74: break;
75: case assert_invariant:
76: result = "INVARIANT";
77: break;
78: default:
79: result = NULL;
80: }
81: return (result);
82: }
83:
84: /*
85: * Private.
86: */
87:
1.6 christos 88: /* coverity[+kill] */
1.1 christos 89: static void
90: default_assertion_failed(const char *file, int line, assertion_type type,
91: const char *cond, int print_errno)
92: {
93: fprintf(stderr, "%s:%d: %s(%s)%s%s failed.\n",
94: file, line, assertion_type_to_text(type), cond,
95: (print_errno) ? ": " : "",
96: (print_errno) ? strerror(errno) : "");
97: abort();
98: /* NOTREACHED */
99: }
1.3 christos 100:
101: /*! \file */
CVSweb <webmaster@jp.NetBSD.org>