From d710edc4c21d06c195ffc499e99e3d13694d2d34 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sat, 2 Nov 2013 06:55:40 -0700 Subject: [PATCH] util: Allow set_subprogram_name() to take a printf() format string. This will be convenient in an upcoming commit. I had to add -Wno-format-zero-length to suppress a GCC warning about a zero-length format string in this monitor_daemon() call: set_subprogram_name(""); I don't know what that warning is good for anyway, and I guess the Clang developers don't either because Clang didn't warn. Signed-off-by: Ben Pfaff Acked-by: Ethan Jackson --- configure.ac | 1 + lib/util.c | 24 ++++++++++++++++++------ lib/util.h | 2 +- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/configure.ac b/configure.ac index b90668165..54078337b 100644 --- a/configure.ac +++ b/configure.ac @@ -96,6 +96,7 @@ OVS_ENABLE_OPTION([-Wno-sign-compare]) OVS_ENABLE_OPTION([-Wpointer-arith]) OVS_ENABLE_OPTION([-Wdeclaration-after-statement]) OVS_ENABLE_OPTION([-Wformat-security]) +OVS_ENABLE_OPTION([-Wno-format-zero-length]) OVS_ENABLE_OPTION([-Wswitch-enum]) OVS_ENABLE_OPTION([-Wunused-parameter]) OVS_ENABLE_OPTION([-Wstrict-aliasing]) diff --git a/lib/util.c b/lib/util.c index b8004555f..a32c80aaa 100644 --- a/lib/util.c +++ b/lib/util.c @@ -399,14 +399,26 @@ get_subprogram_name(void) return name ? name : ""; } -/* Sets 'name' as the name of the currently running thread or process. (This - * appears in log messages and may also be visible in system process listings - * and debuggers.) */ +/* Sets the formatted value of 'format' as the name of the currently running + * thread or process. (This appears in log messages and may also be visible in + * system process listings and debuggers.) */ void -set_subprogram_name(const char *name) +set_subprogram_name(const char *format, ...) { - const char *pname = name[0] ? name : program_name; - free(subprogram_name_set(xstrdup(name))); + char *pname; + + if (format) { + va_list args; + + va_start(args, format); + pname = xvasprintf(format, args); + va_end(args); + } else { + pname = xstrdup(program_name); + } + + free(subprogram_name_set(pname)); + #if HAVE_GLIBC_PTHREAD_SETNAME_NP pthread_setname_np(pthread_self(), pname); #elif HAVE_NETBSD_PTHREAD_SETNAME_NP diff --git a/lib/util.h b/lib/util.h index a899065a3..32a7c8cd8 100644 --- a/lib/util.h +++ b/lib/util.h @@ -222,7 +222,7 @@ void set_program_name__(const char *name, const char *version, set_program_name__(name, VERSION, __DATE__, __TIME__) const char *get_subprogram_name(void); -void set_subprogram_name(const char *name); +void set_subprogram_name(const char *format, ...) PRINTF_FORMAT(1, 2); const char *get_program_version(void); void ovs_print_version(uint8_t min_ofp, uint8_t max_ofp); -- 2.43.0