diff options
author | Alexandre Vicenzi <alexandre.vicenzi@suse.com> | 2022-08-26 16:24:18 +0200 |
---|---|---|
committer | Steven Rostedt (Google) <rostedt@goodmis.org> | 2022-09-08 19:20:58 -0400 |
commit | ee8c64443f85a2d578db25ee40dced9df6198292 (patch) | |
tree | 4175bb623707d7ccfc3beb6786d405cc33d92bbc | |
parent | 799d88ecb58b5030bc38143a45e7865aa80237f9 (diff) | |
download | libtracefs-ee8c64443f85a2d578db25ee40dced9df6198292.tar.gz |
libtracefs: Add tracefs_tracer_available() helper
Add tracefs_tracer_available() helper function to check if a giver tracer
is available.
Link: https://lore.kernel.org/linux-trace-devel/20220826142420.29911-1-alexandre.vicenzi@suse.com
Signed-off-by: Alexandre Vicenzi <alexandre.vicenzi@suse.com>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
-rw-r--r-- | Documentation/libtracefs-utils.txt | 11 | ||||
-rw-r--r-- | Documentation/libtracefs.txt | 1 | ||||
-rw-r--r-- | include/tracefs.h | 2 | ||||
-rw-r--r-- | src/tracefs-utils.c | 28 | ||||
-rw-r--r-- | utest/tracefs-utest.c | 3 |
5 files changed, 43 insertions, 2 deletions
diff --git a/Documentation/libtracefs-utils.txt b/Documentation/libtracefs-utils.txt index ddbd675..ab16cc6 100644 --- a/Documentation/libtracefs-utils.txt +++ b/Documentation/libtracefs-utils.txt @@ -3,8 +3,8 @@ libtracefs(3) NAME ---- -tracefs_tracers, tracefs_get_clock, tracefs_list_free, tracefs_list_add, -tracefs_list_size - Helper functions for working with trace file system. +tracefs_tracers, tracefs_tracer_available, tracefs_get_clock, tracefs_list_free, +tracefs_list_add, tracefs_list_size - Helper functions for working with trace file system. SYNOPSIS -------- @@ -13,6 +13,7 @@ SYNOPSIS *#include <tracefs.h>* char pass:[*]pass:[*]*tracefs_tracers*(const char pass:[*]_tracing_dir_); +bool *tracefs_tracer_available*(const char pass:[*]_tracing_dir_, const char pass:[*]_tracer_); char pass:[*]*tracefs_get_clock*(struct tracefs_instance pass:[*]_instance_); void *tracefs_list_free*(char pass:[*]pass:[*]_list_); char pass:[**]*tracefs_list_add*(char **_list_, const char *_string_); @@ -30,6 +31,9 @@ for the trace systems of the local machine, or it may be a path to a copy of the tracefs directory from another machine. The last entry in the array as a NULL pointer. The array must be freed with *tracefs_list_free()* API. +The *tracefs_tracer_available()* returns true if the _tracer_ is available +in the given _tracing_dir_director_, and false otherwise. + The *tracefs_get_clock()* function returns name of the current trace clock, used in the given _instance_. If _instance_ is NULL, the clock of the main trace instance is returned. The returned string must be freed with free(). @@ -56,6 +60,9 @@ The *tracefs_tracers()* returns array of strings. The last element in that array is a NULL pointer. The array must be freed with *tracefs_list_free()* API. In case of an error, NULL is returned. +The *tracefs_tracer_available()* returns true if the _tracer_ is available, +and false otherwise. + The *tracefs_get_clock()* returns string, that must be freed with free(), or NULL in case of an error. diff --git a/Documentation/libtracefs.txt b/Documentation/libtracefs.txt index eb2eff4..986557b 100644 --- a/Documentation/libtracefs.txt +++ b/Documentation/libtracefs.txt @@ -113,6 +113,7 @@ Trace options: Ftrace tracers: char pass:[*]pass:[*]*tracefs_tracers*(const char pass:[*]_tracing_dir_); + bool *tracefs_tracer_available*(const char pass:[*]_tracing_dir_, const char pass:[*]_tracer_); int *tracefs_tracer_set*(struct tracefs_instance pass:[*]_instance_, enum tracefs_tracers _tracer_); int *tracefs_tracer_set*(struct tracefs_instance pass:[*]_instance_, enum tracefs_tracers _tracer_, const char pass:[*]_name_); int *tracefs_tracer_clear*(struct tracefs_instance pass:[*]_instance_); diff --git a/include/tracefs.h b/include/tracefs.h index fd2240a..5b9bf6e 100644 --- a/include/tracefs.h +++ b/include/tracefs.h @@ -78,6 +78,8 @@ void tracefs_list_free(char **list); char **tracefs_list_add(char **list, const char *string); int tracefs_list_size(char **list); +bool tracefs_tracer_available(const char *tracing_dir, const char *tracer); + /** * tracefs_trace_on_get_fd - Get a file descriptor of "tracing_on" in given instance * @instance: ftrace instance, can be NULL for the top instance diff --git a/src/tracefs-utils.c b/src/tracefs-utils.c index 55a2f0a..a38da66 100644 --- a/src/tracefs-utils.c +++ b/src/tracefs-utils.c @@ -544,3 +544,31 @@ int tracefs_list_size(char **list) list--; return (int)*(unsigned long *)list; } + +/** + * tracefs_tracer_available - test if a tracer is available + * @tracing_dir: The directory that contains the tracing directory + * @tracer: The name of the tracer + * + * Return true if the tracer is available + */ +bool tracefs_tracer_available(const char *tracing_dir, const char *tracer) +{ + bool ret = false; + char **tracers = NULL; + int i; + + tracers = tracefs_tracers(tracing_dir); + if (!tracers) + return false; + + for (i = 0; tracers[i]; i++) { + if (strcmp(tracer, tracers[i]) == 0) { + ret = true; + break; + } + } + + tracefs_list_free(tracers); + return ret; +} diff --git a/utest/tracefs-utest.c b/utest/tracefs-utest.c index 6f083db..cfb8090 100644 --- a/utest/tracefs-utest.c +++ b/utest/tracefs-utest.c @@ -1405,6 +1405,9 @@ static void test_instance_tracers(struct tracefs_instance *instance) tracers = tracefs_tracers(tdir); CU_TEST(tracers != NULL); + for (i = 0; tracers[i]; i++) + CU_TEST(tracefs_tracer_available(tdir, tracers[i])); + tfile = tracefs_instance_file_read(NULL, ALL_TRACERS, NULL); tracer = strtok(tfile, " "); |