diff options
| author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-07-18 01:55:15 +0000 |
|---|---|---|
| committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-07-18 01:55:15 +0000 |
| commit | e96513a759d196e680d79d11e0beacf78cc1bcae (patch) | |
| tree | 48d8436380c4f99d5301e0104745e411ae4c25b9 /object.c | |
| parent | f71920416e57b58a4e95b840a3d3ae8b5d284d16 (diff) | |
| download | ruby-e96513a759d196e680d79d11e0beacf78cc1bcae.tar.gz ruby-e96513a759d196e680d79d11e0beacf78cc1bcae.tar.xz ruby-e96513a759d196e680d79d11e0beacf78cc1bcae.zip | |
* object.c (rb_cstr_to_dbl): limit out-of-range message.
* util.c (ruby_strtod): return end pointer even if ERANGE occurred.
fixed: [ruby-dev:29041]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@10553 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'object.c')
| -rw-r--r-- | object.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -2213,6 +2213,9 @@ rb_cstr_to_dbl(p, badcheck) const char *q; char *end; double d; + const char *ellipsis = ""; + int w; +#define OutOfRange() (((w = end - p) > 20) ? (w = 20, ellipsis = "...") : (ellipsis = "")) if (!p) return 0.0; q = p; @@ -2224,7 +2227,8 @@ rb_cstr_to_dbl(p, badcheck) } d = strtod(p, &end); if (errno == ERANGE) { - rb_warn("Float %*s out of range", end-p, p); + OutOfRange(); + rb_warn("Float %.*s%s out of range", w, p, ellipsis); errno = 0; } if (p == end) { @@ -2258,18 +2262,20 @@ rb_cstr_to_dbl(p, badcheck) p = buf; d = strtod(p, &end); if (errno == ERANGE) { - rb_warn("Float %*s out of range", end-p, p); + OutOfRange(); + rb_warn("Float %.*s%s out of range", w, p, ellipsis); errno = 0; } if (badcheck) { - if (p == end) goto bad; + if (!end || p == end) goto bad; while (*end && ISSPACE(*end)) end++; if (*end) goto bad; } } if (errno == ERANGE) { errno = 0; - rb_raise(rb_eArgError, "Float %s out of range", q); + OutOfRange(); + rb_raise(rb_eArgError, "Float %.*s%s out of range", w, q, ellipsis); } return d; } |
