From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752830AbdA3JI2 (ORCPT ); Mon, 30 Jan 2017 04:08:28 -0500 Received: from mx1.redhat.com ([209.132.183.28]:51644 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752802AbdA3JIR (ORCPT ); Mon, 30 Jan 2017 04:08:17 -0500 Date: Mon, 30 Jan 2017 10:08:12 +0100 From: Jiri Olsa To: Taeung Song Cc: Arnaldo Carvalho de Melo , linux-kernel@vger.kernel.org, Jiri Olsa , Namhyung Kim , Ingo Molnar , Peter Zijlstra , Wang Nan , Steven Rostedt , Frederic Weisbecker Subject: Re: [PATCH] perf tools: Create for_each_event{_system, _file} macros for tracepoints iteration Message-ID: <20170130090812.GD22029@krava> References: <1485765328-21787-1-git-send-email-treeze.taeung@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1485765328-21787-1-git-send-email-treeze.taeung@gmail.com> User-Agent: Mutt/1.7.1 (2016-10-04) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Mon, 30 Jan 2017 09:08:18 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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