diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-03-27 23:40:32 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-03-27 23:40:32 +0000 |
commit | a1b5313e4e8dc58a6d5081f34c542f5f3ade34e0 (patch) | |
tree | 41f636b244a7d17014aaef99bfa9e3f2a6d90058 /ext | |
parent | e5867c4b29edf6e4f95e04477d97223fe64742dd (diff) | |
download | ruby-a1b5313e4e8dc58a6d5081f34c542f5f3ade34e0.tar.gz |
* ext/iconv/iconv.c (iconv_create): Iconv::Failure requires 3
arguments. (pointed out by NaHi)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@8201 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r-- | ext/iconv/iconv.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index d8958c0e3f..65dd07f7de 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -169,14 +169,17 @@ iconv_create } if (cd == (iconv_t)-1) { int inval = errno == EINVAL; - volatile VALUE msg = rb_str_new2("iconv(\"" + (inval ? 5 : 0)); - char *s; - - rb_str_buf_cat2(rb_str_buf_append(msg, to), "\", \""); - rb_str_buf_cat2(rb_str_buf_append(msg, from), "\")"); - s = StringValuePtr(msg); + char *s = inval ? "invalid encoding " : "iconv"; + volatile VALUE msg = rb_str_new(0, strlen(s) + RSTRING(to)->len + + RSTRING(from)->len + 8); + + sprintf(RSTRING(msg)->ptr, "%s(\"%s\", \"%s\")", + s, RSTRING(to)->ptr, RSTRING(from)->ptr); + s = RSTRING(msg)->ptr; + RSTRING(msg)->len = strlen(s); if (!inval) rb_sys_fail(s); - rb_raise(rb_eIconvInvalidEncoding, "invalid encoding %s", s); + iconv_fail(rb_eIconvInvalidEncoding, + Qnil, rb_ary_new3(2, to, from), NULL, s); } } |