/* mswindows.c -- Windows-specific support
- Copyright (C) 1995, 1996, 1997, 1998, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998, 2004
+ Free Software Foundation, Inc.
This file is part of GNU Wget.
*p = '\0';
}
\f
-/* Winsock stuff. */
-
static void
ws_cleanup (void)
{
}
}
+/* Returns a pointer to the fully qualified name of the directory that
+ contains the Wget binary (wget.exe). The returned path does not have a
+ trailing path separator. Returns NULL on failure. */
char *
ws_mypath (void)
{
return wspathsave;
}
+/* Perform Windows specific initialization. */
void
ws_startup (void)
{
requested = MAKEWORD (1, 1);
err = WSAStartup (requested, &data);
-
if (err != 0)
{
fprintf (stderr, _("%s: Couldn't find usable socket driver.\n"),
WSACleanup ();
exit (1);
}
+
atexit (ws_cleanup);
pwr_mode = set_sleep_mode (0);
SetConsoleCtrlHandler (ws_handler, TRUE);
}
#endif
-/*
- * Prevent Windows entering sleep/hibernation-mode while wget is doing
- * a lengthy transfer. Windows does by default not consider network
- * activity in console-programs as activity ! Works on Win-98/ME/2K
- * and up.
- */
+/* Prevent Windows entering sleep/hibernation-mode while Wget is doing
+ a lengthy transfer. Windows does not, by default, consider network
+ activity in console-programs as activity! Works on Win-98/ME/2K
+ and up. */
static DWORD
set_sleep_mode (DWORD mode)
{
return rc;
}
\f
-/* run_with_timeout Windows implementation. */
+/* run_with_timeout Windows implementation. */
- /* Stack size 0 uses default thread stack-size (reserve+commit).
- * Determined by what's in the PE header.
- */
+/* Stack size 0 uses default thread stack-size (reserve+commit).
+ Determined by what's in the PE header. */
#define THREAD_STACK_SIZE 0
-struct thread_data {
- void (*fun) (void *);
- void *arg;
- DWORD ws_error;
+struct thread_data
+{
+ void (*fun) (void *);
+ void *arg;
+ DWORD ws_error;
};
/* The callback that runs FUN(ARG) in a separate thread. This
[1] MSVC can use __fastcall globally (cl /Gr) and on Watcom this is
the default (wcc386 -3r). */
-static DWORD WINAPI
+static DWORD WINAPI
thread_helper (void *arg)
{
struct thread_data *td = (struct thread_data *) arg;
/* Return Winsock error to the caller, in case FUN ran Winsock
code. */
td->ws_error = WSAGetLastError ();
- return 0;
+ return 0;
}
/* Call FUN(ARG), but don't allow it to run for more than TIMEOUT
{
static HANDLE thread_hnd = NULL;
struct thread_data thread_arg;
- DWORD thread_id;
- int rc = 0;
+ DWORD thread_id;
+ int rc = 0;
DEBUGP (("seconds %.2f, ", seconds));
-
+
if (seconds == 0)
{
blocking_fallback:
return 0;
}
- /* Should never happen, but test for recursivety anyway */
- assert (thread_hnd == NULL);
+ /* 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; %s\n", strerror (GetLastError ())));
rc = 1;
}
- CloseHandle (thread_hnd); /* clear-up after TerminateThread() */
+ CloseHandle (thread_hnd); /* Clear-up after TerminateThread(). */
thread_hnd = NULL;
return rc;
}
/* Declarations for windows
- Copyright (C) 1995, 1997, 1997, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1997, 1997, 1998, 2004
+ Free Software Foundation, Inc.
This file is part of GNU Wget.
#error Include mswindows.h inside or after "wget.h"
#endif
+/* Prevent inclusion of <winsock*.h> in <windows.h>. */
#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN /* Prevent inclusion of <winsock*.h> in <windows.h> */
+#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
-/* Use the correct winsock header; <ws2tcpip.h> includes <winsock2.h> only on
- * Watcom/MingW. We cannot use <winsock.h> for IPv6. Using getaddrinfo() requires
- * <ws2tcpip.h>
- */
+/* Use the correct winsock header; <ws2tcpip.h> includes <winsock2.h> only
+ on Watcom/MingW. We cannot use <winsock.h> for IPv6. Using
+ getaddrinfo() requires <ws2tcpip.h>. */
#if defined(ENABLE_IPV6) || defined(HAVE_GETADDRINFO)
# include <winsock2.h>
# include <ws2tcpip.h>
# define EAI_SYSTEM -1 /* value doesn't matter */
#endif
-/* Must include <sys/stat.h> because of 'stat' define below. */
+/* Must include <sys/stat.h> because of 'stat' define below. */
#include <sys/stat.h>
-/* Missing in several .c files. Include here. */
+/* Missing in several .c files. Include here. */
#include <io.h>
-/* Apparently needed for alloca(). */
+/* Apparently needed for alloca(). */
#include <malloc.h>
#ifndef S_ISDIR
# define S_ISLNK(a) 0
#endif
-/* We have strcasecmp and strncasecmp, just under a different name. */
+/* We have strcasecmp and strncasecmp, just under a different name. */
#define strcasecmp stricmp
#define strncasecmp strnicmp
#define PATH_SEPARATOR '\\'
-/* Microsoft says stat is _stat, Borland doesn't */
+/* Microsoft says stat is _stat, Borland doesn't. */
#ifdef _MSC_VER
# define stat _stat
#endif
#ifdef HAVE_ISATTY
-/* Microsoft VC supports _isatty; Borland ? */
+/* Microsoft VC supports _isatty; Borland? */
#ifdef _MSC_VER
# define isatty _isatty
#endif
/* #### Do we need this? */
#include <direct.h>
-/* Windows compilers accept only one arg to mkdir. */
+/* Windows compilers accept only one arg to mkdir. */
#ifndef __BORLANDC__
# define mkdir(a, b) _mkdir(a)
#else /* __BORLANDC__ */
# define mkdir(a, b) mkdir(a)
#endif /* __BORLANDC__ */
-/* Declarations of various socket errors: */
+/* Declarations of various socket errors: */
#define EWOULDBLOCK WSAEWOULDBLOCK
#define EINPROGRESS WSAEINPROGRESS
char *ws_mypath (void);
void windows_main_junk (int *, char **, char **);
-/* Things needed for IPv6; missing in <ws2tcpip.h>. */
+/* Things needed for IPv6; missing in <ws2tcpip.h>. */
#ifdef ENABLE_IPV6
# ifndef HAVE_NTOP
extern const char *inet_ntop (int af, const void *src, char *dst, size_t size);