summaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-config.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/builtin-config.c')
-rw-r--r--tools/perf/builtin-config.c67
1 files changed, 39 insertions, 28 deletions
diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c
index 80668fa7556e..ece45582a48d 100644
--- a/tools/perf/builtin-config.c
+++ b/tools/perf/builtin-config.c
@@ -156,7 +156,7 @@ static int parse_config_arg(char *arg, char **var, char **value)
156 156
157int cmd_config(int argc, const char **argv) 157int cmd_config(int argc, const char **argv)
158{ 158{
159 int i, ret = 0; 159 int i, ret = -1;
160 struct perf_config_set *set; 160 struct perf_config_set *set;
161 char *user_config = mkpath("%s/.perfconfig", getenv("HOME")); 161 char *user_config = mkpath("%s/.perfconfig", getenv("HOME"));
162 const char *config_filename; 162 const char *config_filename;
@@ -186,10 +186,8 @@ int cmd_config(int argc, const char **argv)
186 * because of reinitializing with options config file location. 186 * because of reinitializing with options config file location.
187 */ 187 */
188 set = perf_config_set__new(); 188 set = perf_config_set__new();
189 if (!set) { 189 if (!set)
190 ret = -1;
191 goto out_err; 190 goto out_err;
192 }
193 191
194 switch (actions) { 192 switch (actions) {
195 case ACTION_LIST: 193 case ACTION_LIST:
@@ -197,41 +195,54 @@ int cmd_config(int argc, const char **argv)
197 pr_err("Error: takes no arguments\n"); 195 pr_err("Error: takes no arguments\n");
198 parse_options_usage(config_usage, config_options, "l", 1); 196 parse_options_usage(config_usage, config_options, "l", 1);
199 } else { 197 } else {
200 ret = show_config(set); 198 if (show_config(set) < 0) {
201 if (ret < 0)
202 pr_err("Nothing configured, " 199 pr_err("Nothing configured, "
203 "please check your %s \n", config_filename); 200 "please check your %s \n", config_filename);
201 goto out_err;
202 }
204 } 203 }
205 break; 204 break;
206 default: 205 default:
207 if (argc) { 206 if (!argc) {
208 for (i = 0; argv[i]; i++) { 207 usage_with_options(config_usage, config_options);
209 char *var, *value; 208 break;
210 char *arg = strdup(argv[i]); 209 }
211
212 if (!arg) {
213 pr_err("%s: strdup failed\n", __func__);
214 ret = -1;
215 break;
216 }
217 210
218 if (parse_config_arg(arg, &var, &value) < 0) { 211 for (i = 0; argv[i]; i++) {
219 free(arg); 212 char *var, *value;
220 ret = -1; 213 char *arg = strdup(argv[i]);
221 break; 214
222 } 215 if (!arg) {
216 pr_err("%s: strdup failed\n", __func__);
217 goto out_err;
218 }
223 219
224 if (value == NULL) 220 if (parse_config_arg(arg, &var, &value) < 0) {
225 ret = show_spec_config(set, var);
226 else
227 ret = set_config(set, config_filename, var, value);
228 free(arg); 221 free(arg);
222 goto out_err;
229 } 223 }
230 } else 224
231 usage_with_options(config_usage, config_options); 225 if (value == NULL) {
226 if (show_spec_config(set, var) < 0) {
227 pr_err("%s is not configured: %s\n",
228 var, config_filename);
229 free(arg);
230 goto out_err;
231 }
232 } else {
233 if (set_config(set, config_filename, var, value) < 0) {
234 pr_err("Failed to set '%s=%s' on %s\n",
235 var, value, config_filename);
236 free(arg);
237 goto out_err;
238 }
239 }
240 free(arg);
241 }
232 } 242 }
233 243
234 perf_config_set__delete(set); 244 ret = 0;
235out_err: 245out_err:
246 perf_config_set__delete(set);
236 return ret; 247 return ret;
237} 248}