1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/ipc/chromium/src/third_party/libevent/log.c Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,224 @@ 1.4 +/* $OpenBSD: err.c,v 1.2 2002/06/25 15:50:15 mickey Exp $ */ 1.5 + 1.6 +/* 1.7 + * log.c 1.8 + * 1.9 + * Based on err.c, which was adapted from OpenBSD libc *err* *warn* code. 1.10 + * 1.11 + * Copyright (c) 2005-2012 Niels Provos and Nick Mathewson 1.12 + * 1.13 + * Copyright (c) 2000 Dug Song <dugsong@monkey.org> 1.14 + * 1.15 + * Copyright (c) 1993 1.16 + * The Regents of the University of California. All rights reserved. 1.17 + * 1.18 + * Redistribution and use in source and binary forms, with or without 1.19 + * modification, are permitted provided that the following conditions 1.20 + * are met: 1.21 + * 1. Redistributions of source code must retain the above copyright 1.22 + * notice, this list of conditions and the following disclaimer. 1.23 + * 2. Redistributions in binary form must reproduce the above copyright 1.24 + * notice, this list of conditions and the following disclaimer in the 1.25 + * documentation and/or other materials provided with the distribution. 1.26 + * 3. Neither the name of the University nor the names of its contributors 1.27 + * may be used to endorse or promote products derived from this software 1.28 + * without specific prior written permission. 1.29 + * 1.30 + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 1.31 + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1.32 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1.33 + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 1.34 + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1.35 + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 1.36 + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 1.37 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 1.38 + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 1.39 + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 1.40 + * SUCH DAMAGE. 1.41 + */ 1.42 + 1.43 +#include "event2/event-config.h" 1.44 + 1.45 +#ifdef WIN32 1.46 +#include <winsock2.h> 1.47 +#define WIN32_LEAN_AND_MEAN 1.48 +#include <windows.h> 1.49 +#undef WIN32_LEAN_AND_MEAN 1.50 +#endif 1.51 +#include <sys/types.h> 1.52 +#include <stdio.h> 1.53 +#include <stdlib.h> 1.54 +#include <stdarg.h> 1.55 +#include <string.h> 1.56 +#include <errno.h> 1.57 +#include "event2/event.h" 1.58 +#include "event2/util.h" 1.59 + 1.60 +#include "log-internal.h" 1.61 + 1.62 +static void _warn_helper(int severity, const char *errstr, const char *fmt, 1.63 + va_list ap); 1.64 +static void event_log(int severity, const char *msg); 1.65 +static void event_exit(int errcode) EV_NORETURN; 1.66 + 1.67 +static event_fatal_cb fatal_fn = NULL; 1.68 + 1.69 +void 1.70 +event_set_fatal_callback(event_fatal_cb cb) 1.71 +{ 1.72 + fatal_fn = cb; 1.73 +} 1.74 + 1.75 +static void 1.76 +event_exit(int errcode) 1.77 +{ 1.78 + if (fatal_fn) { 1.79 + fatal_fn(errcode); 1.80 + exit(errcode); /* should never be reached */ 1.81 + } else if (errcode == _EVENT_ERR_ABORT) 1.82 + abort(); 1.83 + else 1.84 + exit(errcode); 1.85 +} 1.86 + 1.87 +void 1.88 +event_err(int eval, const char *fmt, ...) 1.89 +{ 1.90 + va_list ap; 1.91 + 1.92 + va_start(ap, fmt); 1.93 + _warn_helper(_EVENT_LOG_ERR, strerror(errno), fmt, ap); 1.94 + va_end(ap); 1.95 + event_exit(eval); 1.96 +} 1.97 + 1.98 +void 1.99 +event_warn(const char *fmt, ...) 1.100 +{ 1.101 + va_list ap; 1.102 + 1.103 + va_start(ap, fmt); 1.104 + _warn_helper(_EVENT_LOG_WARN, strerror(errno), fmt, ap); 1.105 + va_end(ap); 1.106 +} 1.107 + 1.108 +void 1.109 +event_sock_err(int eval, evutil_socket_t sock, const char *fmt, ...) 1.110 +{ 1.111 + va_list ap; 1.112 + int err = evutil_socket_geterror(sock); 1.113 + 1.114 + va_start(ap, fmt); 1.115 + _warn_helper(_EVENT_LOG_ERR, evutil_socket_error_to_string(err), fmt, ap); 1.116 + va_end(ap); 1.117 + event_exit(eval); 1.118 +} 1.119 + 1.120 +void 1.121 +event_sock_warn(evutil_socket_t sock, const char *fmt, ...) 1.122 +{ 1.123 + va_list ap; 1.124 + int err = evutil_socket_geterror(sock); 1.125 + 1.126 + va_start(ap, fmt); 1.127 + _warn_helper(_EVENT_LOG_WARN, evutil_socket_error_to_string(err), fmt, ap); 1.128 + va_end(ap); 1.129 +} 1.130 + 1.131 +void 1.132 +event_errx(int eval, const char *fmt, ...) 1.133 +{ 1.134 + va_list ap; 1.135 + 1.136 + va_start(ap, fmt); 1.137 + _warn_helper(_EVENT_LOG_ERR, NULL, fmt, ap); 1.138 + va_end(ap); 1.139 + event_exit(eval); 1.140 +} 1.141 + 1.142 +void 1.143 +event_warnx(const char *fmt, ...) 1.144 +{ 1.145 + va_list ap; 1.146 + 1.147 + va_start(ap, fmt); 1.148 + _warn_helper(_EVENT_LOG_WARN, NULL, fmt, ap); 1.149 + va_end(ap); 1.150 +} 1.151 + 1.152 +void 1.153 +event_msgx(const char *fmt, ...) 1.154 +{ 1.155 + va_list ap; 1.156 + 1.157 + va_start(ap, fmt); 1.158 + _warn_helper(_EVENT_LOG_MSG, NULL, fmt, ap); 1.159 + va_end(ap); 1.160 +} 1.161 + 1.162 +void 1.163 +_event_debugx(const char *fmt, ...) 1.164 +{ 1.165 + va_list ap; 1.166 + 1.167 + va_start(ap, fmt); 1.168 + _warn_helper(_EVENT_LOG_DEBUG, NULL, fmt, ap); 1.169 + va_end(ap); 1.170 +} 1.171 + 1.172 +static void 1.173 +_warn_helper(int severity, const char *errstr, const char *fmt, va_list ap) 1.174 +{ 1.175 + char buf[1024]; 1.176 + size_t len; 1.177 + 1.178 + if (fmt != NULL) 1.179 + evutil_vsnprintf(buf, sizeof(buf), fmt, ap); 1.180 + else 1.181 + buf[0] = '\0'; 1.182 + 1.183 + if (errstr) { 1.184 + len = strlen(buf); 1.185 + if (len < sizeof(buf) - 3) { 1.186 + evutil_snprintf(buf + len, sizeof(buf) - len, ": %s", errstr); 1.187 + } 1.188 + } 1.189 + 1.190 + event_log(severity, buf); 1.191 +} 1.192 + 1.193 +static event_log_cb log_fn = NULL; 1.194 + 1.195 +void 1.196 +event_set_log_callback(event_log_cb cb) 1.197 +{ 1.198 + log_fn = cb; 1.199 +} 1.200 + 1.201 +static void 1.202 +event_log(int severity, const char *msg) 1.203 +{ 1.204 + if (log_fn) 1.205 + log_fn(severity, msg); 1.206 + else { 1.207 + const char *severity_str; 1.208 + switch (severity) { 1.209 + case _EVENT_LOG_DEBUG: 1.210 + severity_str = "debug"; 1.211 + break; 1.212 + case _EVENT_LOG_MSG: 1.213 + severity_str = "msg"; 1.214 + break; 1.215 + case _EVENT_LOG_WARN: 1.216 + severity_str = "warn"; 1.217 + break; 1.218 + case _EVENT_LOG_ERR: 1.219 + severity_str = "err"; 1.220 + break; 1.221 + default: 1.222 + severity_str = "???"; 1.223 + break; 1.224 + } 1.225 + (void)fprintf(stderr, "[%s] %s\n", severity_str, msg); 1.226 + } 1.227 +}