diff --git a/ChangeLog b/ChangeLog index 75d5adf6..cda41480 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2001-11-27 Hrvoje Niksic + + * configure.in: Don't check for random. + 2001-11-27 Hrvoje Niksic * po/hr.po: Updated. diff --git a/configure.in b/configure.in index e853b770..1cc995a2 100644 --- a/configure.in +++ b/configure.in @@ -175,7 +175,7 @@ AC_FUNC_MMAP 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. diff --git a/src/ChangeLog b/src/ChangeLog index 146e89ad..4d25068d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2001-11-27 Hrvoje Niksic + + * cmpt.c (random): Removed. + + * retr.c (sleep_between_retrievals): Use the more portable rand() + instead of random(). + 2001-11-27 Ian Abbott * retr.c (retrieve_from_file): Initialize `new_file' to NULL to diff --git a/src/cmpt.c b/src/cmpt.c index 54215131..7a7add09 100644 --- a/src/cmpt.c +++ b/src/cmpt.c @@ -1222,38 +1222,3 @@ usleep (unsigned long usec) 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 */ diff --git a/src/config.h.in b/src/config.h.in index 62793c2c..1364d27f 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -168,9 +168,6 @@ char *alloca (); /* 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 header file. */ #undef HAVE_STRING_H diff --git a/src/retr.c b/src/retr.c index e519306e..94fa97b2 100644 --- a/src/retr.c +++ b/src/retr.c @@ -627,6 +627,10 @@ sleep_between_retrievals (int count) { 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) @@ -646,10 +650,16 @@ sleep_between_retrievals (int count) 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); } } } diff --git a/src/sysdep.h b/src/sysdep.h index d4430b2b..1c5deb1b 100644 --- a/src/sysdep.h +++ b/src/sysdep.h @@ -166,9 +166,6 @@ int vsnprintf (); #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