Lines Matching +full:c +full:- +full:version +full:- +full:name

1 // SPDX-License-Identifier: GPL-2.0
3 * builtin-help.c
11 #include <subcmd/exec-cmd.h>
12 #include "common-cmds.h"
13 #include <subcmd/parse-options.h>
14 #include <subcmd/run-command.h>
32 char name[0]; member
38 char name[0]; member
61 static const char *get_man_viewer_info(const char *name) in get_man_viewer_info() argument
65 for (viewer = man_viewer_info_list; viewer; viewer = viewer->next) { in get_man_viewer_info()
66 if (!strcasecmp(name, viewer->name)) in get_man_viewer_info()
67 return viewer->info; in get_man_viewer_info()
76 const char *argv_ec[] = { "emacsclient", "--version", NULL }; in check_emacsclient_version()
77 int version; in check_emacsclient_version() local
78 int ret = -1; in check_emacsclient_version()
80 /* emacsclient prints its version number on stderr */ in check_emacsclient_version()
83 ec_process.err = -1; in check_emacsclient_version()
87 return -1; in check_emacsclient_version()
90 fprintf(stderr, "Failed to read emacsclient version\n"); in check_emacsclient_version()
96 * Don't bother checking return value, because "emacsclient --version" in check_emacsclient_version()
102 fprintf(stderr, "Failed to parse emacsclient version.\n"); in check_emacsclient_version()
106 version = atoi(buffer.buf + strlen("emacsclient")); in check_emacsclient_version()
108 if (version < 22) { in check_emacsclient_version()
110 "emacsclient version '%d' too old (< 22).\n", in check_emacsclient_version()
111 version); in check_emacsclient_version()
128 /* This works only with emacsclient version >= 22. */ in exec_woman_emacs()
134 execlp(path, "emacsclient", "-e", man_page, NULL); in exec_woman_emacs()
185 execl("/bin/sh", "sh", "-c", shell_cmd, NULL); in exec_man_cmd()
191 static void add_man_viewer(const char *name) in add_man_viewer() argument
194 size_t len = strlen(name); in add_man_viewer()
197 p = &((*p)->next); in add_man_viewer()
199 strcpy((*p)->name, name); in add_man_viewer()
202 static int supported_man_viewer(const char *name, size_t len) in supported_man_viewer() argument
204 return (!strncasecmp("man", name, len) || in supported_man_viewer()
205 !strncasecmp("woman", name, len) || in supported_man_viewer()
206 !strncasecmp("konqueror", name, len)); in supported_man_viewer()
209 static void do_add_man_viewer_info(const char *name, in do_add_man_viewer_info() argument
215 strncpy(new->name, name, len); in do_add_man_viewer_info()
216 new->info = strdup(value); in do_add_man_viewer_info()
217 new->next = man_viewer_info_list; in do_add_man_viewer_info()
221 static void unsupported_man_viewer(const char *name, const char *var) in unsupported_man_viewer() argument
224 "Please consider using 'man.<tool>.%s' instead.", name, var); in unsupported_man_viewer()
227 static int add_man_viewer_path(const char *name, in add_man_viewer_path() argument
231 if (supported_man_viewer(name, len)) in add_man_viewer_path()
232 do_add_man_viewer_info(name, len, value); in add_man_viewer_path()
234 unsupported_man_viewer(name, "cmd"); in add_man_viewer_path()
239 static int add_man_viewer_cmd(const char *name, in add_man_viewer_cmd() argument
243 if (supported_man_viewer(name, len)) in add_man_viewer_cmd()
244 unsupported_man_viewer(name, "path"); in add_man_viewer_cmd()
246 do_add_man_viewer_info(name, len, value); in add_man_viewer_cmd()
253 const char *name = var + 4; in add_man_viewer_info() local
254 const char *subkey = strrchr(name, '.'); in add_man_viewer_info()
257 pr_err("Config with no key for man viewer: %s", name); in add_man_viewer_info()
258 return -1; in add_man_viewer_info()
264 return add_man_viewer_path(name, subkey - name, value); in add_man_viewer_info()
269 return add_man_viewer_cmd(name, subkey - name, value); in add_man_viewer_info()
285 return -1; in perf_help_config()
307 if (longest < strlen(common_cmds[i].name)) in list_common_cmds_help()
308 longest = strlen(common_cmds[i].name); in list_common_cmds_help()
313 printf(" %-*s ", longest, common_cmds[i].name); in list_common_cmds_help()
327 return asprintf(&s, "perf-%s", perf_cmd) < 0 ? NULL : s; in cmd_to_page()
337 * system-wide paths after ours to find the manual page. If in setup_man_path()
347 static void exec_viewer(const char *name, const char *page) in exec_viewer() argument
349 const char *info = get_man_viewer_info(name); in exec_viewer()
351 if (!strcasecmp(name, "man")) in exec_viewer()
353 else if (!strcasecmp(name, "woman")) in exec_viewer()
355 else if (!strcasecmp(name, "konqueror")) in exec_viewer()
360 pr_warning("'%s': unknown man viewer.", name); in exec_viewer()
370 for (viewer = man_viewer_list; viewer; viewer = viewer->next) in show_man_page()
371 exec_viewer(viewer->name, page); /* will return when unable */ in show_man_page()
378 return -1; in show_man_page()
386 return -1; in show_info_page()
399 return -1; in get_html_page_path()
406 * If open_html is not defined in a platform-specific way (see for
407 * example compat/mingw.h), we use the script web--browse to display
413 execl_cmd("web--browse", "-c", "help.browser", path, NULL); in open_html()
423 return -1; in show_html_page()
444 "buildid-cache", "buildid-list", "diff", "evlist", "help", "list", in cmd_help()
453 "perf help [--all] [--man|--web|--info] [command]", in cmd_help()
458 load_command_list("perf-", &main_cmds, &other_cmds); in cmd_help()
492 /* fall-through */ in cmd_help()
494 rc = -1; in cmd_help()