]> Savannah Git Hosting - gnulib.git/commitdiff
Accommodate a difference between mbrtowc and mbrtoc32.
authorBruno Haible <bruno@clisp.org>
Fri, 30 Jun 2023 20:48:12 +0000 (22:48 +0200)
committerBruno Haible <bruno@clisp.org>
Fri, 30 Jun 2023 20:48:12 +0000 (22:48 +0200)
* lib/mbiter.h (mbiter_multi_next): Handle the mbrtoc32 return value
(size_t)(-3).
* lib/mbuiter.h (mbuiter_multi_next): Likewise.
* lib/mbfile.h (mbfile_multi_getc): Likewise.

ChangeLog
lib/mbfile.h
lib/mbiter.h
lib/mbuiter.h

index 5c2ea3039c68bad8b4b62d8912f181252f3f66a2..ead993b18dbae55fc7adb068742de43fe093f23a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2023-06-30  Bruno Haible  <bruno@clisp.org>
+
+       Accommodate a difference between mbrtowc and mbrtoc32.
+       * lib/mbiter.h (mbiter_multi_next): Handle the mbrtoc32 return value
+       (size_t)(-3).
+       * lib/mbuiter.h (mbuiter_multi_next): Likewise.
+       * lib/mbfile.h (mbfile_multi_getc): Likewise.
+
 2023-06-30  Bruno Haible  <bruno@clisp.org>
 
        doc: Reference some reported bugs (in comments).
index 7c6d70fcaedd72ae7cbc06a0429e763277086617..716ab3fc89d3e123586b5862b0118dc9004f66c0 100644 (file)
@@ -183,6 +183,10 @@ mbfile_multi_getc (struct mbchar *mbc, struct mbfile_multi *mbf)
               assert (mbf->buf[0] == '\0');
               assert (mbc->wc == 0);
             }
+          else if (bytes == (size_t) -3)
+            /* The previous multibyte sequence produced an additional 32-bit
+               wide character.  */
+            bytes = 0;
           mbc->wc_valid = true;
           break;
         }
index 93bad990a1a6124a70d4a4a16192dc8473404800..fadefe104bb76d0a8d47fa2ccd759a1e7edca747 100644 (file)
@@ -163,6 +163,10 @@ mbiter_multi_next (struct mbiter_multi *iter)
               assert (*iter->cur.ptr == '\0');
               assert (iter->cur.wc == 0);
             }
+          else if (iter->cur.bytes == (size_t) -3)
+            /* The previous multibyte sequence produced an additional 32-bit
+               wide character.  */
+            iter->cur.bytes = 0;
           iter->cur.wc_valid = true;
 
           /* When in the initial state, we can go back treating ASCII
index 02e3190f1cffbf77b3e2a7457229b4acb4fb5294..954e11f6354995ab8e33f833caabfd983a3c72f6 100644 (file)
@@ -172,6 +172,10 @@ mbuiter_multi_next (struct mbuiter_multi *iter)
               assert (*iter->cur.ptr == '\0');
               assert (iter->cur.wc == 0);
             }
+          else if (iter->cur.bytes == (size_t) -3)
+            /* The previous multibyte sequence produced an additional 32-bit
+               wide character.  */
+            iter->cur.bytes = 0;
           iter->cur.wc_valid = true;
 
           /* When in the initial state, we can go back treating ASCII