Date: Tue, 23 Aug 2011 00:12:24 +0000 (UTC) From: Gabor Kovesdan <gabor@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r225098 - user/gabor/tre-integration/contrib/tre/lib Message-ID: <201108230012.p7N0COaY076422@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: gabor Date: Tue Aug 23 00:12:24 2011 New Revision: 225098 URL: http://svn.freebsd.org/changeset/base/225098 Log: - [] brackets are parsed differently than other brackets because [ and ] are interpreted differently in some special cases Modified: user/gabor/tre-integration/contrib/tre/lib/tre-heuristic.c Modified: user/gabor/tre-integration/contrib/tre/lib/tre-heuristic.c ============================================================================== --- user/gabor/tre-integration/contrib/tre/lib/tre-heuristic.c Mon Aug 22 23:54:12 2011 (r225097) +++ user/gabor/tre-integration/contrib/tre/lib/tre-heuristic.c Tue Aug 23 00:12:24 2011 (r225098) @@ -39,6 +39,13 @@ #include "tre-internal.h" #include "xmalloc.h" +#ifdef TRE_WCHAR +#define tre_strnstr(big, s1, little, s2) \ + memmem(big, s1 * sizeof(tre_char_t), little, s2 * sizeof(tre_char_t)) +#else +#define tre_strnstr(big, s1, little, s2) strnstr(big, little, s1) +#endif + /* * A full regex implementation requires a finite state automaton * and using an automaton is always about a trade-off. A DFA is @@ -75,6 +82,40 @@ } \ } +#define PARSE_BRACKETS \ + { \ + tre_char_t *tmp; \ + \ + i++; \ + if (regex[i] == TRE_CHAR('^')) \ + i++; \ + if (regex[i] == TRE_CHAR(']')) \ + i++; \ + \ + do \ + { \ + tmp = tre_strnstr(®ex[i], len - i, TRE_CHAR("[.].]"), 5); \ + if (tmp) \ + { \ + i += (tmp - regex); \ + regex = tmp; \ + } \ + } while (tmp != NULL); \ + \ + do \ + { \ + tmp = tre_strnstr(®ex[i], len - i, TRE_CHAR("[=]=]"), 5); \ + if (tmp) \ + { \ + i += (tmp - regex); \ + regex = tmp; \ + } \ + } while (tmp != NULL); \ + \ + for (; (i != TRE_CHAR(']')) && (i < len); i++); \ + } + + /* * Finishes a segment (fixed-length text fragment). */ @@ -129,7 +170,7 @@ tre_compile_heur(heur_t *h, const tre_ch /* Bracketed expression is substituted with a dot. */ case TRE_CHAR('['): - PARSE_UNIT('[', ']'); + PARSE_BRACKETS; heur[pos++] = TRE_CHAR('.'); continue;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201108230012.p7N0COaY076422>