diff options
Diffstat (limited to 'mit-pthreads/gen/syslog.c')
-rw-r--r-- | mit-pthreads/gen/syslog.c | 216 |
1 files changed, 0 insertions, 216 deletions
diff --git a/mit-pthreads/gen/syslog.c b/mit-pthreads/gen/syslog.c deleted file mode 100644 index e49795ecb69..00000000000 --- a/mit-pthreads/gen/syslog.c +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright (c) 1983, 1988 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that this notice is preserved and that due credit is given - * to the University of California at Berkeley. The name of the University - * may not be used to endorse or promote products derived from this - * software without specific prior written permission. This software - * is provided ``as is'' without express or implied warranty. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static char sccsid[] = "@(#)syslog.c 5.14 (Berkeley) 5/20/88"; -#endif /* LIBC_SCCS and not lint */ - - -/* - * SYSLOG -- print message on log file - * - * This routine looks a lot like printf, except that it - * outputs to the log file instead of the standard output. - * Also: - * adds a timestamp, - * prints the module name in front of the message, - * has some other formatting types (or will sometime), - * adds a newline on the end of the message. - * - * The output of this routine is intended to be read by /etc/syslogd. - * - * Author: Eric Allman - * Modified to use UNIX domain IPC by Ralph Campbell - * Modified for pthreads and made more POSIX-compliant by Greg Hudson - */ - -#include <pthread.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <signal.h> -#include <stdio.h> -#include <stdarg.h> -#include <string.h> -#include <fcntl.h> -#include <netdb.h> -#include <unistd.h> -#include <errno.h> -#include <syslog.h> - -int socket(); -char *strerror(int); /* For systems that don't prototype it */ - -#define MAXLINE 1024 /* max message size */ - -#define PRIFAC(p) (((p) & LOG_FACMASK) >> 3) - /* XXX should be in <syslog.h> */ -#define IMPORTANT LOG_ERR - -static void basic_init(void); - -static char _log_name[] = "/dev/log"; -static char ctty[] = "/dev/console"; - -static int LogFile = -1; /* fd for log */ -static int LogStat = 0; /* status bits, set by openlog() */ -static char *LogTag = "syslog"; /* string to tag the entry with */ -static int LogMask = 0xff; /* mask of priorities to be logged */ -static int LogFacility = LOG_USER; /* default facility code */ - -static pthread_mutex_t basic_init_lock = PTHREAD_MUTEX_INITIALIZER; - -static struct sockaddr SyslogAddr; /* AF_UNIX address of local logger */ - -static void basic_init() -{ - pthread_mutex_lock(&basic_init_lock); - if (LogFile < 0) - openlog(LogTag, LogStat | LOG_NDELAY, 0); - pthread_mutex_unlock(&basic_init_lock); -} - -void syslog(int pri, char *fmt, ...) -{ - va_list args; - - va_start(args, fmt); - vsyslog(pri, fmt, args); - va_end(args); -} - -void vsyslog(int pri, char *fmt, va_list args) -{ - char buf[MAXLINE + 1], outline[MAXLINE + 1]; - register char *b, *f, *o; - register int c; - time_t now; - int olderrno = errno, fd; - - /* Do a basic initialization if user didn't call openlog(). */ - if (LogFile < 0) - basic_init(); - - /* see if we should just throw out this message */ - if ((unsigned) PRIFAC(pri) >= LOG_NFACILITIES || - (LOG_MASK(pri & LOG_PRIMASK) & LogMask) == 0 || - (pri &~ (LOG_PRIMASK|LOG_FACMASK)) != 0) - return; - - /* set default facility if none specified */ - if ((pri & LOG_FACMASK) == 0) - pri |= LogFacility; - - /* build the message */ - o = outline; - (void)sprintf(o, "<%d>", pri); - o += strlen(o); - time(&now); - (void)sprintf(o, "%.15s ", ctime(&now) + 4); - o += strlen(o); - if (LogTag) { - strcpy(o, LogTag); - o += strlen(o); - } - if (LogStat & LOG_PID) { - (void)sprintf(o, "[%d]", getpid()); - o += strlen(o); - } - if (LogTag) { - strcpy(o, ": "); - o += 2; - } - - b = buf; - f = fmt; - while ((c = *f++) != '\0' && c != '\n' && b < &buf[MAXLINE]) { - char *strerror(); - - if (c != '%') { - *b++ = c; - continue; - } - if ((c = *f++) != 'm') { - *b++ = '%'; - *b++ = c; - continue; - } - strcpy(b, strerror(olderrno)); - b += strlen(b); - } - *b++ = '\n'; - *b = '\0'; - vsprintf(o, buf, args); - c = strlen(outline); - if (c > MAXLINE) - c = MAXLINE; - - /* output the message to the local logger */ - if (sendto(LogFile, outline, c, 0, &SyslogAddr, sizeof SyslogAddr) >= 0) - return; - if (!(LogStat & LOG_CONS)) - return; - - /* output the message to the console */ - fd = open(ctty, O_WRONLY); - alarm(0); - strcat(o, "\r"); - o = strchr(outline, '>') + 1; - write(fd, o, c + 1 - (o - outline)); - close(fd); -} - -/* - * OPENLOG -- open system log - */ - -void openlog(char *ident, int logstat, int logfac) -{ - int flags; - - if (ident != NULL) - LogTag = ident; - LogStat = logstat; - if (logfac != 0 && (logfac &~ LOG_FACMASK) == 0) - LogFacility = logfac; - if (LogFile >= 0) - return; - SyslogAddr.sa_family = AF_UNIX; - strncpy(SyslogAddr.sa_data, _log_name, sizeof SyslogAddr.sa_data); - if (LogStat & LOG_NDELAY) { - LogFile = socket(AF_UNIX, SOCK_DGRAM, 0); - flags = fcntl(LogFile, F_GETFD); - fcntl(LogFile, F_SETFD, flags & O_NONBLOCK); - } -} - -/* - * CLOSELOG -- close the system log - */ - -void closelog() -{ - (void) close(LogFile); - LogFile = -1; -} - -/* - * SETLOGMASK -- set the log mask level - */ -int setlogmask(int pmask) -{ - int omask; - - omask = LogMask; - if (pmask != 0) - LogMask = pmask; - return (omask); -} |