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 + + * numeric.c (flo_to_s): fixed broken output including nuls. + Wed May 12 16:25:46 2010 Nobuyoshi Nakada * 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;