1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-08 17:42:12 +03:00
* misc/daemon.c (daemon): Fail if !noclose and we cannot open the
	real /dev/null device.

	* sysdeps/generic/check_fds.c: Include device-nrs.h.
	* sysdeps/generic/device-nrs.h: New file.
	* sysdeps/unix/sysv/linux/device-nrs.h: New file.
	* misc/Makefile (distribute): Add device-nrs.h.

	* posix/wordexp.c (exec_comm_child): Likewise.
	* locale/nl_langinfo.c: Allow use of file for __nl_langinfo_l
	definition.
This commit is contained in:
Ulrich Drepper
2000-09-26 07:56:19 +00:00
parent e5448d7ad2
commit 316ca440b0
8 changed files with 94 additions and 8 deletions

View File

@@ -34,6 +34,9 @@ static char sccsid[] = "@(#)daemon.c 8.1 (Berkeley) 6/4/93";
#include <fcntl.h>
#include <paths.h>
#include <unistd.h>
#include <sys/stat.h>
#include <device-nrs.h>
int
daemon(nochdir, noclose)
@@ -57,11 +60,23 @@ daemon(nochdir, noclose)
(void)__chdir("/");
if (!noclose && (fd = __open(_PATH_DEVNULL, O_RDWR, 0)) != -1) {
(void)__dup2(fd, STDIN_FILENO);
(void)__dup2(fd, STDOUT_FILENO);
(void)__dup2(fd, STDERR_FILENO);
if (fd > 2)
struct stat64 st;
if (__builtin_expect (__fxstat64 (_STAT_VER, fd, &st), 0) == 0
&& __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)
#endif
) {
(void)__dup2(fd, STDIN_FILENO);
(void)__dup2(fd, STDOUT_FILENO);
(void)__dup2(fd, STDERR_FILENO);
if (fd > 2)
(void)__close (fd);
} else {
(void)__close (fd);
return -1;
}
}
return (0);
}