Merge tag 'cpumask-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[firefly-linux-kernel-4.4.55.git] / tools / perf / builtin-help.c
index 0384d930480b47b29adbb86d93ae7c48e15f3741..36486eade1ef4f2d30736c99d7471b86d7dd0ada 100644 (file)
@@ -103,6 +103,8 @@ static int check_emacsclient_version(void)
 
 static void exec_woman_emacs(const char *path, const char *page)
 {
+       char sbuf[STRERR_BUFSIZE];
+
        if (!check_emacsclient_version()) {
                /* This works only with emacsclient version >= 22. */
                struct strbuf man_page = STRBUF_INIT;
@@ -111,16 +113,19 @@ static void exec_woman_emacs(const char *path, const char *page)
                        path = "emacsclient";
                strbuf_addf(&man_page, "(woman \"%s\")", page);
                execlp(path, "emacsclient", "-e", man_page.buf, NULL);
-               warning("failed to exec '%s': %s", path, strerror(errno));
+               warning("failed to exec '%s': %s", path,
+                       strerror_r(errno, sbuf, sizeof(sbuf)));
        }
 }
 
 static void exec_man_konqueror(const char *path, const char *page)
 {
        const char *display = getenv("DISPLAY");
+
        if (display && *display) {
                struct strbuf man_page = STRBUF_INIT;
                const char *filename = "kfmclient";
+               char sbuf[STRERR_BUFSIZE];
 
                /* It's simpler to launch konqueror using kfmclient. */
                if (path) {
@@ -139,24 +144,31 @@ static void exec_man_konqueror(const char *path, const char *page)
                        path = "kfmclient";
                strbuf_addf(&man_page, "man:%s(1)", page);
                execlp(path, filename, "newTab", man_page.buf, NULL);
-               warning("failed to exec '%s': %s", path, strerror(errno));
+               warning("failed to exec '%s': %s", path,
+                       strerror_r(errno, sbuf, sizeof(sbuf)));
        }
 }
 
 static void exec_man_man(const char *path, const char *page)
 {
+       char sbuf[STRERR_BUFSIZE];
+
        if (!path)
                path = "man";
        execlp(path, "man", page, NULL);
-       warning("failed to exec '%s': %s", path, strerror(errno));
+       warning("failed to exec '%s': %s", path,
+               strerror_r(errno, sbuf, sizeof(sbuf)));
 }
 
 static void exec_man_cmd(const char *cmd, const char *page)
 {
        struct strbuf shell_cmd = STRBUF_INIT;
+       char sbuf[STRERR_BUFSIZE];
+
        strbuf_addf(&shell_cmd, "%s %s", cmd, page);
        execl("/bin/sh", "sh", "-c", shell_cmd.buf, NULL);
-       warning("failed to exec '%s': %s", cmd, strerror(errno));
+       warning("failed to exec '%s': %s", cmd,
+               strerror_r(errno, sbuf, sizeof(sbuf)));
 }
 
 static void add_man_viewer(const char *name)
@@ -425,7 +437,18 @@ int cmd_help(int argc, const char **argv, const char *prefix __maybe_unused)
                        HELP_FORMAT_INFO),
        OPT_END(),
        };
-       const char * const builtin_help_usage[] = {
+       const char * const builtin_help_subcommands[] = {
+               "buildid-cache", "buildid-list", "diff", "evlist", "help", "list",
+               "record", "report", "bench", "stat", "timechart", "top", "annotate",
+               "script", "sched", "kmem", "lock", "kvm", "test", "inject", "mem", "data",
+#ifdef HAVE_LIBELF_SUPPORT
+               "probe",
+#endif
+#ifdef HAVE_LIBAUDIT_SUPPORT
+               "trace",
+#endif
+       NULL };
+       const char *builtin_help_usage[] = {
                "perf help [--all] [--man|--web|--info] [command]",
                NULL
        };
@@ -436,8 +459,8 @@ int cmd_help(int argc, const char **argv, const char *prefix __maybe_unused)
 
        perf_config(perf_help_config, &help_format);
 
-       argc = parse_options(argc, argv, builtin_help_options,
-                       builtin_help_usage, 0);
+       argc = parse_options_subcommand(argc, argv, builtin_help_options,
+                       builtin_help_subcommands, builtin_help_usage, 0);
 
        if (show_all) {
                printf("\n usage: %s\n\n", perf_usage_string);