diff options
Diffstat (limited to 'misc')
-rw-r--r-- | misc/Makefile | 4 | ||||
-rw-r--r-- | misc/sys/select.h | 2 | ||||
-rw-r--r-- | misc/sys/ustat.h | 8 | ||||
-rw-r--r-- | misc/syslog.c | 51 |
4 files changed, 45 insertions, 20 deletions
diff --git a/misc/Makefile b/misc/Makefile index 01e223836f..1631b2121d 100644 --- a/misc/Makefile +++ b/misc/Makefile @@ -28,7 +28,7 @@ headers := sys/uio.h iovec.h sys/ioctl.h ioctls.h ioctl-types.h \ ttyent.h syslog.h sys/syslog.h paths.h sys/reboot.h \ sys/mman.h sys/param.h fstab.h mntent.h search.h err.h error.h\ sys/queue.h sysexits.h syscall.h sys/syscall.h sys/swap.h \ - sys/select.h + sys/select.h ustat.h sys/ustat.h ustatbits.h routines := brk sbrk sstk ioctl \ readv writev \ @@ -54,7 +54,7 @@ routines := brk sbrk sstk ioctl \ mmap munmap mprotect msync madvise \ efgcvt efgcvt_r qefgcvt qefgcvt_r \ hsearch hsearch_r tsearch lsearch \ - err error + err error ustat aux := init-misc distribute := bsd-compat.c extra-objs := bsd-compat.o diff --git a/misc/sys/select.h b/misc/sys/select.h index dcb2012cff..729ce7a988 100644 --- a/misc/sys/select.h +++ b/misc/sys/select.h @@ -39,6 +39,8 @@ __BEGIN_DECLS of `struct timeval'. */ struct timeval; +typedef __fd_mask fd_mask; + /* Representation of a set of file descriptors. */ #define fd_set __fd_set diff --git a/misc/sys/ustat.h b/misc/sys/ustat.h index 57086c96da..fd51c5904e 100644 --- a/misc/sys/ustat.h +++ b/misc/sys/ustat.h @@ -20,15 +20,17 @@ Cambridge, MA 02139, USA. */ /* This interface is obsolete. Use <sys/statfs.h> instead. */ #ifndef _SYS_USTAT_H -#define _SYS_USTAT_H 1 + +#define _SYS_USTAT_H 1 +#include <features.h> #include <sys/types.h> #include <ustatbits.h> __BEGIN_DECLS -extern int __ustat __P ((dev_t, struct ustat *)); -extern int ustat __P ((dev_t, struct ustat *)); +extern int __ustat __P ((__dev_t __dev, struct ustat *__ubuf)); +extern int ustat __P ((__dev_t __dev, struct ustat *__ubuf)); __END_DECLS diff --git a/misc/syslog.c b/misc/syslog.c index bcac6c74cb..3a39c4317a 100644 --- a/misc/syslog.c +++ b/misc/syslog.c @@ -56,6 +56,7 @@ static char sccsid[] = "@(#)syslog.c 8.4 (Berkeley) 3/18/94"; #include <varargs.h> #endif +static int LogType = SOCK_DGRAM; /* type of socket connection */ static int LogFile = -1; /* fd for log */ static int connected; /* have done connect */ static int LogStat = 0; /* status bits, set by openlog() */ @@ -163,8 +164,15 @@ vsyslog(pri, fmt, ap) /* Get connected, output the message to the local logger. */ if (!connected) openlog(LogTag, LogStat | LOG_NDELAY, 0); + + /* If we have a SOCK_STREAM connection, also send ASCII NUL as + a record terminator. */ + if (LogType == SOCK_STREAM) + ++bufsize; + if (__send(LogFile, buf, bufsize, 0) < 0) { + closelog (); /* attempt re-open next time */ /* * Output the message to the console; don't worry about blocking, * if console blocks everything will. Make sure the error reported @@ -194,23 +202,36 @@ openlog(ident, logstat, logfac) if (logfac != 0 && (logfac &~ LOG_FACMASK) == 0) LogFacility = logfac; - if (LogFile == -1) { - SyslogAddr.sa_family = AF_UNIX; - (void)strncpy(SyslogAddr.sa_data, _PATH_LOG, - sizeof(SyslogAddr.sa_data)); - if (LogStat & LOG_NDELAY) { - if ((LogFile = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1) - return; - (void)fcntl(LogFile, F_SETFD, 1); + while (1) { + if (LogFile == -1) { + SyslogAddr.sa_family = AF_UNIX; + (void)strncpy(SyslogAddr.sa_data, _PATH_LOG, + sizeof(SyslogAddr.sa_data)); + if (LogStat & LOG_NDELAY) { + if ((LogFile = socket(AF_UNIX, LogType, 0)) + == -1) + return; + (void)fcntl(LogFile, F_SETFD, 1); + } } + if (LogFile != -1 && !connected) + if (__connect(LogFile, &SyslogAddr, sizeof(SyslogAddr)) + == -1) + { + int saved_errno = errno; + (void)close(LogFile); + LogFile = -1; + if (LogType == SOCK_DGRAM + && saved_errno == EPROTOTYPE) + { + /* retry with next SOCK_STREAM: */ + LogType = SOCK_STREAM; + continue; + } + } else + connected = 1; + break; } - if (LogFile != -1 && !connected) - if (__connect(LogFile, &SyslogAddr, sizeof(SyslogAddr)) == -1) - { - (void)close(LogFile); - LogFile = -1; - } else - connected = 1; } void |