diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-10-20 01:07:49 +0400 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-10-20 01:07:49 +0400 |
commit | 0016bcee374606e79c48a1a97479b0521f947942 (patch) | |
tree | cad91be9d3821dfb26f433b19ca0fb24d9c1ba8a /sysklogd/klogd.c | |
parent | ef6c6d8cfef071435ccf275ad404a501626b706c (diff) |
klogd: do not log partial lines
function old new delta
overlapping_strcpy 15 18 +3
klogd_main 438 436 -2
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'sysklogd/klogd.c')
-rw-r--r-- | sysklogd/klogd.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/sysklogd/klogd.c b/sysklogd/klogd.c index 6766b649d..0d4c2578d 100644 --- a/sysklogd/klogd.c +++ b/sysklogd/klogd.c @@ -132,7 +132,7 @@ int klogd_main(int argc UNUSED_PARAM, char **argv) int i = 0; char *opt_c; int opt; - int used = 0; + int used; opt = getopt32(argv, "c:n", &opt_c); if (opt & OPT_LEVEL) { @@ -159,6 +159,7 @@ int klogd_main(int argc UNUSED_PARAM, char **argv) syslog(LOG_NOTICE, "klogd started: %s", bb_banner); + used = 0; while (!bb_got_signal) { int n; int priority; @@ -175,22 +176,22 @@ int klogd_main(int argc UNUSED_PARAM, char **argv) } start[n] = '\0'; - /* klogctl buffer parsing modelled after code in dmesg.c */ /* Process each newline-terminated line in the buffer */ start = log_buffer; while (1) { char *newline = strchrnul(start, '\n'); if (*newline == '\0') { - /* This line is incomplete... */ - if (start != log_buffer) { - /* move it to the front of the buffer */ - overlapping_strcpy(log_buffer, start); - used = newline - start; - /* don't log it yet */ + /* This line is incomplete */ + + /* move it to the front of the buffer */ + overlapping_strcpy(log_buffer, start); + used = newline - start; + if (used < KLOGD_LOGBUF_SIZE-1) { + /* buffer isn't full */ break; } - /* ...but if buffer is full, log it anyway */ + /* buffer is full, log it anyway */ used = 0; newline = NULL; } else { |