view modules/dirent @ 12127:bda9467a9d66

fdopendir: fix GNU/Hurd bug fdopendir(open("file",O_RDONLY)) mistakenly succeeded, with subsequent readdir() failing with ENOTDIR. * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Check for Hurd bug in allowing non-directory fds. * lib/fdopendir.c (rpl_fdopendir): Work around it. * m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): New witness. * modules/dirent (Makefile.am): Substitute it. * lib/dirent.in.h (fdopendir): Declare replacement. * doc/posix-functions/fdopendir.texi (fdopendir): Document this. * tests/test-fdopendir.c (main): Test something other than /dev/null, since on Hurd that behaves like a directory. Signed-off-by: Eric Blake <ebb9@byu.net>
author Eric Blake <ebb9@byu.net>
date Tue, 06 Oct 2009 06:58:08 -0600
parents 18ea6ab4e81d
children 481fcf53f002
line wrap: on
line source

Description:
A GNU-like <dirent.h>.

Files:
lib/dirent.in.h
m4/dirent_h.m4
m4/unistd_h.m4

Depends-on:
include_next
link-warning

configure.ac:
gl_DIRENT_H

Makefile.am:
BUILT_SOURCES += $(DIRENT_H)

# We need the following in order to create <dirent.h> when the system
# doesn't have one that works with the given compiler.
dirent.h: dirent.in.h
	$(AM_V_GEN)rm -f $@-t $@ && \
	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
	      -e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \
	      -e 's|@''GNULIB_DIRFD''@|$(GNULIB_DIRFD)|g' \
	      -e 's|@''GNULIB_FDOPENDIR''@|$(GNULIB_FDOPENDIR)|g' \
	      -e 's|@''GNULIB_SCANDIR''@|$(GNULIB_SCANDIR)|g' \
	      -e 's|@''GNULIB_ALPHASORT''@|$(GNULIB_ALPHASORT)|g' \
	      -e 's|@''HAVE_DECL_DIRFD''@|$(HAVE_DECL_DIRFD)|g' \
	      -e 's|@''HAVE_FDOPENDIR''@|$(HAVE_FDOPENDIR)|g' \
	      -e 's|@''HAVE_SCANDIR''@|$(HAVE_SCANDIR)|g' \
	      -e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \
	      -e 's|@''REPLACE_CLOSEDIR''@|$(REPLACE_CLOSEDIR)|g' \
	      -e 's|@''REPLACE_FDOPENDIR''@|$(REPLACE_FDOPENDIR)|g' \
	      -e 's|@''REPLACE_OPENDIR''@|$(REPLACE_OPENDIR)|g' \
	      -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
	      < $(srcdir)/dirent.in.h; \
	} > $@-t && \
	mv $@-t $@
MOSTLYCLEANFILES += dirent.h dirent.h-t

Include:
<dirent.h>

License:
LGPLv2+

Maintainer:
all