+2015-03-19 Paul Eggert <eggert@cs.ucla.edu>
+
+ fdopendir: port better to MinGW
+ * lib/fdopendir.c (fd_clone_opendir) [REPLACE_FCHDIR]:
+ Use 'dup' if dirfd fails. Suggested by Eli Zaretskii in:
+ http://lists.gnu.org/archive/html/bug-gnulib/2015-03/msg00033.html
+ * modules/fdopendir (Depends-on): Add dirfd.
+
2015-03-18 Paul Eggert <eggert@cs.ucla.edu>
fdopendir: fix typo in comment
if (! dir && EXPECTED_ERRNO (saved_errno))
{
char const *name = _gl_directory_name (fd);
- return (name ? opendir (name) : NULL);
+ DIR *dp = name ? opendir (name) : NULL;
+
+ /* The caller has done an elaborate dance to arrange for opendir to
+ consume just the right file descriptor. If dirfd returns -1,
+ though, we're on a system like mingw where opendir does not
+ consume a file descriptor. Consume it via 'dup' instead. */
+ if (dp && dirfd (dp) < 0)
+ dup (fd);
+
+ return dp;
}
# endif
errno = saved_errno;
dirent
extensions
at-internal [test $HAVE_FDOPENDIR = 0]
+dirfd [test $HAVE_FDOPENDIR = 0]
dup [test $HAVE_FDOPENDIR = 0]
errno [test $HAVE_FDOPENDIR = 0]
fchdir [test $HAVE_FDOPENDIR = 0]