|
| From: | Paul Eggert |
| Subject: | Re: From wchar_t to char32_t |
| Date: | Tue, 4 Jul 2023 19:51:35 -0700 |
| User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 |
On 2023-07-01 07:35, Bruno Haible wrote:
- wchar_t wch;
- size_t nbytes = mbrtowc (&wch, s, n, &d->mbs);
+ char32_t wch;
+ size_t nbytes = mbrtoc32 (&wch, s, n, &d->mbs);
if (0 < nbytes && nbytes < (size_t) -2)
{
*pwc = wch;
+ if (nbytes == (size_t) -3)
+ nbytes = 0;
return nbytes;
That last change doesn't match the comment for the mbs_to_wchar function, which says that the function always returns a positive int. Callers depend on this.
Since nbytes cannot be (size_t) -3 on any known implementation, it's not surprising that this issue wasn't found by testing. And since it'll likely be a hassle to port the rest of the code to purely-theoretical platforms where nbytes == (size_t) -3, I suggest instead simply adding a comment that nbytes cannot be (size_t) -3 there. This would follow the advice I added to the Gnulib manual recently, here:
https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=e046d5458353f112e78893ca03d855c8a9aa2e39
| [Prev in Thread] | Current Thread | [Next in Thread] |