Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2003-09-12 10:41:53 +0400
committerChristopher Faylor <me@cgf.cx>2003-09-12 10:41:53 +0400
commitfb3dd716764e26ddfd105cec227a689b97ddae91 (patch)
tree252367f97a5b7b7f1725825c590ef08629dab6d1
parent3a256354895af562cd86392c8d8c502ac4e73dc0 (diff)
* dcrt0.cc (_dll_crt0): Accommodate breaking apart of early_stuff_init.
* exceptions.cc (early_stuff_init): Delete. (init_console_handler): New function - top half of early_stuff_init. (init_global_security): New function - bottom half of early_stuff_init. (sig_handle): Avoid special hExeced test for SIGINT. Just terminate the captive process. (signal_exit): Add debugging output. * fhandler_tty.cc (fhandler_tty_slave::open): Don't allocate a console if one already seems to exist. Properly initialize ctrl-c handling if we do allocate a console. * winsup.h (early_stuff_init): Delete declaration. (init_console_handler): New declaration. (init_global_security): New declaration.
-rw-r--r--winsup/cygwin/ChangeLog16
-rw-r--r--winsup/cygwin/dcrt0.cc3
-rw-r--r--winsup/cygwin/exceptions.cc13
-rw-r--r--winsup/cygwin/fhandler_tty.cc10
-rw-r--r--winsup/cygwin/winsup.h3
5 files changed, 36 insertions, 9 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index c9cdc2669..a730fbc2c 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,19 @@
+2003-09-12 Christopher Faylor <cgf@redhat.com>
+
+ * dcrt0.cc (_dll_crt0): Accommodate breaking apart of early_stuff_init.
+ * exceptions.cc (early_stuff_init): Delete.
+ (init_console_handler): New function - top half of early_stuff_init.
+ (init_global_security): New function - bottom half of early_stuff_init.
+ (sig_handle): Avoid special hExeced test for SIGINT. Just terminate
+ the captive process.
+ (signal_exit): Add debugging output.
+ * fhandler_tty.cc (fhandler_tty_slave::open): Don't allocate a console
+ if one already seems to exist. Properly initialize ctrl-c handling if
+ we do allocate a console.
+ * winsup.h (early_stuff_init): Delete declaration.
+ (init_console_handler): New declaration.
+ (init_global_security): New declaration.
+
2003-09-11 Christopher Faylor <cgf@redhat.com>
* fhandler_disk_file.cc (path_conv::ndisk_links): Rename from
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
index d8141dd06..d5817fb3e 100644
--- a/winsup/cygwin/dcrt0.cc
+++ b/winsup/cygwin/dcrt0.cc
@@ -859,7 +859,8 @@ _dll_crt0 ()
main_environ = user_data->envptr;
*main_environ = NULL;
- early_stuff_init ();
+ init_console_handler ();
+ init_global_security ();
if (!DuplicateHandle (GetCurrentProcess (), GetCurrentProcess (),
GetCurrentProcess (), &hMainProc, 0, FALSE,
DUPLICATE_SAME_ACCESS))
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
index 8105eb653..c1743d239 100644
--- a/winsup/cygwin/exceptions.cc
+++ b/winsup/cygwin/exceptions.cc
@@ -115,12 +115,16 @@ init_exception_handler (exception_list *el)
#endif
void
-early_stuff_init ()
+init_console_handler ()
{
(void) SetConsoleCtrlHandler (ctrl_c_handler, FALSE);
if (!SetConsoleCtrlHandler (ctrl_c_handler, TRUE))
system_printf ("SetConsoleCtrlHandler failed, %E");
+}
+void
+init_global_security ()
+{
/* Initialize global security attribute stuff */
sec_none.nLength = sec_none_nih.nLength =
@@ -1024,7 +1028,7 @@ sig_handle (int sig)
if (handler == (void *) SIG_DFL)
{
if (sig == SIGCHLD || sig == SIGIO || sig == SIGCONT || sig == SIGWINCH
- || sig == SIGURG || (hExeced && sig == SIGINT))
+ || sig == SIGURG)
{
sigproc_printf ("default signal %d ignored", sig);
goto done;
@@ -1107,7 +1111,10 @@ signal_exit (int rc)
user_data->resourcelocks->Init ();
if (hExeced)
- TerminateProcess (hExeced, rc);
+ {
+ sigproc_printf ("terminating captive process");
+ TerminateProcess (hExeced, rc);
+ }
sigproc_printf ("about to call do_exit (%x)", rc);
(void) SetEvent (signal_arrived);
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc
index 8ba843e17..9a1db30da 100644
--- a/winsup/cygwin/fhandler_tty.cc
+++ b/winsup/cygwin/fhandler_tty.cc
@@ -555,8 +555,8 @@ fhandler_tty_slave::open (path_conv *, int flags, mode_t)
set_output_handle (to_master_local);
set_open_status ();
- if (fhandler_console::open_fhs++ == 0 && !output_done_event
- && wincap.pty_needs_alloc_console ())
+ if (fhandler_console::open_fhs++ == 0 && !GetConsoleCP ()
+ && !output_done_event && wincap.pty_needs_alloc_console ())
{
BOOL b;
HWINSTA h = CreateWindowStation (NULL, 0, GENERIC_READ | GENERIC_WRITE, &sec_none_nih);
@@ -567,8 +567,10 @@ fhandler_tty_slave::open (path_conv *, int flags, mode_t)
termios_printf ("SetProcessWindowStation %d, %E", b);
}
b = AllocConsole (); // will cause flashing if workstation
- // stuff fails
- termios_printf ("%d = AllocConsole ()", b);
+ // stuff fails
+ termios_printf ("%d = AllocConsole (), %E", b);
+ if (b)
+ init_console_handler ();
}
termios_printf ("incremented open_fhs %d", fhandler_console::open_fhs);
termios_printf ("tty%d opened", ttynum);
diff --git a/winsup/cygwin/winsup.h b/winsup/cygwin/winsup.h
index 83db260ab..55c0fe8a1 100644
--- a/winsup/cygwin/winsup.h
+++ b/winsup/cygwin/winsup.h
@@ -223,7 +223,8 @@ void __stdcall to_timestruc_t (FILETIME * ptr, timestruc_t * out);
void __stdcall time_as_timestruc_t (timestruc_t * out);
void __stdcall set_console_title (char *);
-void early_stuff_init ();
+void init_console_handler ();
+void init_global_security ();
int __stdcall check_null_str (const char *name) __attribute__ ((regparm(1)));
int __stdcall check_null_empty_str (const char *name) __attribute__ ((regparm(1)));