Second attempt at making --help work with alias ls="ls --color"

This commit is contained in:
Rob Landley 2021-06-18 08:57:07 -05:00
parent 39f64538c2
commit 29e7ed94a1
3 changed files with 23 additions and 15 deletions

View File

@ -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)) {

34
main.c
View File

@ -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++);
}

1
toys.h
View File

@ -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[]);