OSDN Git Service

* fhandler.h (set_console_state_for_spawn): Add an argument to the declaration.
authorcgf <cgf>
Mon, 19 Dec 2005 19:04:13 +0000 (19:04 +0000)
committercgf <cgf>
Mon, 19 Dec 2005 19:04:13 +0000 (19:04 +0000)
* fhandler_console.cc (set_console_state_for_spawn): Ditto for the definition.
Only set invisible console for non-cygwin process.  Remove debugging leftover.
* spawn.cc (spawn_guts): Pass argument denoting whether this is a cygwin
process to set_console_state_for_spawn and only call this function when
exec'ing.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_console.cc
winsup/cygwin/spawn.cc

index afaa417..8ccb374 100644 (file)
@@ -1,3 +1,14 @@
+2005-12-19  Christopher Faylor  <cgf@timesys.com>
+
+       * fhandler.h (set_console_state_for_spawn): Add an argument to the
+       declaration.
+       * fhandler_console.cc (set_console_state_for_spawn): Ditto for the
+       definition.  Only set invisible console for non-cygwin process.  Remove
+       debugging leftover.
+       * spawn.cc (spawn_guts): Pass argument denoting whether this is a
+       cygwin process to set_console_state_for_spawn and only call this
+       function when exec'ing.
+
 2005-12-19  Corinna Vinschen  <corinna@vinschen.de>
 
        * mmap.cc (fhandler_dev_zero::mmap): Call VirtualFree(MEM_RELEASE)
index e948403..034281f 100644 (file)
@@ -1364,6 +1364,6 @@ class select_stuff
                   device_specific_mailslot (0) {}
 };
 
-void __stdcall set_console_state_for_spawn ();
+void __stdcall set_console_state_for_spawn (bool) __attribute__ ((regparm (1)));
 
 #endif /* _FHANDLER_H_ */
index 460b0dd..3fd139d 100644 (file)
@@ -138,14 +138,13 @@ tty_list::get_tty (int n)
     return &nada;
 }
 
-
 /* Determine if a console is associated with this process prior to a spawn.
    If it is, then we'll return 1.  If the console has been initialized, then
    set it into a more friendly state for non-cygwin apps. */
 void __stdcall
-set_console_state_for_spawn ()
+set_console_state_for_spawn (bool noncygwin_process)
 {
-  if (fhandler_console::need_invisible ())
+  if (noncygwin_process && fhandler_console::need_invisible ())
     return;
 
   HANDLE h = CreateFile ("CONIN$", GENERIC_READ, FILE_SHARE_WRITE,
@@ -1849,7 +1848,7 @@ fhandler_console::need_invisible ()
       b = AllocConsole ();     // will cause flashing if workstation
                                // stuff fails
       debug_printf ("h (%p), horig (%p)", h, horig);
-      if (0 && horig && h && h != horig && SetProcessWindowStation (horig))
+      if (horig && h && h != horig && SetProcessWindowStation (horig))
        CloseHandle (h);
       termios_printf ("%d = AllocConsole (), %E", b);
       invisible_console = true;
index df5cde1..ba16ef7 100644 (file)
@@ -583,8 +583,6 @@ spawn_guts (const char * prog_arg, const char *const *argv,
   sigproc_printf ("priority class %d", flags);
   flags |= CREATE_DEFAULT_ERROR_MODE | CREATE_SEPARATE_WOW_VDM;
 
-  set_console_state_for_spawn ();
-
   if (mode == _P_DETACH)
     flags |= DETACHED_PROCESS;
 
@@ -612,6 +610,7 @@ spawn_guts (const char * prog_arg, const char *const *argv,
        ProtectHandle (cygheap->pid_handle);
       else
        system_printf ("duplicate to pid_handle failed, %E");
+      set_console_state_for_spawn (real_path.iscygexec ());
     }
 
   /* Some file types (currently only sockets) need extra effort in the parent