On Sun, Feb 02, 2003 at 17:02:23 +0300, Andrey A. Chernov wrote:
> 
> I'll produce and send it a bit later.

Here it is.

--- stdlib/rand.c.old   Sat Jan  4 20:39:19 2003
+++ stdlib/rand.c       Sun Feb  2 17:06:08 2003
@@ -72,10 +72,13 @@
  */
        long hi, lo, x;
 
+       /* Can't be initialized with 0, so use another value. */
+       if (*ctx == 0)
+               *ctx = 123459876;
        hi = *ctx / 127773;
        lo = *ctx % 127773;
        x = 16807 * lo - 2836 * hi;
-       if (x <= 0)
+       if (x < 0)
                x += 0x7fffffff;
        return ((*ctx = x) % ((u_long)RAND_MAX + 1));
 #endif  /* !USE_WEAK_SEEDING */
@@ -86,8 +89,10 @@
 rand_r(unsigned int *ctx)
 {
        u_long val = (u_long) *ctx;
-       *ctx = do_rand(&val);
-       return (int) *ctx;
+       int r = do_rand(&val);
+
+       *ctx = (unsigned int) val;
+       return (r);
 }
 
 
--- stdlib/random.c.old Sun Mar 24 23:42:48 2002
+++ stdlib/random.c     Sun Feb  2 17:09:19 2003
@@ -236,10 +236,13 @@
  */
        long hi, lo;
 
+       /* Can't be initialized with 0, so use another value. */
+       if (x == 0)
+               x = 123459876;
        hi = x / 127773;
        lo = x % 127773;
        x = 16807 * lo - 2836 * hi;
-       if (x <= 0)
+       if (x < 0)
                x += 0x7fffffff;
        return (x);
 #endif  /* !USE_WEAK_SEEDING */

-- 
Andrey A. Chernov
http://ache.pp.ru/

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to