From af5461f72f86bc00fd40a11a8ac2b6979f8cd61a Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Sat, 13 Aug 2005 02:36:12 +0200 Subject: [PATCH] don't fail too bad, if /dev/null does not exist Signed-off-by: Kay Sievers --- udev_utils_run.c | 20 ++++++++------------ udevd.c | 14 +++++++------- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/udev_utils_run.c b/udev_utils_run.c index 44fb7f831..cf633661e 100644 --- a/udev_utils_run.c +++ b/udev_utils_run.c @@ -136,23 +136,19 @@ int run_program(const char *command, const char *subsystem, /* discard child output or connect to pipe */ devnull = open("/dev/null", O_RDWR); - if (devnull < 0) { + if (devnull > 0) { + dup2(devnull, STDIN_FILENO); + if (outpipe[1] < 0) + dup2(devnull, STDOUT_FILENO); + if (errpipe[1] < 0) + dup2(devnull, STDERR_FILENO); + close(devnull); + } else err("open /dev/null failed"); - exit(1); - } - dup2(devnull, STDIN_FILENO); - if (outpipe[1] > 0) dup2(outpipe[1], STDOUT_FILENO); - else - dup2(devnull, STDOUT_FILENO); - if (errpipe[1] > 0) dup2(errpipe[1], STDERR_FILENO); - else - dup2(devnull, STDERR_FILENO); - - close(devnull); execv(arg, argv); /* we should never reach this */ diff --git a/udevd.c b/udevd.c index 1575da8d5..8423278d6 100644 --- a/udevd.c +++ b/udevd.c @@ -785,7 +785,7 @@ int main(int argc, char *argv[], char *envp[]) { int maxsockplus; int retval; - int fd; + int devnull; struct sigaction act; fd_set readfds; const char *value; @@ -841,12 +841,12 @@ int main(int argc, char *argv[], char *envp[]) setpriority(PRIO_PROCESS, 0, UDEVD_PRIORITY); /* Set fds to dev/null */ - fd = open( "/dev/null", O_RDWR ); - if (fd >= 0) { - dup2(fd, STDIN_FILENO); - dup2(fd, STDOUT_FILENO); - dup2(fd, STDERR_FILENO); - close(fd); + devnull = open( "/dev/null", O_RDWR ); + if (devnull > 0) { + dup2(devnull, STDIN_FILENO); + dup2(devnull, STDOUT_FILENO); + dup2(devnull, STDERR_FILENO); + close(devnull); } else err("error opening /dev/null %s", strerror(errno)); -- 2.30.2