diff options
Diffstat (limited to 'tools/perf/builtin-config.c')
| -rw-r--r-- | tools/perf/builtin-config.c | 22 | 
1 files changed, 16 insertions, 6 deletions
diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c index abfa49eaf7fd..514f70f95b57 100644 --- a/tools/perf/builtin-config.c +++ b/tools/perf/builtin-config.c @@ -35,8 +35,7 @@ static struct option config_options[] = {  	OPT_END()  }; -static int set_config(struct perf_config_set *set, const char *file_name, -		      const char *var, const char *value) +static int set_config(struct perf_config_set *set, const char *file_name)  {  	struct perf_config_section *section = NULL;  	struct perf_config_item *item = NULL; @@ -50,7 +49,6 @@ static int set_config(struct perf_config_set *set, const char *file_name,  	if (!fp)  		return -1; -	perf_config_set__collect(set, file_name, var, value);  	fprintf(fp, "%s\n", first_line);  	/* overwrite configvariables */ @@ -162,6 +160,7 @@ int cmd_config(int argc, const char **argv)  	struct perf_config_set *set;  	char *user_config = mkpath("%s/.perfconfig", getenv("HOME"));  	const char *config_filename; +	bool changed = false;  	argc = parse_options(argc, argv, config_options, config_usage,  			     PARSE_OPT_STOP_AT_NON_OPTION); @@ -232,15 +231,26 @@ int cmd_config(int argc, const char **argv)  					goto out_err;  				}  			} else { -				if (set_config(set, config_filename, var, value) < 0) { -					pr_err("Failed to set '%s=%s' on %s\n", -					       var, value, config_filename); +				if (perf_config_set__collect(set, config_filename, +							     var, value) < 0) { +					pr_err("Failed to add '%s=%s'\n", +					       var, value);  					free(arg);  					goto out_err;  				} +				changed = true;  			}  			free(arg);  		} + +		if (!changed) +			break; + +		if (set_config(set, config_filename) < 0) { +			pr_err("Failed to set the configs on %s\n", +			       config_filename); +			goto out_err; +		}  	}  	ret = 0;  | 
