[Toybox] --help

Rob Landley rob at landley.net
Mon Apr 8 01:54:49 PDT 2013


On 04/05/2013 11:18:52 PM, Isaac Dunham wrote:
> > Is there an acceptable way to standardize this across all toys?
> 
> To some extent, there will be variation.
> But I was looking at ifconfig and found it had an interesting  
> approach:
> static void show_help(void)
> {
>   char **arg = xzalloc(sizeof(char*) *3);
>   arg[0] = "help";
>   arg[1] = xstrdup(toys.which->name);
>   toy_exec(arg);
> }
> ..
>  if(argv[0] && (strcmp(argv[0], "--help") == 0))
>   show_help();
> 
> It seems to me that show_help() might be suitable for inclusion in  
> lib/.

In lib/args.c there's exithelp which is used in lib/lib.c ala:

// Die with an error message.
void error_exit(char *msg, ...)
{
   va_list va;

   if (CFG_HELP && toys.exithelp) {
     *toys.optargs=*toys.argv;
     USE_HELP(help_main();)  // dear gcc: shut up.
     fprintf(stderr,"\n");
   }

Note that CFG_HELP is the help command in the "other" menu. I've  
pondered having that be in the toybox general config menu instead of as  
a command, but since there _is_ a command having two config symbols is  
suboptimal...

This whole area is a todo item, but ifconfig is not taking advantage of  
the existing toybox infrastructure, and thus not a good model here.

> In theory, one could make the main logic handle <toy> --help like  
> help <toy>,
> but it would be impossible to implement POSIX and still support
> help with -h in all cases where it's appropriate (I remember one or  
> two commands
> use -h for other purposes, though I don't remember which).

Right now it shows help for any unknown argument. So "-?" should do it  
too (assuming that doesn't wildcard match something weird).

> Of course the
> char **argv = toys.optargs;
> looks rather ugly to me...

The whole of ifconfig needs more cleanup. It's on the todo list...

Rob



More information about the Toybox mailing list