From 2e0f142944f18894a609171dc5d903cd18f5e228 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Wed, 16 Aug 2023 23:44:57 +0200 Subject: [PATCH] mbrtoc32-regular: Make it work as expected on glibc 2.12. * lib/mbrtoc32.c (mbrtoc32): If necessary, clear the mbstate_t after mbrtowc() returned. --- ChangeLog | 6 ++++++ lib/mbrtoc32.c | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/ChangeLog b/ChangeLog index f8645fcc96..a0ecbd7dee 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 6a56d93a4b..b8d07ccb00 100644 --- a/lib/mbrtoc32.c +++ b/lib/mbrtoc32.c @@ -246,6 +246,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) { -- 2.39.5