OSDN Git Service

* fhandler.h (fhandler_process::pid): New field.
authorcgf <cgf>
Sun, 30 Jun 2002 23:02:58 +0000 (23:02 +0000)
committercgf <cgf>
Sun, 30 Jun 2002 23:02:58 +0000 (23:02 +0000)
(fhandler_process::fstat): Remove unneeded array.  Set pid element.
(fhandler_process::open): Ditto.
(fhandler_process::fill_filebuf): Handle case where 'p' field is NULL.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_process.cc

index cb7448b..f920413 100644 (file)
@@ -1,5 +1,12 @@
 2002-06-30  Christopher Faylor  <cgf@redhat.com>
 
+       * fhandler.h (fhandler_process::pid): New field.
+       (fhandler_process::fstat): Remove unneeded array.  Set pid element.
+       (fhandler_process::open): Ditto.
+       (fhandler_process::fill_filebuf): Handle case where 'p' field is NULL.
+
+2002-06-30  Christopher Faylor  <cgf@redhat.com>
+
        * fhandler.h (fhandler_process::p): New field.
        (fhandler_process:fill_filebuf): Revert to same definition as virtual
        in parent class.
index d04966a..ebb07a8 100644 (file)
@@ -1107,7 +1107,6 @@ class fhandler_proc: public fhandler_virtual
   void fill_filebuf ();
 };
 
-class pinfo;
 class fhandler_registry: public fhandler_proc
 {
  public:
@@ -1125,9 +1124,10 @@ class fhandler_registry: public fhandler_proc
   void fill_filebuf ();
 };
 
-struct _pinfo;
+class pinfo;
 class fhandler_process: public fhandler_proc
 {
+  pid_t pid;
   pinfo *p;
  public:
   fhandler_process ();
index f2b8963..a0ba4af 100644 (file)
@@ -100,12 +100,11 @@ fhandler_process::fstat (struct __stat64 *buf, path_conv *pc)
   int file_type = exists ();
   (void) fhandler_base::fstat (buf, pc);
   path += proc_len + 1;
-  int pid = atoi (path);
-  winpids pids;
+  pid = atoi (path);
   pinfo p (pid);
   if (!p)
     {
-      set_errno(ENOENT);
+      set_errno (ENOENT);
       return -1;
     }
 
@@ -154,8 +153,7 @@ fhandler_process::readdir (DIR * dir)
 int
 fhandler_process::open (path_conv *pc, int flags, mode_t mode)
 {
-  int process_file_no = -1, pid;
-  winpids pids;
+  int process_file_no = -1;
 
   int res = fhandler_virtual::open (pc, flags, mode);
   if (!res)
@@ -249,6 +247,17 @@ out:
 void
 fhandler_process::fill_filebuf ()
 {
+  pinfo pmaybe;
+
+  if (!p)
+    {
+      pmaybe.init (pid);
+      p = &pmaybe;
+    }
+
+  if (!p)
+    return;
+
   switch (fileid)
     {
     case PROCESS_UID:
@@ -349,6 +358,9 @@ fhandler_process::fill_filebuf ()
        break;
       }
     }
+
+  if (p == &pmaybe)
+    p = NULL;
 }
 
 static