bin/153257: [libc] [patch] regex(3): Add support for \< and \> word delimiters
Pedro Giffuni
pfg at freebsd.org
Sat May 3 19:30:02 UTC 2014
The following reply was made to PR bin/153257; it has been noted by GNATS.
From: Pedro Giffuni <pfg at freebsd.org>
To: "bug-followup at FreeBSD.org" <bug-followup at FreeBSD.org>
Cc:
Subject: Re: bin/153257: [libc] [patch] regex(3): Add support for \< and \>
word delimiters
Date: Sat, 03 May 2014 14:28:16 -0500
This is a multi-part message in MIME format.
--------------000307060206030505090808
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Updated patch to include documentation changes.
--------------000307060206030505090808
Content-Type: text/plain; charset=us-ascii;
name="patch-regex-svr4.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="patch-regex-svr4.txt"
Index: lib/libc/regex/re_format.7
===================================================================
--- lib/libc/regex/re_format.7 (revision 265253)
+++ lib/libc/regex/re_format.7 (working copy)
@@ -314,6 +314,13 @@
.St -p1003.2 ,
and should be used with
caution in software intended to be portable to other systems.
+The additional word delimiters
+.Ql \e<
+and
+.Ql \e>
+are provided to ease compatibility with traditional
+.Xr svr4 4
+systems but are not portable and should be avoided.
.Pp
In the event that an RE could match more than one substring of a given
string,
Index: lib/libc/regex/regcomp.c
===================================================================
--- lib/libc/regex/regcomp.c (revision 265253)
+++ lib/libc/regex/regcomp.c (working copy)
@@ -412,7 +412,17 @@
case '\\':
(void)REQUIRE(MORE(), REG_EESCAPE);
wc = WGETNEXT();
- ordinary(p, wc);
+ switch (wc) {
+ case '<':
+ EMIT(OBOW, 0);
+ break;
+ case '>':
+ EMIT(OEOW, 0);
+ break;
+ default:
+ ordinary(p, wc);
+ break;
+ }
break;
case '{': /* okay as ordinary except if digit follows */
(void)REQUIRE(!MORE() || !isdigit((uch)PEEK()), REG_BADRPT);
@@ -569,10 +579,15 @@
case '[':
p_bracket(p);
break;
+ case BACKSL|'<':
+ EMIT(OBOW, 0);
+ break;
+ case BACKSL|'>':
+ EMIT(OEOW, 0);
+ break;
case BACKSL|'{':
SETERROR(REG_BADRPT);
- break;
- case BACKSL|'(':
+ break; case BACKSL|'(':
p->g->nsub++;
subno = p->g->nsub;
if (subno < NPAREN)
--------------000307060206030505090808--
More information about the freebsd-bugs
mailing list