Annotation of embedaddon/ntp/lib/isc/error.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
3: * Copyright (C) 1998-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: /* $Id: error.c,v 1.21 2007/06/19 23:47:17 tbox Exp $ */
19:
20: /*! \file */
21:
22: #include <config.h>
23:
24: #include <stdio.h>
25: #include <stdlib.h>
26:
27: #include <isc/error.h>
28: #include <isc/msgs.h>
29:
30: /*% Default unexpected callback. */
31: static void
32: default_unexpected_callback(const char *, int, const char *, va_list)
33: ISC_FORMAT_PRINTF(3, 0);
34:
35: /*% Default fatal callback. */
36: static void
37: default_fatal_callback(const char *, int, const char *, va_list)
38: ISC_FORMAT_PRINTF(3, 0);
39:
40: /*% unexpected_callback */
41: static isc_errorcallback_t unexpected_callback = default_unexpected_callback;
42: static isc_errorcallback_t fatal_callback = default_fatal_callback;
43:
44: void
45: isc_error_setunexpected(isc_errorcallback_t cb) {
46: if (cb == NULL)
47: unexpected_callback = default_unexpected_callback;
48: else
49: unexpected_callback = cb;
50: }
51:
52: void
53: isc_error_setfatal(isc_errorcallback_t cb) {
54: if (cb == NULL)
55: fatal_callback = default_fatal_callback;
56: else
57: fatal_callback = cb;
58: }
59:
60: void
61: isc_error_unexpected(const char *file, int line, const char *format, ...) {
62: va_list args;
63:
64: va_start(args, format);
65: (unexpected_callback)(file, line, format, args);
66: va_end(args);
67: }
68:
69: void
70: isc_error_fatal(const char *file, int line, const char *format, ...) {
71: va_list args;
72:
73: va_start(args, format);
74: (fatal_callback)(file, line, format, args);
75: va_end(args);
76: abort();
77: }
78:
79: void
80: isc_error_runtimecheck(const char *file, int line, const char *expression) {
81: isc_error_fatal(file, line, "RUNTIME_CHECK(%s) %s", expression,
82: isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
83: ISC_MSG_FAILED, "failed"));
84: }
85:
86: static void
87: default_unexpected_callback(const char *file, int line, const char *format,
88: va_list args)
89: {
90: fprintf(stderr, "%s:%d: ", file, line);
91: vfprintf(stderr, format, args);
92: fprintf(stderr, "\n");
93: fflush(stderr);
94: }
95:
96: static void
97: default_fatal_callback(const char *file, int line, const char *format,
98: va_list args)
99: {
100: fprintf(stderr, "%s:%d: %s: ", file, line,
101: isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
102: ISC_MSG_FATALERROR, "fatal error"));
103: vfprintf(stderr, format, args);
104: fprintf(stderr, "\n");
105: fflush(stderr);
106: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>