shl: log: check for trailing newlines
authorDavid Herrmann <dh.herrmann@gmail.com>
Sat, 16 Mar 2013 15:06:54 +0000 (16:06 +0100)
committerDavid Herrmann <dh.herrmann@gmail.com>
Sun, 3 Nov 2013 11:24:55 +0000 (12:24 +0100)
If the format string contains a trailing newline, we now skip writing our
own. We also skip the fn+file information as it would be written on the
next line.

Trailing newlines occur only when forwarding messages from other
libraries. In this case we don't need the fn+file information, anyway.

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
src/shl_log.c

index 5318710..9acae87 100644 (file)
@@ -386,6 +386,8 @@ static void log__submit(const char *file,
        const char *prefix = NULL;
        FILE *out;
        long long sec, usec;
+       bool nl;
+       size_t len;
 
        if (log__omit(file, line, func, config, subs, sev))
                return;
@@ -414,19 +416,20 @@ static void log__submit(const char *file,
                        fprintf(out, "[%.4lld.%.6lld] ", sec, usec);
        }
 
+       len = strlen(format);
+       nl = format[len - 1] == '\n';
+
+       if (!func)
+               func = "<unknown>";
+       if (!file)
+               file = "<unknown>";
+       if (line < 0)
+               line = 0;
+
        vfprintf(out, format, args);
 
-       if (sev == LOG_DEBUG) {
-               if (!func)
-                       func = "<unknown>";
-               if (!file)
-                       file = "<unknown>";
-               if (line < 0)
-                       line = 0;
+       if (!nl)
                fprintf(out, " (%s() in %s:%d)\n", func, file, line);
-       } else {
-               fprintf(out, "\n");
-       }
 }
 
 static void log__format(const char *file,