From 29e7ed94a1fe2836d38960b9b3ab3e3b7e61c791 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Fri, 18 Jun 2021 08:57:07 -0500 Subject: Second attempt at making --help work with alias ls="ls --color" --- lib/args.c | 3 +++ main.c | 34 +++++++++++++++++++--------------- toys.h | 1 + 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/lib/args.c b/lib/args.c index ef23cc07..ba8b465c 100644 --- a/lib/args.c +++ b/lib/args.c @@ -426,6 +426,9 @@ void get_optflags(void) continue; } + if (CFG_TOYBOX_HELP_DASHDASH && !(toys.which->flags&TOYFLAG_NOHELP)) + check_help(toys.argv+gof.argc); + // do we match a known --longopt? for (lo = gof.longopts; lo; lo = lo->next) { if (!strncmp(gof.arg, lo->str, lo->len)) { diff --git a/main.c b/main.c index ffaece07..8f00158c 100644 --- a/main.c +++ b/main.c @@ -67,6 +67,21 @@ static void unknown(char *name) help_exit("Unknown command %s", name); } +void check_help(char **arg) +{ + if (!strcmp(*arg, "--help")) { + if (CFG_TOYBOX && toys.which == toy_list && arg[1]) + if (!(toys.which = toy_find(arg[1]))) unknown(arg[1]); + show_help(stdout, 1); + xexit(); + } + + if (!strcmp(*arg, "--version")) { + xprintf("toybox %s\n", toybox_version); + xexit(); + } +} + // Setup toybox global state for this command. void toy_singleinit(struct toy_list *which, char *argv[]) { @@ -74,23 +89,12 @@ void toy_singleinit(struct toy_list *which, char *argv[]) toys.argv = argv; toys.toycount = ARRAY_LEN(toy_list); - // Parse --help and --version for (almost) all commands - if (CFG_TOYBOX_HELP_DASHDASH && !(which->flags & TOYFLAG_NOHELP) && argv[1]) { - if (!strcmp(argv[1], "--help")) { - if (CFG_TOYBOX && toys.which == toy_list && toys.argv[2]) - if (!(toys.which = toy_find(toys.argv[2]))) unknown(toys.argv[2]); - show_help(stdout, 1); - xexit(); - } - - if (!strcmp(argv[1], "--version")) { - xprintf("toybox %s\n", toybox_version); - xexit(); - } - } - if (NEED_OPTIONS && which->options) get_optflags(); else { + // Parse --help and --version for (almost) all commands + if (CFG_TOYBOX_HELP_DASHDASH && !(which->flags & TOYFLAG_NOHELP) && argv[1]) + check_help(argv+1); + toys.optargs = argv+1; for (toys.optc = 0; toys.optargs[toys.optc]; toys.optc++); } diff --git a/toys.h b/toys.h index ebaebee3..6e4ac184 100644 --- a/toys.h +++ b/toys.h @@ -83,6 +83,7 @@ struct toy_list *toy_find(char *name); void toy_init(struct toy_list *which, char *argv[]); +void check_help(char **arg); void toy_singleinit(struct toy_list *which, char *argv[]); void toy_exec(char *argv[]); -- cgit v1.2.3