File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / lib / isc / error.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:38 2012 UTC (12 years, 1 month ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    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.1.1.1 2012/05/29 12:08:38 misho 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>