public inbox for cygwin-cvs@sourceware.org help / color / mirror / Atom feed
From: Corinna Vinschen <corinna@sourceware.org> To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin/main] Cygwin: regex: convert wchar_t to wint_t throughout Date: Thu, 16 Mar 2023 12:54:56 +0000 (GMT) [thread overview] Message-ID: <20230316125456.548AA385840E@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=585e7f9891d68cf14a5fdce70e1f1c613c98bb94 commit 585e7f9891d68cf14a5fdce70e1f1c613c98bb94 Author: Corinna Vinschen <corinna@vinschen.de> AuthorDate: Thu Mar 16 11:52:21 2023 +0100 Commit: Corinna Vinschen <corinna@vinschen.de> CommitDate: Thu Mar 16 13:45:37 2023 +0100 Cygwin: regex: convert wchar_t to wint_t throughout ...and use __wcollate_range_cmp. This will have to be tweaked further when supporting collation symbols... Signed-off-by: Corinna Vinschen <corinna@vinschen.de> 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 = mbrtowc(NULL, ret - mbc, mbc, &mbs); + clen = mbrtowi(NULL, ret - mbc, mbc, &mbs); if (clen != (size_t)-1 && clen != (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 <wchar.h> #include <wctype.h> -#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 @@ -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) } 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]; s1[0] = c1; s1[1] = L'\0'; @@ -1272,7 +1278,7 @@ p_b_coll_elem(struct parse *p, const char *sp = p->next; struct cname *cp; mbstate_t mbs; - wchar_t wc; + wint_t wc; size_t clen, len; while (MORE() && !SEETWO(endc, ']')) @@ -1286,7 +1292,7 @@ p_b_coll_elem(struct parse *p, if (strncmp(cp->name, sp, len) == 0 && strlen(cp->name) == len) return(cp->code); /* known name */ memset(&mbs, 0, sizeof(mbs)); - if ((clen = mbrtowc(&wc, sp, len, &mbs)) == len) + if ((clen = mbrtowi(&wc, sp, len, &mbs)) == len) return (wc); /* single character */ else if (clen == (size_t)-1 || clen == (size_t)-2) SETERROR(REG_ILLSEQ); @@ -1378,7 +1384,7 @@ bothcases(struct parse *p, wint_t ch) assert(othercase(ch) != ch); /* p_bracket() would recurse */ p->next = bracket; memset(&mbs, 0, sizeof(mbs)); - n = wcrtomb(bracket, ch, &mbs); + n = wirtomb(bracket, ch, &mbs); assert(n != (size_t)-1); bracket[n] = ']'; bracket[n + 1] = '\0'; @@ -1519,11 +1525,11 @@ static wint_t wgetnext(struct parse *p) { mbstate_t mbs; - wchar_t wc; + wint_t wc; size_t n; memset(&mbs, 0, sizeof(mbs)); - n = mbrtowc(&wc, p->next, p->end - p->next, &mbs); + n = mbrtowi(&wc, p->next, p->end - p->next, &mbs); if (n == (size_t)-1 || n == (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 = scan - 1; } - clen = wcrtomb(buf, OPND(s), &mbs); + clen = wirtomb(buf, OPND(s), &mbs); if (clen == (size_t)-1) goto toohard; newlen += clen; @@ -1994,7 +2000,7 @@ findmust(struct parse *p, struct re_guts *g) while (cp < g->must + g->mlen) { while (OP(s = *scan++) != OCHAR) continue; - clen = wcrtomb(cp, OPND(s), &mbs); + clen = wirtomb(cp, OPND(s), &mbs); assert(clen != (size_t)-1); cp += 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; - nr = mbrtowc(&wc, s, n, mbs); + nr = mbrtowi(&wc, s, n, mbs); if (wi != NULL) *wi = wc; if (nr == 0)
reply other threads:[~2023-03-16 12:54 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230316125456.548AA385840E@sourceware.org \ --to=corinna@sourceware.org \ --cc=cygwin-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).