aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorNamhyung Kim <namhyung.kim@lge.com>2013-02-06 00:57:16 -0500
committerArnaldo Carvalho de Melo <acme@redhat.com>2013-02-06 16:09:26 -0500
commit553099857702bb77e541c47bde47f6863834d2e2 (patch)
treefdc46d986f30efdbca79be57117330205b6c1ce3 /tools
parent51f27d1440cede5a413d279a20b38767b6f85097 (diff)
perf sort: Make setup_sorting returns an error code
Currently the setup_sorting() is called for parsing sort keys and exits if it failed to add the sort key. As it's included in libperf it'd be better returning an error code rather than exiting application inside of the library. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Suggested-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1360130237-9963-2-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/builtin-annotate.c3
-rw-r--r--tools/perf/builtin-diff.c4
-rw-r--r--tools/perf/builtin-report.c3
-rw-r--r--tools/perf/builtin-top.c3
-rw-r--r--tools/perf/tests/hists_link.c3
-rw-r--r--tools/perf/util/sort.c10
-rw-r--r--tools/perf/util/sort.h2
7 files changed, 18 insertions, 10 deletions
diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
index dc870cf31b79..95a2ad3f043e 100644
--- a/tools/perf/builtin-annotate.c
+++ b/tools/perf/builtin-annotate.c
@@ -309,7 +309,8 @@ int cmd_annotate(int argc, const char **argv, const char *prefix __maybe_unused)
309 if (symbol__init() < 0) 309 if (symbol__init() < 0)
310 return -1; 310 return -1;
311 311
312 setup_sorting(annotate_usage, options); 312 if (setup_sorting() < 0)
313 usage_with_options(annotate_usage, options);
313 314
314 if (argc) { 315 if (argc) {
315 /* 316 /*
diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c
index 4af0b580b046..d207a97a2db1 100644
--- a/tools/perf/builtin-diff.c
+++ b/tools/perf/builtin-diff.c
@@ -605,7 +605,9 @@ int cmd_diff(int argc, const char **argv, const char *prefix __maybe_unused)
605 605
606 ui_init(); 606 ui_init();
607 607
608 setup_sorting(diff_usage, options); 608 if (setup_sorting() < 0)
609 usage_with_options(diff_usage, options);
610
609 setup_pager(); 611 setup_pager();
610 612
611 sort_entry__setup_elide(&sort_dso, symbol_conf.dso_list, "dso", NULL); 613 sort_entry__setup_elide(&sort_dso, symbol_conf.dso_list, "dso", NULL);
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 91555d4885f4..96b5a7fee4bb 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -751,7 +751,8 @@ repeat:
751 751
752 } 752 }
753 753
754 setup_sorting(report_usage, options); 754 if (setup_sorting() < 0)
755 usage_with_options(report_usage, options);
755 756
756 /* 757 /*
757 * Only in the newt browser we are doing integrated annotation, 758 * Only in the newt browser we are doing integrated annotation,
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index f561757b1bfa..72f6eb7b4173 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -1129,7 +1129,8 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused)
1129 if (sort_order == default_sort_order) 1129 if (sort_order == default_sort_order)
1130 sort_order = "dso,symbol"; 1130 sort_order = "dso,symbol";
1131 1131
1132 setup_sorting(top_usage, options); 1132 if (setup_sorting() < 0)
1133 usage_with_options(top_usage, options);
1133 1134
1134 if (top.use_stdio) 1135 if (top.use_stdio)
1135 use_browser = 0; 1136 use_browser = 0;
diff --git a/tools/perf/tests/hists_link.c b/tools/perf/tests/hists_link.c
index 0afd9223bde7..1be64a6c5daf 100644
--- a/tools/perf/tests/hists_link.c
+++ b/tools/perf/tests/hists_link.c
@@ -449,7 +449,8 @@ int test__hists_link(void)
449 goto out; 449 goto out;
450 450
451 /* default sort order (comm,dso,sym) will be used */ 451 /* default sort order (comm,dso,sym) will be used */
452 setup_sorting(NULL, NULL); 452 if (setup_sorting() < 0)
453 goto out;
453 454
454 machines__init(&machines); 455 machines__init(&machines);
455 456
diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index 03cabe5678d0..d8b48827a17e 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -565,23 +565,25 @@ int sort_dimension__add(const char *tok)
565 return -ESRCH; 565 return -ESRCH;
566} 566}
567 567
568void setup_sorting(const char * const usagestr[], const struct option *opts) 568int setup_sorting(void)
569{ 569{
570 char *tmp, *tok, *str = strdup(sort_order); 570 char *tmp, *tok, *str = strdup(sort_order);
571 int ret = 0;
571 572
572 for (tok = strtok_r(str, ", ", &tmp); 573 for (tok = strtok_r(str, ", ", &tmp);
573 tok; tok = strtok_r(NULL, ", ", &tmp)) { 574 tok; tok = strtok_r(NULL, ", ", &tmp)) {
574 int ret = sort_dimension__add(tok); 575 ret = sort_dimension__add(tok);
575 if (ret == -EINVAL) { 576 if (ret == -EINVAL) {
576 error("Invalid --sort key: `%s'", tok); 577 error("Invalid --sort key: `%s'", tok);
577 usage_with_options(usagestr, opts); 578 break;
578 } else if (ret == -ESRCH) { 579 } else if (ret == -ESRCH) {
579 error("Unknown --sort key: `%s'", tok); 580 error("Unknown --sort key: `%s'", tok);
580 usage_with_options(usagestr, opts); 581 break;
581 } 582 }
582 } 583 }
583 584
584 free(str); 585 free(str);
586 return ret;
585} 587}
586 588
587void sort_entry__setup_elide(struct sort_entry *self, struct strlist *list, 589void sort_entry__setup_elide(struct sort_entry *self, struct strlist *list,
diff --git a/tools/perf/util/sort.h b/tools/perf/util/sort.h
index e994ad3e9897..b13e56f6ccbe 100644
--- a/tools/perf/util/sort.h
+++ b/tools/perf/util/sort.h
@@ -160,7 +160,7 @@ struct sort_entry {
160extern struct sort_entry sort_thread; 160extern struct sort_entry sort_thread;
161extern struct list_head hist_entry__sort_list; 161extern struct list_head hist_entry__sort_list;
162 162
163void setup_sorting(const char * const usagestr[], const struct option *opts); 163int setup_sorting(void);
164extern int sort_dimension__add(const char *); 164extern int sort_dimension__add(const char *);
165void sort_entry__setup_elide(struct sort_entry *self, struct strlist *list, 165void sort_entry__setup_elide(struct sort_entry *self, struct strlist *list,
166 const char *list_name, FILE *fp); 166 const char *list_name, FILE *fp);