runsvdir: if pid==1, also intercept SIGINT for -s SCRIPT

function                                             old     new   delta
runsvdir_main                                       1057    1064      +7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/runit/runsvdir.c b/runit/runsvdir.c
index a08af3b..b4c0b2e 100644
--- a/runit/runsvdir.c
+++ b/runit/runsvdir.c
@@ -222,6 +222,7 @@
 	unsigned stampcheck;
 	int i;
 	int need_rescan;
+	bool i_am_init;
 	char *opt_s_argv[3];
 
 	INIT_G();
@@ -232,18 +233,21 @@
 	getopt32(argv, "Ps:", &opt_s_argv[0]);
 	argv += optind;
 
+	i_am_init = (getpid() == 1);
 	bb_signals(0
 		| (1 << SIGTERM)
 		| (1 << SIGHUP)
 		/* For busybox's init, SIGTERM == reboot,
-		 * SIGUSR1 == halt
-		 * SIGUSR2 == poweroff
-		 * so we need to intercept SIGUSRn too.
+		 * SIGUSR1 == halt,
+		 * SIGUSR2 == poweroff,
+		 * Ctlr-ALt-Del sends SIGINT to init,
+		 * so we need to intercept SIGUSRn and SIGINT too.
 		 * Note that we do not implement actual reboot
 		 * (killall(TERM) + umount, etc), we just pause
 		 * respawing and avoid exiting (-> making kernel oops).
-		 * The user is responsible for the rest. */
-		| (getpid() == 1 ? ((1 << SIGUSR1) | (1 << SIGUSR2)) : 0)
+		 * The user is responsible for the rest.
+		 */
+		| (i_am_init ? ((1 << SIGUSR1) | (1 << SIGUSR2) | (1 << SIGINT)) : 0)
 		, record_signo);
 	svdir = *argv++;
 
@@ -394,7 +398,7 @@
 		}
 		/* SIGHUP or SIGTERM (or SIGUSRn if we are init) */
 		/* Exit unless we are init */
-		if (getpid() != 1)
+		if (!i_am_init)
 			return (SIGHUP == sig) ? 111 : EXIT_SUCCESS;
 
 		/* init continues to monitor services forever */