diff options
-rw-r--r-- | init/ChangeLog | 6 | ||||
-rw-r--r-- | init/init.c | 14 |
2 files changed, 16 insertions, 4 deletions
diff --git a/init/ChangeLog b/init/ChangeLog index d66981d6..c39c970c 100644 --- a/init/ChangeLog +++ b/init/ChangeLog @@ -1,3 +1,9 @@ +2005-02-24 Ben Asselstine <benasselstine@gmail.com> + + * init.c (main): Only pass ARGP_NO_ERRS to argp_parse when invoked + by the bootstrap filesystem. + (flags): New variable. + 2002-05-07 Roland McGrath <roland@frob.com> * init.c (reboot_system): u_int -> size_t diff --git a/init/init.c b/init/init.c index 125084a9..d7e42467 100644 --- a/init/init.c +++ b/init/init.c @@ -529,13 +529,19 @@ main (int argc, char **argv, char **envp) { volatile int err; int i; + int flags; mach_port_t consdev; struct argp argp = { options, parse_opt, 0, doc }; - /* Parse the arguments. We don't want the vector reordered, - we should pass on to our child the exact arguments we got - and just ignore any arguments that aren't flags for us. */ - argp_parse (&argp, argc, argv, ARGP_NO_ERRS|ARGP_IN_ORDER, 0, 0); + /* Parse the arguments. We don't want the vector reordered, we + should pass on to our child the exact arguments we got and just + ignore any arguments that aren't flags for us. ARGP_NO_ERRS + suppresses --help and --version, so we only use that option if we + are booting. */ + flags = ARGP_IN_ORDER; + if (getpid () == 0) + flags |= ARGP_NO_ERRS; + argp_parse (&argp, argc, argv, flags, 0, 0); if (getpid () > 0) error (2, 0, "can only be run by bootstrap filesystem"); |