From f45698df8b6b4d9375acc8e668fc54f81250fd2f Mon Sep 17 00:00:00 2001 From: Daniel Vetter Date: Fri, 27 Feb 2015 19:32:33 +0100 Subject: [PATCH] lib/igt_core: don't add newlines in logging functions igt_kms extensively uses line continuation when dumping state updates at the debug level. They got badly mangled with the recent changes to for the log handling functions. Two separate fixes: - Don't prepend domain and other metainformation when it's just a continuation line. - Dont add newlines when dumping the log recorder. If someone interleaves different log level messages this will go awry, but really just don't do that. Cc: Thomas Wood Signed-off-by: Daniel Vetter --- lib/igt_core.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/igt_core.c b/lib/igt_core.c index adfa597d..8f75e48b 100644 --- a/lib/igt_core.c +++ b/lib/igt_core.c @@ -290,8 +290,7 @@ static void _igt_log_buffer_dump(void) i = log_buffer.start; do { char *last_line = log_buffer.entries[i]; - fprintf(stderr, "%s%s", last_line, - (last_line[strlen(last_line)-1] != '\n') ? "\n" : ""); + fprintf(stderr, "%s", last_line); i++; } while (i != log_buffer.start && i != log_buffer.end); @@ -1590,6 +1589,7 @@ void igt_vlog(const char *domain, enum igt_log_level level, const char *format, "CRITICAL", "NONE" }; + static bool line_continuation = false; assert(format); @@ -1605,12 +1605,18 @@ void igt_vlog(const char *domain, enum igt_log_level level, const char *format, if (vasprintf(&line, format, args) == -1) return; - if (asprintf(&formatted_line, "(%s:%d) %s%s%s: %s", program_name, + if (line_continuation) { + formatted_line = strdup(line); + if (!formatted_line) + goto out; + } else if (asprintf(&formatted_line, "(%s:%d) %s%s%s: %s", program_name, getpid(), (domain) ? domain : "", (domain) ? "-" : "", igt_log_level_str[level], line) == -1) { goto out; } + line_continuation = line[strlen(line)] != '\n'; + /* append log buffer */ _igt_log_buffer_append(formatted_line);