diff options
author | Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> | 2014-08-13 22:22:53 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2014-08-15 12:08:26 -0400 |
commit | ede395d27c60c06a2173e7a9c0f4a929a1fef73e (patch) | |
tree | 513a0972c115a690963b2772250404bbb18e2cb9 /tools/perf/builtin-help.c | |
parent | f9f33fdba159a9c163ecf1dc0106ebd4c2498130 (diff) |
perf help: Use strerror_r instead of strerror
Use strerror_r instead of strerror in error messages for thread-safety.
Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Naohiro Aota <naota@elisp.net>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20140814022253.3545.82136.stgit@kbuild-fedora.novalocal
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-help.c')
-rw-r--r-- | tools/perf/builtin-help.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/tools/perf/builtin-help.c b/tools/perf/builtin-help.c index 0384d930480b..25d20628212e 100644 --- a/tools/perf/builtin-help.c +++ b/tools/perf/builtin-help.c | |||
@@ -103,6 +103,8 @@ static int check_emacsclient_version(void) | |||
103 | 103 | ||
104 | static void exec_woman_emacs(const char *path, const char *page) | 104 | static void exec_woman_emacs(const char *path, const char *page) |
105 | { | 105 | { |
106 | char sbuf[STRERR_BUFSIZE]; | ||
107 | |||
106 | if (!check_emacsclient_version()) { | 108 | if (!check_emacsclient_version()) { |
107 | /* This works only with emacsclient version >= 22. */ | 109 | /* This works only with emacsclient version >= 22. */ |
108 | struct strbuf man_page = STRBUF_INIT; | 110 | struct strbuf man_page = STRBUF_INIT; |
@@ -111,16 +113,19 @@ static void exec_woman_emacs(const char *path, const char *page) | |||
111 | path = "emacsclient"; | 113 | path = "emacsclient"; |
112 | strbuf_addf(&man_page, "(woman \"%s\")", page); | 114 | strbuf_addf(&man_page, "(woman \"%s\")", page); |
113 | execlp(path, "emacsclient", "-e", man_page.buf, NULL); | 115 | execlp(path, "emacsclient", "-e", man_page.buf, NULL); |
114 | warning("failed to exec '%s': %s", path, strerror(errno)); | 116 | warning("failed to exec '%s': %s", path, |
117 | strerror_r(errno, sbuf, sizeof(sbuf))); | ||
115 | } | 118 | } |
116 | } | 119 | } |
117 | 120 | ||
118 | static void exec_man_konqueror(const char *path, const char *page) | 121 | static void exec_man_konqueror(const char *path, const char *page) |
119 | { | 122 | { |
120 | const char *display = getenv("DISPLAY"); | 123 | const char *display = getenv("DISPLAY"); |
124 | |||
121 | if (display && *display) { | 125 | if (display && *display) { |
122 | struct strbuf man_page = STRBUF_INIT; | 126 | struct strbuf man_page = STRBUF_INIT; |
123 | const char *filename = "kfmclient"; | 127 | const char *filename = "kfmclient"; |
128 | char sbuf[STRERR_BUFSIZE]; | ||
124 | 129 | ||
125 | /* It's simpler to launch konqueror using kfmclient. */ | 130 | /* It's simpler to launch konqueror using kfmclient. */ |
126 | if (path) { | 131 | if (path) { |
@@ -139,24 +144,31 @@ static void exec_man_konqueror(const char *path, const char *page) | |||
139 | path = "kfmclient"; | 144 | path = "kfmclient"; |
140 | strbuf_addf(&man_page, "man:%s(1)", page); | 145 | strbuf_addf(&man_page, "man:%s(1)", page); |
141 | execlp(path, filename, "newTab", man_page.buf, NULL); | 146 | execlp(path, filename, "newTab", man_page.buf, NULL); |
142 | warning("failed to exec '%s': %s", path, strerror(errno)); | 147 | warning("failed to exec '%s': %s", path, |
148 | strerror_r(errno, sbuf, sizeof(sbuf))); | ||
143 | } | 149 | } |
144 | } | 150 | } |
145 | 151 | ||
146 | static void exec_man_man(const char *path, const char *page) | 152 | static void exec_man_man(const char *path, const char *page) |
147 | { | 153 | { |
154 | char sbuf[STRERR_BUFSIZE]; | ||
155 | |||
148 | if (!path) | 156 | if (!path) |
149 | path = "man"; | 157 | path = "man"; |
150 | execlp(path, "man", page, NULL); | 158 | execlp(path, "man", page, NULL); |
151 | warning("failed to exec '%s': %s", path, strerror(errno)); | 159 | warning("failed to exec '%s': %s", path, |
160 | strerror_r(errno, sbuf, sizeof(sbuf))); | ||
152 | } | 161 | } |
153 | 162 | ||
154 | static void exec_man_cmd(const char *cmd, const char *page) | 163 | static void exec_man_cmd(const char *cmd, const char *page) |
155 | { | 164 | { |
156 | struct strbuf shell_cmd = STRBUF_INIT; | 165 | struct strbuf shell_cmd = STRBUF_INIT; |
166 | char sbuf[STRERR_BUFSIZE]; | ||
167 | |||
157 | strbuf_addf(&shell_cmd, "%s %s", cmd, page); | 168 | strbuf_addf(&shell_cmd, "%s %s", cmd, page); |
158 | execl("/bin/sh", "sh", "-c", shell_cmd.buf, NULL); | 169 | execl("/bin/sh", "sh", "-c", shell_cmd.buf, NULL); |
159 | warning("failed to exec '%s': %s", cmd, strerror(errno)); | 170 | warning("failed to exec '%s': %s", cmd, |
171 | strerror_r(errno, sbuf, sizeof(sbuf))); | ||
160 | } | 172 | } |
161 | 173 | ||
162 | static void add_man_viewer(const char *name) | 174 | static void add_man_viewer(const char *name) |