summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--numeric.c9
2 files changed, 11 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 5d9806d088..bdd3a79e46 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Wed May 12 16:43:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (flo_to_s): fixed broken output including nuls.
+
Wed May 12 16:25:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* numeric.c (flo_to_s): exponent needs 2 digits.
diff --git a/numeric.c b/numeric.c
index d6dd1c4a5c..00d670b70f 100644
--- a/numeric.c
+++ b/numeric.c
@@ -585,10 +585,15 @@ flo_to_s(VALUE flt)
}
else if (decpt - digs < float_dig) {
long len;
+ char *ptr;
rb_str_cat(s, buf, digs);
rb_str_resize(s, (len = RSTRING_LEN(s)) + decpt - digs + 2);
- if (decpt > digs) memset(RSTRING_PTR(s) + len, '0', decpt - digs);
- rb_str_cat(s, ".0", 2);
+ ptr = RSTRING_PTR(s) + len;
+ if (decpt > digs) {
+ memset(ptr, '0', decpt - digs);
+ ptr += decpt - digs;
+ }
+ memcpy(ptr, ".0", 2);
}
else {
goto exp;