Just noticed the double which in my description! Here is an updated patch without it!
Apologies! ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐ On Tuesday, December 22, 2020 3:10 AM, depsterr <[email protected]> wrote: > Hello! > > I've used and loved busybox for a while now, however something which has > always bothered me has been the inability to specify from which section to > grab a man page, so I've devised a patch to fix this! > > This patch adds an option called "Support specifying section of page" (which > depends on man). If enabled it "Lets the user specify which from which > section they would like to retrieve their manpage from." - the help message > for the option. > > In practice this is done as such: > > Usage: man [-aw] MANPAGE[.SECTION]... > > This works perfectly with both existing flags and does not effect the > behavior of man when disabled. > > patch file is in attachments!
From a6516a03cccee8a713313afddd9dba5445bb94da Mon Sep 17 00:00:00 2001 From: depsterr <[email protected]> Date: Tue, 22 Dec 2020 02:52:55 +0100 Subject: [PATCH] Added option to support specifying section of manpage --- miscutils/man.c | 75 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 56 insertions(+), 19 deletions(-) diff --git a/miscutils/man.c b/miscutils/man.c index 61086612a..493d8cf14 100644 --- a/miscutils/man.c +++ b/miscutils/man.c @@ -7,13 +7,20 @@ //config: default y //config: help //config: Format and display manual pages. +//config:config FEATURE_MAN_SPECIFY_SECTION +//config: bool "Support specifying section of page" +//config: default y +//config: depends on MAN +//config: help +//config: Lets the user specify from which section they would +//config: like to retrieve their manpage from. //applet:IF_MAN(APPLET(man, BB_DIR_USR_BIN, BB_SUID_DROP)) //kbuild:lib-$(CONFIG_MAN) += man.o //usage:#define man_trivial_usage -//usage: "[-aw] MANPAGE..." +//usage: "[-aw] MANPAGE" IF_FEATURE_MAN_SPECIFY_SECTION("[.SECTION]") "..." //usage:#define man_full_usage "\n\n" //usage: "Display manual page\n" //usage: "\n -a Display all pages" @@ -240,6 +247,25 @@ static const char *if_redefined(const char *var, const char *key, const char *li return xstrdup(skip_whitespace(line)); } +static const char check_path(const char* cur_path, const char* cur_sect, int sect_len, const char* man_name) +{ + char *man_filename; + int cat0man1 = 0; + int ret = 0; + while (cat0man1 < 2) { + man_filename = xasprintf("%s/%s%.*s/%s.%.*s", + cur_path, + "cat\0man" + (cat0man1 * 4), + sect_len, cur_sect, + man_name, + sect_len, cur_sect); + ret = show_manpage(man_filename, cat0man1, 0); + cat0man1 += ret + 1; + free(man_filename); + } + return ret; +} + int man_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int man_main(int argc UNUSED_PARAM, char **argv) { @@ -316,35 +342,41 @@ int man_main(int argc UNUSED_PARAM, char **argv) const char *cur_path; int cur_mp; int found = 0; + int sect_len; +#if ENABLE_FEATURE_MAN_SPECIFY_SECTION + char* section; +#endif if (strchr(*argv, '/')) { found = show_manpage(*argv, /*man:*/ 1, 0); goto check_found; } + +#if ENABLE_FEATURE_MAN_SPECIFY_SECTION + section = strrchr(*argv, '.'); + if (section) { + *section = '\0'; + section++; + sect_len = strlen(section); + } +#endif cur_mp = 0; while ((cur_path = man_path_list[cur_mp++]) != NULL) { - /* for each MANPATH */ + +#if ENABLE_FEATURE_MAN_SPECIFY_SECTION + if (section) { + found |= check_path(cur_path, section, sect_len, *argv); + continue; + } +#endif + /* for each MANPATH */ const char *cur_sect = sec_list; do { /* for each section */ char *next_sect = strchrnul(cur_sect, ':'); - int sect_len = next_sect - cur_sect; - char *man_filename; - int cat0man1 = 0; + sect_len = next_sect - cur_sect; /* Search for cat, then man page */ - while (cat0man1 < 2) { - int found_here; - man_filename = xasprintf("%s/%s%.*s/%s.%.*s", - cur_path, - "cat\0man" + (cat0man1 * 4), - sect_len, cur_sect, - *argv, - sect_len, cur_sect); - found_here = show_manpage(man_filename, cat0man1, 0); - found |= found_here; - cat0man1 += found_here + 1; - free(man_filename); - } + found = check_path(cur_path, cur_sect, sect_len, *argv); if (found && !(opt & OPT_a)) goto next_arg; @@ -355,7 +387,12 @@ int man_main(int argc UNUSED_PARAM, char **argv) } check_found: if (!found) { - bb_error_msg("no manual entry for '%s'", *argv); +#if ENABLE_FEATURE_MAN_SPECIFY_SECTION + if (section) + bb_error_msg("no manual entry for '%s' in section '%s'", *argv, section); + else +#endif + bb_error_msg("no manual entry for '%s'", *argv); not_found = 1; } next_arg: -- 2.29.2
_______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
