summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler_proc.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2011-08-12 12:31:08 +0000
committerCorinna Vinschen <corinna@vinschen.de>2011-08-12 12:31:08 +0000
commit1f08558f14e45382f5f5b137c45aae3bb79b067c (patch)
tree2770d3ea3f7fb2e3566fd85800fdb62a980b71cd /winsup/cygwin/fhandler_proc.cc
parent6e2c582323d667fec9b1859757515f932c6f8db2 (diff)
downloadcygnal-1f08558f14e45382f5f5b137c45aae3bb79b067c.tar.gz
cygnal-1f08558f14e45382f5f5b137c45aae3bb79b067c.tar.bz2
cygnal-1f08558f14e45382f5f5b137c45aae3bb79b067c.zip
* fhandler.h (fhandler_proc::opendir): Declare.
(fhandler_proc::closedir): Declare. * fhandler_proc.cc (fhandler_proc::opendir): New method. Fetch list of active processes here once to avoid potential duplicates. (fhandler_proc::closedir): New method.
Diffstat (limited to 'winsup/cygwin/fhandler_proc.cc')
-rw-r--r--winsup/cygwin/fhandler_proc.cc22
1 files changed, 21 insertions, 1 deletions
diff --git a/winsup/cygwin/fhandler_proc.cc b/winsup/cygwin/fhandler_proc.cc
index 63178a003..94007cae1 100644
--- a/winsup/cygwin/fhandler_proc.cc
+++ b/winsup/cygwin/fhandler_proc.cc
@@ -220,6 +220,26 @@ fhandler_proc::fstat (struct __stat64 *buf)
return -1;
}
+DIR *
+fhandler_proc::opendir (int fd)
+{
+ DIR *dir = fhandler_virtual::opendir (fd);
+ if (dir && !(dir->__handle = (void *) new winpids ((DWORD) 0)))
+ {
+ free (dir);
+ dir = NULL;
+ set_errno (ENOMEM);
+ }
+ return dir;
+}
+
+int
+fhandler_proc::closedir (DIR *dir)
+{
+ free (dir->__handle);
+ return fhandler_virtual::closedir (dir);
+}
+
int
fhandler_proc::readdir (DIR *dir, dirent *de)
{
@@ -232,7 +252,7 @@ fhandler_proc::readdir (DIR *dir, dirent *de)
}
else
{
- winpids pids ((DWORD) 0);
+ winpids &pids = *(winpids *) dir->__handle;
int found = 0;
res = ENMFILE;
for (unsigned i = 0; i < pids.npids; i++)