From: Richard M. Stallman Date: Fri, 24 Apr 1998 01:05:25 +0000 (+0000) Subject: (shrink_decoding_region): Do not consider LF as ascii X-Git-Tag: emacs-20.3~1332 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ee59c65fd03eb52630e689916844423a32e77359;p=emacs.git (shrink_decoding_region): Do not consider LF as ascii if preceded by CR, since that confuses eol decoding. (code_convert_region): When conversion fails with CODING_FINISH_INSUFFICIENT_SRC, was overwriting src with garbage from dst instead of copying from src to dst. --- diff --git a/src/coding.c b/src/coding.c index 4dc4f68143f..09d0ec68de0 100644 --- a/src/coding.c +++ b/src/coding.c @@ -3782,8 +3782,12 @@ shrink_decoding_region (beg, end, coding, str) { if (coding->heading_ascii < 0) while (begp < endp && *begp != '\r' && *begp < 0x80) begp++; - while (begp < endp && *(endp - 1) != '\r' && *(endp - 1) < 0x80) + while (begp < endp && endp[-1] != '\r' && endp[-1] < 0x80) endp--; + /* Do not consider LF as ascii if preceded by CR, since that + confuses eol decoding. */ + if (begp < endp && endp < endp_orig && endp[-1] == '\r' && endp[0] == '\n') + endp++; } else begp = endp; @@ -3805,6 +3809,10 @@ shrink_decoding_region (beg, end, coding, str) while (begp < endp && endp[-1] < 0x80 && endp[-1] != '\r') endp--; else while (begp < endp && endp[-1] < 0x80) endp--; + /* Do not consider LF as ascii if preceded by CR, since that + confuses eol decoding. */ + if (begp < endp && endp < endp_orig && endp[-1] == '\r' && endp[0] == '\n') + endp++; if (begp < endp && endp < endp_orig && endp[-1] >= 0x80) endp++; break; @@ -3829,6 +3837,10 @@ shrink_decoding_region (beg, end, coding, str) while (begp < endp && (c = endp[-1]) < 0x80 && c != '\r') endp--; else while (begp < endp && endp[-1] < 0x80) endp--; + /* Do not consider LF as ascii if preceded by CR, since that + confuses eol decoding. */ + if (begp < endp && endp < endp_orig && endp[-1] == '\r' && endp[0] == '\n') + endp++; break; case CODING_CATEGORY_IDX_ISO_7: @@ -3843,6 +3855,10 @@ shrink_decoding_region (beg, end, coding, str) while (begp < endp && (c = endp[-1]) < 0x80 && c != ISO_CODE_ESC) endp--; + /* Do not consider LF as ascii if preceded by CR, since that + confuses eol decoding. */ + if (begp < endp && endp < endp_orig && endp[-1] == '\r' && endp[0] == '\n') + endp++; if (begp < endp && endp[-1] == ISO_CODE_ESC) { if (endp + 1 < endp_orig && end[0] == '(' && end[1] == 'B') @@ -4222,7 +4238,7 @@ code_convert_region (from, from_byte, to, to_byte, coding, encodep, replace) inserted += len_byte; inserted_byte += len_byte; while (len_byte--) - *src++ = *dst++; + *dst++ = *src++; fake_multibyte = 1; break; }