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

ChangeLog
lib/mbsrtoc32s.c
lib/mbsrtowcs-impl.h
lib/mbsrtowcs.c

index 3e29fc1dd112843887b570660d3be9ac9ccd4c92..7cd5aac216b4dfe71192177a1a7916e2f4fcbe9f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2023-07-02  Bruno Haible  <bruno@clisp.org>
+
+       mbsrtoc32s: Accommodate a difference between mbrtowc and mbrtoc32.
+       * lib/mbsrtoc32s.c (USES_C32): New macro.
+       * lib/mbsrtowcs.c (USES_C32): New macro.
+       * lib/mbsrtowcs-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>
 
        mbsnrtoc32s: Accommodate a difference between mbrtowc and mbrtoc32.
index d37e67056b579cb050cac49d9e1a9ac30204d8a0..92f7433818d8e51a696d5c8460dd5cf1f7f76f03 100644 (file)
@@ -39,6 +39,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 "mbsrtowcs-impl.h"
 
 #else
index bcf729dcb98381bf04d6201c72c0ace34c0a7a9b..0b068b26ab25e9a9083ad85cba899cb59928c1e5 100644 (file)
@@ -61,7 +61,8 @@ FUNC (DCHAR_T *dest, const char **srcp, size_t len, mbstate_t *ps)
                 /* Here mbsinit (ps).  */
                 break;
               }
-            src += ret;
+            if (!(USES_C32 && ret == (size_t)(-3)))
+              src += ret;
           }
 
         *srcp = src;
index c20fc416bdf455d993b2e7909536b83a24dfc8e1..290522ad5b84c48e4e9d6d727786d9b0c2fd40db 100644 (file)
@@ -33,4 +33,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 "mbsrtowcs-impl.h"