/* 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;
}