From f173b5d9e29c2f107eee9ab1186af9fc1fc0ff31 Mon Sep 17 00:00:00 2001 From: Niklas Date: Mon, 11 Jul 2011 16:55:28 +0200 Subject: added the custom dhcpcd client to git. --- workspace/customdhcpcd/src/logger.c | 126 ++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 workspace/customdhcpcd/src/logger.c (limited to 'workspace/customdhcpcd/src/logger.c') diff --git a/workspace/customdhcpcd/src/logger.c b/workspace/customdhcpcd/src/logger.c new file mode 100644 index 0000000..d084e62 --- /dev/null +++ b/workspace/customdhcpcd/src/logger.c @@ -0,0 +1,126 @@ +/* + * dhcpcd - DHCP client daemon + * Copyright 2006-2008 Roy Marples + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ + +#define SYSLOG_NAMES + +#define COM_CH "/var/tmp/com.socket" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "common.h" +#include "logger.h" + + +static int loglevel = LOG_WARNING; +static char logprefix[12] = {0}; + +int logtolevel (const char *priority) +{ + CODE *c; + + if (isdigit ((int) *priority)) + return (atoi (priority)); + + for (c = prioritynames; c->c_name; c++) + if (! strcasecmp (priority, c->c_name)) + return (c->c_val); + + return (-1); +} + +static const char *leveltolog (int level) { + CODE *c; + + for (c = prioritynames; c->c_name; c++) + if (c->c_val == level) + return (c->c_name); + + return (NULL); +} + +void setloglevel (int level) +{ + loglevel = level; +} + +void setlogprefix (const char *prefix) +{ + snprintf (logprefix, sizeof (logprefix), "%s", prefix); +} + +void logger (int level, const char *fmt, ...) +{ + va_list p; + va_list p2; + FILE *f = stderr; + + va_start (p, fmt); + va_copy (p2, p); + + if (level <= LOG_ERR || level <= loglevel) { + if (level == LOG_DEBUG || level == LOG_INFO) + f = stdout; + fprintf (f, "%s, %s", leveltolog (level), logprefix); + vfprintf (f, fmt, p); + fputc ('\n', f); + + /* stdout, stderr may be re-directed to some kind of buffer. + * So we always flush to ensure it's written. */ + fflush (f); + } + + if (level < LOG_DEBUG || level <= loglevel) { + size_t len = strlen (logprefix); + size_t fmt2len = strlen (fmt) + len + 1; + char *fmt2 = malloc (sizeof (char) * fmt2len); + char *pf = fmt2; + if (fmt2) { + memcpy (pf, logprefix, len); + pf += len; + strlcpy (pf, fmt, fmt2len - len); + vsyslog (level, fmt2, p2); + free (fmt2); + } else { + vsyslog (level, fmt, p2); + syslog (LOG_ERR, "logger: memory exhausted"); + exit (EXIT_FAILURE); + } + } + + va_end (p2); + va_end (p); +} + -- cgit v1.2.3-55-g7522