svn commit: r225336 - user/gabor/grep/trunk/regex
Gabor Kovesdan
gabor at FreeBSD.org
Fri Sep 2 16:50:24 UTC 2011
Author: gabor
Date: Fri Sep 2 16:50:24 2011
New Revision: 225336
URL: http://svn.freebsd.org/changeset/base/225336
Log:
- Be more verbose with debug information
- Fix a bug in dot handling
- Do not cast to unsigned char because it can cause a segfault
- Add an include to glue.h for consistency
Modified:
user/gabor/grep/trunk/regex/glue.h
user/gabor/grep/trunk/regex/tre-fastmatch.c
Modified: user/gabor/grep/trunk/regex/glue.h
==============================================================================
--- user/gabor/grep/trunk/regex/glue.h Fri Sep 2 16:46:42 2011 (r225335)
+++ user/gabor/grep/trunk/regex/glue.h Fri Sep 2 16:50:24 2011 (r225336)
@@ -7,6 +7,7 @@
#undef RE_DUP_MAX
#include <regex.h>
#include <stdio.h>
+#include <stdlib.h>
#define TRE_WCHAR 1
#define TRE_MULTIBYTE 1
Modified: user/gabor/grep/trunk/regex/tre-fastmatch.c
==============================================================================
--- user/gabor/grep/trunk/regex/tre-fastmatch.c Fri Sep 2 16:46:42 2011 (r225335)
+++ user/gabor/grep/trunk/regex/tre-fastmatch.c Fri Sep 2 16:50:24 2011 (r225336)
@@ -206,14 +206,14 @@ static int fastcmp(const void *, const v
fg->qsBc[i] = fg->len - fg->hasdot; \
for (int i = fg->hasdot + 1; i < fg->len; i++) \
{ \
- fg->qsBc[(unsigned)fg->pattern[i]] = fg->len - i; \
+ fg->qsBc[fg->pattern[i]] = fg->len - i; \
DPRINT(("BC shift for char %c is %d\n", fg->pattern[i], \
fg->len - i)); \
if (fg->icase) \
{ \
char c = islower(fg->pattern[i]) ? toupper(fg->pattern[i]) \
: tolower(fg->pattern[i]); \
- fg->qsBc[(unsigned)c] = fg->len - i; \
+ fg->qsBc[c] = fg->len - i; \
DPRINT(("BC shift for char %c is %d\n", c, fg->len - i)); \
} \
}
@@ -397,12 +397,16 @@ static int fastcmp(const void *, const v
fg->matchall = true; \
fg->pattern = ""; \
fg->wpattern = TRE_CHAR(""); \
+ DPRINT(("Matching every input\n")); \
return REG_OK; \
} \
\
/* Cannot handle REG_ICASE with MB string */ \
if (fg->icase && (TRE_MB_CUR_MAX > 1)) \
- return REG_BADPAT; \
+ { \
+ DPRINT(("Cannot use fast matcher for MBS with REG_ICASE\n")); \
+ return REG_BADPAT; \
+ }
/*
* Returns: REG_OK on success, error code otherwise
@@ -424,8 +428,8 @@ tre_compile_literal(fastmatch_t *fg, con
SAVE_PATTERN(pat, n, fg->pattern, fg->len);
#endif
- DPRINT(("tre_compile_literal: pattern: %s, icase: %c, word: %c, "
- "newline %c\n", fg->pattern, fg->icase ? 'y' : 'n',
+ DPRINT(("tre_compile_literal: pattern: %s, len %u, icase: %c, word: %c, "
+ "newline %c\n", fg->pattern, fg->len, fg->icase ? 'y' : 'n',
fg->word ? 'y' : 'n', fg->newline ? 'y' : 'n'));
FILL_QSBC;
@@ -496,7 +500,7 @@ tre_compile_fast(fastmatch_t *fg, const
switch (pat[i])
{
case TRE_CHAR('.'):
- fg->hasdot = true;
+ fg->hasdot = i;
STORE_CHAR;
break;
case TRE_CHAR('$'):
@@ -606,8 +610,8 @@ badpat:
xfree(tmp);
- DPRINT(("tre_compile_fast: pattern: %s, bol %c, eol %c, "
- "icase: %c, word: %c, newline %c\n", fg->pattern,
+ DPRINT(("tre_compile_fast: pattern: %s, len %u, bol %c, eol %c, "
+ "icase: %c, word: %c, newline %c\n", fg->pattern, fg->len,
fg->bol ? 'y' : 'n', fg->eol ? 'y' : 'n',
fg->icase ? 'y' : 'n', fg->word ? 'y' : 'n',
fg->newline ? 'y' : 'n'));
More information about the svn-src-user
mailing list