From b916afddc967829b473573cf604295b97a836660 Mon Sep 17 00:00:00 2001 From: akr Date: Wed, 4 Feb 2009 16:45:31 +0000 Subject: [PATCH] * transcode.c (make_econv_exception): refine error message for undefined conversion. [ruby-core:21828] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22049 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ transcode.c | 28 +++++++++++++++++++--------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5fc70e6518..e7d40a0540 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu Feb 5 01:44:02 2009 Tanaka Akira + + * transcode.c (make_econv_exception): refine error message for + undefined conversion. [ruby-core:21828] + Thu Feb 5 01:18:25 2009 Tanaka Akira * ext/socket/socket.c (sock_s_socketpair): make 3rd argument optional. diff --git a/transcode.c b/transcode.c index 0320590516..1c4b997fc9 100644 --- a/transcode.c +++ b/transcode.c @@ -2026,17 +2026,27 @@ make_econv_exception(rb_econv_t *ec) } if (dumped == Qnil) dumped = rb_str_dump(bytes); - mesg = rb_sprintf("%s from %s to %s", - StringValueCStr(dumped), - ec->last_error.source_encoding, - ec->last_error.destination_encoding); if (strcmp(ec->last_error.source_encoding, - ec->source_encoding_name) != 0 || + ec->source_encoding_name) == 0 && strcmp(ec->last_error.destination_encoding, - ec->destination_encoding_name) != 0) { - rb_str_catf(mesg, " in conversion from %s to %s", - ec->source_encoding_name, - ec->destination_encoding_name); + ec->destination_encoding_name) == 0) { + mesg = rb_sprintf("%s from %s to %s", + StringValueCStr(dumped), + ec->last_error.source_encoding, + ec->last_error.destination_encoding); + } + else { + int i; + mesg = rb_sprintf("%s to %s in conversion from %s", + StringValueCStr(dumped), + ec->last_error.destination_encoding, + ec->source_encoding_name); + for (i = 0; i < ec->num_trans; i++) { + const rb_transcoder *tr = ec->elems[i].tc->transcoder; + if (!DECORATOR_P(tr->src_encoding, tr->dst_encoding)) + rb_str_catf(mesg, " to %s", + ec->elems[i].tc->transcoder->dst_encoding); + } } exc = rb_exc_new3(rb_eUndefinedConversionError, mesg); idx = rb_enc_find_index(ec->last_error.source_encoding);