From: Bruno Haible Date: Sun, 2 Jul 2023 14:46:11 +0000 (+0200) Subject: mbsrtoc32s: Accommodate a difference between mbrtowc and mbrtoc32. X-Git-Tag: v1.0~1153 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=2864937890788e072e17b6a49de2cdc67551c780;p=gnulib.git 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. --- diff --git a/ChangeLog b/ChangeLog index 3e29fc1dd1..7cd5aac216 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2023-07-02 Bruno Haible + + 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 mbsnrtoc32s: Accommodate a difference between mbrtowc and mbrtoc32. diff --git a/lib/mbsrtoc32s.c b/lib/mbsrtoc32s.c index d37e67056b..92f7433818 100644 --- a/lib/mbsrtoc32s.c +++ b/lib/mbsrtoc32s.c @@ -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 diff --git a/lib/mbsrtowcs-impl.h b/lib/mbsrtowcs-impl.h index bcf729dcb9..0b068b26ab 100644 --- a/lib/mbsrtowcs-impl.h +++ b/lib/mbsrtowcs-impl.h @@ -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; diff --git a/lib/mbsrtowcs.c b/lib/mbsrtowcs.c index c20fc416bd..290522ad5b 100644 --- a/lib/mbsrtowcs.c +++ b/lib/mbsrtowcs.c @@ -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"