From cf7982e908f98e1ab7e90ffb039ed5968589ae24 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Mon, 11 Dec 2000 16:31:11 +0000 Subject: Patch from Larry Doolittle, fix up logging across multilple lines, hopefully fixing bug #1061. --- sysklogd/syslogd.c | 55 +++++++++++++++++++++++++----------------------------- syslogd.c | 55 +++++++++++++++++++++++++----------------------------- 2 files changed, 50 insertions(+), 60 deletions(-) diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c index fd56aad97..9e174e6e8 100644 --- a/sysklogd/syslogd.c +++ b/sysklogd/syslogd.c @@ -403,7 +403,8 @@ static void doKlogd (void) { int priority = LOG_INFO; char log_buffer[4096]; - char *logp; + int i, n, lastc; + char *start; /* Set up sig handlers */ signal(SIGINT, klogd_signal); @@ -420,12 +421,14 @@ static void doKlogd (void) logMessage(0, "klogd started: " "BusyBox v" BB_VER " (" BB_BT ")"); + /* "Open the log. Currently a NOP." */ klogctl(1, NULL, 0); while (1) { /* Use kernel syscalls */ memset(log_buffer, '\0', sizeof(log_buffer)); - if (klogctl(2, log_buffer, sizeof(log_buffer)) < 0) { + n = klogctl(2, log_buffer, sizeof(log_buffer)); + if (n < 0) { char message[80]; if (errno == EINTR) @@ -435,37 +438,29 @@ static void doKlogd (void) logMessage(LOG_SYSLOG | LOG_ERR, message); exit(1); } - logp = log_buffer; - if (*log_buffer == '<') { - switch (*(log_buffer + 1)) { - case '0': - priority = LOG_EMERG; - break; - case '1': - priority = LOG_ALERT; - break; - case '2': - priority = LOG_CRIT; - break; - case '3': - priority = LOG_ERR; - break; - case '4': - priority = LOG_WARNING; - break; - case '5': - priority = LOG_NOTICE; - break; - case '6': + + /* klogctl buffer parsing modelled after code in dmesg.c */ + start=&log_buffer[0]; + lastc='\0'; + for (i=0; i') i++; + start = &log_buffer[i]; + } + if (log_buffer[i] == '\n') { + log_buffer[i] = '\0'; /* zero terminate this message */ + logMessage(LOG_KERN | priority, start); + start = &log_buffer[i+1]; priority = LOG_INFO; - break; - case '7': - default: - priority = LOG_DEBUG; } - logp += 3; + lastc = log_buffer[i]; } - logMessage(LOG_KERN | priority, logp); } } diff --git a/syslogd.c b/syslogd.c index fd56aad97..9e174e6e8 100644 --- a/syslogd.c +++ b/syslogd.c @@ -403,7 +403,8 @@ static void doKlogd (void) { int priority = LOG_INFO; char log_buffer[4096]; - char *logp; + int i, n, lastc; + char *start; /* Set up sig handlers */ signal(SIGINT, klogd_signal); @@ -420,12 +421,14 @@ static void doKlogd (void) logMessage(0, "klogd started: " "BusyBox v" BB_VER " (" BB_BT ")"); + /* "Open the log. Currently a NOP." */ klogctl(1, NULL, 0); while (1) { /* Use kernel syscalls */ memset(log_buffer, '\0', sizeof(log_buffer)); - if (klogctl(2, log_buffer, sizeof(log_buffer)) < 0) { + n = klogctl(2, log_buffer, sizeof(log_buffer)); + if (n < 0) { char message[80]; if (errno == EINTR) @@ -435,37 +438,29 @@ static void doKlogd (void) logMessage(LOG_SYSLOG | LOG_ERR, message); exit(1); } - logp = log_buffer; - if (*log_buffer == '<') { - switch (*(log_buffer + 1)) { - case '0': - priority = LOG_EMERG; - break; - case '1': - priority = LOG_ALERT; - break; - case '2': - priority = LOG_CRIT; - break; - case '3': - priority = LOG_ERR; - break; - case '4': - priority = LOG_WARNING; - break; - case '5': - priority = LOG_NOTICE; - break; - case '6': + + /* klogctl buffer parsing modelled after code in dmesg.c */ + start=&log_buffer[0]; + lastc='\0'; + for (i=0; i') i++; + start = &log_buffer[i]; + } + if (log_buffer[i] == '\n') { + log_buffer[i] = '\0'; /* zero terminate this message */ + logMessage(LOG_KERN | priority, start); + start = &log_buffer[i+1]; priority = LOG_INFO; - break; - case '7': - default: - priority = LOG_DEBUG; } - logp += 3; + lastc = log_buffer[i]; } - logMessage(LOG_KERN | priority, logp); } } -- cgit v1.2.3