summaryrefslogtreecommitdiff
path: root/random.c
diff options
context:
space:
mode:
author(no author) <(no author)@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1999-12-07 16:47:21 +0000
committer(no author) <(no author)@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1999-12-07 16:47:21 +0000
commitb514a325b560d0f36451050e15dd7ff985171d7b (patch)
tree381b72778e5ed473e47665757e47f66ef7191ce5 /random.c
parentbe1fea072cd0d22788ef8a931c0c6b64a2503b5d (diff)
This commit was manufactured by cvs2svn to create tag 'v1_4_3'.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_4_3@582 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'random.c')
-rw-r--r--random.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/random.c b/random.c
index e977094eaa..67c752d0f7 100644
--- a/random.c
+++ b/random.c
@@ -87,11 +87,11 @@ rb_f_srand(argc, argv, obj)
VALUE *argv;
VALUE obj;
{
- VALUE seed;
- int old;
- static int saved_seed;
+ VALUE a;
+ unsigned int seed, old;
+ static unsigned int saved_seed;
- if (rb_scan_args(argc, argv, "01", &seed) == 0) {
+ if (rb_scan_args(argc, argv, "01", &a) == 0) {
static int n = 0;
struct timeval tv;
@@ -99,7 +99,7 @@ rb_f_srand(argc, argv, obj)
seed = tv.tv_sec ^ tv.tv_usec ^ getpid() ^ n++;
}
else {
- seed = NUM2UINT(seed);
+ seed = NUM2UINT(a);
}
#ifdef HAVE_RANDOM
@@ -116,7 +116,7 @@ rb_f_srand(argc, argv, obj)
old = saved_seed;
saved_seed = seed;
- return rb_int2inum(old);
+ return rb_uint2inum(old);
}
static VALUE
@@ -126,13 +126,12 @@ rb_f_rand(obj, vmax)
long val, max;
switch (TYPE(vmax)) {
- case T_BIGNUM:
- return rb_big_rand(vmax);
-
case T_FLOAT:
- if (RFLOAT(vmax)->value > LONG_MAX || RFLOAT(vmax)->value < LONG_MIN)
- return rb_big_rand(rb_dbl2big(RFLOAT(vmax)->value));
- break;
+ if (RFLOAT(vmax)->value <= LONG_MAX && RFLOAT(vmax)->value >= LONG_MIN)
+ break;
+ /* fall through */
+ case T_BIGNUM:
+ return rb_big_rand(vmax, RANDOM_NUMBER);
}
max = NUM2LONG(vmax);