From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754714AbbKCBu4 (ORCPT ); Mon, 2 Nov 2015 20:50:56 -0500 Received: from mail-pa0-f47.google.com ([209.85.220.47]:34714 "EHLO mail-pa0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754540AbbKCBuk (ORCPT ); Mon, 2 Nov 2015 20:50:40 -0500 From: Taeung Song To: Arnaldo Carvalho de Melo Cc: linux-kernel@vger.kernel.org, jolsa@redhat.com, namhyung@kernel.org, Ingo Molnar , Taeung Song Subject: [PATCH v9 4/9] perf config: Add comparing name treating '_' and '-' as being the same thing. Date: Tue, 3 Nov 2015 10:50:15 +0900 Message-Id: <1446515420-22681-5-git-send-email-treeze.taeung@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1446515420-22681-1-git-send-email-treeze.taeung@gmail.com> References: <1446515420-22681-1-git-send-email-treeze.taeung@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The comparing name functionality is that two config name are compared treating '-' or '_' as being the same thing. For example, both 'print_percent' and 'print-percent' in 'call-graph' section are regarded as the same thing. Signed-off-by: Taeung Song --- tools/perf/builtin-config.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c index f99c39d..d4e2899 100644 --- a/tools/perf/builtin-config.c +++ b/tools/perf/builtin-config.c @@ -32,6 +32,27 @@ static struct option config_options[] = { OPT_END() }; +static int compare_name(const char *name1, const char *name2) +{ + while (true) { + /* + * If two names have '-' or '_', them are treated + * as being the same thing. + */ + if ((*name1 == '-' || *name1 == '_') + && (*name2 == '-' || *name2 == '_')) { + name1++, name2++; + continue; + } + + if (*name1 && (*name1 == *name2)) + name1++, name2++; + else + break; + } + return *(const unsigned char *)name1-*(const unsigned char *)name2; +} + static struct config_section *find_section(struct list_head *sections, const char *section_name) { @@ -50,7 +71,7 @@ static struct config_element *find_element(const char *name, struct config_element *element; list_for_each_entry(element, §ion->element_head, list) - if (!strcmp(element->name, name)) + if (!compare_name(element->name, name)) return element; return NULL; -- 1.9.1