From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2155) id 548AA385840E; Thu, 16 Mar 2023 12:54:56 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 548AA385840E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678971296; bh=QZiHR5AMAtxy2pIcuHSL4LnYPBlnFuBS8siGEQUuLOg=; h=From:To:Subject:Date:From; b=AtY2ncV0S4iIl2ZBkxft/emuSjDtE/Do4AAngrMGRnsxebs2LiGWESxF333/aN86P r1QIJkMlwk7+zWU8SE5mJ6pjfB3m4UBJ7+Q+gZJu4HviTGJ2kMt6tT7X3r/97kAxN+ xNqmJfxvucIQ/uRhPAYrz3WbI2DZxYPYt/hzpalw= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Corinna Vinschen To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin/main] Cygwin: regex: convert wchar_t to wint_t throughout X-Act-Checkin: newlib-cygwin X-Git-Author: Corinna Vinschen X-Git-Refname: refs/heads/main X-Git-Oldrev: 988c304ec253958759658d0bf5d03a36e6971b94 X-Git-Newrev: 585e7f9891d68cf14a5fdce70e1f1c613c98bb94 Message-Id: <20230316125456.548AA385840E@sourceware.org> Date: Thu, 16 Mar 2023 12:54:56 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3D585e7f9891d= 68cf14a5fdce70e1f1c613c98bb94 commit 585e7f9891d68cf14a5fdce70e1f1c613c98bb94 Author: Corinna Vinschen AuthorDate: Thu Mar 16 11:52:21 2023 +0100 Commit: Corinna Vinschen CommitDate: Thu Mar 16 13:45:37 2023 +0100 Cygwin: regex: convert wchar_t to wint_t throughout =20 ...and use __wcollate_range_cmp. This will have to be tweaked further when supporting collation symbols... =20 Signed-off-by: Corinna Vinschen Diff: --- winsup/cygwin/regex/engine.c | 2 +- winsup/cygwin/regex/regcomp.c | 30 ++++++++++++++++++------------ winsup/cygwin/regex/regexec.c | 4 ++-- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/winsup/cygwin/regex/engine.c b/winsup/cygwin/regex/engine.c index bb40018c07e1..77e7007bb1fa 100644 --- a/winsup/cygwin/regex/engine.c +++ b/winsup/cygwin/regex/engine.c @@ -170,7 +170,7 @@ stepback(const char *start, const char *cur, int nchar) if ((ret - mbc) < start) return (NULL); memset(&mbs, 0, sizeof(mbs)); - clen =3D mbrtowc(NULL, ret - mbc, mbc, &mbs); + clen =3D mbrtowi(NULL, ret - mbc, mbc, &mbs); if (clen !=3D (size_t)-1 && clen !=3D (size_t)-2) break; } diff --git a/winsup/cygwin/regex/regcomp.c b/winsup/cygwin/regex/regcomp.c index 7e9f5a50f21a..3c735931040f 100644 --- a/winsup/cygwin/regex/regcomp.c +++ b/winsup/cygwin/regex/regcomp.c @@ -57,7 +57,13 @@ __FBSDID("$FreeBSD$"); #include #include =20 -#ifndef LIBREGEX +/* We want the extensions implemented with LIBREGEX... */ +#ifdef __CYGWIN__ +#define LIBREGEX +#endif + +/* ...but we also want to use the collation functions from nlsfuncs.cc. */ +#if 1//ndef LIBREGEX #include "collate.h" #endif =20 @@ -131,7 +137,7 @@ static void p_re(struct parse *p, int end1, int end2); static bool p_simp_re(struct parse *p, struct branchc *bc); static int p_count(struct parse *p); static void p_bracket(struct parse *p); -static int p_range_cmp(wchar_t c1, wchar_t c2); +static int p_range_cmp(wint_t c1, wint_t c2); static void p_b_term(struct parse *p, cset *cs); static int p_b_pseudoclass(struct parse *p, char c); static void p_b_cclass(struct parse *p, cset *cs); @@ -1058,13 +1064,13 @@ p_bracket(struct parse *p) } =20 static int -p_range_cmp(wchar_t c1, wchar_t c2) +p_range_cmp(wint_t c1, wint_t c2) { -#ifndef LIBREGEX +#if 1//ndef LIBREGEX return __wcollate_range_cmp(c1, c2); #else /* Copied from libc/collate __wcollate_range_cmp */ - wchar_t s1[2], s2[2]; + wint_t s1[2], s2[2]; =20 s1[0] =3D c1; s1[1] =3D L'\0'; @@ -1272,7 +1278,7 @@ p_b_coll_elem(struct parse *p, const char *sp =3D p->next; struct cname *cp; mbstate_t mbs; - wchar_t wc; + wint_t wc; size_t clen, len; =20 while (MORE() && !SEETWO(endc, ']')) @@ -1286,7 +1292,7 @@ p_b_coll_elem(struct parse *p, if (strncmp(cp->name, sp, len) =3D=3D 0 && strlen(cp->name) =3D=3D len) return(cp->code); /* known name */ memset(&mbs, 0, sizeof(mbs)); - if ((clen =3D mbrtowc(&wc, sp, len, &mbs)) =3D=3D len) + if ((clen =3D mbrtowi(&wc, sp, len, &mbs)) =3D=3D len) return (wc); /* single character */ else if (clen =3D=3D (size_t)-1 || clen =3D=3D (size_t)-2) SETERROR(REG_ILLSEQ); @@ -1378,7 +1384,7 @@ bothcases(struct parse *p, wint_t ch) assert(othercase(ch) !=3D ch); /* p_bracket() would recurse */ p->next =3D bracket; memset(&mbs, 0, sizeof(mbs)); - n =3D wcrtomb(bracket, ch, &mbs); + n =3D wirtomb(bracket, ch, &mbs); assert(n !=3D (size_t)-1); bracket[n] =3D ']'; bracket[n + 1] =3D '\0'; @@ -1519,11 +1525,11 @@ static wint_t wgetnext(struct parse *p) { mbstate_t mbs; - wchar_t wc; + wint_t wc; size_t n; =20 memset(&mbs, 0, sizeof(mbs)); - n =3D mbrtowc(&wc, p->next, p->end - p->next, &mbs); + n =3D mbrtowi(&wc, p->next, p->end - p->next, &mbs); if (n =3D=3D (size_t)-1 || n =3D=3D (size_t)-2) { SETERROR(REG_ILLSEQ); return (0); @@ -1871,7 +1877,7 @@ findmust(struct parse *p, struct re_guts *g) memset(&mbs, 0, sizeof(mbs)); newstart =3D scan - 1; } - clen =3D wcrtomb(buf, OPND(s), &mbs); + clen =3D wirtomb(buf, OPND(s), &mbs); if (clen =3D=3D (size_t)-1) goto toohard; newlen +=3D clen; @@ -1994,7 +2000,7 @@ findmust(struct parse *p, struct re_guts *g) while (cp < g->must + g->mlen) { while (OP(s =3D *scan++) !=3D OCHAR) continue; - clen =3D wcrtomb(cp, OPND(s), &mbs); + clen =3D wirtomb(cp, OPND(s), &mbs); assert(clen !=3D (size_t)-1); cp +=3D clen; } diff --git a/winsup/cygwin/regex/regexec.c b/winsup/cygwin/regex/regexec.c index d7aa46f45b2b..52d365a481c3 100644 --- a/winsup/cygwin/regex/regexec.c +++ b/winsup/cygwin/regex/regexec.c @@ -67,9 +67,9 @@ static __inline size_t xmbrtowc(wint_t *wi, const char *s, size_t n, mbstate_t *mbs, wint_t dummy) { size_t nr; - wchar_t wc; + wint_t wc; =20 - nr =3D mbrtowc(&wc, s, n, mbs); + nr =3D mbrtowi(&wc, s, n, mbs); if (wi !=3D NULL) *wi =3D wc; if (nr =3D=3D 0)