diff options
Diffstat (limited to 'init/halt.c')
-rw-r--r-- | init/halt.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/init/halt.c b/init/halt.c index 3a23eca..c88c333 100644 --- a/init/halt.c +++ b/init/halt.c @@ -85,6 +85,8 @@ int halt_main(int argc UNUSED_PARAM, char **argv) //TODO: I tend to think that signalling linuxrc is wrong // pity original author didn't comment on it... if (ENABLE_FEATURE_INITRD) { + /* talk to linuxrc */ + /* bbox init/linuxrc assumed */ pid_t *pidlist = find_pid_by_name("linuxrc"); if (pidlist[0] > 0) rc = kill(pidlist[0], signals[which]); @@ -92,7 +94,21 @@ int halt_main(int argc UNUSED_PARAM, char **argv) free(pidlist); } if (rc) { - rc = kill(1, signals[which]); + /* talk to init */ + if (!ENABLE_FEATURE_CALL_TELINIT) { + /* bbox init assumed */ + rc = kill(1, signals[which]); + } else { + /* SysV style init assumed */ + /* runlevels: + * 0 == shutdown + * 6 == reboot */ + rc = execlp(CONFIG_TELINIT_PATH, + CONFIG_TELINIT_PATH, + which == 2 ? "6" : "0", + (char *)NULL + ); + } } } else { rc = reboot(magic[which]); |