From 1551310aa5484a483cad4e6ae4a358cb509cbef8 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Sun, 29 Jun 2025 20:49:14 -0400 Subject: usr.sbin: init: Allow start path to be overridden Signed-off-by: Ian Moffett --- sys/kern/init_main.c | 7 ++++--- usr.sbin/init/main.c | 21 +++++++++++++++------ 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 #include +#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; } -- cgit v1.2.3