Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf tools: Add perf_config_scan()

To simplify getting a single config value, add a function to scan a config
variable.

Reviewed-by: Andi Kleen <ak@linux.intel.com>
Reviewed-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Link: https://lore.kernel.org/r/20220905073424.3971-2-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Adrian Hunter and committed by
Arnaldo Carvalho de Melo
c3ca8d44 016f2f98

+32
+31
tools/perf/util/config.c
··· 908 908 /* for communicating with external commands */ 909 909 setenv("PERF_BUILDID_DIR", buildid_dir, 1); 910 910 } 911 + 912 + struct perf_config_scan_data { 913 + const char *name; 914 + const char *fmt; 915 + va_list args; 916 + int ret; 917 + }; 918 + 919 + static int perf_config_scan_cb(const char *var, const char *value, void *data) 920 + { 921 + struct perf_config_scan_data *d = data; 922 + 923 + if (!strcmp(var, d->name)) 924 + d->ret = vsscanf(value, d->fmt, d->args); 925 + 926 + return 0; 927 + } 928 + 929 + int perf_config_scan(const char *name, const char *fmt, ...) 930 + { 931 + struct perf_config_scan_data d = { 932 + .name = name, 933 + .fmt = fmt, 934 + }; 935 + 936 + va_start(d.args, fmt); 937 + perf_config(perf_config_scan_cb, &d); 938 + va_end(d.args); 939 + 940 + return d.ret; 941 + }
+1
tools/perf/util/config.h
··· 29 29 30 30 int perf_default_config(const char *, const char *, void *); 31 31 int perf_config(config_fn_t fn, void *); 32 + int perf_config_scan(const char *name, const char *fmt, ...) __scanf(2, 3); 32 33 int perf_config_set(struct perf_config_set *set, 33 34 config_fn_t fn, void *data); 34 35 int perf_config_int(int *dest, const char *, const char *);