OSDN Git Service

* fhandler.h (class fhandler_pipe): New ioctl() method.
authorcgf <cgf>
Sat, 9 Nov 2002 03:17:39 +0000 (03:17 +0000)
committercgf <cgf>
Sat, 9 Nov 2002 03:17:39 +0000 (03:17 +0000)
* pipe.cc (fhandler_pipe::ioctl): New.

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

index 95735e1..e69c478 100644 (file)
@@ -1,3 +1,8 @@
+2002-11-06  Sergey Okhapkin  <sos@prospect.com.ru>
+
+       * fhandler.h (class fhandler_pipe): New ioctl() method.
+       * pipe.cc (fhandler_pipe::ioctl): New.
+
 2002-11-07  Christopher Faylor  <cgf@redhat.com>
 
        * fhandler_serial.cc (fhandler_serial::ioctl): Fix typo.
index 2734751..0e42670 100644 (file)
@@ -459,6 +459,7 @@ class fhandler_pipe: public fhandler_base
   int close ();
   void create_guard (SECURITY_ATTRIBUTES *sa) {guard = CreateMutex (sa, FALSE, NULL);}
   int dup (fhandler_base *child);
+  int ioctl (unsigned int cmd, void *);
   void fixup_after_fork (HANDLE);
   bool hit_eof ();
   void set_eof () {broken_pipe = true;}
index b37a775..fe712e2 100644 (file)
@@ -13,6 +13,7 @@ details. */
 #include "winsup.h"
 #include <unistd.h>
 #include <errno.h>
+#include <sys/socket.h>
 #include "cygerrno.h"
 #include "security.h"
 #include "fhandler.h"
@@ -179,6 +180,33 @@ make_pipe (int fildes[2], unsigned int psize, int mode)
   return res;
 }
 
+int
+fhandler_pipe::ioctl (unsigned int cmd, void *p)
+{
+  int n;
+
+  switch (cmd)
+    {
+    case FIONREAD:
+      if (get_device () == FH_PIPEW)
+       {
+         set_errno (EINVAL);
+         return -1;
+       }
+      if (!PeekNamedPipe (get_handle (), NULL, 0, NULL, (DWORD *) &n, NULL))
+       {
+         __seterrno ();
+         return -1;
+       }
+      break;
+    default:
+      return fhandler_base::ioctl (cmd, p);
+      break;
+    }
+  *(int *) p = n;
+  return 0;
+}
+
 extern "C" int
 pipe (int filedes[2])
 {