commit/XEmacs: kehoea: Correct some partial character accounting, buffered_bytecount_to_charcount().

[email protected]
Newsgroups gmane.emacs.xemacs.patches
Message-ID <[email protected]>
1 new commit in XEmacs:

https://bitbucket.org/xemacs/xemacs/commits/7343a186a475/
Changeset:   7343a186a475
User:        kehoea
Date:        2014-01-23 14:49:40
Summary:     Correct some partial character accounting, buffered_bytecount_to_charcount().

src/ChangeLog addition:

2014-01-23  Aidan Kehoe  <[email protected]>

	* lstream.c (Lstream_read_1):
	Don't include the unread partial character in
	unget_character_count, since our consumers will never be aware of it.
	* text.c:
	* text.c (buffered_bytecount_to_charcount):
	A buffer consisting entirely of a partial character needs to be
	treated as a partial last character, not a partial first
	character, to avoid double-counting.
Affected #:  3 files

diff -r 0cb4f494a54809a054e242ee16c00c0e9c34d39d -r 7343a186a4757d2053e550dcb9299fd446970487 src/ChangeLog
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,14 @@
+2014-01-23  Aidan Kehoe  <[email protected]>
+
+	* lstream.c (Lstream_read_1):
+	Don't include the unread partial character in
+	unget_character_count, since our consumers will never be aware of it.
+	* text.c:
+	* text.c (buffered_bytecount_to_charcount):
+	A buffer consisting entirely of a partial character needs to be
+	treated as a partial last character, not a partial first
+	character, to avoid double-counting.
+
 2014-01-22  Aidan Kehoe  <[email protected]>
 
 	* text.c (buffered_bytecount_to_charcount): New.

diff -r 0cb4f494a54809a054e242ee16c00c0e9c34d39d -r 7343a186a4757d2053e550dcb9299fd446970487 src/lstream.c
--- a/src/lstream.c
+++ b/src/lstream.c
@@ -721,8 +721,15 @@
       Bytecount newoff = validate_ibyte_string_backward (p, off);
       if (newoff < off)
 	{
+          Charcount before = lstr->unget_character_count;
 	  Lstream_unread (lstr, p + newoff, off - newoff);
 	  off = newoff;
+
+          /* Since it's Lstream_read rather than our consumers unreading the
+             incomplete character (conceptually, not affecting the number of
+             characters ever Lstream_read() from the stream),
+             unget_character_count shouldn't include it. */
+          lstr->unget_character_count = before;
 	}
     }
 

diff -r 0cb4f494a54809a054e242ee16c00c0e9c34d39d -r 7343a186a4757d2053e550dcb9299fd446970487 src/text.c
--- a/src/text.c
+++ b/src/text.c
@@ -2244,9 +2244,9 @@
 /* Return the character count of an lstream or coding buffer of
    internal-format text, counting partial characters at the beginning of the
    buffer as whole characters, and *not* counting partial characters at the
-   end of the buffer. This is because the result of this function is
-   subtracted from the character count given by the coding system character
-   tell methods, which include the former but not the latter. */
+   end of the buffer. The result of this function is subtracted from the
+   character count given by the coding system character tell methods, and we
+   need to treat each buffer in the same way to avoid double-counting. */
 
 Charcount
 buffered_bytecount_to_charcount (const Ibyte *bufptr, Bytecount len)
@@ -2258,10 +2258,10 @@
     {
       if (rep_bytes_by_first_byte (*bufptr) > len)
         {
-          /* This is a partial first character, include it. Return
-             immediately so validate_ibyte_string_backward doesn't run off
-             the beginning of the string. */
-          return (Charcount) 1;
+          /* This is a partial last character. Return 0, avoid treating it
+             as a partial first character, since that would lead to it being
+             counted twice. */
+          return (Charcount) 0;
         }
     }
   else

Repository URL: https://bitbucket.org/xemacs/xemacs/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.