Re: [PATCH] wchar.h: tweak wcwidth prototype parameter wchar_t -> wint_t
Takashi Yano <[email protected]> Sun, 31 May 2026 20:57:33 +0900
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <[email protected]> |
Hi Thomas, On Sun, 31 May 2026 10:06:12 +0200 Thomas Wolff wrote: > Hi Brian, > > Am 31.05.2026 um 05:50 schrieb Brian Inglis via Cygwin: > > On 2026-05-28 22:58, Thomas Wolff wrote: > >> to make it compliant with newlib and the manual page; > >> fixes cases of wrong width calculation: > >> https://cygwin.com/pipermail/cygwin/2026-April/259597.html > >> as mentioned in > >> https://cygwin.com/pipermail/cygwin/2026-May/259734.html > >> as described in > >> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125451#c14 > > > attachment: > > 0001-wchar.h-tweak-wcwidth-prototype-parameter-wchar_t-wi.patch > > > > The existing wcwidth declaration in newlib/libc/include/wchar.h agrees > > with > > POSIX 8 SUS V5. > > > > It is the man doc, definition, and implementation in > > newlib/libc/string/wcwidth.c which need changed to match the > > specification and return codes in: > > > > https://pubs.opengroup.org/onlinepubs/9799919799/functions/wcwidth.html > Your argument overlooks one significant deviation: in POSIX, wchar_t has > 32 bits, in cygwin only 16. > So to make wcwidth work for *all* Unicode character code points, the 32 > bit version must be used. > I tested positively that this fixes the broken test case with gcc 16 I > had reported to the cygwin list. However, newlib is not used only by Cygwin, so I think newlib itself should follow POSIX. Shouldn't we have our own wcwidth() implementation for Cygwin? On second thought, since a 16‑bit wchar_t needs to be converted to a 32‑bit Unicode code point especially for surrogate pair, we cannot use wcwidth in the same way as Linux does. I wonder what the correct approach would be. -- Takashi Yano <[email protected]>