summaryrefslogtreecommitdiff
path: root/src/misc
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2014-07-11 21:20:04 -0400
committerRich Felker <dalias@aerifal.cx>2014-07-11 21:20:04 -0400
commitb8c4cf61cbe83317d1df67dfe7877872faf0dec5 (patch)
tree4efffbc44abed95a1e0adce315f718ad1d1ef1f0 /src/misc
parentda27118157c2942d7652138b8d8b0056fc8f872f (diff)
downloadmusl-b8c4cf61cbe83317d1df67dfe7877872faf0dec5.tar.gz
musl-b8c4cf61cbe83317d1df67dfe7877872faf0dec5.tar.bz2
musl-b8c4cf61cbe83317d1df67dfe7877872faf0dec5.tar.xz
musl-b8c4cf61cbe83317d1df67dfe7877872faf0dec5.zip
implement the LOG_PERROR option in syslog
this is a nonstandard feature, but easy and inexpensive to add. since the corresponding macro has always been defined in our syslog.h, it makes sense to actually support it. applications may reasonably be using the presence of the macro to assume that the feature is supported. the behavior of omitting the 'header' part of the log message does not seem to be well-documented, but matches other implementations (at least glibc) which have this option. based on a patch by Clément Vasseur, but simplified using %n.
Diffstat (limited to 'src/misc')
-rw-r--r--src/misc/syslog.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/misc/syslog.c b/src/misc/syslog.c
index 57f1d75c..eb782984 100644
--- a/src/misc/syslog.c
+++ b/src/misc/syslog.c
@@ -80,6 +80,7 @@ static void _vsyslog(int priority, const char *message, va_list ap)
int errno_save = errno;
int pid;
int l, l2;
+ int hlen;
if (log_fd < 0) {
__openlog();
@@ -93,8 +94,8 @@ static void _vsyslog(int priority, const char *message, va_list ap)
strftime(timebuf, sizeof timebuf, "%b %e %T", &tm);
pid = (log_opt & LOG_PID) ? getpid() : 0;
- l = snprintf(buf, sizeof buf, "<%d>%s %s%s%.0d%s: ",
- priority, timebuf, log_ident, "["+!pid, pid, "]"+!pid);
+ l = snprintf(buf, sizeof buf, "<%d>%s %n%s%s%.0d%s: ",
+ priority, timebuf, &hlen, log_ident, "["+!pid, pid, "]"+!pid);
errno = errno_save;
l2 = vsnprintf(buf+l, sizeof buf - l, message, ap);
if (l2 >= 0) {
@@ -102,6 +103,7 @@ static void _vsyslog(int priority, const char *message, va_list ap)
else l += l2;
if (buf[l-1] != '\n') buf[l++] = '\n';
send(log_fd, buf, l, 0);
+ if (log_opt & LOG_PERROR) dprintf(2, "%.*s", l-hlen, buf+hlen);
}
}