Mercurial > emacs
changeset 45239:6a20d4c6bb78
(decode_coding) <coding_type_ccl>: If a lone CR
characters is carried over from the previous block of text, adjust
coding->produced to account for the extra character.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sat, 11 May 2002 21:32:52 +0000 |
parents | 193ea38d0029 |
children | 5a731733b17e |
files | src/coding.c |
diffstat | 1 files changed, 14 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/coding.c Sat May 11 16:00:10 2002 +0000 +++ b/src/coding.c Sat May 11 21:32:52 2002 +0000 @@ -4590,7 +4590,7 @@ { /* If the last character is CR, we can't handle it here because LF will be in the not-yet-decoded source text. - Recorded that the CR is not yet processed. */ + Record that the CR is not yet processed. */ coding->spec.ccl.cr_carryover = 1; coding->produced--; coding->produced_char--; @@ -4686,6 +4686,8 @@ unsigned char *source, *destination; int src_bytes, dst_bytes; { + int extra = 0; + if (coding->type == coding_type_undecided) detect_coding (coding, source, src_bytes); @@ -4728,18 +4730,24 @@ case coding_type_ccl: if (coding->spec.ccl.cr_carryover) { - /* Set the CR which is not processed by the previous call of - decode_eol_post_ccl in DESTINATION. */ + /* Put the CR which was not processed by the previous call + of decode_eol_post_ccl in DESTINATION. It will be + decoded together with the following LF by the call to + decode_eol_post_ccl below. */ *destination = '\r'; coding->produced++; coding->produced_char++; dst_bytes--; + extra = coding->spec.ccl.cr_carryover; } - ccl_coding_driver (coding, source, - destination + coding->spec.ccl.cr_carryover, + ccl_coding_driver (coding, source, destination + extra, src_bytes, dst_bytes, 0); if (coding->eol_type != CODING_EOL_LF) - decode_eol_post_ccl (coding, destination, coding->produced); + { + coding->produced += extra; + coding->produced_char += extra; + decode_eol_post_ccl (coding, destination, coding->produced); + } break; default: