diff options
author | Christopher Faylor <me@cgf.cx> | 2011-10-12 03:20:38 +0400 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2011-10-12 03:20:38 +0400 |
commit | 4add6f8db15841278eac9e5bd90f7361881ab226 (patch) | |
tree | bd738ee900b7d99aa2909c08e7f2469f9ca35c0a /winsup/cygwin/fhandler_termios.cc | |
parent | 14b9008cca69dc6aaa2dec9954d8687437a25fbb (diff) |
* cygwin.din: Remove some _tc* exports. Add tcgetsid().
* dtable.cc (fh_alloc): Revert ill-advised setting of major/minor. Use new
is_dev_tty to remember that this device was opened as /dev/tty.
* fhandler.cc (fhandler_base::fstat): Remove leftover debugging statement.
(fhandler_base::tcgetsid): New function.
* fhandler.h ((fhandler_base::tcgetsid): Declare new function.
(fhandler_base::is_dev_tty): Ditto.
(fhandler_termios::opened_as_dev_tty): Declare new field.
(fhandler_termios::is_dev_tty): Declare new function.
(fhandler_termios::tcgetsid): Ditto.
(fhandler_pty_common::use_archetype): Move here from subclass.
(fhandler_pty_slave::use_archetype): Move up.
(fhandler_pty_master::use_archetype): Ditto.
* fhandler_console.cc (fhandler_console::ioctl): Rename second argument from
`buf' to `arg' for consistency. Call ioctl_termios for common fhandler_termios
ioctl handling.
* fhandler_tty.cc (fhandler_pty_slave::ioctl): Call ioctl_termios for common
fhandler_termios ioctl handling.
(fhandler_pty_master::ioctl): Ditto.
* fhandler_termios.cc (fhandler_termios::tcgetsid): Implement new function.
(fhandler_termios::ioctl_termios): Ditto. Implements TIOCSCTTY handling.
* syscalls.cc (stat_worker): Set /dev/tty device info when appropriate.
* termios.cc (tcgetpgrp): Avoid extraneous "isatty" check.
(tcgetsid): Implement new function.
* include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 253.
* include/sys/termios.h (TIOCSCTTY): Define.
Diffstat (limited to 'winsup/cygwin/fhandler_termios.cc')
-rw-r--r-- | winsup/cygwin/fhandler_termios.cc | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/winsup/cygwin/fhandler_termios.cc b/winsup/cygwin/fhandler_termios.cc index 9ea6ae9d8..4575ede94 100644 --- a/winsup/cygwin/fhandler_termios.cc +++ b/winsup/cygwin/fhandler_termios.cc @@ -400,3 +400,37 @@ fhandler_termios::sigflush () if (get_ttyp () && !(get_ttyp ()->ti.c_lflag & NOFLSH)) tcflush (TCIFLUSH); } + +int +fhandler_termios::tcgetsid () +{ + if (myself->ctty != -1 && myself->ctty == tc ()->ntty) + return tc ()->getsid (); + set_errno (ENOTTY); + return -1; +} + +int +fhandler_termios::ioctl_termios (int cmd, int arg) +{ + if (cmd != TIOCSCTTY) + return 1; /* Not handled by this function */ + + if (arg != 0 && arg != 1) + { + set_errno (EINVAL); + return -1; + } + + termios_printf ("myself->ctty %d, myself->sid %d, myself->pid %d, arg %d, tc()->getsid () %d\n", + myself->ctty, myself->sid, myself->pid, arg, tc ()->getsid ()); + if (myself->ctty > 0 || myself->sid != myself->pid || (!arg && tc ()->getsid () > 0)) + { + set_errno (EPERM); + return -1; + } + + myself->ctty = -1; + myself->set_ctty (tc (), 0, this); + return 0; +} |