Don't use FD after a successful "fdopendir (fd)".
authorJim Meyering <jim@meyering.net>
Mon, 19 Feb 2007 20:03:22 +0000 (20:03 +0000)
committerJim Meyering <jim@meyering.net>
Mon, 19 Feb 2007 20:03:22 +0000 (20:03 +0000)
* lib/getcwd.c (__getcwd) [AT_FDCWD]: fdopendir (fd) usually closes fd.
Reset it by calling dirfd on the just-obtained DIR*.

ChangeLog
lib/getcwd.c

index 8919639..2f32436 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2007-02-19  Jim Meyering  <jim@meyering.net>
 
+       Don't use FD after a successful "fdopendir (fd)".
+       * lib/getcwd.c (__getcwd) [AT_FDCWD]: fdopendir (fd) usually closes fd.
+       Reset it by calling dirfd on the just-obtained DIR*.
+
        * m4/ftruncate.m4: Adjust comment to give this module a 3-year reprieve.
        Prompted by a report from Bruno Haible that mingw lacks ftruncate.
 
index 3cdc113..dea0ebc 100644 (file)
@@ -234,6 +234,8 @@ __getcwd (char *buf, size_t size)
       dirstream = fdopendir (fd);
       if (dirstream == NULL)
        goto lose;
+      /* Reset fd.  It may have been closed by fdopendir.  */
+      fd = dirfd (dirstream);
       fd_needs_closing = false;
 #else
       dirstream = __opendir (dotlist);