From: Katsuyuki Komatsu Date: 2000-01-10T14:09:04+09:00 Subject: [ruby-talk:01078] Re: rand() / drand48() 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