X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Fmswindows.c;h=cdfea2d263390012a1a3ced53d7e47f6aa4e2064;hb=a9a2b34b052cfa903462124f59fbfeed7eaf374b;hp=e160e95862cd966d41c8955a3a9d0445cacdc84e;hpb=dd8eafb6c9ee042bdd71ebd84d8115a8c46e0dac;p=wget
diff --git a/src/mswindows.c b/src/mswindows.c
index e160e958..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"
@@ -72,118 +73,8 @@ xsleep (double seconds)
#endif /* not HAVE_USLEEP */
}
-#if !defined(HAVE_STRTOLL) && !defined(HAVE__STRTOI64)
-
-static inline int
-char_value (char c, int base)
-{
- int value;
- if (c < '0')
- return -1;
- if ('0' <= c && c <= '9')
- value = c - '0';
- else if ('a' <= c && c <= 'z')
- value = c - 'a' + 10;
- else if ('A' <= c && c <= 'Z')
- value = c - 'A' + 10;
- else
- return -1;
- if (value >= base)
- return -1;
- return value;
-}
-
-/* A fairly simple strtoll replacement for MS VC versions that don't
- supply _strtoi64. */
-
-__int64
-str_to_int64 (const char *nptr, char **endptr, int base)
-{
-#define INT64_OVERFLOW 9223372036854775807I64
-#define INT64_UNDERFLOW (-INT64_OVERFLOW - 1)
-
- __int64 result = 0;
- bool negative;
-
- if (base != 0 && (base < 2 || base > 36))
- {
- errno = EINVAL;
- return 0;
- }
-
- while (*nptr == ' ' || *nptr == '\t')
- ++nptr;
- if (*nptr == '-')
- {
- negative = true;
- ++nptr;
- }
- else if (*nptr == '+')
- {
- negative = false;
- ++nptr;
- }
- else
- negative = false;
-
- /* If base is 0, determine the real base based on the beginning on
- the number; octal numbers begin with "0", hexadecimal with "0x",
- and the others are considered octal. */
- if (*nptr == '0')
- {
- if ((base == 0 || base == 16)
- &&
- (*(nptr + 1) == 'x' || *(nptr + 1) == 'X'))
- {
- base = 16;
- nptr += 2;
- }
- else if (base == 0)
- base = 8;
- }
- else if (base == 0)
- base = 10;
-
- if (!negative)
- {
- /* Parse positive number, checking for overflow. */
- int val;
- for (; (val = char_value (*nptr, base)) != -1; ++nptr)
- {
- __int64 newresult = base * result + val;
- if (newresult < result)
- {
- result = INT64_OVERFLOW;
- errno = ERANGE;
- break;
- }
- result = newresult;
- }
- }
- else
- {
- /* Parse negative number, checking for underflow. */
- int val;
- for (; (val = char_value (*nptr, base)) != -1; ++nptr)
- {
- __int64 newresult = base * result - val;
- if (newresult > result)
- {
- result = INT64_UNDERFLOW;
- errno = ERANGE;
- break;
- }
- result = newresult;
- }
- }
- if (endptr)
- *endptr = (char *) nptr;
- return result;
-}
-#endif
-
void
-windows_main (int *argc, char **argv, char **exec_name)
+windows_main (char **exec_name)
{
char *p;
@@ -197,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)
{
@@ -213,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. */
@@ -263,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);
@@ -397,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);
@@ -566,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);
}
@@ -633,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;
@@ -647,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;
}
@@ -665,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;
@@ -676,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;
}
@@ -690,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))