Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965387AbbEFDOH (ORCPT ); Tue, 5 May 2015 23:14:07 -0400 Received: from terminus.zytor.com ([198.137.202.10]:36354 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752559AbbEFDOD (ORCPT ); Tue, 5 May 2015 23:14:03 -0400 Date: Tue, 5 May 2015 20:13:28 -0700 From: tip-bot for Masami Hiramatsu Message-ID: Cc: jolsa@redhat.com, masami.hiramatsu.pt@hitachi.com, peterz@infradead.org, mingo@kernel.org, linux-kernel@vger.kernel.org, hpa@zytor.com, acme@redhat.com, tglx@linutronix.de, namhyung@kernel.org, dsahern@gmail.com Reply-To: dsahern@gmail.com, tglx@linutronix.de, namhyung@kernel.org, hpa@zytor.com, acme@redhat.com, linux-kernel@vger.kernel.org, masami.hiramatsu.pt@hitachi.com, peterz@infradead.org, mingo@kernel.org, jolsa@redhat.com In-Reply-To: <20150424094744.23967.97614.stgit@localhost.localdomain> References: <20150424094744.23967.97614.stgit@localhost.localdomain> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] perf tools: Improve strfilter to append additional rules Git-Commit-ID: 4e60a2caefd1920867a84b978abc1eac118de596 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3876 Lines: 116 Commit-ID: 4e60a2caefd1920867a84b978abc1eac118de596 Gitweb: http://git.kernel.org/tip/4e60a2caefd1920867a84b978abc1eac118de596 Author: Masami Hiramatsu AuthorDate: Fri, 24 Apr 2015 18:47:44 +0900 Committer: Arnaldo Carvalho de Melo CommitDate: Mon, 4 May 2015 12:43:53 -0300 perf tools: Improve strfilter to append additional rules Add strfilter__or/and to append additional rules to existing strfilter. Signed-off-by: Masami Hiramatsu Cc: David Ahern Cc: Jiri Olsa Cc: Namhyung Kim Cc: Peter Zijlstra Link: http://lkml.kernel.org/r/20150424094744.23967.97614.stgit@localhost.localdomain Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/strfilter.c | 40 ++++++++++++++++++++++++++++++++++++++++ tools/perf/util/strfilter.h | 26 ++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/tools/perf/util/strfilter.c b/tools/perf/util/strfilter.c index 79a757a..f3429cd 100644 --- a/tools/perf/util/strfilter.c +++ b/tools/perf/util/strfilter.c @@ -170,6 +170,46 @@ struct strfilter *strfilter__new(const char *rules, const char **err) return filter; } +static int strfilter__append(struct strfilter *filter, bool _or, + const char *rules, const char **err) +{ + struct strfilter_node *right, *root; + const char *ep = NULL; + + if (!filter || !rules) + return -EINVAL; + + right = strfilter_node__new(rules, &ep); + if (!right || *ep != '\0') { + if (err) + *err = ep; + goto error; + } + root = strfilter_node__alloc(_or ? OP_or : OP_and, filter->root, right); + if (!root) { + ep = NULL; + goto error; + } + + filter->root = root; + return 0; + +error: + strfilter_node__delete(right); + return ep ? -EINVAL : -ENOMEM; +} + +int strfilter__or(struct strfilter *filter, const char *rules, const char **err) +{ + return strfilter__append(filter, true, rules, err); +} + +int strfilter__and(struct strfilter *filter, const char *rules, + const char **err) +{ + return strfilter__append(filter, false, rules, err); +} + static bool strfilter_node__compare(struct strfilter_node *node, const char *str) { diff --git a/tools/perf/util/strfilter.h b/tools/perf/util/strfilter.h index fe611f3..d007cdc 100644 --- a/tools/perf/util/strfilter.h +++ b/tools/perf/util/strfilter.h @@ -29,6 +29,32 @@ struct strfilter { struct strfilter *strfilter__new(const char *rules, const char **err); /** + * strfilter__or - Append an additional rule by logical-or + * @filter: Original string filter + * @rules: Filter rule to be appended at left of the root of + * @filter by using logical-or. + * @err: Pointer which points an error detected on @rules + * + * Parse @rules and join it to the @filter by using logical-or. + * Return 0 if success, or return the error code. + */ +int strfilter__or(struct strfilter *filter, + const char *rules, const char **err); + +/** + * strfilter__add - Append an additional rule by logical-and + * @filter: Original string filter + * @rules: Filter rule to be appended at left of the root of + * @filter by using logical-and. + * @err: Pointer which points an error detected on @rules + * + * Parse @rules and join it to the @filter by using logical-and. + * Return 0 if success, or return the error code. + */ +int strfilter__and(struct strfilter *filter, + const char *rules, const char **err); + +/** * strfilter__compare - compare given string and a string filter * @filter: String filter * @str: target string -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/