summaryrefslogtreecommitdiff
path: root/libdiskfs/opts-std-startup.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1998-12-27 08:41:15 +0000
committerRoland McGrath <roland@gnu.org>1998-12-27 08:41:15 +0000
commitacb030991c07ad33a8d55ff19e493cc26a3ea6a6 (patch)
tree68312059ccd49b5c42927d19825bba3d90e48fd9 /libdiskfs/opts-std-startup.c
parent2c026d41553528d0fdb0fe795b99ddd6c5e68b74 (diff)
1998-12-27 Roland McGrath <roland@baalperazim.frob.com>
* opts-std-startup.c (startup_options): Move -C above "Boot options:", give it a docstring. Docstrings for --bootflags, --boot-command. (_diskfs_boot_command): New variable. (startup_options, parse_startup_opt): New option --boot-command, consumes remaining args to set _diskfs_boot_command. * priv.h: Declare _diskfs_boot_command. * boot-start.c (diskfs_start_bootstrap): If diskfs_exec_server_task is null, assume we are running as the boot command and have a root with /servers/exec. If _diskfs_boot_command is set, start that command in place of init. If can't lookup initname, print error msg and loop to prompt. Put a newline before "Init name" prompt. After starting exec server, try to set active trans on /servers/exec. (diskfs_boot_getpriv): New function: if _hurd_host_priv is null, use fsys_getpriv on our bootstrap port. (parent_task): New static variable, set there with fsys_getpriv call. (diskfs_S_fsys_init): If diskfs_exec_server_task is null, don't do anything with it; instead register parent_task as our child and send an fsys_init to our parent on our bootstrap port. * console.c (diskfs_console_stdio): Call diskfs_boot_privports before get_privileged_ports if diskfs_boot_flags is set.
Diffstat (limited to 'libdiskfs/opts-std-startup.c')
-rw-r--r--libdiskfs/opts-std-startup.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/libdiskfs/opts-std-startup.c b/libdiskfs/opts-std-startup.c
index 14760ed7..e03c2722 100644
--- a/libdiskfs/opts-std-startup.c
+++ b/libdiskfs/opts-std-startup.c
@@ -1,6 +1,6 @@
/* Standard startup-time command line parser
- Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1995, 96, 97, 98 Free Software Foundation, Inc.
Written by Miles Bader <miles@gnu.ai.mit.edu>
@@ -25,7 +25,8 @@
#include <hurd/store.h>
#include "priv.h"
-char *diskfs_boot_flags = 0;
+char *diskfs_boot_flags;
+char **_diskfs_boot_command;
extern char **diskfs_argv;
@@ -37,18 +38,26 @@ mach_port_t diskfs_exec_server_task = MACH_PORT_NULL;
#define OPT_DEVICE_MASTER_PORT (-2)
#define OPT_EXEC_SERVER_TASK (-3)
#define OPT_BOOTFLAGS (-4)
+#define OPT_BOOT_COMMAND (-5)
static const struct argp_option
startup_options[] =
{
+ {"directory", 'C', "DIRECTORY", 0,
+ "Use DIRECTORY as the root of the filesystem"},
+ {"virtual-root", 0, 0, OPTION_ALIAS},
+ {"chroot", 0, 0, OPTION_ALIAS},
+
{0,0,0,0, "Boot options:", -2},
+ {"bootflags", OPT_BOOTFLAGS, "FLAGS", 0,
+ "Required for bootstrap filesystem, the FLAGS"
+ " argument is passed on to init"},
+ {"boot-command", OPT_BOOT_COMMAND, 0, 0,
+ "Remaining arguments form command line to run"
+ " at bootstrap instead of init"},
{"host-priv-port", OPT_HOST_PRIV_PORT, "PORT"},
{"device-master-port", OPT_DEVICE_MASTER_PORT, "PORT"},
{"exec-server-task", OPT_EXEC_SERVER_TASK, "PORT"},
- {"bootflags", OPT_BOOTFLAGS, "FLAGS"},
- {"directory", 'C', "DIRECTORY"},
- {"virtual-root", 0, 0, OPTION_ALIAS | OPTION_HIDDEN},
- {"chroot", 0, 0, OPTION_ALIAS | OPTION_HIDDEN},
{0}
};
@@ -90,6 +99,14 @@ parse_startup_opt (int opt, char *arg, struct argp_state *state)
case 'C':
_diskfs_chroot_directory = arg; break;
+ case OPT_BOOT_COMMAND:
+ if (state->next == state->argc)
+ argp_error (state, "Command line must follow --boot-command option");
+ _diskfs_boot_command = state->argv + state->next;
+ state->next = state->argc; /* stop parsing */
+ {char **p; for (p = _diskfs_boot_command; *p; ++p) printf("BC %s\n",*p);}
+ break;
+
case ARGP_KEY_END:
diskfs_argv = state->argv; break;