summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am6
-rw-r--r--buffer.c1
-rw-r--r--configure.in2
-rw-r--r--devpoll.c17
-rw-r--r--epoll.c19
-rw-r--r--event.c52
-rw-r--r--event.h7
-rw-r--r--kqueue.c21
-rw-r--r--log.c202
-rw-r--r--log.h43
-rw-r--r--poll.c17
-rw-r--r--rtsig.c3
-rw-r--r--select.c16
-rw-r--r--signal.c17
14 files changed, 309 insertions, 114 deletions
diff --git a/Makefile.am b/Makefile.am
index bd8af0fb..37670058 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,7 +2,7 @@ AUTOMAKE_OPTIONS = foreign no-dependencies
SUBDIRS = . sample test
-EXTRA_DIST = acconfig.h err.c event.h event-internal.h evsignal.h event.3 \
+EXTRA_DIST = acconfig.h event.h event-internal.h log.h evsignal.h event.3 \
kqueue.c epoll_sub.c epoll.c select.c rtsig.c poll.c signal.c \
devpoll.c \
sample/Makefile.am sample/Makefile.in sample/event-test.c \
@@ -10,7 +10,7 @@ EXTRA_DIST = acconfig.h err.c event.h event-internal.h evsignal.h event.3 \
test/Makefile.am test/Makefile.in test/bench.c test/regress.c \
test/test-eof.c test/test-weof.c test/test-time.c \
test/test-init.c test/test.sh \
- compat/err.h compat/sys/queue.h compat/sys/tree.h compat/sys/_time.h \
+ compat/sys/queue.h compat/sys/tree.h compat/sys/_time.h \
WIN32-Code WIN32-Code/config.h WIN32-Code/misc.c \
WIN32-Code/win32.c WIN32-Code/misc.h \
WIN32-Prj WIN32-Prj/event_test WIN32-Prj/event_test/event_test.dsp \
@@ -21,7 +21,7 @@ EXTRA_DIST = acconfig.h err.c event.h event-internal.h evsignal.h event.3 \
lib_LIBRARIES = libevent.a
-libevent_a_SOURCES = event.c buffer.c evbuffer.c
+libevent_a_SOURCES = event.c buffer.c evbuffer.c log.c
libevent_a_LIBADD = @LIBOBJS@
include_HEADERS = event.h
diff --git a/buffer.c b/buffer.c
index 59baf3a8..e30c46f3 100644
--- a/buffer.c
+++ b/buffer.c
@@ -39,7 +39,6 @@
#include <sys/ioctl.h>
#endif
-#include <err.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/configure.in b/configure.in
index c040b767..f3e40286 100644
--- a/configure.in
+++ b/configure.in
@@ -299,8 +299,6 @@ if test "x$needsignal" = "xyes" ; then
AC_LIBOBJ(signal)
fi
-AC_REPLACE_FUNCS(err)
-
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_CHECK_TYPE(u_int64_t, unsigned long long)
diff --git a/devpoll.c b/devpoll.c
index 99ad4174..c4ba33f0 100644
--- a/devpoll.c
+++ b/devpoll.c
@@ -44,18 +44,11 @@
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
-#include <err.h>
#include <assert.h>
-#ifdef USE_LOG
-#include "log.h"
-#else
-#define LOG_DBG(x)
-#define log_error warn
-#endif
-
#include "event.h"
#include "evsignal.h"
+#include "log.h"
extern volatile sig_atomic_t evsignal_caught;
@@ -113,7 +106,7 @@ devpoll_init(void)
/* Initialize the kernel queue */
if ((dpfd = open("/dev/poll", O_RDWR)) == -1) {
- log_error("open: /dev/poll");
+ event_warn("open: /dev/poll");
free(devpollop);
return (NULL);
}
@@ -158,7 +151,7 @@ devpoll_recalc(struct event_base *base, void *arg, int max)
fds = realloc(devpollop->fds, nfds * sizeof(struct evdevpoll));
if (fds == NULL) {
- log_error("realloc");
+ event_warn("realloc");
return (-1);
}
devpollop->fds = fds;
@@ -195,7 +188,7 @@ devpoll_dispatch(struct event_base *base, void *arg, struct timeval *tv)
if (res == -1) {
if (errno != EINTR) {
- log_error("ioctl: DP_POLL");
+ event_warn("ioctl: DP_POLL");
return (-1);
}
@@ -204,7 +197,7 @@ devpoll_dispatch(struct event_base *base, void *arg, struct timeval *tv)
} else if (evsignal_caught)
evsignal_process();
- LOG_DBG((LOG_MISC, 80, "%s: devpoll_wait reports %d", __func__, res));
+ event_debug(("%s: devpoll_wait reports %d", __func__, res));
for (i = 0; i < res; i++) {
int which = 0;
diff --git a/epoll.c b/epoll.c
index 8c6fad9f..f4029937 100644
--- a/epoll.c
+++ b/epoll.c
@@ -44,20 +44,13 @@
#include <string.h>
#include <unistd.h>
#include <errno.h>
-#include <err.h>
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
-#ifdef USE_LOG
-#include "log.h"
-#else
-#define LOG_DBG(x)
-#define log_error warn
-#endif
-
#include "event.h"
#include "evsignal.h"
+#include "log.h"
extern volatile sig_atomic_t evsignal_caught;
@@ -96,7 +89,7 @@ struct eventop epollops = {
#ifdef HAVE_SETFD
#define FD_CLOSEONEXEC(x) do { \
if (fcntl(x, F_SETFD, 1) == -1) \
- warn("fcntl(%d, F_SETFD)", x); \
+ event_warn("fcntl(%d, F_SETFD)", x); \
} while (0)
#else
#define FD_CLOSEONEXEC(x)
@@ -122,7 +115,7 @@ epoll_init(void)
/* Initalize the kernel queue */
if ((epfd = epoll_create(nfiles)) == -1) {
- log_error("epoll_create");
+ event_warn("epoll_create");
return (NULL);
}
@@ -169,7 +162,7 @@ epoll_recalc(struct event_base *base, void *arg, int max)
fds = realloc(epollop->fds, nfds * sizeof(struct evepoll));
if (fds == NULL) {
- log_error("realloc");
+ event_warn("realloc");
return (-1);
}
epollop->fds = fds;
@@ -200,7 +193,7 @@ epoll_dispatch(struct event_base *base, void *arg, struct timeval *tv)
if (res == -1) {
if (errno != EINTR) {
- log_error("epoll_wait");
+ event_warn("epoll_wait");
return (-1);
}
@@ -209,7 +202,7 @@ epoll_dispatch(struct event_base *base, void *arg, struct timeval *tv)
} else if (evsignal_caught)
evsignal_process();
- LOG_DBG((LOG_MISC, 80, "%s: epoll_wait reports %d", __func__, res));
+ event_debug(("%s: epoll_wait reports %d", __func__, res));
for (i = 0; i < res; i++) {
int which = 0;
diff --git a/event.c b/event.c
index 8bac4ede..7fec011b 100644
--- a/event.c
+++ b/event.c
@@ -47,18 +47,11 @@
#endif
#include <errno.h>
#include <string.h>
-#include <err.h>
#include <assert.h>
-#ifdef USE_LOG
-#include "log.h"
-#else
-#define LOG_DBG(x)
-#define log_error(x) perror(x)
-#endif
-
#include "event.h"
#include "event-internal.h"
+#include "log.h"
#ifdef HAVE_SELECT
extern const struct eventop selectops;
@@ -153,17 +146,12 @@ event_init(void)
int i;
if ((current_base = calloc(1, sizeof(struct event_base))) == NULL)
- err(1, "%s: calloc");
+ event_err(1, "%s: calloc");
event_sigcb = NULL;
event_gotsig = 0;
gettimeofday(&current_base->event_tv, NULL);
-#if defined(USE_LOG) && defined(USE_DEBUG)
- log_to(stderr);
- log_debug_cmd(LOG_MISC, 80);
-#endif
-
RB_INIT(&current_base->timetree);
TAILQ_INIT(&current_base->eventqueue);
TAILQ_INIT(&signalqueue);
@@ -176,11 +164,11 @@ event_init(void)
}
if (current_base->evbase == NULL)
- errx(1, "%s: no event mechanism available", __func__);
+ event_errx(1, "%s: no event mechanism available", __func__);
if (getenv("EVENT_SHOW_METHOD"))
- fprintf(stderr, "libevent using: %s\n",
- current_base->evsel->name);
+ event_msgx("libevent using: %s\n",
+ current_base->evsel->name);
/* allocate a single active event queue */
event_base_priority_init(current_base, 1);
@@ -214,12 +202,12 @@ event_base_priority_init(struct event_base *base, int npriorities)
base->activequeues = (struct event_list **)calloc(base->nactivequeues,
npriorities * sizeof(struct event_list *));
if (base->activequeues == NULL)
- err(1, "%s: calloc", __func__);
+ event_err(1, "%s: calloc", __func__);
for (i = 0; i < base->nactivequeues; ++i) {
base->activequeues[i] = malloc(sizeof(struct event_list));
if (base->activequeues[i] == NULL)
- err(1, "%s: malloc", __func__);
+ event_err(1, "%s: malloc", __func__);
TAILQ_INIT(base->activequeues[i]);
}
@@ -346,10 +334,8 @@ event_base_loop(struct event_base *base, int flags)
gettimeofday(&tv, NULL);
if (timercmp(&tv, &base->event_tv, <)) {
struct timeval off;
- LOG_DBG((LOG_MISC, 10,
- "%s: time is running backwards, corrected",
+ event_debug(("%s: time is running backwards, corrected",
__func__));
-
timersub(&base->event_tv, &tv, &off);
timeout_correct(base, &off);
}
@@ -529,7 +515,7 @@ event_add(struct event *ev, struct timeval *tv)
const struct eventop *evsel = base->evsel;
void *evbase = base->evbase;
- LOG_DBG((LOG_MISC, 55,
+ event_debug((
"event_add: event: %p, %s%s%scall %p",
ev,
ev->ev_events & EV_READ ? "EV_READ " : " ",
@@ -564,7 +550,7 @@ event_add(struct event *ev, struct timeval *tv)
gettimeofday(&now, NULL);
timeradd(&now, tv, &ev->ev_timeout);
- LOG_DBG((LOG_MISC, 55,
+ event_debug((
"event_add: timeout in %d seconds, call %p",
tv->tv_sec, ev->ev_callback));
@@ -593,7 +579,7 @@ event_del(struct event *ev)
const struct eventop *evsel;
void *evbase;
- LOG_DBG((LOG_MISC, 80, "event_del: %p, callback %p",
+ event_debug(("event_del: %p, callback %p",
ev, ev->ev_callback));
/* An event without a base has not been added */
@@ -670,7 +656,7 @@ timeout_next(struct event_base *base, struct timeval *tv)
assert(tv->tv_sec >= 0);
assert(tv->tv_usec >= 0);
- LOG_DBG((LOG_MISC, 60, "timeout_next: in %d seconds", tv->tv_sec));
+ event_debug(("timeout_next: in %d seconds", tv->tv_sec));
return (0);
}
@@ -705,7 +691,7 @@ timeout_process(struct event_base *base)
/* delete this event from the I/O queues */
event_del(ev);
- LOG_DBG((LOG_MISC, 60, "timeout_process: call %p",
+ event_debug(("timeout_process: call %p",
ev->ev_callback));
event_active(ev, EV_TIMEOUT, 1);
}
@@ -717,8 +703,8 @@ event_queue_remove(struct event_base *base, struct event *ev, int queue)
int docount = 1;
if (!(ev->ev_flags & queue))
- errx(1, "%s: %p(fd %d) not on queue %x", __func__,
- ev, ev->ev_fd, queue);
+ event_errx(1, "%s: %p(fd %d) not on queue %x", __func__,
+ ev, ev->ev_fd, queue);
if (ev->ev_flags & EVLIST_INTERNAL)
docount = 0;
@@ -744,7 +730,7 @@ event_queue_remove(struct event_base *base, struct event *ev, int queue)
TAILQ_REMOVE(&base->eventqueue, ev, ev_next);
break;
default:
- errx(1, "%s: unknown queue %x", __func__, queue);
+ event_errx(1, "%s: unknown queue %x", __func__, queue);
}
}
@@ -758,8 +744,8 @@ event_queue_insert(struct event_base *base, struct event *ev, int queue)
if (queue & EVLIST_ACTIVE)
return;
- errx(1, "%s: %p(fd %d) already on queue %x", __func__,
- ev, ev->ev_fd, queue);
+ event_errx(1, "%s: %p(fd %d) already on queue %x", __func__,
+ ev, ev->ev_fd, queue);
}
if (ev->ev_flags & EVLIST_INTERNAL)
@@ -788,7 +774,7 @@ event_queue_insert(struct event_base *base, struct event *ev, int queue)
TAILQ_INSERT_TAIL(&base->eventqueue, ev, ev_next);
break;
default:
- errx(1, "%s: unknown queue %x", __func__, queue);
+ event_errx(1, "%s: unknown queue %x", __func__, queue);
}
}
diff --git a/event.h b/event.h
index e57b3dfe..8ed23aeb 100644
--- a/event.h
+++ b/event.h
@@ -127,6 +127,13 @@ void *event_init(void);
int event_dispatch(void);
int event_base_dispatch(struct event_base *);
+#define _EVENT_LOG_DEBUG 0
+#define _EVENT_LOG_MSG 1
+#define _EVENT_LOG_WARN 2
+#define _EVENT_LOG_ERR 3
+typedef void (*event_log_cb)(int severity, const char *msg);
+void event_set_log_callback(event_log_cb cb);
+
/* Associate a different event base with an event */
int event_base_set(struct event_base *, struct event *);
diff --git a/kqueue.c b/kqueue.c
index 7373d335..5bc44641 100644
--- a/kqueue.c
+++ b/kqueue.c
@@ -44,18 +44,10 @@
#include <string.h>
#include <unistd.h>
#include <errno.h>
-#include <err.h>
#ifdef HAVE_INTTYPES_H
#include <inttypes.h>
#endif
-#ifdef USE_LOG
-#include "log.h"
-#else
-#define LOG_DBG(x)
-#define log_error warn
-#endif
-
#if defined(HAVE_INTTYPES_H) && !defined(__OpenBSD__) && !defined(__FreeBSD__)
#define INTPTR(x) (intptr_t)x
#else
@@ -63,6 +55,7 @@
#endif
#include "event.h"
+#include "log.h"
#define EVLIST_X_KQINKERNEL 0x1000
@@ -108,7 +101,7 @@ kq_init(void)
/* Initalize the kernel queue */
if ((kq = kqueue()) == -1) {
- log_error("kqueue");
+ event_warn("kqueue");
free (kqueueop);
return (NULL);
}
@@ -152,7 +145,7 @@ kq_insert(struct kqop *kqop, struct kevent *kev)
newchange = realloc(kqop->changes,
nevents * sizeof(struct kevent));
if (newchange == NULL) {
- log_error("%s: malloc", __func__);
+ event_warn("%s: malloc", __func__);
return (-1);
}
kqop->changes = newchange;
@@ -165,7 +158,7 @@ kq_insert(struct kqop *kqop, struct kevent *kev)
* the next realloc will pick it up.
*/
if (newresult == NULL) {
- log_error("%s: malloc", __func__);
+ event_warn("%s: malloc", __func__);
return (-1);
}
kqop->events = newresult;
@@ -175,7 +168,7 @@ kq_insert(struct kqop *kqop, struct kevent *kev)
memcpy(&kqop->changes[kqop->nchanges++], kev, sizeof(struct kevent));
- LOG_DBG((LOG_MISC, 70, "%s: fd %d %s%s",
+ event_debug(("%s: fd %d %s%s",
__func__, kev->ident,
kev->filter == EVFILT_READ ? "EVFILT_READ" : "EVFILT_WRITE",
kev->flags == EV_DELETE ? " (del)" : ""));
@@ -206,14 +199,14 @@ kq_dispatch(struct event_base *base, void *arg, struct timeval *tv)
kqop->nchanges = 0;
if (res == -1) {
if (errno != EINTR) {
- log_error("kevent");
+ event_warn("kevent");
return (-1);
}
return (0);
}
- LOG_DBG((LOG_MISC, 80, "%s: kevent reports %d", __func__, res));
+ event_debug(("%s: kevent reports %d", __func__, res));
for (i = 0; i < res; i++) {
int which = 0;
diff --git a/log.c b/log.c
new file mode 100644
index 00000000..7aac5ef3
--- /dev/null
+++ b/log.c
@@ -0,0 +1,202 @@
+/* $OpenBSD: err.c,v 1.2 2002/06/25 15:50:15 mickey Exp $ */
+
+/*
+ * log.c
+ *
+ * Based on err.c, which was adapted from OpenBSD libc *err* *warn* code.
+ *
+ * Copyright (c) 2005 Nick Mathewson <nickm@freehaven.net>
+ *
+ * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
+ *
+ * Copyright (c) 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifdef WIN32
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#undef WIN32_LEAN_AND_MEAN
+#include "misc.h"
+#endif
+#include <sys/types.h>
+#include <sys/tree.h>
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#else
+#include <sys/_time.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+#include "event.h"
+
+static void _warn_helper(int severity, int log_errno, const char *fmt,
+ va_list ap);
+static void event_log(int severity, const char *msg);
+
+static int
+event_vsnprintf(char *str, size_t size, const char *format, va_list args)
+{
+ int r;
+ if (size == 0)
+ return -1;
+#ifdef WIN32
+ r = _vsnprintf(str, size, format, args);
+#else
+ r = vsnprintf(str, size, format, args);
+#endif
+ str[size-1] = '\0';
+ if (r < 0 || ((size_t)r) >= size) {
+ /* different platforms behave differently on overflow;
+ * handle both kinds. */
+ return -1;
+ }
+ return r;
+}
+
+void
+event_err(int eval, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ _warn_helper(_EVENT_LOG_ERR, errno, fmt, ap);
+ va_end(ap);
+ exit(eval);
+}
+
+void
+event_warn(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ _warn_helper(_EVENT_LOG_WARN, errno, fmt, ap);
+ va_end(ap);
+}
+
+void
+event_errx(int eval, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ _warn_helper(_EVENT_LOG_ERR, -1, fmt, ap);
+ va_end(ap);
+ exit(eval);
+}
+
+void
+event_warnx(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ _warn_helper(_EVENT_LOG_WARN, -1, fmt, ap);
+ va_end(ap);
+}
+
+void
+event_msgx(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ _warn_helper(_EVENT_LOG_MSG, -1, fmt, ap);
+ va_end(ap);
+}
+
+void
+_event_debugx(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ _warn_helper(_EVENT_LOG_DEBUG, -1, fmt, ap);
+ va_end(ap);
+}
+
+static void
+_warn_helper(int severity, int log_errno, const char *fmt, va_list ap)
+{
+ char buf[1024];
+ size_t len;
+
+ if (fmt != NULL)
+ event_vsnprintf(buf, sizeof(buf), fmt, ap);
+ else
+ buf[0] = '\0';
+
+ if (log_errno >= 0) {
+ len = strlen(buf);
+ if (len < sizeof(buf)-3) {
+ event_vsnprintf(buf+len, sizeof(buf)-len, ": %s",
+ strerror(log_errno));
+ }
+ }
+
+ event_log(severity, buf);
+}
+
+static event_log_cb log_fn = NULL;
+
+void
+event_set_log_callback(event_log_cb cb)
+{
+ log_fn = cb;
+}
+
+static void
+event_log(int severity, const char *msg)
+{
+ if (log_fn)
+ log_fn(severity, msg);
+ else {
+ const char *severity_str;
+ switch (severity) {
+ case _EVENT_LOG_DEBUG:
+ severity_str = "debug";
+ break;
+ case _EVENT_LOG_MSG:
+ severity_str = "msg";
+ break;
+ case _EVENT_LOG_WARN:
+ severity_str = "warn";
+ break;
+ case _EVENT_LOG_ERR:
+ severity_str = "err";
+ break;
+ default:
+ severity_str = "???";
+ break;
+ }
+ (void)fprintf(stderr, "[%s] %s\n", severity_str, msg);
+ }
+}
diff --git a/log.h b/log.h
new file mode 100644
index 00000000..e19d8a06
--- /dev/null
+++ b/log.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2000-2004 Niels Provos <provos@citi.umich.edu>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _LOG_H_
+#define _LOG_H_
+
+void event_err(int eval, const char *fmt, ...);
+void event_warn(const char *fmt, ...);
+void event_errx(int eval, const char *fmt, ...);
+void event_warnx(const char *fmt, ...);
+void event_msgx(const char *fmt, ...);
+void _event_debugx(const char *fmt, ...);
+#undef USE_DEBUG
+#ifdef USE_DEBUG
+#define event_debug(x) _event_debugx x
+#else
+#define event_debug(x)
+#endif
+
+#endif
diff --git a/poll.c b/poll.c
index f34451c2..8bff5d34 100644
--- a/poll.c
+++ b/poll.c
@@ -45,18 +45,11 @@
#include <string.h>
#include <unistd.h>
#include <errno.h>
-#include <err.h>
-
-#ifdef USE_LOG
-#include "log.h"
-#else
-#define LOG_DBG(x)
-#define log_error(x) perror(x)
-#endif
#include "event.h"
#include "event-internal.h"
#include "evsignal.h"
+#include "log.h"
extern volatile sig_atomic_t evsignal_caught;
@@ -132,13 +125,13 @@ poll_dispatch(struct event_base *base, void *arg, struct timeval *tv)
pop->event_set = realloc(pop->event_set,
count * sizeof(struct pollfd));
if (pop->event_set == NULL) {
- log_error("realloc");
+ event_warn("realloc");
return (-1);
}
pop->event_back = realloc(pop->event_back,
count * sizeof(struct event *));
if (pop->event_back == NULL) {
- log_error("realloc");
+ event_warn("realloc");
return (-1);
}
pop->event_count = count;
@@ -177,7 +170,7 @@ poll_dispatch(struct event_base *base, void *arg, struct timeval *tv)
if (res == -1) {
if (errno != EINTR) {
- log_error("poll");
+ event_warn("poll");
return (-1);
}
@@ -186,7 +179,7 @@ poll_dispatch(struct event_base *base, void *arg, struct timeval *tv)
} else if (evsignal_caught)
evsignal_process();
- LOG_DBG((LOG_MISC, 80, "%s: poll reports %d", __func__, res));
+ event_debug(("%s: poll reports %d", __func__, res));
if (res == 0)
return (0);
diff --git a/rtsig.c b/rtsig.c
index 54e5cdf6..32a782cd 100644
--- a/rtsig.c
+++ b/rtsig.c
@@ -28,6 +28,7 @@
#define EVLIST_X_NORT 0x1000 /* Skip RT signals (internal) */
#include "event.h"
+#include "log.h"
extern struct event_list signalqueue;
struct rtsigop {
@@ -427,7 +428,7 @@ rtsig_dispatch(struct event_base *base, void *arg, struct timeval *tv)
op->toev = malloc(sizeof(*op->toev) * op->max);
if (op->poll == NULL || op->toev == NULL)
- err(1, "%s: malloc");
+ event_err(1, "%s: malloc");
}
return (0);
diff --git a/select.c b/select.c
index f1353427..65fca235 100644
--- a/select.c
+++ b/select.c
@@ -46,16 +46,10 @@
#include <errno.h>
#include <err.h>
-#ifdef USE_LOG
-#include "log.h"
-#else
-#define LOG_DBG(x)
-#define log_error(x) perror(x)
-#endif
-
#include "event.h"
#include "event-internal.h"
#include "evsignal.h"
+#include "log.h"
#ifndef howmany
#define howmany(x, y) (((x)+((y)-1))/(y))
@@ -128,12 +122,12 @@ select_recalc(struct event_base *base, void *arg, int max)
fdsz = howmany(sop->event_fds + 1, NFDBITS) * sizeof(fd_mask);
if (fdsz > sop->event_fdsz) {
if ((readset = realloc(sop->event_readset, fdsz)) == NULL) {
- log_error("malloc");
+ event_warn("malloc");
return (-1);
}
if ((writeset = realloc(sop->event_writeset, fdsz)) == NULL) {
- log_error("malloc");
+ event_warn("malloc");
free(readset);
return (-1);
}
@@ -179,7 +173,7 @@ select_dispatch(struct event_base *base, void *arg, struct timeval *tv)
if (res == -1) {
if (errno != EINTR) {
- log_error("select");
+ event_warn("select");
return (-1);
}
@@ -188,7 +182,7 @@ select_dispatch(struct event_base *base, void *arg, struct timeval *tv)
} else if (evsignal_caught)
evsignal_process();
- LOG_DBG((LOG_MISC, 80, "%s: select reports %d", __func__, res));
+ event_debug(("%s: select reports %d", __func__, res));
maxfd = 0;
for (ev = TAILQ_FIRST(&base->eventqueue); ev != NULL; ev = next) {
diff --git a/signal.c b/signal.c
index 54c2d6d6..cc557388 100644
--- a/signal.c
+++ b/signal.c
@@ -42,20 +42,13 @@
#include <string.h>
#include <unistd.h>
#include <errno.h>
-#include <err.h>
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
-#ifdef USE_LOG
-#include "log.h"
-#else
-#define LOG_DBG(x)
-#define log_error(x) perror(x)
-#endif
-
#include "event.h"
#include "evsignal.h"
+#include "log.h"
extern struct event_list signalqueue;
@@ -80,14 +73,14 @@ static void evsignal_cb(int fd, short what, void *arg)
n = read(fd, signals, sizeof(signals));
if (n == -1)
- err(1, "%s: read", __func__);
+ event_err(1, "%s: read", __func__);
event_add(ev, NULL);
}
#ifdef HAVE_SETFD
#define FD_CLOSEONEXEC(x) do { \
if (fcntl(x, F_SETFD, 1) == -1) \
- warn("fcntl(%d, F_SETFD)", x); \
+ event_warn("fcntl(%d, F_SETFD)", x); \
} while (0)
#else
#define FD_CLOSEONEXEC(x)
@@ -104,7 +97,7 @@ evsignal_init(sigset_t *evsigmask)
* signals that got delivered.
*/
if (socketpair(AF_UNIX, SOCK_STREAM, 0, ev_signal_pair) == -1)
- err(1, "%s: socketpair", __func__);
+ event_err(1, "%s: socketpair", __func__);
FD_CLOSEONEXEC(ev_signal_pair[0]);
FD_CLOSEONEXEC(ev_signal_pair[1]);
@@ -120,7 +113,7 @@ evsignal_add(sigset_t *evsigmask, struct event *ev)
int evsignal;
if (ev->ev_events & (EV_READ|EV_WRITE))
- errx(1, "%s: EV_SIGNAL incompatible use", __func__);
+ event_errx(1, "%s: EV_SIGNAL incompatible use", __func__);
evsignal = EVENT_SIGNAL(ev);
sigaddset(evsigmask, evsignal);