(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.
+2011-08-12 Corinna Vinschen <corinna@vinschen.de>
+
+ * 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.
+
2011-08-11 Corinna Vinschen <corinna@vinschen.de>
* fhandler_proc.cc (fhandler_proc::get_proc_fhandler): Don't allow to
public:
fhandler_proc ();
virtual_ftype_t exists();
+ DIR *opendir (int fd) __attribute__ ((regparm (2)));
+ int closedir (DIR *);
int readdir (DIR *, dirent *) __attribute__ ((regparm (3)));
static fh_devices get_proc_fhandler (const char *path);
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)
{
}
else
{
- winpids pids ((DWORD) 0);
+ winpids &pids = *(winpids *) dir->__handle;
int found = 0;
res = ENMFILE;
for (unsigned i = 0; i < pids.npids; i++)