diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | winsup/cygwin/fhandler.h | 1 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_console.cc | 8 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_tty.cc | 17 |
4 files changed, 30 insertions, 5 deletions
@@ -1,3 +1,12 @@ +2002-12-27 Christopher Faylor <cgf@redhat.com> + + * fhandler.h (fhandler_tty_master::set_winsize): Declare new function. + * fhandler_console.cc (fhandler_console::send_winch_maybe): If + appropriate, call tty master function to handle screen size change. + * fhandler_tty.cc (fhandler_tty_master::set_winsize): New function. + (fhandler_tty_master::init): Call set_winsize to set initial screen + size. + 2002-12-26 Christopher Faylor <cgf@redhat.com> * fhandler_tty.cc (fhandler_tty_master::init): Set initial size of tty diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index 43db4442e..f0dde3722 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -948,6 +948,7 @@ class fhandler_tty_master: public fhandler_pty_master fhandler_tty_master (int unit); int init (int); int init_console (); + void set_winsize (bool); void fixup_after_fork (HANDLE parent); void fixup_after_exec (HANDLE); }; diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc index 41c1cca21..22dc69e1e 100644 --- a/winsup/cygwin/fhandler_console.cc +++ b/winsup/cygwin/fhandler_console.cc @@ -213,7 +213,13 @@ fhandler_console::send_winch_maybe () fillin_info (); if (y != dev_state->info.dwWinSize.Y || x != dev_state->info.dwWinSize.X) - tc->kill_pgrp (SIGWINCH); + { + extern fhandler_tty_master *tty_master; + if (tty_master) + tty_master->set_winsize (true); + else + tc->kill_pgrp (SIGWINCH); + } } void __stdcall diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc index fd0789b60..1f552ceaf 100644 --- a/winsup/cygwin/fhandler_tty.cc +++ b/winsup/cygwin/fhandler_tty.cc @@ -40,6 +40,16 @@ fhandler_tty_master::fhandler_tty_master (int unit) { } +void +fhandler_tty_master::set_winsize (bool sendSIGWINCH) +{ + winsize w; + console->ioctl (TIOCGWINSZ, &w); + get_ttyp ()->winsize = w; + if (sendSIGWINCH) + tc->kill_pgrp (SIGWINCH); +} + int fhandler_tty_master::init (int ntty) { @@ -54,14 +64,13 @@ fhandler_tty_master::init (int ntty) termios ti; memset (&ti, 0, sizeof (ti)); console->tcsetattr (0, &ti); - winsize w; - console->ioctl (TIOCGWINSZ, &w); - this->ioctl (TIOCSWINSZ, &w); ttynum = ntty; cygwin_shared->tty[ttynum]->common_init (this); + set_winsize (false); + inuse = get_ttyp ()->create_inuse (TTY_MASTER_ALIVE); cygthread *h; @@ -1134,7 +1143,7 @@ fhandler_pty_master::ioctl (unsigned int cmd, void *arg) pktmode = * (int *) arg; break; case TIOCGWINSZ: - * (struct winsize *) arg = get_ttyp ()->winsize; + *(struct winsize *) arg = get_ttyp ()->winsize; break; case TIOCSWINSZ: if (get_ttyp ()->winsize.ws_row != ((struct winsize *) arg)->ws_row |