PERFORCE change 144267 for review
Gabor Kovesdan
gabor at FreeBSD.org
Sun Jun 29 12:36:12 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=144267
Change 144267 by gabor at gabor_server on 2008/06/29 12:35:28
- Drop the GNU compatibility pre-editing workarounds. They don't work
entirely and it is very weird to apply hacks in grep for our regex
library. If we want better compatibility, the problem should be
addressed there. A different behaviour in BSD grep than the behaviour
of the base system regex library is clearly unwanted and I'm getting
very frustrated of dealing with these weird workarounds. When I can
make something compatible, compatibility breaks at another place.
It wouldn't lead to anywhere.
Affected files ...
.. //depot/projects/soc2008/gabor_textproc/grep/Makefile#10 edit
.. //depot/projects/soc2008/gabor_textproc/grep/grep.c#53 edit
Differences ...
==== //depot/projects/soc2008/gabor_textproc/grep/Makefile#10 (text+ko) ====
@@ -31,8 +31,4 @@
CFLAGS+= -DWITHOUT_NLS
.endif
-.if defined(WITHOUT_GNU_COMPAT)
-CFLAGS+= -DWITHOUT_GNU_COMPAT
-.endif
-
.include <bsd.prog.mk>
==== //depot/projects/soc2008/gabor_textproc/grep/grep.c#53 (text+ko) ====
@@ -202,92 +202,6 @@
static void
add_pattern(char *pat, size_t len)
{
-#ifndef WITHOUT_GNU_COMPAT
- char *ptr, *st;
- int lbr, rbr;
-
-/* Workaround for our libc-regex library for better GNU compatibility.
- Our library rejects some non-standard regular expressions, for example
- '|' cannot stand with empty subexpressions. In these cases the
- non-standard regex will be pre-edited,
- e.g. "(|a|b||c|)" will be "(a|b|c)" */
- st = pat;
- while (((ptr = strstr(st, "|)"))) != NULL) {
- if (strstr(st, "\\|)") != (ptr - 1))
- strlcpy(ptr, &(ptr[1]), strlen(ptr));
- st = ptr;
- }
- st = pat;
- while ((ptr = strstr(st, "(|")) != NULL) {
- if ((strstr(st, "(\\|") != ptr) && (strstr(st, "\\(|") != (ptr - 1)))
- strlcpy(&(ptr[1]), &(ptr[2]), strlen(ptr));
- st = ptr + 1;
- }
- st = pat;
- while ((ptr = strstr(st, "||")) != NULL) {
- if (strstr(st, "\\||") != (ptr - 1))
- strlcpy(&(ptr[1]), &(ptr[2]), strlen(ptr));
- st = ptr + 1;
- }
- st = pat;
- while ((ptr = strstr(st, "*?")) != NULL) {
- if (strstr(st, "\\*?") != (ptr - 1))
- strlcpy(&(ptr[1]), &(ptr[2]), strlen(ptr));
- st = ptr + 1;
- }
- st = pat;
- while ((ptr = strstr(st, "?*")) != NULL) {
- if (strstr(st, "\\?*") != (ptr - 1))
- strlcpy(&(ptr[1]), &(ptr[2]), strlen(ptr));
- st = ptr + 1;
- }
- st = pat;
- while ((ptr = strstr(st, "**")) != NULL) {
- if ((strstr(st, "\\**") != (ptr - 1)) && (strstr(st, "\\(**") != (ptr - 2)))
- strlcpy(&(ptr[1]), &(ptr[2]), strlen(ptr));
- st = ptr + 1;
- }
- st = pat;
- while ((ptr = strstr(st, "??")) != NULL) {
- if (strstr(st, "\\??") != (ptr - 1))
- strlcpy(&(ptr[1]), &(ptr[2]), strlen(ptr));
- st = ptr + 1;
- }
- st = pat;
- while ((ptr = strstr(st, "^*")) != NULL) {
- strlcpy(&(ptr[1]), &(ptr[2]), strlen(ptr));
- st = ptr + 1;
- }
- st = pat;
- while ((ptr = strstr(st, "(*")) != NULL) {
- if (strstr(st, "\\(*") != (ptr - 1))
- strlcpy(&(ptr[1]), &(ptr[2]), strlen(ptr));
- st = ptr + 1;
- }
- st = pat;
- if (Eflag) {
- st = pat;
- lbr = 0;
- while ((ptr = strstr(st, "(")) != NULL) {
- if (strstr(st, "\\(") != (ptr - 1))
- lbr++;
- st = ptr + 1;
- }
- st = pat;
- rbr = 0;
- while ((ptr = strstr(st, ")")) != NULL) {
- if (strstr(st, "\\)") != (ptr - 1))
- rbr++;
- st = ptr + 1;
- }
- if (lbr != rbr) {
- errx(2, getstr(8));
- }
- }
- while (pat[0] == '*')
- pat++;
-#endif
-
if (len == 0 || matchall) {
matchall = 1;
return;
More information about the p4-projects
mailing list