From: hniksic Date: Fri, 19 Mar 2004 23:54:27 +0000 (-0800) Subject: [svn] Fixed bugs in Windows console event handling. X-Git-Tag: v1.13~1303 X-Git-Url: http://sjero.net/git/?p=wget;a=commitdiff_plain;h=1b6479a39a2b3b2931f0058efbe8f308bbc4a66d [svn] Fixed bugs in Windows console event handling. Submitted by David Fritz. --- diff --git a/src/ChangeLog b/src/ChangeLog index e62b42c2..72ae60ec 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2004-03-19 David Fritz + + * mswindows.c (ws_hangup): Incorporate old fork_to_background() + code. Add event name argument. + (fork_to_backgorund): Now a simple wrapper around ws_hangup(). + (ws_handler): Correctly handle the case when neither CTRLC_BACKGND + nor CTRLBREAK_BACKGND are defined. Don't bother handling close, + logoff, or shutdown events. Call ws_hangup() with the correct + event name; don't assume it was CTRL+Break. + 2004-03-19 Hrvoje Niksic * url.c (url_parse): Decode %HH sequences in host name. diff --git a/src/mswindows.c b/src/mswindows.c index f4affdd1..26e37119 100644 --- a/src/mswindows.c +++ b/src/mswindows.c @@ -70,8 +70,6 @@ extern int errno; /* Defined in log.c. */ void log_request_redirect_output PARAMS ((const char *)); -static int windows_nt_p; - /* Windows version of xsleep in utils.c. */ void @@ -109,13 +107,7 @@ ws_cleanup (void) } static void -ws_hangup (void) -{ - log_request_redirect_output ("CTRL+Break"); -} - -void -fork_to_background (void) +ws_hangup (const char *reason) { /* Whether we arrange our own version of opt.lfilename here. */ int changedp = 0; @@ -129,9 +121,20 @@ fork_to_background (void) if (changedp) printf (_("Output will be written to `%s'.\n"), opt.lfilename); - ws_hangup (); - if (!windows_nt_p) - FreeConsole (); + log_request_redirect_output (reason); + + /* Detach process from the current console. Under Windows 9x, if we + were launched from a 16-bit process (which is usually the case; + command.com is 16-bit) the parent process should resume right away. + Under NT or if launched from a 32-process under 9x, this is a futile + gesture as the parent will wait for us to terminate before resuming. */ + FreeConsole (); +} + +void +fork_to_background (void) +{ + ws_hangup ("fork"); } static BOOL WINAPI @@ -141,20 +144,17 @@ ws_handler (DWORD dwEvent) { #ifdef CTRLC_BACKGND case CTRL_C_EVENT: + ws_hangup ("CTRL+C"); + return TRUE; #endif #ifdef CTRLBREAK_BACKGND case CTRL_BREAK_EVENT: + ws_hangup ("CTRL+Break"); + return TRUE; #endif - fork_to_background (); - break; - case CTRL_SHUTDOWN_EVENT: - case CTRL_CLOSE_EVENT: - case CTRL_LOGOFF_EVENT: default: - ws_cleanup (); return FALSE; } - return TRUE; } static char *title_buf = NULL; @@ -257,11 +257,6 @@ ws_startup (void) WORD requested; WSADATA data; int err; - OSVERSIONINFO os; - - if (GetVersionEx (&os) == TRUE - && os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) - windows_nt_p = 1; requested = MAKEWORD (1, 1); err = WSAStartup (requested, &data);