From a2cd46a5f342553c05ae6ef4e7a73069df0e1be1 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Fri, 3 Jan 2020 03:10:17 -0600 Subject: Add MAYFORK to "help", teach it to behave differently when called as a builtin, and add -u. --- toys/other/help.c | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) (limited to 'toys/other') diff --git a/toys/other/help.c b/toys/other/help.c index 6ce1b02e..eba3cb1e 100644 --- a/toys/other/help.c +++ b/toys/other/help.c @@ -4,7 +4,7 @@ * * Often a shell builtin. -USE_HELP(NEWTOY(help, ""USE_HELP_EXTRAS("ah"), TOYFLAG_BIN)) +USE_HELP(NEWTOY(help, ""USE_HELP_EXTRAS("ahu"), TOYFLAG_BIN|TOYFLAG_MAYFORK)) config HELP bool "help" @@ -22,9 +22,10 @@ config HELP_EXTRAS depends on TOYBOX depends on HELP help - usage: help [-ah] + usage: help [-ah] [COMMAND] -a All commands + -u Usage only -h HTML output */ @@ -33,13 +34,13 @@ config HELP_EXTRAS static void do_help(struct toy_list *t) { - if (toys.optflags & FLAG_h) + if (FLAG(h)) xprintf("

%s

\n", t->name, t->name);
 
   toys.which = t;
-  show_help(stdout);
+  show_help(stdout, !FLAG(u));
 
-  if (toys.optflags & FLAG_h) xprintf("
\n"); + if (FLAG(h)) xprintf("\n"); } // The simple help is just toys.which = toy_find("name"); show_help(stdout); @@ -48,8 +49,18 @@ static void do_help(struct toy_list *t) void help_main(void) { int i; - - if (!(toys.optflags & FLAG_a)) { + + // If called with no arguments as a builtin form the shell, show all builtins + if (!*toys.optargs && (toys.optflags&FLAGS_BUILTIN)) { + for (i = 0; i < toys.toycount; i++) { + if (!(toy_list[i].flags&(TOYFLAG_NOFORK|TOYFLAG_MAYFORK))) continue; + toys.which = toy_list+i; + show_help(stdout, 0); + } + return; + } + + if (!FLAG(a)) { struct toy_list *t = toys.which; if (*toys.optargs && !(t = toy_find(*toys.optargs))) @@ -58,7 +69,7 @@ void help_main(void) return; } - if (toys.optflags & FLAG_h) { + if (FLAG(h)) { xprintf("\nToybox command list\n\n

\n"); for (i=0; i < toys.toycount; i++) xprintf("%s\n\n", toy_list[i].name, @@ -67,15 +78,15 @@ void help_main(void) } for (i = 0; i < toys.toycount; i++) { - if (toys.optflags & FLAG_h) xprintf("


\n
\n");
-    else {
+    if (FLAG(h)) xprintf("
\n
\n");
+    else if (!FLAG(u)) {
       memset(toybuf, '-', 78);
       memcpy(toybuf+3, toy_list[i].name, strlen(toy_list[i].name));
       printf("\n%s\n\n", toybuf);
     }
     do_help(toy_list+i);
-    if (toys.optflags & FLAG_h) xprintf("
\n"); + if (FLAG(h)) xprintf("
\n"); } - if (toys.optflags & FLAG_h) xprintf(""); + if (FLAG(h)) xprintf(""); } -- cgit v1.2.3