| From 32aae192c849edaeb37a10b2af933dec4f386465 Mon Sep 17 00:00:00 2001 |
| From: Avery Pennarun <apenwarr@gmail.com> |
| Date: Mon, 23 Apr 2012 18:22:47 -0400 |
| Subject: [PATCH] logger.c: fewer buffer size limitations. |
| |
| In one spot, it was limiting messages to 400 bytes. In another, it would |
| read messages only 1024 bytes at a time, logging them in 1024-byte chunks. |
| So bytes 400-1023 were lost, oops. |
| |
| Fixed the 400-byte limit entirely. And now we *shrink* the 1024-byte output |
| buffer to 768 bytes, because syslogd has another 1024-byte limit, except |
| *that* limit includes the header string, so it would tend to chop off |
| 1024-byte strings. Now long strings get chopped into multiple log lines of |
| no more than 768 bytes each, with no characters lost. |
| --- |
| misc-utils/logger.c | 14 +++++++++----- |
| 1 files changed, 9 insertions(+), 5 deletions(-) |
| |
| diff --git a/misc-utils/logger.c b/misc-utils/logger.c |
| index 95ed8be..70daa7d 100644 |
| --- a/misc-utils/logger.c |
| +++ b/misc-utils/logger.c |
| @@ -88,6 +88,7 @@ static void |
| mysyslog(int fd, int logflags, int pri, char *tag, char *msg) { |
| char buf[1000], pid[30], *cp, *tp; |
| time_t now; |
| + struct iovec v[2]; |
| |
| if (fd > -1) { |
| if (logflags & LOG_PID) |
| @@ -104,10 +105,13 @@ mysyslog(int fd, int logflags, int pri, char *tag, char *msg) { |
| (void)time(&now); |
| tp = ctime(&now)+4; |
| |
| - snprintf(buf, sizeof(buf), "<%d>%.15s %.200s%s: %.400s", |
| - pri, tp, cp, pid, msg); |
| - |
| - if (write(fd, buf, strlen(buf)+1) < 0) |
| + snprintf(buf, sizeof(buf), "<%d>%.15s %.200s%s: ", |
| + pri, tp, cp, pid); |
| + v[0].iov_base = buf; |
| + v[0].iov_len = strlen(buf); |
| + v[1].iov_base = msg; |
| + v[1].iov_len = strlen(msg) + 1; |
| + if (writev(fd, v, 2) < 0) |
| return; /* error */ |
| } |
| } |
| @@ -121,7 +125,7 @@ mysyslog(int fd, int logflags, int pri, char *tag, char *msg) { |
| int |
| main(int argc, char **argv) { |
| int ch, logflags, pri; |
| - char *tag, buf[1024]; |
| + char *tag, buf[768]; |
| char *usock = "/dev/log"; |
| int LogSock = -1; |
| |
| -- |
| 1.7.9 |
| |