From 3abca796f4e5cd2162217d6a508b0667302a8cba Mon Sep 17 00:00:00 2001 From: naruse Date: Tue, 5 May 2009 00:05:11 +0000 Subject: Fix: DON'T move in_p because before in_p is replaced by buffered data. * transcode.c: NOMAP is now multibyte direct map. * transcode.c: remove ASIS. * transcode_data.h: ditto. * tool/transcode-tb (ActionMap#generate_info): remove :asis. * tool/transcode-tb (ActionMap#generate_info): add :nomap0. * enc/trans/utf8_mac.trans: replace :asis by :nomap0. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23344 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- transcode.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'transcode.c') diff --git a/transcode.c b/transcode.c index fba247a718..36b6d777ac 100644 --- a/transcode.c +++ b/transcode.c @@ -505,7 +505,6 @@ transcode_restartable0(const unsigned char **in_pos, unsigned char **out_pos, case 30: goto resume_label30; case 31: goto resume_label31; case 32: goto resume_label32; - case 33: goto resume_label33; } while (1) { @@ -541,15 +540,14 @@ transcode_restartable0(const unsigned char **in_pos, unsigned char **out_pos, follow_info: switch (next_info & 0x1F) { case NOMAP: - SUSPEND_OBUF(3); *out_p++ = next_byte; - continue; - case ASIS: { - const unsigned char *p = inchar_start; - while (p < in_p) { - SUSPEND_OBUF(33); *out_p++ = (unsigned char)*p++; + const unsigned char *pend = in_p; + in_p = inchar_start; + while (in_p < pend) { + next_byte = (unsigned char)*in_p++; + SUSPEND_OBUF(3); *out_p++ = next_byte; } - } + } continue; case 0x00: case 0x04: case 0x08: case 0x0C: case 0x10: case 0x14: case 0x18: case 0x1C: -- cgit v1.2.3