From: Bruno Haible Date: Sun, 2 Jul 2023 14:45:44 +0000 (+0200) Subject: mbsnrtoc32s: Accommodate a difference between mbrtowc and mbrtoc32. X-Git-Tag: v1.0~1154 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=4c6f62c8240db9534250a1eee2e498ecfc3b7b3d;p=gnulib.git 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. --- diff --git a/ChangeLog b/ChangeLog index 187a1abbda..3e29fc1dd1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2023-07-02 Bruno Haible + + 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 mbmemcasecoll: Overcome wchar_t limitations. diff --git a/lib/mbsnrtoc32s.c b/lib/mbsnrtoc32s.c index 5baa08fd4e..788eadd99e 100644 --- a/lib/mbsnrtoc32s.c +++ b/lib/mbsnrtoc32s.c @@ -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 diff --git a/lib/mbsnrtowcs-impl.h b/lib/mbsnrtowcs-impl.h index 7d94e24eb6..78f95a1467 100644 --- a/lib/mbsnrtowcs-impl.h +++ b/lib/mbsnrtowcs-impl.h @@ -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; diff --git a/lib/mbsnrtowcs.c b/lib/mbsnrtowcs.c index b5d311d292..5aa3f40ecb 100644 --- a/lib/mbsnrtowcs.c +++ b/lib/mbsnrtowcs.c @@ -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"