File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libevent / log.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:02:54 2012 UTC (12 years, 3 months ago) by misho
Branches: libevent, MAIN
CVS tags: v1_4_14bp0, v1_4_14b, HEAD
libevent

    1: /*	$OpenBSD: err.c,v 1.2 2002/06/25 15:50:15 mickey Exp $	*/
    2: 
    3: /*
    4:  * log.c
    5:  *
    6:  * Based on err.c, which was adapted from OpenBSD libc *err* *warn* code.
    7:  *
    8:  * Copyright (c) 2005 Nick Mathewson <nickm@freehaven.net>
    9:  *
   10:  * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
   11:  *
   12:  * Copyright (c) 1993
   13:  *	The Regents of the University of California.  All rights reserved.
   14:  *
   15:  * Redistribution and use in source and binary forms, with or without
   16:  * modification, are permitted provided that the following conditions
   17:  * are met:
   18:  * 1. Redistributions of source code must retain the above copyright
   19:  *    notice, this list of conditions and the following disclaimer.
   20:  * 2. Redistributions in binary form must reproduce the above copyright
   21:  *    notice, this list of conditions and the following disclaimer in the
   22:  *    documentation and/or other materials provided with the distribution.
   23:  * 3. Neither the name of the University nor the names of its contributors
   24:  *    may be used to endorse or promote products derived from this software
   25:  *    without specific prior written permission.
   26:  *
   27:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   28:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   29:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   30:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   31:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   32:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   33:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   34:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   35:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   36:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   37:  * SUCH DAMAGE.
   38:  */
   39: 
   40: #ifdef HAVE_CONFIG_H
   41: #include "config.h"
   42: #endif
   43: 
   44: #ifdef WIN32
   45: #define WIN32_LEAN_AND_MEAN
   46: #include <windows.h>
   47: #undef WIN32_LEAN_AND_MEAN
   48: #endif
   49: #include <sys/types.h>
   50: #ifdef HAVE_SYS_TIME_H
   51: #include <sys/time.h>
   52: #else
   53: #include <sys/_libevent_time.h>
   54: #endif
   55: #include <stdio.h>
   56: #include <stdlib.h>
   57: #include <stdarg.h>
   58: #include <string.h>
   59: #include <errno.h>
   60: #include "event.h"
   61: 
   62: #include "log.h"
   63: #include "evutil.h"
   64: 
   65: static void _warn_helper(int severity, int log_errno, const char *fmt,
   66:                          va_list ap);
   67: static void event_log(int severity, const char *msg);
   68: 
   69: void
   70: event_err(int eval, const char *fmt, ...)
   71: {
   72: 	va_list ap;
   73: 	
   74: 	va_start(ap, fmt);
   75: 	_warn_helper(_EVENT_LOG_ERR, errno, fmt, ap);
   76: 	va_end(ap);
   77: 	exit(eval);
   78: }
   79: 
   80: void
   81: event_warn(const char *fmt, ...)
   82: {
   83: 	va_list ap;
   84: 	
   85: 	va_start(ap, fmt);
   86: 	_warn_helper(_EVENT_LOG_WARN, errno, fmt, ap);
   87: 	va_end(ap);
   88: }
   89: 
   90: void
   91: event_errx(int eval, const char *fmt, ...)
   92: {
   93: 	va_list ap;
   94: 	
   95: 	va_start(ap, fmt);
   96: 	_warn_helper(_EVENT_LOG_ERR, -1, fmt, ap);
   97: 	va_end(ap);
   98: 	exit(eval);
   99: }
  100: 
  101: void
  102: event_warnx(const char *fmt, ...)
  103: {
  104: 	va_list ap;
  105: 	
  106: 	va_start(ap, fmt);
  107: 	_warn_helper(_EVENT_LOG_WARN, -1, fmt, ap);
  108: 	va_end(ap);
  109: }
  110: 
  111: void
  112: event_msgx(const char *fmt, ...)
  113: {
  114: 	va_list ap;
  115: 	
  116: 	va_start(ap, fmt);
  117: 	_warn_helper(_EVENT_LOG_MSG, -1, fmt, ap);
  118: 	va_end(ap);
  119: }
  120: 
  121: void
  122: _event_debugx(const char *fmt, ...)
  123: {
  124: 	va_list ap;
  125: 	
  126: 	va_start(ap, fmt);
  127: 	_warn_helper(_EVENT_LOG_DEBUG, -1, fmt, ap);
  128: 	va_end(ap);
  129: }
  130: 
  131: static void
  132: _warn_helper(int severity, int log_errno, const char *fmt, va_list ap)
  133: {
  134: 	char buf[1024];
  135: 	size_t len;
  136: 
  137: 	if (fmt != NULL)
  138: 		evutil_vsnprintf(buf, sizeof(buf), fmt, ap);
  139: 	else
  140: 		buf[0] = '\0';
  141: 
  142: 	if (log_errno >= 0) {
  143: 		len = strlen(buf);
  144: 		if (len < sizeof(buf) - 3) {
  145: 			evutil_snprintf(buf + len, sizeof(buf) - len, ": %s",
  146: 			    strerror(log_errno));
  147: 		}
  148: 	}
  149: 
  150: 	event_log(severity, buf);
  151: }
  152: 
  153: static event_log_cb log_fn = NULL;
  154: 
  155: void
  156: event_set_log_callback(event_log_cb cb)
  157: {
  158: 	log_fn = cb;
  159: }
  160: 
  161: static void
  162: event_log(int severity, const char *msg)
  163: {
  164: 	if (log_fn)
  165: 		log_fn(severity, msg);
  166: 	else {
  167: 		const char *severity_str;
  168: 		switch (severity) {
  169: 		case _EVENT_LOG_DEBUG:
  170: 			severity_str = "debug";
  171: 			break;
  172: 		case _EVENT_LOG_MSG:
  173: 			severity_str = "msg";
  174: 			break;
  175: 		case _EVENT_LOG_WARN:
  176: 			severity_str = "warn";
  177: 			break;
  178: 		case _EVENT_LOG_ERR:
  179: 			severity_str = "err";
  180: 			break;
  181: 		default:
  182: 			severity_str = "???";
  183: 			break;
  184: 		}
  185: 		(void)fprintf(stderr, "[%s] %s\n", severity_str, msg);
  186: 	}
  187: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>