diff options
author | Namhyung Kim <namhyung.kim@lge.com> | 2012-05-07 14:09:02 +0900 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2012-05-07 17:30:21 -0300 |
commit | 16ad2ffb822cd28e2330284a60fdfec8bb90bbb0 (patch) | |
tree | 4455824202a98540493d75dc5333f77cb42b59ba /tools/perf/builtin-record.c | |
parent | dfe78adaaca90417ece98edbd3eb1c9661334406 (diff) | |
download | linux-16ad2ffb822cd28e2330284a60fdfec8bb90bbb0.tar.gz linux-16ad2ffb822cd28e2330284a60fdfec8bb90bbb0.tar.bz2 linux-16ad2ffb822cd28e2330284a60fdfec8bb90bbb0.zip |
perf tools: Introduce perf_target__strerror()
The perf_target__strerror() sets @buf to a string that describes the
(perf_target-specific) error condition that is passed via @errnum.
This is similar to strerror_r() and does same thing if @errnum has a
standard errno value.
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
Suggested-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Reviewed-by: David Ahern <dsahern@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1336367344-28071-6-git-send-email-namhyung.kim@lge.com
[ committer note: No need to use PERF_ERRNO_TARGET__SUCCESS, use shorter idiom ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-record.c')
-rw-r--r-- | tools/perf/builtin-record.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index d26a279796d9..c8bf6ea000da 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -831,6 +831,7 @@ int cmd_record(int argc, const char **argv, const char *prefix __used) struct perf_evsel *pos; struct perf_evlist *evsel_list; struct perf_record *rec = &record; + char errbuf[BUFSIZ]; perf_header__set_cmdline(argc, argv); @@ -884,11 +885,24 @@ int cmd_record(int argc, const char **argv, const char *prefix __used) goto out_symbol_exit; } - perf_target__validate(&rec->opts.target); + err = perf_target__validate(&rec->opts.target); + if (err) { + perf_target__strerror(&rec->opts.target, err, errbuf, BUFSIZ); + ui__warning("%s", errbuf); + } + + err = perf_target__parse_uid(&rec->opts.target); + if (err) { + int saved_errno = errno; - if (perf_target__parse_uid(&rec->opts.target) < 0) + perf_target__strerror(&rec->opts.target, err, errbuf, BUFSIZ); + ui__warning("%s", errbuf); + + err = -saved_errno; goto out_free_fd; + } + err = -ENOMEM; if (perf_evlist__create_maps(evsel_list, &rec->opts.target) < 0) usage_with_options(record_usage, record_options); |