From: "Steven Rostedt (VMware)" <rostedt@xxxxxxxxxxx> If a program wants to add something special to tep_vprint() but then also call the default tep_vprint() it can't. If it overrides the function, it loses the functionality for it. Add __tep_vprint() for this use case. Example: int tep_vprint(const char *name, enum tep_loglevel level, bool print_err, const char *fmt, va_list ap) { if (quiet && !strcmp(name, "myprog")) return 0; return __tep_vprint(name, level, print_err, fmt, ap); } Signed-off-by: Steven Rostedt (VMware) <rostedt@xxxxxxxxxxx> --- src/event-utils.h | 6 ++++++ src/parse-utils.c | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/event-utils.h b/src/event-utils.h index 607be0c..d377201 100644 --- a/src/event-utils.h +++ b/src/event-utils.h @@ -14,10 +14,16 @@ void tep_warning(const char *fmt, ...); void tep_info(const char *fmt, ...); + /* Can be overridden */ int tep_vprint(const char *name, enum tep_loglevel level, bool print_err, const char *fmt, va_list ap); +/* The actual call of tep_vprint() for overrides to use */ +int __tep_vprint(const char *name, enum tep_loglevel level, + bool print_err, const char *fmt, va_list ap); + + #define __deprecated(msg) __attribute__((deprecated("msg"))) /* For backward compatibilty, do not use */ diff --git a/src/parse-utils.c b/src/parse-utils.c index 04237ba..89bf1cd 100644 --- a/src/parse-utils.c +++ b/src/parse-utils.c @@ -9,6 +9,7 @@ #include <stdarg.h> #include <errno.h> +#include "event-utils.h" #include "event-parse.h" #define __weak __attribute__((weak)) @@ -42,6 +43,28 @@ void tep_set_loglevel(enum tep_loglevel level) */ int __weak tep_vprint(const char *name, enum tep_loglevel level, bool print_err, const char *fmt, va_list ap) +{ + return __tep_vprint(name, level, print_err, fmt, ap); +} + +/** + * __tep_vprint - print library log messages + * @name: name of the library. + * @level: severity of the log message. This parameter is not used in this implementation, but as + * the function is weak and can be overridden, having the log level could be useful + * for other implementations. + * @print_err: whether to print the errno, if non zero. + * @fmt: printf format string of the message. + * @ap: list of printf parameters. + * + * This function is used to print all messages from traceevent, tracefs and trace-cmd libraries. + * It is defined as weak, so the application that uses those libraries can override it in order + * to implement its own logic for printing library logs. + * + * Return the value of errno at the function enter. + */ +int __tep_vprint(const char *name, enum tep_loglevel level, + bool print_err, const char *fmt, va_list ap) { int ret = errno; -- 2.29.2
![]() |