# HG changeset patch # User Eli Zaretskii # Date 1021152772 0 # Node ID 6a20d4c6bb785dac2c4de4af848afa67f98900cd # Parent 193ea38d0029cd4c32466f9e357a66636ff44bf8 (decode_coding) : If a lone CR characters is carried over from the previous block of text, adjust coding->produced to account for the extra character. diff -r 193ea38d0029 -r 6a20d4c6bb78 src/coding.c --- 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: