From patchwork Sat Jun 6 08:40:11 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Thomas Wolff X-Patchwork-Id: 136620 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AB4D84C31851 for ; Sat, 6 Jun 2026 08:40:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AB4D84C31851 Authentication-Results: sourceware.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=towo.net header.i=towo@towo.net header.a=rsa-sha256 header.s=s1-ionos header.b=bSXwTi6L X-Original-To: newlib@sourceware.org Delivered-To: newlib@sourceware.org Received: from mout.kundenserver.de (mout.kundenserver.de [217.72.192.74]) by sourceware.org (Postfix) with ESMTPS id ECAFE4BA23C8 for ; Sat, 6 Jun 2026 08:40:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org ECAFE4BA23C8 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=towo.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=towo.net ARC-Filter: OpenARC Filter v1.0.0 sourceware.org ECAFE4BA23C8 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=217.72.192.74 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780735212; cv=none; b=uHxlO8WrnAjmwSXr8DoHFSDkrjEN8mPVi0HOsMkNuRHleT2JU++8CTeFInIqhGpxYM81/rfXAy3Pf2h/QG5ACD7K+sgB18rRSuASvy9Np2gXblzhfpG6ceAU1gOpMKYsBLjx8gLLtS1ajnH+w2UMujOJ0EB+SBXdBElGdO9r6V4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780735212; c=relaxed/simple; bh=mYFrsh6fL/oPwZueOroadGJMeR2ZY+ATo3uTAUiguqs=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=MbbJsBsdWd/4dzaJCWesl5yGn1BOoDfvUdZN0HanEELY6kRUI3MKJgHeVKGmGF35Rxj485Uzn9YaNVcHT0riAb0rtL5dPptnqNpW2aV0AaVNrz+TInp4aYDQXAN58ju15v/dnmVVwq0IBr7FBgQkZUQ4R0ALZnSY1dbP5nSZd1E= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=towo.net header.i=towo@towo.net header.a=rsa-sha256 header.s=s1-ionos header.b=bSXwTi6L DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org ECAFE4BA23C8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=towo.net; s=s1-ionos; t=1780735210; x=1781340010; i=towo@towo.net; bh=a+wwBXV2HWTA8VUM/5H9/tmBV6S9VKcrwaHKcGNf7yo=; h=X-UI-Sender-Class:Content-Type:Message-ID:Date:MIME-Version: Subject:To:Cc:References:From:In-Reply-To:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=bSXwTi6Ljochd4lsVYozVc9DspTaRGxAUFOf4dpoOY7vCeIF3BFUBarQY6oGWTGX YIYawRF0rjHfAfYTpK2IkXifpBP0DHOrKlwFu6eZ+bemqRSGGlhUib0Q+H1qfp7te b2YRAdtYsUWSIGURFcw42aeK2QXOCq2Sh/uuSO/fQELWtqYQHVmnJdJKQ2vxft3FH Z3SWyROLfNP1qBFlZVIaBcxxY7Mt1xFnNUpnm5X7+9D/YwDwe9lJfk6RQLnUS1tcv /aHglfFhLneIUFj75OZtLizZPmccvypYrMpD1R8jv938hnZYKw9ZPTb9hIcGAmpf0 BVJyOq2N0P3xmKt/EQ== X-UI-Sender-Class: 55c96926-9e95-11ee-ae09-1f7a4046a0f6 Received: from client.hidden.invalid by mrelayeu.kundenserver.de (mreue109 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MTRIg-1whplm20Me-00J3BW; Sat, 06 Jun 2026 10:40:10 +0200 Message-ID: Date: Sat, 6 Jun 2026 10:40:11 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH] wcwidth: adjust manpage input (Re: [PATCH] fix wcwidth to work with gcc 16 sign extension) To: Jeff Johnston Cc: newlib@sourceware.org References: <93dc6225-0cd9-4ce0-b042-3ab88249fb7f@towo.net> <91e5dcbd-0675-4aab-9697-32d71d6d0db2@SystematicSW.ab.ca> <3e90a627-569a-4849-9bf8-424493380308@towo.net> <20260531205733.1b25941ba52273f854c9f8d6@nifty.ne.jp> <49097df7-bf9a-4710-8e5a-74765d839791@towo.net> From: Thomas Wolff Autocrypt: addr=towo@towo.net; keydata= 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 kQ== In-Reply-To: X-Provags-ID: V03:K1:3nE2oFPw0cTSkehlTUextblBnD+kfPY4t5b56XpRu0FRe1Uvhoc ft1XPRiEVICnM/fYvHvdaEhL31OKD3QjGyY2ASx7W0RYID2k7QQCfXRVOYEDERf/3zHW3ry iVqwmBiN/MYWU+bqepIChdgBT9FRqjbzq8QMj1odRmP0d8Jko08eLivuRlAWozvWiZuTAKC s9+ZBVxCfgpEZSRPOpceA== UI-OutboundReport: notjunk:1;M01:P0:G4BORHljTXg=;WUY2+0cLp9kfSb8LBGeLaEggeiJ 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 X-Spam-Status: No, score=-7.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, HTML_MESSAGE, KAM_SHORT, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLOCKED shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: newlib-bounces~patchwork=sourceware.org@sourceware.org amending my code patch... sorry I didn't include this right away Am 04.06.2026 um 17:33 schrieb Jeff Johnston: > Patch applied.  Thanks. > > -- Jeff J. > > On Tue, Jun 2, 2026 at 8:43 PM Thomas Wolff wrote: > > As discussed in the cygwin thread, I withdraw my previous patch and > provide the attached one to fix wcwidth for gcc 16. > Thomas > > Am 01.06.2026 um 18:02 schrieb Thomas Wolff: > > > > Am 31.05.2026 um 13:57 schrieb Takashi Yano: > >> 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. > > I don't there is a "correct" approach as POSIX probably did not > > consider this problem. > > But I just responded to a cute idea on the cygwin mailing list, > which > > was unfeasible but I modified it with a proposal to return width > 1 for > > a high surrogate, remember it, and then return 1 or 0 for the low > > surrogate, respectively. > From b082f9a3108b5c7628a359aa7a636960457e3366 Mon Sep 17 00:00:00 2001 From: Thomas Wolff Date: Sat, 6 Jun 2026 00:00:00 +0000 Subject: [PATCH] wcwidth: adjust manpage source to parameter width patch --- newlib/libc/string/wcwidth.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/newlib/libc/string/wcwidth.c b/newlib/libc/string/wcwidth.c index dfcaa6c21..93cc3e829 100644 --- a/newlib/libc/string/wcwidth.c +++ b/newlib/libc/string/wcwidth.c @@ -7,15 +7,17 @@ INDEX SYNOPSIS #include - int wcwidth(const wint_t <[wc]>); + int wcwidth(const wchar_t <[wc]>); DESCRIPTION The <> function shall determine the number of column positions required for the wide character <[wc]>. The application shall ensure that the value of <[wc]> is a character representable - as a wint_t (combining Unicode surrogate pairs into single 21-bit - Unicode code points), and is a wide-character code corresponding to a + as a wchar_t, and is a wide-character code corresponding to a valid character in the current locale. + Note that for a Unicode character outside the 16-bit range, + the application must split it into Unicode surrogates + and use the <> function instead. RETURNS The <> function shall either return 0 (if <[wc]> is a null @@ -23,6 +25,30 @@ RETURNS be occupied by the wide-character code <[wc]>, or return -1 (if <[wc]> does not correspond to a printable wide-character code). +EXAMPLE + An application function to determine the width of a 21-bit + Unicode character may look like this: + + typedef unsigned int uchar_t; + // determine high and low surrogates of Unicode character + wchar_t hisurr(uchar_t xc) + { + return 0xD800 | (((xc - 0x10000) >> 10) & 0x3FF); + } + wchar_t losurr(uchar_t xc) + { + return 0xDC00 | (xc & 0x3FF); + } + + // determine width of 21-bit Unicode character + int ucwidth(uchar_t uc) + { + if (uc < 0x10000) + return wcwidth(uc); + else + return wcswidth((wchar_t[]){hisurr(uc), losurr(uc)}, 2); + } + PORTABILITY <> has been introduced in the Single UNIX Specification Volume 2. <> has been marked as an extension in the Single UNIX Specification Volume 3. @@ -165,6 +191,8 @@ bisearch(wint_t ucs, const struct interval *table, int max) int __wcwidth (const wint_t ucs) +// unlike wcwidth, the parameter type of __wcwidth must be 32 bits wide +// in order to support wcswidth { #ifdef _MB_CAPABLE /* sorted list of non-overlapping intervals of East Asian Ambiguous chars */