Mercurial > emacs
changeset 23315:86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
single CR code correctly.
(shrink_decoding_region) <CODING_CATEGORY_IDX_ISO_7 or
CODING_CATEGORY_IDX_ISO_7_TIGHT>: Skip also 8-bit codes.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Fri, 25 Sep 1998 07:32:05 +0000 |
parents | 87acd2b6ce97 |
children | 308cd9d90647 |
files | src/coding.c |
diffstat | 1 files changed, 23 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/coding.c Thu Sep 24 02:14:55 1998 +0000 +++ b/src/coding.c Fri Sep 25 07:32:05 1998 +0000 @@ -2529,18 +2529,20 @@ if (c == '\r') { ONE_MORE_BYTE (c); - if (c != '\n') + if (c == '\n') + *dst++ = c; + else { if (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL) { result = CODING_FINISH_INCONSISTENT_EOL; goto label_end_of_loop_2; } + src--; *dst++ = '\r'; if (BASE_LEADING_CODE_P (c)) coding->fake_multibyte = 1; } - *dst++ = c; } else if (c == '\n' && (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL)) @@ -2562,9 +2564,23 @@ src = src_base; break; } - if (result == CODING_FINISH_NORMAL - && src < src_end) - result = CODING_FINISH_INSUFFICIENT_DST; + if (src < src_end) + { + if (result == CODING_FINISH_NORMAL) + result = CODING_FINISH_INSUFFICIENT_DST; + else if (result != CODING_FINISH_INCONSISTENT_EOL + && coding->mode & CODING_MODE_LAST_BLOCK) + { + /* This is the last block of the text to be decoded. + We flush out all remaining codes. */ + src_bytes = src_end - src; + if (dst_bytes && (dst_end - dst < src_bytes)) + src_bytes = dst_end - dst; + bcopy (src, dst, src_bytes); + dst += src_bytes; + src += src_bytes; + } + } } break; @@ -3926,11 +3942,11 @@ the following 2-byte at the tail. */ if (eol_conversion) while (begp < endp - && (c = endp[-1]) < 0x80 && c != ISO_CODE_ESC && c != '\r') + && (c = endp[-1]) != ISO_CODE_ESC && c != '\r') endp--; else while (begp < endp - && (c = endp[-1]) < 0x80 && c != ISO_CODE_ESC) + && (c = endp[-1]) != ISO_CODE_ESC) endp--; /* Do not consider LF as ascii if preceded by CR, since that confuses eol decoding. */