aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Shishkin <virtuoso@slind.org>2009-07-27 02:49:35 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2009-07-27 02:55:02 +0200
commit97af2ff8caa782f623e79408f0dfe608c878d5a6 (patch)
tree7961767258bd73c421f5b219221462efae1a1f0c
parentd1090c91ccbd75b30f30a70dbbb2e0f7b129f083 (diff)
downloadbusybox-w32-97af2ff8caa782f623e79408f0dfe608c878d5a6.tar.gz
busybox-w32-97af2ff8caa782f623e79408f0dfe608c878d5a6.tar.bz2
busybox-w32-97af2ff8caa782f623e79408f0dfe608c878d5a6.zip
halt/reboot/poweroff: add a CONFIG_xxx to act SysV compatibly
Signed-off-by: Alexander Shishkin <virtuoso@slind.org> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--init/Config.in20
-rw-r--r--init/halt.c18
2 files changed, 37 insertions, 1 deletions
diff --git a/init/Config.in b/init/Config.in
index 1a1be4a9b..3d99d4792 100644
--- a/init/Config.in
+++ b/init/Config.in
@@ -93,6 +93,26 @@ config HALT
93 help 93 help
94 Stop all processes and either halt, reboot, or power off the system. 94 Stop all processes and either halt, reboot, or power off the system.
95 95
96config FEATURE_CALL_TELINIT
97 bool "Call telinit on shutdown and reboot"
98 default n
99 depends on HALT && !INIT
100 help
101 Call an external program (normally telinit) to facilitate
102 a switch to a proper runlevel.
103
104 This option is only available if you selected halt and friends,
105 but did not select init.
106
107config TELINIT_PATH
108 string "Path to telinit executable"
109 default "/sbin/telinit"
110 depends on FEATURE_CALL_TELINIT
111 help
112 When busybox halt and friends have to call external telinit
113 to facilitate proper shutdown, this path is to be used when
114 locating telinit executable.
115
96config MESG 116config MESG
97 bool "mesg" 117 bool "mesg"
98 default n 118 default n
diff --git a/init/halt.c b/init/halt.c
index 3a23ecabb..c88c333e7 100644
--- a/init/halt.c
+++ b/init/halt.c
@@ -85,6 +85,8 @@ int halt_main(int argc UNUSED_PARAM, char **argv)
85//TODO: I tend to think that signalling linuxrc is wrong 85//TODO: I tend to think that signalling linuxrc is wrong
86// pity original author didn't comment on it... 86// pity original author didn't comment on it...
87 if (ENABLE_FEATURE_INITRD) { 87 if (ENABLE_FEATURE_INITRD) {
88 /* talk to linuxrc */
89 /* bbox init/linuxrc assumed */
88 pid_t *pidlist = find_pid_by_name("linuxrc"); 90 pid_t *pidlist = find_pid_by_name("linuxrc");
89 if (pidlist[0] > 0) 91 if (pidlist[0] > 0)
90 rc = kill(pidlist[0], signals[which]); 92 rc = kill(pidlist[0], signals[which]);
@@ -92,7 +94,21 @@ int halt_main(int argc UNUSED_PARAM, char **argv)
92 free(pidlist); 94 free(pidlist);
93 } 95 }
94 if (rc) { 96 if (rc) {
95 rc = kill(1, signals[which]); 97 /* talk to init */
98 if (!ENABLE_FEATURE_CALL_TELINIT) {
99 /* bbox init assumed */
100 rc = kill(1, signals[which]);
101 } else {
102 /* SysV style init assumed */
103 /* runlevels:
104 * 0 == shutdown
105 * 6 == reboot */
106 rc = execlp(CONFIG_TELINIT_PATH,
107 CONFIG_TELINIT_PATH,
108 which == 2 ? "6" : "0",
109 (char *)NULL
110 );
111 }
96 } 112 }
97 } else { 113 } else {
98 rc = reboot(magic[which]); 114 rc = reboot(magic[which]);