diff options
Diffstat (limited to 'tools/perf/builtin-config.c')
-rw-r--r-- | tools/perf/builtin-config.c | 67 |
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 | ||
157 | int cmd_config(int argc, const char **argv) | 157 | int 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; |
235 | out_err: | 245 | out_err: |
246 | perf_config_set__delete(set); | ||
236 | return ret; | 247 | return ret; |
237 | } | 248 | } |