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:
Diffstat (limited to 'winsup/cygwin/ioctl.cc')
-rw-r--r--winsup/cygwin/ioctl.cc34
1 files changed, 20 insertions, 14 deletions
diff --git a/winsup/cygwin/ioctl.cc b/winsup/cygwin/ioctl.cc
index 93fe9ddf5..6b12a2ec3 100644
--- a/winsup/cygwin/ioctl.cc
+++ b/winsup/cygwin/ioctl.cc
@@ -1,6 +1,6 @@
/* ioctl.cc: ioctl routines.
- Copyright 1996, 1998, 1999, 2000, 2001 Red Hat, Inc.
+ Copyright 1996, 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
Written by Doug Evans of Cygnus Support
dje@cygnus.com
@@ -20,31 +20,37 @@ details. */
#include "path.h"
#include "dtable.h"
#include "cygheap.h"
+#include "sigproc.h"
#include <sys/termios.h>
extern "C" int
-ioctl (int fd, int cmd, void *buf)
+ioctl (int fd, int cmd, ...)
{
- if (cygheap->fdtab.not_open (fd))
- {
- set_errno (EBADF);
- return -1;
- }
+ sigframe thisframe (mainthread);
+
+ cygheap_fdget cfd (fd);
+ if (cfd < 0)
+ return -1;
+
+ /* check for optional mode argument */
+ va_list ap;
+ va_start (ap, cmd);
+ char *argp = va_arg (ap, char *);
+ va_end (ap);
debug_printf ("fd %d, cmd %x\n", fd, cmd);
- fhandler_base *fh = cygheap->fdtab[fd];
- if (fh->is_tty () && fh->get_device () != FH_PTYM)
+ if (cfd->is_tty () && cfd->get_device () != FH_PTYM)
switch (cmd)
{
case TCGETA:
- return tcgetattr (fd, (struct termios *) buf);
+ return tcgetattr (fd, (struct termios *) argp);
case TCSETA:
- return tcsetattr (fd, TCSANOW, (struct termios *) buf);
+ return tcsetattr (fd, TCSANOW, (struct termios *) argp);
case TCSETAW:
- return tcsetattr (fd, TCSADRAIN, (struct termios *) buf);
+ return tcsetattr (fd, TCSADRAIN, (struct termios *) argp);
case TCSETAF:
- return tcsetattr (fd, TCSAFLUSH, (struct termios *) buf);
+ return tcsetattr (fd, TCSAFLUSH, (struct termios *) argp);
}
- return fh->ioctl (cmd, buf);
+ return cfd->ioctl (cmd, argp);
}