From 2dfd7cc0f336098fd96e1e7b010270fe91ac4e95 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Fri, 30 Jun 2023 22:48:12 +0200 Subject: [PATCH] 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. --- ChangeLog | 8 ++++++++ lib/mbfile.h | 4 ++++ lib/mbiter.h | 4 ++++ lib/mbuiter.h | 4 ++++ 4 files changed, 20 insertions(+) diff --git a/ChangeLog b/ChangeLog index 5c2ea3039c..ead993b18d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2023-06-30 Bruno Haible + + 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 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 -- 2.39.5