I wrote: > In mbrtoc32: > > Return value Consumed bytes > ------------ -------------- > small n > 0 n > 0 1 > (size_t)(-3) 0 > > The patch below thus fixes the uses of mbrtoc32.
More of the same kind: 2023-07-02 Bruno Haible <br...@clisp.org> 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 <br...@clisp.org> mbsnrtoc32s: Accommodate a difference between mbrtowc and mbrtoc32. * lib/mbsnrtoc32s.c (USES_C32): New macro. * lib/mbsnrtowcs.c (USES_C32): New macro. * lib/mbsnrtowcs-impl.h (FUNC): If USES_C32 and mbrtoc32 returned (size_t)(-3), don't increment the pointer.
>From 4c6f62c8240db9534250a1eee2e498ecfc3b7b3d Mon Sep 17 00:00:00 2001 From: Bruno Haible <br...@clisp.org> Date: Sun, 2 Jul 2023 16:45:44 +0200 Subject: [PATCH 1/2] mbsnrtoc32s: Accommodate a difference between mbrtowc and mbrtoc32. * lib/mbsnrtoc32s.c (USES_C32): New macro. * lib/mbsnrtowcs.c (USES_C32): New macro. * lib/mbsnrtowcs-impl.h (FUNC): If USES_C32 and mbrtoc32 returned (size_t)(-3), don't increment the pointer. --- ChangeLog | 8 ++++++++ lib/mbsnrtoc32s.c | 1 + lib/mbsnrtowcs-impl.h | 7 +++++-- lib/mbsnrtowcs.c | 1 + 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 187a1abbda..3e29fc1dd1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2023-07-02 Bruno Haible <br...@clisp.org> + + mbsnrtoc32s: Accommodate a difference between mbrtowc and mbrtoc32. + * lib/mbsnrtoc32s.c (USES_C32): New macro. + * lib/mbsnrtowcs.c (USES_C32): New macro. + * lib/mbsnrtowcs-impl.h (FUNC): If USES_C32 and mbrtoc32 returned + (size_t)(-3), don't increment the pointer. + 2023-07-02 Bruno Haible <br...@clisp.org> mbmemcasecoll: Overcome wchar_t limitations. diff --git a/lib/mbsnrtoc32s.c b/lib/mbsnrtoc32s.c index 5baa08fd4e..788eadd99e 100644 --- a/lib/mbsnrtoc32s.c +++ b/lib/mbsnrtoc32s.c @@ -47,6 +47,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 "mbsnrtowcs-impl.h" #else diff --git a/lib/mbsnrtowcs-impl.h b/lib/mbsnrtowcs-impl.h index 7d94e24eb6..78f95a1467 100644 --- a/lib/mbsnrtowcs-impl.h +++ b/lib/mbsnrtowcs-impl.h @@ -61,8 +61,11 @@ FUNC (DCHAR_T *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps /* Here mbsinit (ps). */ break; } - src += ret; - srclen -= ret; + if (!(USES_C32 && ret == (size_t)(-3))) + { + src += ret; + srclen -= ret; + } } *srcp = src; diff --git a/lib/mbsnrtowcs.c b/lib/mbsnrtowcs.c index b5d311d292..5aa3f40ecb 100644 --- a/lib/mbsnrtowcs.c +++ b/lib/mbsnrtowcs.c @@ -34,4 +34,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 "mbsnrtowcs-impl.h" -- 2.34.1
>From 2864937890788e072e17b6a49de2cdc67551c780 Mon Sep 17 00:00:00 2001 From: Bruno Haible <br...@clisp.org> Date: Sun, 2 Jul 2023 16:46:11 +0200 Subject: [PATCH 2/2] 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. --- ChangeLog | 8 ++++++++ lib/mbsrtoc32s.c | 1 + lib/mbsrtowcs-impl.h | 3 ++- lib/mbsrtowcs.c | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 3e29fc1dd1..7cd5aac216 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2023-07-02 Bruno Haible <br...@clisp.org> + + 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 <br...@clisp.org> 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" -- 2.34.1