Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754539AbbKQScJ (ORCPT ); Tue, 17 Nov 2015 13:32:09 -0500 Received: from mail-pa0-f49.google.com ([209.85.220.49]:35084 "EHLO mail-pa0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751787AbbKQScH (ORCPT ); Tue, 17 Nov 2015 13:32:07 -0500 From: Taeung Song To: Arnaldo Carvalho de Melo Cc: linux-kernel@vger.kernel.org, Ingo Molnar , Taeung Song , Namhyung Kim , Jiri Olsa Subject: [PATCH v11 24/24] perf config: Add a option 'remove' to perf-config Date: Tue, 17 Nov 2015 22:53:44 +0900 Message-Id: <1447768424-17327-24-git-send-email-treeze.taeung@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1447768424-17327-1-git-send-email-treeze.taeung@gmail.com> References: <1447768424-17327-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 Content-Length: 4049 Lines: 121 A option 'remove' is to remove specific config variables. For the syntax examples, # perf config [] -r | --remove [section.name ...] Cc: Namhyung Kim Cc: Jiri Olsa Signed-off-by: Taeung Song --- tools/perf/Documentation/perf-config.txt | 6 ++++++ tools/perf/builtin-config.c | 37 ++++++++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt index 9892d11..7b33d96 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 cf65250..53fe844 100644 --- a/tools/perf/builtin-config.c +++ b/tools/perf/builtin-config.c @@ -23,7 +23,8 @@ static const char * const config_usage[] = { enum actions { ACTION_LIST = 1, ACTION_LIST_ALL, - ACTION_SKEL + ACTION_SKEL, + ACTION_REMOVE } actions; static struct option config_options[] = { @@ -35,6 +36,8 @@ static struct option config_options[] = { OPT_SET_UINT('k', "skel", &actions, "produce an skeleton with the possible" " config variables", ACTION_SKEL), + OPT_SET_UINT('r', "remove", &actions, + "remove specific variables: [section.name ...]", ACTION_REMOVE), OPT_INCR('v', "verbose", &verbose, "Be more verbose" " (show config description)"), OPT_BOOLEAN(0, "system", &use_system_config, "use system config file"), @@ -478,7 +481,13 @@ static int set_config(struct list_head *sections, const char *config_file_name, struct config_element *element = NULL; find_config(sections, §ion, &element, section_name, name); - if (value != NULL) { + if (!value) { + /* value == NULL means remove the variable */ + if (section && element) { + free(element->value); + element->value = NULL; + } + } else { value = normalize_value(section_name, name, value); /* if there isn't existent section, add a new section */ @@ -629,6 +638,7 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused) set_option_flag(config_options, 'l', "list", PARSE_OPT_EXCLUSIVE); set_option_flag(config_options, 'a', "list-all", PARSE_OPT_EXCLUSIVE); + set_option_flag(config_options, 'r', "remove", PARSE_OPT_EXCLUSIVE); argc = parse_options(argc, argv, config_options, config_usage, PARSE_OPT_STOP_AT_NON_OPTION); @@ -658,6 +668,29 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused) } switch (actions) { + case ACTION_REMOVE: + if (argc) { + for (i = 0; argv[i]; i++) { + if (!use_system_config && !use_user_config) { + ret = perf_configset_with_option(set_config, + &system_sections, + system_config, + argv[i], NULL); + ret = perf_configset_with_option(set_config, + &user_sections, + user_config, + argv[i], NULL); + } else + ret = perf_configset_with_option(set_config, sections, + config_exclusive_filename, + argv[i], NULL); + } + } else { + pr_err("Error: Missing arguments\n"); + parse_options_usage(config_usage, config_options, "r", 1); + return -1; + } + break; case ACTION_SKEL: if (argc) parse_options_usage(config_usage, config_options, "k", 1); -- 1.9.1 -- 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/