From 35bfdea06f0b251d928e45241fbe0d7d61c8a390 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 25 Dec 2007 06:21:35 +0000 Subject: * transcode.c (transcode_dispatch): fix for multistep transcode. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@14669 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ transcode.c | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 18002b434..d62fa4c3c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Tue Dec 25 15:21:33 2007 Nobuyoshi Nakada + + * transcode.c (transcode_dispatch): fix for multistep transcode. + Tue Dec 25 15:07:51 2007 NAKAMURA Usaku * enc/trans/single_byte.c (Init_single_byte): renamed. diff --git a/transcode.c b/transcode.c index e8c654516..ec0562934 100644 --- a/transcode.c +++ b/transcode.c @@ -117,8 +117,8 @@ transcode_dispatch(const char* from_encoding, const char* to_encoding) st_data_t k, val = 0; k = (st_data_t)key; - if (!st_lookup(transcoder_table, k, &val) && - st_delete(transcoder_lib_table, &k, &val)) { + while (!st_lookup(transcoder_table, k, &val) && + st_delete(transcoder_lib_table, &k, &val)) { const char *const lib = (const char *)val; int len = strlen(lib); char path[sizeof(transcoder_lib_prefix) + MAX_TRANSCODER_LIBNAME_LEN]; @@ -128,6 +128,8 @@ transcode_dispatch(const char* from_encoding, const char* to_encoding) memcpy(path, transcoder_lib_prefix, sizeof(transcoder_lib_prefix) - 1); memcpy(path + sizeof(transcoder_lib_prefix) - 1, lib, len + 1); if (!rb_require(path)) return NULL; + } + if (!val) { if (!st_lookup(transcoder_table, (st_data_t)key, &val)) { /* multistep logic, via UTF-8 */ if (!encoding_equal(from_encoding, "UTF-8") && -- cgit