summaryrefslogtreecommitdiff
path: root/object.c
diff options
context:
space:
mode:
authorkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-01-24 18:23:05 +0000
committerkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-01-24 18:23:05 +0000
commitcab9751e97e6bfca2f34c8d52a818808ed559ebe (patch)
treeebdab1938d447adffe16303271468c8452ad8909 /object.c
parentc11a4d8f3f56fd53f969b1b5c63336bd1dae1bd3 (diff)
* object.c (rb_str_to_dbl): Fix again. use rb_str_tmp_new()
instead ALLOC_N. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30645 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'object.c')
-rw-r--r--object.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/object.c b/object.c
index 97989fd82a..32777720ae 100644
--- a/object.c
+++ b/object.c
@@ -2246,7 +2246,7 @@ rb_str_to_dbl(VALUE str, int badcheck)
char *s;
long len;
double ret;
- char *alloced = NULL;
+ VALUE tmp = Qnil;
StringValue(str);
s = RSTRING_PTR(str);
@@ -2256,15 +2256,18 @@ rb_str_to_dbl(VALUE str, int badcheck)
rb_raise(rb_eArgError, "string for Float contains null byte");
}
if (s[len]) { /* no sentinel somehow */
- char *p = alloced = ALLOC_N(char, len+1);
+ char *p;
+
+ tmp = rb_str_tmp_new(len);
+ p = RSTRING_PTR(tmp);
MEMCPY(p, s, char, len);
p[len] = '\0';
s = p;
}
}
ret = rb_cstr_to_dbl(s, badcheck);
- if (alloced)
- xfree(alloced);
+ if (tmp != Qnil)
+ rb_str_resize(tmp, 0);
return ret;
}