From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753413AbbGSJzL (ORCPT ); Sun, 19 Jul 2015 05:55:11 -0400 Received: from mail-pa0-f51.google.com ([209.85.220.51]:34031 "EHLO mail-pa0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753368AbbGSJzH (ORCPT ); Sun, 19 Jul 2015 05:55:07 -0400 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 v4 5/5] perf config: Add a option 'remove' to perf-config Date: Fri, 17 Jul 2015 10:40:02 +0900 Message-Id: <1437097202-1915-6-git-send-email-treeze.taeung@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1437097202-1915-1-git-send-email-treeze.taeung@gmail.com> References: <1437097202-1915-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 A option 'remove' is to remove specific config variables. For the syntax examples, # perf config -r | --remove [section.name ...] Signed-off-by: Taeung Song --- tools/perf/Documentation/perf-config.txt | 6 ++++++ tools/perf/builtin-config.c | 25 ++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt index d8b3acc..416637b 100644 --- a/tools/perf/Documentation/perf-config.txt +++ b/tools/perf/Documentation/perf-config.txt @@ -13,6 +13,8 @@ or 'perf config' [] -l | --list or 'perf config' [] -a | --list-all +or +'perf config' [] -r | --remove [section.name ...] DESCRIPTION ----------- @@ -37,6 +39,10 @@ OPTIONS --list-all:: Show current and all possible config variables with default values. +-r:: +--remove:: + Remove specific config variables. + CONFIGURATION FILE ------------------ diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c index f4a1569..74fcedc 100644 --- a/tools/perf/builtin-config.c +++ b/tools/perf/builtin-config.c @@ -24,6 +24,7 @@ static const char * const config_usage[] = { #define ACTION_LIST (1<<0) #define ACTION_LIST_ALL (1<<1) +#define ACTION_REMOVE (1<<2) static const struct option config_options[] = { OPT_GROUP("Config file location"), @@ -34,6 +35,8 @@ static const struct option config_options[] = { "show current config variables", ACTION_LIST), OPT_BIT('a', "list-all", &actions, "show current and all possible config variables with default values", ACTION_LIST_ALL), + OPT_BIT('r', "remove", &actions, + "remove specific variables: [section.name ...]", ACTION_REMOVE), OPT_END() }; @@ -484,7 +487,15 @@ static int set_config(const char *section_name, const char *name, char *value) struct config_element *element_node = NULL; find_config(§ion_node, &element_node, section_name, name); - if (value != NULL) { + if (!value) { + /* value == NULL means remove the variable */ + if (section_node && element_node) { + if (!element_node->value) + free(element_node->value); + element_node->value = NULL; + } else + pr_err("Error: Failed to find the variable.\n"); + } else { value = normalize_value(section_name, name, value); /* if there isn't existent section, add a new section */ @@ -665,6 +676,18 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused) else goto out_err; goto out; + case ACTION_REMOVE: + for (i = 0; argv[i]; i++) { + if (value == NULL) + ret = perf_configset_with_option(set_config, argv[i], NULL); + else { + pr_err("invalid key: %s\n", argv[i]); + return -1; + } + if (ret < 0) + goto out; + } + goto out; default: if ((!has_option || use_global_config || use_system_config) && argc == 0) { -- 1.9.1