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