summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/kern/init_main.c7
-rw-r--r--usr.sbin/init/main.c21
2 files changed, 19 insertions, 9 deletions
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index 797319f..dfb058a 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -44,10 +44,11 @@
#include <vm/vm.h>
#include <string.h>
+#define _START_PATH "/usr/sbin/init"
#if defined(_INSTALL_MEDIA)
-#define _START_PATH "/usr/sbin/install"
+#define _START_ARG "/usr/sbin/install"
#else
-#define _START_PATH "/usr/sbin/init"
+#define _START_ARG NULL
#endif /* _INSTALL_MEDIA */
struct proc g_proc0;
@@ -64,7 +65,7 @@ start_init(void)
{
struct proc *td = this_td();
struct execve_args execve_args;
- char *argv[] = { _START_PATH, NULL, NULL };
+ char *argv[] = { _START_PATH, _START_ARG, NULL };
char *envp[] = { NULL };
kprintf("starting init...\n");
diff --git a/usr.sbin/init/main.c b/usr.sbin/init/main.c
index 7ad7946..bad8201 100644
--- a/usr.sbin/init/main.c
+++ b/usr.sbin/init/main.c
@@ -34,13 +34,22 @@
#define INIT_RC_PATH "/usr/rc/init.rc"
int
-main(void)
+main(int argc, char **argv)
{
- char *argv[] = { SHELL_PATH, INIT_RC_PATH, NULL };
- char *envp[] = { NULL };
+ char *start_argv[] = { SHELL_PATH, INIT_RC_PATH, NULL };
+ char *start_envp[] = { NULL };
- spawn(SHELL_PATH, argv, envp, 0);
- argv[1] = NULL;
- spawn(SHELL_PATH, argv, envp, SPAWN_WAIT);
+ spawn(SHELL_PATH, start_argv, start_envp, 0);
+ start_argv[1] = NULL;
+
+ /*
+ * We can override the start program header
+ * if there is something specified.
+ */
+ if (argc > 1) {
+ start_argv[0] = argv[1];
+ }
+
+ spawn(start_argv[0], start_argv, start_envp, SPAWN_WAIT);
return 0;
}