helper/log: Add log_vprintf_lf() 09/3709/2
authorMarc Schink <openocd-dev@marcschink.de>
Thu, 18 Aug 2016 10:02:08 +0000 (12:02 +0200)
committerPaul Fertser <fercerpav@gmail.com>
Fri, 7 Oct 2016 11:35:54 +0000 (12:35 +0100)
Add log_vprintf_lf() to enable the possibility to output log messages
with a variable argument list.

Change-Id: I7fd6e93db63a7d98f662df2881a42e4d923c3848
Signed-off-by: Marc Schink <openocd-dev@marcschink.de>
Reviewed-on: http://openocd.zylin.com/3709
Tested-by: jenkins
Reviewed-by: Andreas Färber <afaerber@suse.de>
Reviewed-by: Paul Fertser <fercerpav@gmail.com>
src/helper/log.c
src/helper/log.h

index 79cbd8e..e7af803 100644 (file)
@@ -191,6 +191,30 @@ void log_printf(enum log_levels level,
        va_end(ap);
 }
 
+void log_vprintf_lf(enum log_levels level, const char *file, unsigned line,
+               const char *function, const char *format, va_list args)
+{
+       char *tmp;
+
+       count++;
+
+       if (level > debug_level)
+               return;
+
+       tmp = alloc_vprintf(format, args);
+
+       if (!tmp)
+               return;
+
+       /*
+        * Note: alloc_vprintf() guarantees that the buffer is at least one
+        * character longer.
+        */
+       strcat(tmp, "\n");
+       log_puts(level, file, line, function, tmp);
+       free(tmp);
+}
+
 void log_printf_lf(enum log_levels level,
        const char *file,
        unsigned line,
@@ -198,23 +222,10 @@ void log_printf_lf(enum log_levels level,
        const char *format,
        ...)
 {
-       char *string;
        va_list ap;
 
-       count++;
-       if (level > debug_level)
-               return;
-
        va_start(ap, format);
-
-       string = alloc_vprintf(format, ap);
-       if (string != NULL) {
-               strcat(string, "\n");   /* alloc_vprintf guaranteed the buffer to be at least one
-                                        *char longer */
-               log_puts(level, file, line, function, string);
-               free(string);
-       }
-
+       log_vprintf_lf(level, file, line, function, format, ap);
        va_end(ap);
 }
 
index eb222cb..6b93816 100644 (file)
@@ -60,6 +60,8 @@ enum log_levels {
 void log_printf(enum log_levels level, const char *file, unsigned line,
                const char *function, const char *format, ...)
 __attribute__ ((format (PRINTF_ATTRIBUTE_FORMAT, 5, 6)));
+void log_vprintf_lf(enum log_levels level, const char *file, unsigned line,
+               const char *function, const char *format, va_list args);
 void log_printf_lf(enum log_levels level, const char *file, unsigned line,
                const char *function, const char *format, ...)
 __attribute__ ((format (PRINTF_ATTRIBUTE_FORMAT, 5, 6)));