]> Savannah Git Hosting - gnulib.git/commitdiff
mbsnrtoc32s: Accommodate a difference between mbrtowc and mbrtoc32.
authorBruno Haible <bruno@clisp.org>
Sun, 2 Jul 2023 14:45:44 +0000 (16:45 +0200)
committerBruno Haible <bruno@clisp.org>
Sun, 2 Jul 2023 14:45:44 +0000 (16:45 +0200)
* lib/mbsnrtoc32s.c (USES_C32): New macro.
* lib/mbsnrtowcs.c (USES_C32): New macro.
* lib/mbsnrtowcs-impl.h (FUNC): If USES_C32 and mbrtoc32 returned
(size_t)(-3), don't increment the pointer.

ChangeLog
lib/mbsnrtoc32s.c
lib/mbsnrtowcs-impl.h
lib/mbsnrtowcs.c

index 187a1abbda30a349d09f4124710b0f7a793a29a1..3e29fc1dd112843887b570660d3be9ac9ccd4c92 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2023-07-02  Bruno Haible  <bruno@clisp.org>
+
+       mbsnrtoc32s: Accommodate a difference between mbrtowc and mbrtoc32.
+       * lib/mbsnrtoc32s.c (USES_C32): New macro.
+       * lib/mbsnrtowcs.c (USES_C32): New macro.
+       * lib/mbsnrtowcs-impl.h (FUNC): If USES_C32 and mbrtoc32 returned
+       (size_t)(-3), don't increment the pointer.
+
 2023-07-02  Bruno Haible  <bruno@clisp.org>
 
        mbmemcasecoll: Overcome wchar_t limitations.
index 5baa08fd4eda9328ceebf444f0c87af10e4eb5e2..788eadd99ee315769fc0a2840ab0d3b43aeda8de 100644 (file)
@@ -47,6 +47,7 @@ extern mbstate_t _gl_mbsrtoc32s_state;
 # define DCHAR_T char32_t
 # define INTERNAL_STATE _gl_mbsrtoc32s_state
 # define MBRTOWC mbrtoc32
+# define USES_C32 1
 # include "mbsnrtowcs-impl.h"
 
 #else
index 7d94e24eb636502271dbff0a93b60d8fb4ca5228..78f95a1467683282dfc8d7abb2184cbf5710b0a3 100644 (file)
@@ -61,8 +61,11 @@ FUNC (DCHAR_T *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps
                 /* Here mbsinit (ps).  */
                 break;
               }
-            src += ret;
-            srclen -= ret;
+            if (!(USES_C32 && ret == (size_t)(-3)))
+              {
+                src += ret;
+                srclen -= ret;
+              }
           }
 
         *srcp = src;
index b5d311d29239221e8af5038e3ea4520e36896829..5aa3f40ecb69a72d983d9f12102ca6224d7d37b9 100644 (file)
@@ -34,4 +34,5 @@ extern mbstate_t _gl_mbsrtowcs_state;
 #define DCHAR_T wchar_t
 #define INTERNAL_STATE _gl_mbsrtowcs_state
 #define MBRTOWC mbrtowc
+#define USES_C32 0
 #include "mbsnrtowcs-impl.h"