Fix retriggering of init.d-scripts which calls
commands dependent on functional STDIN/STDOUT/STDERR.
If we just close these file descriptors those commands
will not work as expected leading to unwanted
consequences. If we instead redirect the file descriptors
to /dev/null, we will end up the same end-result and these
commands will work as expected.
Signed-off-by: Markus Gothe <markus.gothe@genexis.eu>
Signed-off-by: Felix Fietkau <nbd@nbd.name> [refactor]
pid_t pid;
int n = 0;
int rem;
+ int fd;
pid = fork();
if (pid < 0) {
return;
}
- if (debug < 3) {
- close(STDIN_FILENO);
- close(STDOUT_FILENO);
- close(STDERR_FILENO);
+ if (debug < 3 && (fd = open("/dev/null", O_RDWR)) >= 0) {
+ dup2(fd, STDIN_FILENO);
+ dup2(fd, STDOUT_FILENO);
+ dup2(fd, STDERR_FILENO);
+ if (fd > STDERR_FILENO)
+ close(fd);
}
blobmsg_for_each_attr(cur, cmd->data, rem)