diff options
Diffstat (limited to 'init/init.c')
-rw-r--r-- | init/init.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/init/init.c b/init/init.c index 1667d58..401cf69 100644 --- a/init/init.c +++ b/init/init.c @@ -661,7 +661,7 @@ static void init_reboot(unsigned long magic) { pid_t pid; /* We have to fork here, since the kernel calls do_exit(0) in - * linux/kernel/sys.c, which can cause the machint to panic when + * linux/kernel/sys.c, which can cause the machine to panic when * the init process is killed.... */ if ((pid = fork()) == 0) { #if (__GNU_LIBRARY__ > 5) || defined(__dietlibc__) @@ -738,6 +738,22 @@ static void exec_signal(int sig) sigaddset(&unblock_signals, SIGTSTP); sigprocmask(SIG_UNBLOCK, &unblock_signals, NULL); + /* Open the new terminal device */ + if ((device_open(a->terminal, O_RDWR)) < 0) { + if (stat(a->terminal, &sb) != 0) { + message(LOG | CONSOLE, "device '%s' does not exist.", a->terminal); + } else { + message(LOG | CONSOLE, "Bummer, can't open %s", a->terminal); + } + halt_signal(SIGUSR1); + } + + /* Make sure the terminal will act fairly normal for us */ + set_term(0); + /* Setup stdout, stderr on the supplied terminal */ + dup(0); + dup(0); + messageD(CONSOLE | LOG, "Trying to re-exec %s", a->command); execl(a->command, a->command, NULL); |