Published in <sxsu1vgataq.fsf@florida.arsdigita.de>.
+2001-11-27 Hrvoje Niksic <hniksic@arsdigita.com>
+
+ * configure.in: Don't check for random.
+
2001-11-27 Hrvoje Niksic <hniksic@arsdigita.com>
* po/hr.po: Updated.
AC_CHECK_FUNCS(strdup strstr strcasecmp strncasecmp strpbrk)
AC_CHECK_FUNCS(gettimeofday mktime strptime)
AC_CHECK_FUNCS(strerror snprintf vsnprintf select signal symlink access isatty)
-AC_CHECK_FUNCS(uname gethostname random usleep)
+AC_CHECK_FUNCS(uname gethostname usleep)
dnl
dnl Check if we need to compile in getopt.c.
+2001-11-27 Hrvoje Niksic <hniksic@arsdigita.com>
+
+ * cmpt.c (random): Removed.
+
+ * retr.c (sleep_between_retrievals): Use the more portable rand()
+ instead of random().
+
2001-11-27 Ian Abbott <abbotti@mev.co.uk>
* retr.c (retrieve_from_file): Initialize `new_file' to NULL to
return 0;
}
#endif /* not HAVE_USLEEP */
-
-
-#ifndef HAVE_RANDOM
-/* For the systems without random: a really simple congruential RNG,
- only good enough for what Wget uses it for. Before you panic: this
- is not used for any kind of cryptography. */
-
-static long random_seed;
-
-#define RANDOM_A 9301
-#define RANDOM_C 49297
-#define RANDOM_M 233280
-
-static int
-random_1 (void)
-{
- if (!random_seed)
- random_seed = time (NULL);
- random_seed = (random_seed * RANDOM_A + RANDOM_C) % RANDOM_M;
- return random_seed;
-}
-
-long
-random (void)
-{
- /* Upper bits of random() are a bit more random. Compose random()
- from higher bits of three call to random(). */
- unsigned r1 = random_1 () >> 8;
- unsigned r2 = random_1 () >> 4;
- unsigned r3 = random_1 ();
- long result = r1 ^ r2 ^ r3;
-
- return result;
-}
-#endif /* not HAVE_RANDOM */
/* Define if you have the usleep function. */
#undef HAVE_USLEEP
-/* Define if you have the random function. */
-#undef HAVE_RANDOM
-
/* Define if you have the <string.h> header file. */
#undef HAVE_STRING_H
{
static int first_retrieval = 1;
+ if (first_retrieval && opt.random_wait)
+ /* --random-wait uses the RNG, so seed it. */
+ srand (time (NULL));
+
if (!first_retrieval && (opt.wait || opt.waitretry))
{
if (opt.waitretry && count > 1)
sleep (opt.wait);
else
{
- int waitsecs = random() % (opt.wait * 2 + 1);
- DEBUGP(("sleep_between_retrievals: norm=%ld,random=%ld,sleep=%d\n",
- opt.wait, waitsecs - opt.wait, waitsecs));
- sleep(waitsecs);
+ int waitmax = 2 * opt.wait;
+ /* This is equivalent to rand() % waitmax, but uses the
+ high-order bits for better randomness. */
+ int waitsecs = (double)waitmax * rand () / (RAND_MAX + 1.0);
+
+ DEBUGP (("sleep_between_retrievals: norm=%ld,fuzz=%ld,sleep=%d\n",
+ opt.wait, waitsecs - opt.wait, waitsecs));
+
+ if (waitsecs)
+ sleep (waitsecs);
}
}
}
#ifndef HAVE_USLEEP
int usleep ();
#endif
-#ifndef HAVE_RANDOM
-long random ();
-#endif
/* SunOS brain damage -- for some reason, SunOS header files fail to
declare the functions below, which causes all kinds of problems