diff options
author | Simon Glass <sjg@chromium.org> | 2021-01-20 20:10:53 -0700 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2021-03-12 17:41:35 -0500 |
commit | 9ad7a6c25c7142a46fe4b811c13bc3280c4bb27f (patch) | |
tree | 3ad69164919285a4f79ecd37355df16db6945f6a /common/log.c | |
parent | 79d5983b61e41d5c586489b03e75a75961d31041 (diff) |
log: Handle line continuation
When multiple log() calls are used which don't end in newline, the
log prefix is prepended multiple times in the same line. This makes the
output look strange.
Fix this by detecting when the previous log record did not end in newline.
In that case, setting a flag.
Drop the unused BUFFSIZE in the test while we are here.
As an example implementation, update log_console to check the flag and
produce the expected output.
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common/log.c')
-rw-r--r-- | common/log.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/common/log.c b/common/log.c index f87e33a9ca..ea407c6db9 100644 --- a/common/log.c +++ b/common/log.c @@ -218,8 +218,11 @@ static int log_dispatch(struct log_rec *rec, const char *fmt, va_list args) if ((ldev->flags & LOGDF_ENABLE) && log_passes_filters(ldev, rec)) { if (!rec->msg) { - vsnprintf(buf, sizeof(buf), fmt, args); + int len; + + len = vsnprintf(buf, sizeof(buf), fmt, args); rec->msg = buf; + gd->log_cont = len && buf[len - 1] != '\n'; } ldev->drv->emit(ldev, rec); } @@ -248,6 +251,8 @@ int _log(enum log_category_t cat, enum log_level_t level, const char *file, rec.flags = 0; if (level & LOGL_FORCE_DEBUG) rec.flags |= LOGRECF_FORCE_DEBUG; + if (gd->log_cont) + rec.flags |= LOGRECF_CONT; rec.file = file; rec.line = line; rec.func = func; |