mirror of
git://git.musl-libc.org/musl
synced 2025-03-06 20:48:29 +01:00
implement the LOG_CONS option in syslog
this was previously a no-op, somewhat intentionally, because I failed to understand that it only has an effect when sending to the logging facility fails and thus is not the nuisance that it would be if always sent output to the console.
This commit is contained in:
parent
a64a045d1d
commit
781f26bc92
1 changed files with 9 additions and 1 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue