diff options
author | Christopher Faylor <me@cgf.cx> | 2003-04-20 01:36:15 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2003-04-20 01:36:15 +0000 |
commit | 6b3bdf38e09d43240b3c4361f013bd43a49fcfb9 (patch) | |
tree | 707277f43bcfd7dece9584c52c155ae721d44abb | |
parent | afa18d8a69f469b0bf2cd1da79d1ae93382129e5 (diff) | |
download | newlib-6b3bdf38e09d43240b3c4361f013bd43a49fcfb9.zip newlib-6b3bdf38e09d43240b3c4361f013bd43a49fcfb9.tar.gz newlib-6b3bdf38e09d43240b3c4361f013bd43a49fcfb9.tar.bz2 |
* wincap.h (wincaps:pty_needs_alloc_console): New element.
(wincapc:pty_needs_alloc_console): New function.
* wincap.cc: Add pty_needs_alloc_console throughout.
* fhandler_tty.cc (fhandler_tty_slave::open): Open an "invisible" console on
first pty allocation.
-rw-r--r-- | winsup/cygwin/ChangeLog | 8 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_tty.cc | 16 | ||||
-rw-r--r-- | winsup/cygwin/wincap.cc | 33 | ||||
-rw-r--r-- | winsup/cygwin/wincap.h | 2 |
4 files changed, 46 insertions, 13 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index d1c9abe..d911e23 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,11 @@ +2003-04-19 Christopher Faylor <cgf@redhat.com> + + * wincap.h (wincaps:pty_needs_alloc_console): New element. + (wincapc:pty_needs_alloc_console): New function. + * wincap.cc: Add pty_needs_alloc_console throughout. + * fhandler_tty.cc (fhandler_tty_slave::open): Open an "invisible" + console on first pty allocation. + 2003-04-18 Christopher Faylor <cgf@redhat.com> * fhandler_tty.cc (fhandler_tty_slave::open): Allocate a console diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc index 0014710..6285b24 100644 --- a/winsup/cygwin/fhandler_tty.cc +++ b/winsup/cygwin/fhandler_tty.cc @@ -9,6 +9,8 @@ Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ #include "winsup.h" +#include <wingdi.h> +#include <winuser.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> @@ -554,9 +556,19 @@ fhandler_tty_slave::open (path_conv *, int flags, mode_t) set_open_status (); if (!output_done_event) { - if (fhandler_console::open_fhs++ == 0) + if (fhandler_console::open_fhs++ == 0 + && wincap.pty_needs_alloc_console ()) { - BOOL b = AllocConsole (); + BOOL b; + HWINSTA h = CreateWindowStation (NULL, 0, GENERIC_READ | GENERIC_WRITE, &sec_none_nih); + termios_printf ("CreateWindowStation %p, %E", h); + if (h) + { + b = SetProcessWindowStation (h); + termios_printf ("SetProcessWindowStation %d, %E", b); + } + b = AllocConsole (); // will cause flashing if workstation + // stuff fails termios_printf ("%d = AllocConsole ()", b); } termios_printf ("incremented open_fhs %d", fhandler_console::open_fhs); diff --git a/winsup/cygwin/wincap.cc b/winsup/cygwin/wincap.cc index e70a362..b5385f2 100644 --- a/winsup/cygwin/wincap.cc +++ b/winsup/cygwin/wincap.cc @@ -47,7 +47,8 @@ static NO_COPY wincaps wincap_unknown = { has_64bit_file_access:false, has_process_io_counters:false, supports_reading_modem_output_lines:false, - needs_memory_protection:false + needs_memory_protection:false, + pty_needs_alloc_console:false }; static NO_COPY wincaps wincap_95 = { @@ -86,7 +87,8 @@ static NO_COPY wincaps wincap_95 = { has_64bit_file_access:false, has_process_io_counters:false, supports_reading_modem_output_lines:false, - needs_memory_protection:false + needs_memory_protection:false, + pty_needs_alloc_console:false }; static NO_COPY wincaps wincap_95osr2 = { @@ -125,7 +127,8 @@ static NO_COPY wincaps wincap_95osr2 = { has_64bit_file_access:false, has_process_io_counters:false, supports_reading_modem_output_lines:false, - needs_memory_protection:false + needs_memory_protection:false, + pty_needs_alloc_console:false }; static NO_COPY wincaps wincap_98 = { @@ -164,7 +167,8 @@ static NO_COPY wincaps wincap_98 = { has_64bit_file_access:false, has_process_io_counters:false, supports_reading_modem_output_lines:false, - needs_memory_protection:false + needs_memory_protection:false, + pty_needs_alloc_console:false }; static NO_COPY wincaps wincap_98se = { @@ -203,7 +207,8 @@ static NO_COPY wincaps wincap_98se = { has_64bit_file_access:false, has_process_io_counters:false, supports_reading_modem_output_lines:false, - needs_memory_protection:false + needs_memory_protection:false, + pty_needs_alloc_console:false }; static NO_COPY wincaps wincap_me = { @@ -242,7 +247,8 @@ static NO_COPY wincaps wincap_me = { has_64bit_file_access:false, has_process_io_counters:false, supports_reading_modem_output_lines:false, - needs_memory_protection:false + needs_memory_protection:false, + pty_needs_alloc_console:false }; static NO_COPY wincaps wincap_nt3 = { @@ -281,7 +287,8 @@ static NO_COPY wincaps wincap_nt3 = { has_64bit_file_access:true, has_process_io_counters:false, supports_reading_modem_output_lines:true, - needs_memory_protection:true + needs_memory_protection:true, + pty_needs_alloc_console:true }; static NO_COPY wincaps wincap_nt4 = { @@ -320,7 +327,8 @@ static NO_COPY wincaps wincap_nt4 = { has_64bit_file_access:true, has_process_io_counters:false, supports_reading_modem_output_lines:true, - needs_memory_protection:true + needs_memory_protection:true, + pty_needs_alloc_console:true }; static NO_COPY wincaps wincap_nt4sp4 = { @@ -359,7 +367,8 @@ static NO_COPY wincaps wincap_nt4sp4 = { has_64bit_file_access:true, has_process_io_counters:false, supports_reading_modem_output_lines:true, - needs_memory_protection:true + needs_memory_protection:true, + pty_needs_alloc_console:true }; static NO_COPY wincaps wincap_2000 = { @@ -398,7 +407,8 @@ static NO_COPY wincaps wincap_2000 = { has_64bit_file_access:true, has_process_io_counters:true, supports_reading_modem_output_lines:true, - needs_memory_protection:true + needs_memory_protection:true, + pty_needs_alloc_console:true }; static NO_COPY wincaps wincap_xp = { @@ -437,7 +447,8 @@ static NO_COPY wincaps wincap_xp = { has_64bit_file_access:true, has_process_io_counters:true, supports_reading_modem_output_lines:true, - needs_memory_protection:true + needs_memory_protection:true, + pty_needs_alloc_console:true }; wincapc wincap; diff --git a/winsup/cygwin/wincap.h b/winsup/cygwin/wincap.h index a89f0a5..066374f 100644 --- a/winsup/cygwin/wincap.h +++ b/winsup/cygwin/wincap.h @@ -49,6 +49,7 @@ struct wincaps unsigned has_process_io_counters : 1; unsigned supports_reading_modem_output_lines : 1; unsigned needs_memory_protection : 1; + unsigned pty_needs_alloc_console : 1; }; class wincapc @@ -102,6 +103,7 @@ public: bool IMPLEMENT (has_process_io_counters) bool IMPLEMENT (supports_reading_modem_output_lines) bool IMPLEMENT (needs_memory_protection) + bool IMPLEMENT (pty_needs_alloc_console) #undef IMPLEMENT }; |