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