summaryrefslogtreecommitdiffstats
path: root/transcode.c
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-04-26 13:03:50 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-04-26 13:03:50 +0000
commitf9c4602ec9d807b26e88476ab9a8b3e5e94e541f (patch)
treec34f3e6388b8fd1e78704d1bd9b583a5822a52ef /transcode.c
parent8658562d2c0d791517f09d45785f2a225c9ee9d5 (diff)
downloadruby-f9c4602ec9d807b26e88476ab9a8b3e5e94e541f.tar.gz
ruby-f9c4602ec9d807b26e88476ab9a8b3e5e94e541f.tar.xz
ruby-f9c4602ec9d807b26e88476ab9a8b3e5e94e541f.zip
* transcode.c (ASIS): added for multi byte direct map.
* transcode.c (transcode_restartable0): ditto. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@23294 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'transcode.c')
-rw-r--r--transcode.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/transcode.c b/transcode.c
index aeb9fe5cd..fba247a71 100644
--- a/transcode.c
+++ b/transcode.c
@@ -505,6 +505,7 @@ 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) {
@@ -539,8 +540,16 @@ transcode_restartable0(const unsigned char **in_pos, unsigned char **out_pos,
}
follow_info:
switch (next_info & 0x1F) {
- case NOMAP: /* xxx: copy last byte only? */
- SUSPEND_OBUF(3); *out_p++ = next_byte;
+ 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++;
+ }
+ }
continue;
case 0x00: case 0x04: case 0x08: case 0x0C:
case 0x10: case 0x14: case 0x18: case 0x1C: