X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fmswindows.c;h=cdfea2d263390012a1a3ced53d7e47f6aa4e2064;hp=986f1ba49ee6b8dd1c29fcacaa0a89e8bcb32d86;hb=d763f8bf6d6e13ce006ffab616cc8a77e747a633;hpb=f25d593c16d10ae1ef6d519eb0268fead356b014 diff --git a/src/mswindows.c b/src/mswindows.c index 986f1ba4..cdfea2d2 100644 --- a/src/mswindows.c +++ b/src/mswindows.c @@ -1,11 +1,12 @@ /* mswindows.c -- Windows-specific support - Copyright (C) 1996-2005 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, + 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GNU Wget. GNU Wget is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or +the Free Software Foundation; either version 3 of the License, or (at your option) any later version. GNU Wget is distributed in the hope that it will be useful, @@ -14,20 +15,22 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with Wget; if not, write to the Free Software Foundation, Inc., -51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +along with Wget. If not, see . -In addition, as a special exception, the Free Software Foundation -gives permission to link the code of its release of Wget with the -OpenSSL project's "OpenSSL" library (or with modified versions of it -that use the same license as the "OpenSSL" library), and distribute -the linked executables. You must obey the GNU General Public License -in all respects for all of the code used other than "OpenSSL". If you -modify this file, you may extend this exception to your version of the -file, but you are not obligated to do so. If you do not wish to do -so, delete this exception statement from your version. */ +Additional permission under GNU GPL version 3 section 7 -#include +If you modify this program, or any covered work, by linking or +combining it with the OpenSSL project's OpenSSL library (or a +modified version of that library), containing parts covered by the +terms of the OpenSSL or SSLeay licenses, the Free Software Foundation +grants you additional permission to convey the resulting work. +Corresponding Source for a non-source form of such a combination +shall include the source code for the parts of OpenSSL used as well +as that of the covered work. */ + +#define INHIBIT_WRAP /* avoid wrapping of socket, bind, ... */ + +#include "wget.h" #include #include @@ -36,9 +39,7 @@ so, delete this exception statement from your version. */ #include #include -#define INHIBIT_WRAP /* avoid wrapping of socket, bind, ... */ -#include "wget.h" #include "utils.h" #include "url.h" @@ -73,7 +74,7 @@ xsleep (double seconds) } void -windows_main (int *argc, char **argv, char **exec_name) +windows_main (char **exec_name) { char *p; @@ -87,9 +88,11 @@ windows_main (int *argc, char **argv, char **exec_name) static void ws_cleanup (void) { + xfree ((char*)exec_name); WSACleanup (); } +#if defined(CTRLBREAK_BACKGND) || defined(CTRLC_BACKGND) static void ws_hangup (const char *reason) { @@ -103,6 +106,7 @@ ws_hangup (const char *reason) gesture as the parent will wait for us to terminate before resuming. */ FreeConsole (); } +#endif /* Construct the name for a named section (a.k.a. `file mapping') object. The returned string is dynamically allocated and needs to be xfree()'d. */ @@ -153,17 +157,17 @@ fake_fork_child (void) event = info->event; info->logfile_changed = false; - if (!opt.lfilename) + if (!opt.lfilename && (!opt.quiet || opt.server_response)) { /* See utils:fork_to_background for explanation. */ FILE *new_log_fp = unique_create (DEFAULT_LOGFILE, false, &opt.lfilename); if (new_log_fp) - { - info->logfile_changed = true; - strncpy (info->lfilename, opt.lfilename, sizeof (info->lfilename)); - info->lfilename[sizeof (info->lfilename) - 1] = '\0'; - fclose (new_log_fp); - } + { + info->logfile_changed = true; + strncpy (info->lfilename, opt.lfilename, sizeof (info->lfilename)); + info->lfilename[sizeof (info->lfilename) - 1] = '\0'; + fclose (new_log_fp); + } } UnmapViewOfFile (info); @@ -287,7 +291,7 @@ fake_fork (void) printf (_("Continuing in background, pid %lu.\n"), pi.dwProcessId); if (info->logfile_changed) - printf (_("Output will be written to `%s'.\n"), info->lfilename); + printf (_("Output will be written to %s.\n"), quote (info->lfilename)); UnmapViewOfFile (info); @@ -456,14 +460,14 @@ ws_startup (void) if (err != 0) { fprintf (stderr, _("%s: Couldn't find usable socket driver.\n"), - exec_name); + exec_name); exit (1); } if (data.wVersion < requested) { fprintf (stderr, _("%s: Couldn't find usable socket driver.\n"), - exec_name); + exec_name); WSACleanup (); exit (1); } @@ -523,7 +527,7 @@ thread_helper (void *arg) bool run_with_timeout (double seconds, void (*fun) (void *), void *arg) { - static HANDLE thread_hnd = NULL; + HANDLE thread_hnd; struct thread_data thread_arg; DWORD thread_id; bool rc; @@ -537,17 +541,15 @@ run_with_timeout (double seconds, void (*fun) (void *), void *arg) return false; } - /* Should never happen, but test for recursivety anyway. */ - assert (thread_hnd == NULL); - thread_arg.fun = fun; thread_arg.arg = arg; thread_arg.ws_error = WSAGetLastError (); thread_hnd = CreateThread (NULL, THREAD_STACK_SIZE, thread_helper, - &thread_arg, 0, &thread_id); + &thread_arg, 0, &thread_id); if (!thread_hnd) { - DEBUGP (("CreateThread() failed; [0x%x]\n", GetLastError ())); + DEBUGP (("CreateThread() failed; [%#lx]\n", + (unsigned long) GetLastError ())); goto blocking_fallback; } @@ -555,7 +557,7 @@ run_with_timeout (double seconds, void (*fun) (void *), void *arg) == WAIT_OBJECT_0) { /* Propagate error state (which is per-thread) to this thread, - so the caller can inspect it. */ + so the caller can inspect it. */ WSASetLastError (thread_arg.ws_error); DEBUGP (("Winsock error: %d\n", WSAGetLastError ())); rc = false; @@ -566,7 +568,7 @@ run_with_timeout (double seconds, void (*fun) (void *), void *arg) rc = true; } - CloseHandle (thread_hnd); /* Clear-up after TerminateThread(). */ + CloseHandle (thread_hnd); /* Clear-up after TerminateThread(). */ thread_hnd = NULL; return rc; } @@ -580,11 +582,11 @@ run_with_timeout (double seconds, void (*fun) (void *), void *arg) /* Define a macro that creates a function definition that wraps FUN into a function that sets errno the way the rest of the code expects. */ -#define WRAP(fun, decl, call) int wrapped_##fun decl { \ - int retval = fun call; \ - if (retval < 0) \ - errno = WSAGetLastError (); \ - return retval; \ +#define WRAP(fun, decl, call) int wrapped_##fun decl { \ + int retval = fun call; \ + if (retval < 0) \ + errno = WSAGetLastError (); \ + return retval; \ } WRAP (socket, (int domain, int type, int protocol), (domain, type, protocol))