Re: [PATCH] perf tools: Create for_each_event{_system, _file} macros for tracepoints iteration

From: Jiri Olsa
Date: Mon Jan 30 2017 - 04:08:35 EST


On Mon, Jan 30, 2017 at 05:35:28PM +0900, Taeung Song wrote:

SNIP

> +#define for_each_event_system(dir, dent, tps) \
> + while ((dent = readdir(dir))) \
> + if (dent->d_type == DT_DIR && \
> + (strcmp(dent->d_name, ".")) && \
> + (strcmp(dent->d_name, "..")) && \
> + (name_in_tp_list(dent->d_name, tps)))
> +
> static int copy_event_system(const char *sys, struct tracepoint_path *tps)
> {
> struct dirent *dent;
> @@ -186,12 +193,7 @@ static int copy_event_system(const char *sys, struct tracepoint_path *tps)
> return -errno;
> }
>
> - while ((dent = readdir(dir))) {
> - if (dent->d_type != DT_DIR ||
> - strcmp(dent->d_name, ".") == 0 ||
> - strcmp(dent->d_name, "..") == 0 ||
> - !name_in_tp_list(dent->d_name, tps))
> - continue;
> + for_each_event_system(dir, dent, tps) {
> if (asprintf(&format, "%s/%s/format", sys, dent->d_name) < 0) {
> err = -ENOMEM;
> goto out;
> @@ -210,12 +212,7 @@ static int copy_event_system(const char *sys, struct tracepoint_path *tps)
> }
>
> rewinddir(dir);
> - while ((dent = readdir(dir))) {
> - if (dent->d_type != DT_DIR ||
> - strcmp(dent->d_name, ".") == 0 ||
> - strcmp(dent->d_name, "..") == 0 ||
> - !name_in_tp_list(dent->d_name, tps))
> - continue;
> + for_each_event_system(dir, dent, tps) {
> if (asprintf(&format, "%s/%s/format", sys, dent->d_name) < 0) {
> err = -ENOMEM;
> goto out;
> @@ -266,6 +263,14 @@ static bool system_in_tp_list(char *sys, struct tracepoint_path *tps)
> return false;
> }
>
> +#define for_each_event_file(dir, dent, tps) \
> + while ((dent = readdir(dir))) \
> + if (dent->d_type == DT_DIR && \
> + (strcmp(dent->d_name, ".")) && \
> + (strcmp(dent->d_name, "..")) && \
> + (strcmp(dent->d_name, "ftrace")) && \
> + (system_in_tp_list(dent->d_name, tps)))

looks almost the same as for_each_event_system macro,
what's the difference other than 'ftrace' check?
also why's one 'file' and the other 'system'? looks
like we coud have just one macro in here

jirka