diff src/file-coding.c @ 5784:0cb4f494a548

Have the result of coding_character_tell() reflect str->convert_to, too. src/ChangeLog addition: 2014-01-22 Aidan Kehoe <kehoea@parhasard.net> * text.c (buffered_bytecount_to_charcount): New. Return the number of characters in a coding or lstream buffer, including partial characters at the beginning of the buffer, but not including those at the end. Refactored from Lstream_character_tell(). * text.h: * text.h (buffered_bytecount_to_charcount): Declare it. * lstream.c (Lstream_character_tell): Use the refactored buffered_bytecount_to_charcount () here, both for the unget buffer and in_buffer. * file-coding.c (coding_character_tell): Check the character count of the lstream buffer too, when passing back the character count from the coding stream.
author Aidan Kehoe <kehoea@parhasard.net>
date Wed, 22 Jan 2014 17:52:00 +0000
parents ccaa851ae712
children d2c0ff38ad5c
line wrap: on
line diff
--- a/src/file-coding.c	Tue Jan 21 00:27:16 2014 +0000
+++ b/src/file-coding.c	Wed Jan 22 17:52:00 2014 +0000
@@ -1994,8 +1994,19 @@
 coding_character_tell (Lstream *stream)
 {
   struct coding_stream *str = CODING_STREAM_DATA (stream);
-
-  return XCODESYSMETH_OR_GIVEN (str->codesys, character_tell, (str), -1);
+  Charcount ctell
+    = XCODESYSMETH_OR_GIVEN (str->codesys, character_tell, (str), -1);
+  
+  if (ctell > 0 && Dynarr_length (str->convert_to) > 0)
+    {
+      ctell
+        -= buffered_bytecount_to_charcount ((const Ibyte *)
+                                            (Dynarr_begin (str->convert_to)),
+                                            Dynarr_length (str->convert_to));
+      text_checking_assert (ctell >= 0);
+    }
+
+  return ctell;
 }
 
 static int