diff options
author | Felix Fietkau <nbd@openwrt.org> | 2014-11-08 19:07:46 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2014-11-08 19:07:46 +0100 |
commit | 0f49ab0feab67aac4a399bbad58f5f230f625833 (patch) | |
tree | abc5d69a19dad4e3a8f1423ec63847d1a4fa9087 | |
parent | b899234bd657fa1ae1c71315326c3fe2cd9b6cec (diff) | |
download | unitd-0f49ab0feab67aac4a399bbad58f5f230f625833.tar unitd-0f49ab0feab67aac4a399bbad58f5f230f625833.zip |
inittab: clean up tty opening code, fix console shell job control issues
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-rw-r--r-- | inittab.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -14,6 +14,7 @@ #include <sys/types.h> #include <sys/stat.h> +#include <sys/ioctl.h> #include <fcntl.h> #include <stdio.h> @@ -96,16 +97,25 @@ static void fork_worker(struct init_action *a) a->proc.pid = fork(); if (!a->proc.pid) { - p = setsid( ); + p = setsid(); + + close(STDIN_FILENO); + close(STDOUT_FILENO); + close(STDERR_FILENO); + fd = dev_open(a->id); if (fd != -1) { dup2(fd, STDIN_FILENO); dup2(fd, STDOUT_FILENO); dup2(fd, STDERR_FILENO); - tcsetpgrp(fd, p); - close(fd); + if (fd > STDERR_FILENO) + close(fd); } + + ioctl(STDIN_FILENO, TIOCSCTTY, 1); + tcsetpgrp(STDIN_FILENO, p); + execvp(a->argv[0], a->argv); ERROR("Failed to execute %s\n", a->argv[0]); exit(-1); |