Date: Sun, 29 Jun 2008 12:36:11 GMT From: Gabor Kovesdan <gabor@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 144267 for review Message-ID: <200806291236.m5TCaBoe035509@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=144267 Change 144267 by gabor@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;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200806291236.m5TCaBoe035509>