diff options
Diffstat (limited to 'src/misc')
-rw-r--r-- | src/misc/syslog.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/misc/syslog.c b/src/misc/syslog.c index 6d2a864a..fdf90ba9 100644 --- a/src/misc/syslog.c +++ b/src/misc/syslog.c @@ -8,6 +8,7 @@ #include <string.h> #include <pthread.h> #include <errno.h> +#include <fcntl.h> #include "libc.h" #include "atomic.h" @@ -81,6 +82,7 @@ static void _vsyslog(int priority, const char *message, va_list ap) int pid; int l, l2; int hlen; + int fd; if (log_fd < 0) __openlog(); @@ -99,7 +101,13 @@ static void _vsyslog(int priority, const char *message, va_list ap) if (l2 >= sizeof buf - l) l = sizeof buf - 1; else l += l2; if (buf[l-1] != '\n') buf[l++] = '\n'; - send(log_fd, buf, l, 0); + if (send(log_fd, buf, l, 0) < 0 && (log_opt & LOG_CONS)) { + fd = open("/dev/console", O_WRONLY|O_NOCTTY|O_CLOEXEC); + if (fd >= 0) { + dprintf(fd, "%.*s", l-hlen, buf+hlen); + close(fd); + } + } if (log_opt & LOG_PERROR) dprintf(2, "%.*s", l-hlen, buf+hlen); } } |