From b916afddc967829b473573cf604295b97a836660 Mon Sep 17 00:00:00 2001 From: akr Date: Wed, 4 Feb 2009 16:45:31 +0000 Subject: * 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 --- transcode.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'transcode.c') 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); -- cgit v1.2.3