From 267a7a9eca77719b9cee482585d04ad515a4436d Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 25 Sep 2004 05:30:41 +0000 Subject: (daemon): Define errno in case /dev/null is not the correct device. --- misc/daemon.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'misc') diff --git a/misc/daemon.c b/misc/daemon.c index bc93956e85..775ef1aacf 100644 --- a/misc/daemon.c +++ b/misc/daemon.c @@ -65,17 +65,26 @@ daemon(nochdir, noclose) && (fd = open_not_cancel(_PATH_DEVNULL, O_RDWR, 0)) != -1) { struct stat64 st; - if (__builtin_expect (__fxstat64 (_STAT_VER, fd, &st), 0) == 0 - && __builtin_expect (S_ISCHR (st.st_mode), 1) != 0 + if (__builtin_expect (__fxstat64 (_STAT_VER, fd, &st), 0) == 0) + { + if (__builtin_expect (S_ISCHR (st.st_mode), 1) != 0 #if defined DEV_NULL_MAJOR && defined DEV_NULL_MINOR - && st.st_rdev == makedev (DEV_NULL_MAJOR, DEV_NULL_MINOR) + && (st.st_rdev + == makedev (DEV_NULL_MAJOR, DEV_NULL_MINOR)) #endif - ) { - (void)__dup2(fd, STDIN_FILENO); - (void)__dup2(fd, STDOUT_FILENO); - (void)__dup2(fd, STDERR_FILENO); - if (fd > 2) - (void)__close (fd); + ) { + (void)__dup2(fd, STDIN_FILENO); + (void)__dup2(fd, STDOUT_FILENO); + (void)__dup2(fd, STDERR_FILENO); + if (fd > 2) + (void)__close (fd); + } else { + /* We must set an errno value since no + function call actually failed. */ + close_not_cancel_no_status (fd); + __set_errno (ENODEV); + return -1; + } } else { close_not_cancel_no_status (fd); return -1; -- cgit 1.4.1