Some more patches for wget on Windows.
1) config.h.ms: DMC already have usleep() and sleep().
2) mswindows.c:
- Removed read_registry() as it's not needed.
- Added set_sleep_mode() to prevent Windows entering sleep-mode
or hibernation on long transfers. Console mode programs doesn't seem
to reset the idle-counter (as GUI programs do).
Patches against latest CVS version:
--- orig/windows/config.h.msFri Sep 26 00:39:37 2003
+++ windows/config.h.ms Sat Sep 27 01:12:43 2003
@@ -139,9 +139,10 @@
#undef HAVE_UNISTD_H
#endif
-/* None except Digital Mars have usleep function */
+/* None except Digital Mars have sleep/usleep functions */
#if defined(__DMC__)
#define HAVE_USLEEP
+#define HAVE_SLEEP
#endif
diff -u3 -H -B orig/src/mswindows.c ./mswindows.c
--- orig/src/mswindows.c Fri Sep 26 00:39:35 2003
+++ ./mswindows.c Sat Sep 27 01:58:57 2003
@@ -57,13 +57,25 @@
extern int errno;
#endif
+#ifndef ES_SYSTEM_REQUIRED
+#define ES_SYSTEM_REQUIRED 0x0001
+#endif
+
+#ifndef ES_CONTINUOUS
+#define ES_CONTINUOUS 0x8000
+#endif
+
+
/* Defined in log.c. */
void log_request_redirect_output PARAMS ((const char *));
-static int windows_nt_p;
+static DWORD set_sleep_mode (DWORD mode);
+static DWORD pwr_mode = 0;
+static int windows_nt_p;
#ifndef HAVE_SLEEP
+
/* Emulation of Unix sleep. */
unsigned int
@@ -92,21 +105,6 @@
}
#endif /* HAVE_USLEEP */
-static char *
-read_registry (HKEY hkey, char *subkey, char *valuename, char *buf, int *len)
-{
- HKEY result;
- DWORD size = *len;
- DWORD type = REG_SZ;
- if (RegOpenKeyEx (hkey, subkey, 0, KEY_READ, result) != ERROR_SUCCESS)
-return NULL;
- if (RegQueryValueEx (result, valuename, NULL, type, (LPBYTE)buf, size) !=
ERROR_SUCCESS)
-buf = NULL;
- *len = size;
- RegCloseKey (result);
- return buf;
-}
-
void
windows_main_junk (int *argc, char **argv, char **exec_name)
{
@@ -125,6 +123,9 @@
ws_cleanup (void)
{
WSACleanup ();
+ if (pwr_mode)
+ set_sleep_mode (pwr_mode);
+ pwr_mode = 0;
}
static void
@@ -170,7 +171,7 @@
case CTRL_CLOSE_EVENT:
case CTRL_LOGOFF_EVENT:
default:
- WSACleanup ();
+ ws_cleanup ();
return FALSE;
}
return TRUE;
@@ -266,6 +267,7 @@
exit (1);
}
atexit (ws_cleanup);
+ pwr_mode = set_sleep_mode (0);
SetConsoleCtrlHandler (ws_handler, TRUE);
}
@@ -295,3 +297,31 @@
return res;
}
#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.
+ */
+static
+DWORD set_sleep_mode (DWORD mode)
+{
+ HMODULE mod = LoadLibrary (kernel32.dll);
+ DWORD (*_SetThreadExecutionState) (DWORD) = NULL;
+ DWORD rc = (DWORD)-1;
+
+ if (mod)
+ (void*)_SetThreadExecutionState = GetProcAddress ((HINSTANCE)mod,
SetThreadExecutionState);
+
+ if (_SetThreadExecutionState)
+{
+ if (mode == 0) /* first time */
+ mode = (ES_SYSTEM_REQUIRED | ES_CONTINUOUS);
+ rc = (*_SetThreadExecutionState) (mode);
+}
+ if (mod)
+ FreeLibrary (mod);
+ DEBUGP ((set_sleep_mode(): mode 0x%08lX, rc 0x%08lX\n, mode, rc));
+ return (rc);
+}
+
diff -u3 -H -B orig/src/mswindows.h ./mswindows.h
--- orig/src/mswindows.h Fri Sep 26 00:39:35 2003
+++ ./mswindows.h Sat Sep 27 02:01:13 2003
@@ -125,11 +125,6 @@
#define ESTALE WSAESTALE
#define EREMOTE WSAEREMOTE
-#ifdef __DMC__
-# define HAVE_SLEEP 1
-# define HAVE_USLEEP 1
-#endif
-
/* Public functions. */
Gisle V.
# rm /bin/laden
/bin/laden: Not found