perf auxtrace: Add itrace option to output ptwrite events
[linux-2.6-microblaze.git] / tools / perf / builtin-config.c
index 80668fa..ece4558 100644 (file)
@@ -156,7 +156,7 @@ static int parse_config_arg(char *arg, char **var, char **value)
 
 int cmd_config(int argc, const char **argv)
 {
-       int i, ret = 0;
+       int i, ret = -1;
        struct perf_config_set *set;
        char *user_config = mkpath("%s/.perfconfig", getenv("HOME"));
        const char *config_filename;
@@ -186,10 +186,8 @@ int cmd_config(int argc, const char **argv)
         * because of reinitializing with options config file location.
         */
        set = perf_config_set__new();
-       if (!set) {
-               ret = -1;
+       if (!set)
                goto out_err;
-       }
 
        switch (actions) {
        case ACTION_LIST:
@@ -197,41 +195,54 @@ int cmd_config(int argc, const char **argv)
                        pr_err("Error: takes no arguments\n");
                        parse_options_usage(config_usage, config_options, "l", 1);
                } else {
-                       ret = show_config(set);
-                       if (ret < 0)
+                       if (show_config(set) < 0) {
                                pr_err("Nothing configured, "
                                       "please check your %s \n", config_filename);
+                               goto out_err;
+                       }
                }
                break;
        default:
-               if (argc) {
-                       for (i = 0; argv[i]; i++) {
-                               char *var, *value;
-                               char *arg = strdup(argv[i]);
-
-                               if (!arg) {
-                                       pr_err("%s: strdup failed\n", __func__);
-                                       ret = -1;
-                                       break;
-                               }
+               if (!argc) {
+                       usage_with_options(config_usage, config_options);
+                       break;
+               }
 
-                               if (parse_config_arg(arg, &var, &value) < 0) {
-                                       free(arg);
-                                       ret = -1;
-                                       break;
-                               }
+               for (i = 0; argv[i]; i++) {
+                       char *var, *value;
+                       char *arg = strdup(argv[i]);
+
+                       if (!arg) {
+                               pr_err("%s: strdup failed\n", __func__);
+                               goto out_err;
+                       }
 
-                               if (value == NULL)
-                                       ret = show_spec_config(set, var);
-                               else
-                                       ret = set_config(set, config_filename, var, value);
+                       if (parse_config_arg(arg, &var, &value) < 0) {
                                free(arg);
+                               goto out_err;
                        }
-               } else
-                       usage_with_options(config_usage, config_options);
+
+                       if (value == NULL) {
+                               if (show_spec_config(set, var) < 0) {
+                                       pr_err("%s is not configured: %s\n",
+                                              var, config_filename);
+                                       free(arg);
+                                       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);
+                                       free(arg);
+                                       goto out_err;
+                               }
+                       }
+                       free(arg);
+               }
        }
 
-       perf_config_set__delete(set);
+       ret = 0;
 out_err:
+       perf_config_set__delete(set);
        return ret;
 }