From: Bruno Haible <bruno@clisp.org> Date: Fri, 30 Jun 2023 20:48:12 +0000 (+0200) Subject: Accommodate a difference between mbrtowc and mbrtoc32. X-Git-Tag: v1.0~1164 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=2dfd7cc0f336098fd96e1e7b010270fe91ac4e95;p=gnulib.git Accommodate a difference between mbrtowc and mbrtoc32. * lib/mbiter.h (mbiter_multi_next): Handle the mbrtoc32 return value (size_t)(-3). * lib/mbuiter.h (mbuiter_multi_next): Likewise. * lib/mbfile.h (mbfile_multi_getc): Likewise. --- diff --git a/ChangeLog b/ChangeLog index 5c2ea3039c..ead993b18d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2023-06-30 Bruno Haible <bruno@clisp.org> + + Accommodate a difference between mbrtowc and mbrtoc32. + * lib/mbiter.h (mbiter_multi_next): Handle the mbrtoc32 return value + (size_t)(-3). + * lib/mbuiter.h (mbuiter_multi_next): Likewise. + * lib/mbfile.h (mbfile_multi_getc): Likewise. + 2023-06-30 Bruno Haible <bruno@clisp.org> doc: Reference some reported bugs (in comments). diff --git a/lib/mbfile.h b/lib/mbfile.h index 7c6d70fcae..716ab3fc89 100644 --- a/lib/mbfile.h +++ b/lib/mbfile.h @@ -183,6 +183,10 @@ mbfile_multi_getc (struct mbchar *mbc, struct mbfile_multi *mbf) assert (mbf->buf[0] == '\0'); assert (mbc->wc == 0); } + else if (bytes == (size_t) -3) + /* The previous multibyte sequence produced an additional 32-bit + wide character. */ + bytes = 0; mbc->wc_valid = true; break; } diff --git a/lib/mbiter.h b/lib/mbiter.h index 93bad990a1..fadefe104b 100644 --- a/lib/mbiter.h +++ b/lib/mbiter.h @@ -163,6 +163,10 @@ mbiter_multi_next (struct mbiter_multi *iter) assert (*iter->cur.ptr == '\0'); assert (iter->cur.wc == 0); } + else if (iter->cur.bytes == (size_t) -3) + /* The previous multibyte sequence produced an additional 32-bit + wide character. */ + iter->cur.bytes = 0; iter->cur.wc_valid = true; /* When in the initial state, we can go back treating ASCII diff --git a/lib/mbuiter.h b/lib/mbuiter.h index 02e3190f1c..954e11f635 100644 --- a/lib/mbuiter.h +++ b/lib/mbuiter.h @@ -172,6 +172,10 @@ mbuiter_multi_next (struct mbuiter_multi *iter) assert (*iter->cur.ptr == '\0'); assert (iter->cur.wc == 0); } + else if (iter->cur.bytes == (size_t) -3) + /* The previous multibyte sequence produced an additional 32-bit + wide character. */ + iter->cur.bytes = 0; iter->cur.wc_valid = true; /* When in the initial state, we can go back treating ASCII