mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-10 07:10:06 +00:00
(daemon): Define errno in case /dev/null is not the correct device.
This commit is contained in:
parent
5fa3cee8e9
commit
267a7a9eca
@ -65,17 +65,26 @@ daemon(nochdir, noclose)
|
|||||||
&& (fd = open_not_cancel(_PATH_DEVNULL, O_RDWR, 0)) != -1) {
|
&& (fd = open_not_cancel(_PATH_DEVNULL, O_RDWR, 0)) != -1) {
|
||||||
struct stat64 st;
|
struct stat64 st;
|
||||||
|
|
||||||
if (__builtin_expect (__fxstat64 (_STAT_VER, fd, &st), 0) == 0
|
if (__builtin_expect (__fxstat64 (_STAT_VER, fd, &st), 0) == 0)
|
||||||
&& __builtin_expect (S_ISCHR (st.st_mode), 1) != 0
|
{
|
||||||
|
if (__builtin_expect (S_ISCHR (st.st_mode), 1) != 0
|
||||||
#if defined DEV_NULL_MAJOR && defined DEV_NULL_MINOR
|
#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
|
#endif
|
||||||
) {
|
) {
|
||||||
(void)__dup2(fd, STDIN_FILENO);
|
(void)__dup2(fd, STDIN_FILENO);
|
||||||
(void)__dup2(fd, STDOUT_FILENO);
|
(void)__dup2(fd, STDOUT_FILENO);
|
||||||
(void)__dup2(fd, STDERR_FILENO);
|
(void)__dup2(fd, STDERR_FILENO);
|
||||||
if (fd > 2)
|
if (fd > 2)
|
||||||
(void)__close (fd);
|
(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 {
|
} else {
|
||||||
close_not_cancel_no_status (fd);
|
close_not_cancel_no_status (fd);
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user