diff options
author | Steven Rostedt (VMware) <rostedt@goodmis.org> | 2021-05-14 16:50:36 -0400 |
---|---|---|
committer | Steven Rostedt (VMware) <rostedt@goodmis.org> | 2021-05-14 17:47:17 -0400 |
commit | bc2cacb1988b32cbdf98a53854e5e04e02eec8b1 (patch) | |
tree | 1e0c4ace86c35e87adb05c620ad0e755c5699004 | |
parent | f10db4bfacae15fd5049010d962d87384acc283b (diff) | |
download | libtraceevent-bc2cacb1988b32cbdf98a53854e5e04e02eec8b1.tar.gz |
libtraceevent: Add __tep_vprint() for overrides to use
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);
}
Link: https://lore.kernel.org/linux-trace-devel/20210514205036.1383167-4-rostedt@goodmis.org
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
-rw-r--r-- | src/event-utils.h | 6 | ||||
-rw-r--r-- | src/parse-utils.c | 23 |
2 files changed, 29 insertions, 0 deletions
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)) @@ -43,6 +44,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; if (errno && print_err) |