BSD 4_3 release
[unix-history] / usr / src / lib / libc / gen / syslog.c
index 18940a2..f0dcc80 100644 (file)
@@ -4,9 +4,9 @@
  * specifies the terms and conditions for redistribution.
  */
 
  * specifies the terms and conditions for redistribution.
  */
 
-#ifndef lint
-static char sccsid[] = "@(#)syslog.c   5.2 (Berkeley) %G%";
-#endif not lint
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)syslog.c   5.9 (Berkeley) 5/7/86";
+#endif LIBC_SCCS and not lint
 
 /*
  * SYSLOG -- print message on log file
 
 /*
  * SYSLOG -- print message on log file
@@ -28,8 +28,10 @@ static char sccsid[] = "@(#)syslog.c 5.2 (Berkeley) %G%";
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/file.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/file.h>
-#include <syslog.h>
+#include <sys/signal.h>
+#include <sys/syslog.h>
 #include <netdb.h>
 #include <netdb.h>
+#include <strings.h>
 
 #define        MAXLINE 1024                    /* max message size */
 #define NULL   0                       /* manifest */
 
 #define        MAXLINE 1024                    /* max message size */
 #define NULL   0                       /* manifest */
@@ -66,7 +68,7 @@ syslog(pri, fmt, p0, p1, p2, p3, p4)
        if (pri <= 0 || PRIFAC(pri) >= LOG_NFACILITIES || (PRIMASK(pri) & LogMask) == 0)
                return;
        if (LogFile < 0)
        if (pri <= 0 || PRIFAC(pri) >= LOG_NFACILITIES || (PRIMASK(pri) & LogMask) == 0)
                return;
        if (LogFile < 0)
-               openlog(LogTag, LogStat & ~LOG_ODELAY, 0);
+               openlog(LogTag, LogStat | LOG_NDELAY, 0);
 
        /* set default facility if none specified */
        if ((pri & LOG_FACMASK) == 0)
 
        /* set default facility if none specified */
        if ((pri & LOG_FACMASK) == 0)
@@ -120,22 +122,30 @@ syslog(pri, fmt, p0, p1, p2, p3, p4)
        /* output the message to the local logger */
        if (sendto(LogFile, outline, c, 0, &SyslogAddr, sizeof SyslogAddr) >= 0)
                return;
        /* output the message to the local logger */
        if (sendto(LogFile, outline, c, 0, &SyslogAddr, sizeof SyslogAddr) >= 0)
                return;
-       if (!(LogStat & LOG_CONS) && (pri & LOG_PRIMASK) <= LOG_ERR)
+       if (!(LogStat & LOG_CONS))
                return;
 
        /* output the message to the console */
                return;
 
        /* output the message to the console */
-       pid = fork();
+       pid = vfork();
        if (pid == -1)
                return;
        if (pid == 0) {
        if (pid == -1)
                return;
        if (pid == 0) {
-               LogFile = open(ctty, O_WRONLY);
+               int fd;
+
+               signal(SIGALRM, SIG_DFL);
+               sigsetmask(sigblock(0) & ~sigmask(SIGALRM));
+               alarm(5);
+               fd = open(ctty, O_WRONLY);
+               alarm(0);
                strcat(o, "\r");
                strcat(o, "\r");
-               write(LogFile, outline, c+1);
-               close(LogFile);
-               exit(0);
+               o = index(outline, '>') + 1;
+               write(fd, o, c + 1 - (o - outline));
+               close(fd);
+               _exit(0);
        }
        }
-       while ((c = wait((int *)0)) > 0 && c != pid)
-               ;
+       if (!(LogStat & LOG_NOWAIT))
+               while ((c = wait((int *)0)) > 0 && c != pid)
+                       ;
 }
 
 /*
 }
 
 /*
@@ -155,7 +165,7 @@ openlog(ident, logstat, logfac)
                return;
        SyslogAddr.sa_family = AF_UNIX;
        strncpy(SyslogAddr.sa_data, logname, sizeof SyslogAddr.sa_data);
                return;
        SyslogAddr.sa_family = AF_UNIX;
        strncpy(SyslogAddr.sa_data, logname, sizeof SyslogAddr.sa_data);
-       if (!(LogStat & LOG_ODELAY)) {
+       if (LogStat & LOG_NDELAY) {
                LogFile = socket(AF_UNIX, SOCK_DGRAM, 0);
                fcntl(LogFile, F_SETFD, 1);
        }
                LogFile = socket(AF_UNIX, SOCK_DGRAM, 0);
                fcntl(LogFile, F_SETFD, 1);
        }
@@ -164,6 +174,7 @@ openlog(ident, logstat, logfac)
 /*
  * CLOSELOG -- close the system log
  */
 /*
  * CLOSELOG -- close the system log
  */
+
 closelog()
 {
 
 closelog()
 {