[#1026] Is this a bug? — Dave Thomas <Dave@...>

18 messages 2000/01/03

[#1084] Infinite loop — Dave Thomas <Dave@...>

17 messages 2000/01/11

[#1104] The value of while... — Dave Thomas <Dave@...>

24 messages 2000/01/11

[ruby-talk:01078] Re: rand() / drand48()

From: Katsuyuki Komatsu <komatsu@...>
Date: 2000-01-10 05:09:04 UTC
List: ruby-talk #1078
In the message of [ruby-talk:01055] Re: rand() / drand48()
    on 2000/1/6 00:52:46 matz@netlab.co.jp (Yukihiro Matsumoto) wrote:
|| Apparently in random.c, ruby never check if the initialization function
|| was called. Can this be a problem for the random generator ?
|
|Oops, I haven't noticed that.  You're right.  Here's the patch.

If HAVE_RANDOM is not defined, `first' would not be defined and
not accessible from rb_f_rand().
Also, both HAVE_DRAND48 and HAVE_RANDOM are defined, unnecessary
initstate() and setstate() call would be generated.

How abort this patch against random.c 1.8 ? 

--- random.c.dist	Sat Jan  8 14:00:21 2000
+++ random.c	Sun Jan  9 18:13:51 2000
@@ -77,6 +77,6 @@ void srand48 _((long));
 #endif /* not HAVE_DRAND48 */
 
-#ifdef HAVE_RANDOM
 static int first = 1;
+#if !defined HAVE_DRAND48 && defined HAVE_RANDOM
 static char state[256];
 #endif
@@ -89,8 +89,7 @@ rand_init(seed)
     static unsigned int saved_seed;
 
-#ifdef HAVE_RANDOM
+#if !defined HAVE_DRAND48 && defined HAVE_RANDOM
     if (first == 1) {
 	initstate(1, state, sizeof state);
-	first = 0;
     }
     else {
@@ -98,4 +97,5 @@ rand_init(seed)
     }
 #endif
+    first = 0;
 
     SRANDOM(seed);
@@ -135,6 +135,4 @@ rb_f_rand(obj, vmax)
 {
     long val, max;
-
-    static initialized = 0;
 
     if (first) {

--
Katsuyuki Komatsu <komatsu@sarion.co.jp>

In This Thread