From 5f5c6f7fa97ab11856b0bb1f71bf7ec954e04c71 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Tue, 23 Aug 2005 03:58:09 +0000 Subject: [PATCH] * dir.cc (readdir_worker): Make static. Only add '.' and '..' when readdir fails due to ENMFILE. * fhandler_disk_file.cc (fhandler_disk_file::readdir): Only close handle on error != ENMFILE. --- winsup/cygwin/ChangeLog | 7 +++++++ winsup/cygwin/dir.cc | 4 ++-- winsup/cygwin/fhandler_disk_file.cc | 7 +++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index f5c159f42..3bae109dd 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,10 @@ +2005-08-22 Christopher Faylor + + * dir.cc (readdir_worker): Make static. Only add '.' and '..' when + readdir fails due to ENMFILE. + * fhandler_disk_file.cc (fhandler_disk_file::readdir): Only close + handle on error != ENMFILE. + 2005-08-22 Corinna Vinschen * mtinfo.h (mtinfo_drive::error): Fix argument bug in debug_printf call. diff --git a/winsup/cygwin/dir.cc b/winsup/cygwin/dir.cc index ca9ff5979..e2247e254 100644 --- a/winsup/cygwin/dir.cc +++ b/winsup/cygwin/dir.cc @@ -65,7 +65,7 @@ opendir (const char *name) return res; } -int +static int readdir_worker (DIR *dir, dirent *de) { myfault efault; @@ -80,7 +80,7 @@ readdir_worker (DIR *dir, dirent *de) int res = ((fhandler_base *) dir->__fh)->readdir (dir, de); - if (res) + if (res == ENMFILE) { if (!(dir->__flags & dirent_saw_dot)) { diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc index f26c65dd8..f0d58de73 100644 --- a/winsup/cygwin/fhandler_disk_file.cc +++ b/winsup/cygwin/fhandler_disk_file.cc @@ -1399,8 +1399,11 @@ fhandler_disk_file::readdir (DIR *dir, dirent *de) else { res = geterrno_from_win_error (); - FindClose (dir->__handle); - dir->__handle = INVALID_HANDLE_VALUE; + if (res != ENMFILE) + { + FindClose (dir->__handle); + dir->__handle = INVALID_HANDLE_VALUE; + } goto out; } }