From 803dbbf0c808cf8d24b44bf3e944175366ff92a6 Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Sun, 21 Dec 2008 01:15:02 +0000 Subject: Allow rc_runlevel/softlevel to set runlevel from kernel commandline. --- src/rc/rc.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/rc/rc.c b/src/rc/rc.c index 52c1e4d..8e9cd93 100644 --- a/src/rc/rc.c +++ b/src/rc/rc.c @@ -893,8 +893,8 @@ main(int argc, char **argv) } else { /* We should not use krunevel in sysinit or the boot runlevel */ if (!newlevel || - strcmp(newlevel, RC_LEVEL_SYSINIT) != 0 || - strcmp(newlevel, getenv("RC_BOOTLEVEL")) != 0) + (strcmp(newlevel, RC_LEVEL_SYSINIT) != 0 && + strcmp(newlevel, getenv("RC_BOOTLEVEL")) != 0)) { if (get_krunlevel(krunlevel, sizeof(krunlevel))) { newlevel = krunlevel; @@ -902,10 +902,24 @@ main(int argc, char **argv) } } - if (newlevel && - strcmp(runlevel, newlevel) != 0 && - !rc_runlevel_exists(newlevel)) - eerrorx("%s: is not a valid runlevel", newlevel); + if (newlevel) { + if (strcmp(runlevel, newlevel) != 0 && + !rc_runlevel_exists(newlevel)) + eerrorx("%s: not a valid runlevel", newlevel); + +#ifdef __linux__ + if (strcmp(newlevel, RC_LEVEL_SYSINIT) == 0) { + /* If we requested a runlevel, save it now */ + p = proc_getent("rc_runlevel"); + if (p == NULL) + p = proc_getent("softlevel"); + if (p != NULL) { + set_krunlevel(p); + free(p); + } + } + } +#endif } if (going_down) { @@ -1075,6 +1089,7 @@ main(int argc, char **argv) rc_service_mark(token, RC_SERVICE_STOPPED); free(proc); } + #endif rc_plugin_run(RC_HOOK_RUNLEVEL_START_OUT, runlevel); -- cgit v1.2.3