diff options
author | Stephen Hemminger <stephen@networkplumber.org> | 2019-06-26 09:18:18 -0700 |
---|---|---|
committer | Stephen Hemminger <stephen@networkplumber.org> | 2019-06-26 09:18:18 -0700 |
commit | f7995053724f1ecd5912ed11026a65f90f2a1f58 (patch) | |
tree | d91e2ffd838eaeab74400a883a2b83c90831421f | |
parent | bfa757e02f8ec4e27a261ff77dbf70188a907666 (diff) | |
download | iproute2-f7995053724f1ecd5912ed11026a65f90f2a1f58.tar.gz |
devlink: replace print macros with functions
Using functions is safer, and printing is not performance
critical.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
-rw-r--r-- | devlink/devlink.c | 62 |
1 files changed, 42 insertions, 20 deletions
diff --git a/devlink/devlink.c b/devlink/devlink.c index 559f624e..4e277f7b 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -11,6 +11,7 @@ #include <stdio.h> #include <stdlib.h> +#include <stdarg.h> #include <string.h> #include <stdbool.h> #include <unistd.h> @@ -48,32 +49,53 @@ #define HEALTH_REPORTER_TIMESTAMP_FMT_LEN 80 static int g_new_line_count; - -#define pr_err(args...) fprintf(stderr, ##args) -#define pr_out(args...) \ - do { \ - if (g_indent_newline) { \ - fprintf(stdout, "%s", g_indent_str); \ - g_indent_newline = false; \ - } \ - fprintf(stdout, ##args); \ - g_new_line_count = 0; \ - } while (0) - -#define pr_out_sp(num, args...) \ - do { \ - int ret = fprintf(stdout, ##args); \ - if (ret < num) \ - fprintf(stdout, "%*s", num - ret, ""); \ - g_new_line_count = 0; \ - } while (0) - static int g_indent_level; static bool g_indent_newline; + #define INDENT_STR_STEP 2 #define INDENT_STR_MAXLEN 32 static char g_indent_str[INDENT_STR_MAXLEN + 1] = ""; +static void __attribute__((format(printf, 1, 2))) +pr_err(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); +} + +static void __attribute__((format(printf, 1, 2))) +pr_out(const char *fmt, ...) +{ + va_list ap; + + if (g_indent_newline) { + printf("%s", g_indent_str); + g_indent_newline = false; + } + va_start(ap, fmt); + vprintf(fmt, ap); + va_end(ap); + g_new_line_count = 0; +} + +static void __attribute__((format(printf, 2, 3))) +pr_out_sp(unsigned int num, const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start(ap, fmt); + ret = vprintf(fmt, ap); + va_end(ap); + + if (ret < num) + printf("%*s", num - ret, ""); + g_new_line_count = 0; \ +} + static void __pr_out_indent_inc(void) { if (g_indent_level + INDENT_STR_STEP > INDENT_STR_MAXLEN) |