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: