From: Bruno Haible Date: Wed, 16 Aug 2023 21:44:57 +0000 (+0200) Subject: mbrtoc32-regular: Make it work as expected on glibc 2.12. X-Git-Tag: v1.0~898 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=6e56f45350ec888ba34152f486a29d1a4db03993;p=gnulib.git mbrtoc32-regular: Make it work as expected on glibc 2.12. * lib/mbrtoc32.c (mbrtoc32): If necessary, clear the mbstate_t after mbrtowc() returned. --- diff --git a/ChangeLog b/ChangeLog index 4d6dc1f9da..4adcb56ad8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2023-08-16 Bruno Haible + + mbrtoc32-regular: Make it work as expected on glibc 2.12. + * lib/mbrtoc32.c (mbrtoc32): If necessary, clear the mbstate_t after + mbrtowc() returned. + 2023-08-16 Bruno Haible fnmatch: Override fnmatch from glibc versions < 2.22. diff --git a/lib/mbrtoc32.c b/lib/mbrtoc32.c index 558717d517..0933437a4b 100644 --- a/lib/mbrtoc32.c +++ b/lib/mbrtoc32.c @@ -255,6 +255,14 @@ mbrtoc32 (char32_t *pwc, const char *s, size_t n, mbstate_t *ps) /* char32_t and wchar_t are equivalent. Use mbrtowc(). */ wchar_t wc; size_t ret = mbrtowc (&wc, s, n, ps); + +# if GNULIB_MBRTOC32_REGULAR + /* Ensure that mbrtoc32 is regular. */ + if (ret < (size_t) -2 && ! mbsinit (ps)) + /* This occurs on glibc 2.12. */ + mbszero (ps); +# endif + # if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION if (ret < (size_t) -2 && wc != 0) {