Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2002-11-09 06:17:40 +0300
committerChristopher Faylor <me@cgf.cx>2002-11-09 06:17:40 +0300
commit49f7ea16756dd7f341edeecd2dee45083ab38945 (patch)
tree3d3116eba6dca08f137092f6e7d59ca200757ca4 /winsup/cygwin
parent7c4f9b9a05214fcfb692147a1883e52d2d2de1df (diff)
* fhandler.h (class fhandler_pipe): New ioctl() method.
* pipe.cc (fhandler_pipe::ioctl): New.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/fhandler.h1
-rw-r--r--winsup/cygwin/pipe.cc28
3 files changed, 34 insertions, 0 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 95735e1f0..e69c47880 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -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.
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index 273475110..0e4267013 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -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;}
diff --git a/winsup/cygwin/pipe.cc b/winsup/cygwin/pipe.cc
index b37a7751e..fe712e25e 100644
--- a/winsup/cygwin/pipe.cc
+++ b/winsup/cygwin/pipe.cc
@@ -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])
{