aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/args.c3
-rw-r--r--main.c34
-rw-r--r--toys.h1
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[]);