OSDN Git Service

* wincap.h (wincaps:pty_needs_alloc_console): New element.
authorcgf <cgf>
Sun, 20 Apr 2003 01:36:14 +0000 (01:36 +0000)
committercgf <cgf>
Sun, 20 Apr 2003 01:36:14 +0000 (01:36 +0000)
(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.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler_tty.cc
winsup/cygwin/wincap.cc
winsup/cygwin/wincap.h

index d1c9abe..d911e23 100644 (file)
@@ -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
index 0014710..6285b24 100644 (file)
@@ -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);
index e70a362..b5385f2 100644 (file)
@@ -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;
index a89f0a5..066374f 100644 (file)
@@ -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
 };