X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flog.c;h=1343b9d98614f049cceeff8d15e5362ad3f3dd52;hp=7b4db4c77a4134f78a7ecd657637248a06049e40;hb=6464aa0890dd21bf0b3e3acfc2b24a425b252c51;hpb=c8513d54d23a36fc84b2f0b96989da3041ad15bc diff --git a/src/log.c b/src/log.c index 7b4db4c77..1343b9d98 100644 --- a/src/log.c +++ b/src/log.c @@ -312,31 +312,49 @@ static int log_dispatch( const char*file, int line, const char *func, - const char *buffer) { + char *buffer) { - int r; + int r = 0; - if (log_target == LOG_TARGET_SYSLOG_OR_KMSG || - log_target == LOG_TARGET_SYSLOG) { + do { + char *e; + int k; - if ((r = write_to_syslog(level, file, line, func, buffer)) < 0) { - log_close_syslog(); - log_open_kmsg(); - } else if (r > 0) - return r; - } + buffer += strspn(buffer, NEWLINE); - if (log_target == LOG_TARGET_SYSLOG_OR_KMSG || - log_target == LOG_TARGET_KMSG) { + if (buffer[0] == 0) + break; - if ((r = write_to_kmsg(level, file, line, func, buffer)) < 0) { - log_close_kmsg(); - log_open_console(); - } else if (r > 0) - return r; - } + if ((e = strpbrk(buffer, NEWLINE))) + *(e++) = 0; - return write_to_console(level, file, line, func, buffer); + if (log_target == LOG_TARGET_SYSLOG_OR_KMSG || + log_target == LOG_TARGET_SYSLOG) { + + if ((r = write_to_syslog(level, file, line, func, buffer)) < 0) { + log_close_syslog(); + log_open_kmsg(); + } else if (r > 0) + r++; + } + + if (log_target == LOG_TARGET_SYSLOG_OR_KMSG || + log_target == LOG_TARGET_KMSG) { + + if ((r = write_to_kmsg(level, file, line, func, buffer)) < 0) { + log_close_kmsg(); + log_open_console(); + } else if (r > 0) + r++; + } + + if ((k = write_to_console(level, file, line, func, buffer)) < 0) + return k; + + buffer = e; + } while (buffer); + + return r; } int log_meta(