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>