Date: Fri, 12 Aug 2011 14:07:18 +0000 (UTC) From: Gabor Kovesdan <gabor@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r224795 - in user/gabor/tre-integration: contrib/tre/lib include Message-ID: <201108121407.p7CE7IDE065602@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: gabor Date: Fri Aug 12 14:07:18 2011 New Revision: 224795 URL: http://svn.freebsd.org/changeset/base/224795 Log: - Use malloc() instead of alloca() - Introduce REG_GNU for GNU extensions - Only process GNU-specific word-boundary notation if REG_GNU is specified - Fix a compilation error Modified: user/gabor/tre-integration/contrib/tre/lib/fastmatch.c user/gabor/tre-integration/contrib/tre/lib/tre.h user/gabor/tre-integration/include/regex.h Modified: user/gabor/tre-integration/contrib/tre/lib/fastmatch.c ============================================================================== --- user/gabor/tre-integration/contrib/tre/lib/fastmatch.c Fri Aug 12 11:43:56 2011 (r224794) +++ user/gabor/tre-integration/contrib/tre/lib/fastmatch.c Fri Aug 12 14:07:18 2011 (r224795) @@ -259,10 +259,13 @@ static int fastcmp(const void *, const v { \ if (fg->icase) \ { \ - wp = alloca(plen * sizeof(tre_char_t)); \ + wp = xmalloc(plen * sizeof(tre_char_t)); \ + if (wp == NULL) \ + return REG_ESPACE; \ for (int i = 0; i < plen; i++) \ wp[i] = towlower(pat[i]); \ _CALC_BMGS(arr, wp, plen); \ + free(wp); \ } \ else \ _CALC_BMGS(arr, pat, plen); \ @@ -271,10 +274,13 @@ static int fastcmp(const void *, const v { \ if (fg->icase) \ { \ - p = alloca(plen); \ + p = xmalloc(plen); \ + if (p == NULL) \ + return REG_ESPACE; \ for (int i = 0; i < plen; i++) \ p[i] = tolower(pat[i]); \ _CALC_BMGS(arr, p, plen); \ + free(p); \ } \ else \ _CALC_BMGS(arr, pat, plen); \ @@ -393,7 +399,8 @@ tre_fastcomp(fastmatch_t *fg, const tre_ pat++; } - if ((n >= 14) && + /* Handle word-boundary matching when GNU extensions are enabled */ + if ((cflags & REG_GNU) && (n >= 14) && (memcmp(pat, TRE_CHAR("[[:<:]]"), 7 * sizeof(tre_char_t)) == 0) && (memcmp(pat + n - 7, TRE_CHAR("[[:>:]]"), 7 * sizeof(tre_char_t)) == 0)) @@ -439,6 +446,10 @@ tre_fastcomp(fastmatch_t *fg, const tre_ return REG_OK; } +/* + * Executes matching of the precompiled pattern on the input string. + * Returns REG_OK or REG_NOMATCH depending on if we find a match or not. + */ int tre_fastexec(const fastmatch_t *fg, const void *data, size_t len, tre_str_type_t type, int nmatch, regmatch_t pmatch[]) @@ -480,7 +491,7 @@ tre_fastexec(const fastmatch_t *fg, cons { /* Simple text comparison. */ if (!((fg->bol && fg->eol) && - (type == STR_WIDE ? (wlen != fg->wlen) : (len != fg->len)))) + (type == STR_WIDE ? (len != fg->wlen) : (len != fg->len)))) { /* Determine where in data to start search at. */ j = fg->eol ? len - (type == STR_WIDE ? fg->wlen : fg->len) : 0; Modified: user/gabor/tre-integration/contrib/tre/lib/tre.h ============================================================================== --- user/gabor/tre-integration/contrib/tre/lib/tre.h Fri Aug 12 11:43:56 2011 (r224794) +++ user/gabor/tre-integration/contrib/tre/lib/tre.h Fri Aug 12 14:07:18 2011 (r224795) @@ -89,6 +89,7 @@ typedef enum { #define REG_RIGHT_ASSOC (REG_LITERAL << 1) #define REG_UNGREEDY (REG_RIGHT_ASSOC << 1) #define REG_PEND (REG_UNGREEDY << 1) +#define REG_GNU (REG_PEND << 1) /* POSIX tre_regexec() flags. */ #define REG_NOTBOL 1 Modified: user/gabor/tre-integration/include/regex.h ============================================================================== --- user/gabor/tre-integration/include/regex.h Fri Aug 12 11:43:56 2011 (r224794) +++ user/gabor/tre-integration/include/regex.h Fri Aug 12 14:07:18 2011 (r224795) @@ -81,6 +81,7 @@ typedef enum { #define REG_RIGHT_ASSOC (REG_LITERAL << 1) #define REG_UNGREEDY (REG_RIGHT_ASSOC << 1) #define REG_PEND (REG_UNGREEDY << 1) +#define REG_GNU (REG_PEND << 1) /* POSIX tre_regexec() flags. */ #define REG_NOTBOL 1
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201108121407.p7CE7IDE065602>