summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--random.c5
-rw-r--r--sprintf.c4
3 files changed, 17 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 3f154260b2..5f885f76b3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Tue Apr 8 17:13:53 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * random.c (rb_f_rand): normalize bignum argument.
+
Tue Apr 8 11:49:31 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
* eval.c (Init_Proc): make Method and UnboundMethod independent.
@@ -34,6 +38,11 @@ Sat Apr 5 23:41:28 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
* pack.c (pack_pack): small but serious typo.
+Sat Apr 5 04:23:05 2003 Warren Brown <wkb@airmail.net>
+
+ * sprintf.c (rb_f_sprintf): was decrementing width even if there
+ is no sign character.
+
Sat Apr 5 01:41:28 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
* eval.c (backtrace): skip internal allocator frame.
diff --git a/random.c b/random.c
index 86c8198d41..b04bcddb8f 100644
--- a/random.c
+++ b/random.c
@@ -215,6 +215,11 @@ rb_f_rand(argc, argv, obj)
vmax = rb_dbl2big(RFLOAT(vmax)->value);
/* fall through */
case T_BIGNUM:
+ vmax = rb_big_norm(vmax);
+ if (FIXNUM_P(vmax)) {
+ max = FIX2INT(vmax);
+ break;
+ }
bignum:
{
long len = RBIGNUM(vmax)->len;
diff --git a/sprintf.c b/sprintf.c
index caea4c587f..b89f441708 100644
--- a/sprintf.c
+++ b/sprintf.c
@@ -475,14 +475,16 @@ rb_f_sprintf(argc, argv)
if (s[0] == '-') {
s++;
sc = '-';
+ width--;
}
else if (flags & FPLUS) {
sc = '+';
+ width--;
}
else if (flags & FSPACE) {
sc = ' ';
+ width--;
}
- width--;
goto format_integer;
}
if (!RBIGNUM(val)->sign) {