* 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.
This commit is contained in:
		| @@ -1,3 +1,11 @@ | ||||
| 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 | ||||
|   | ||||
| @@ -1440,6 +1440,8 @@ class fhandler_proc: public fhandler_virtual | ||||
|  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); | ||||
|  | ||||
|   | ||||
| @@ -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++) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user