bkabrda / rpms / grep

Forked from rpms/grep 6 years ago
Clone
Blob Blame History Raw
--- grep-2.5.1/src/search.c.dfa-optional	2004-11-05 16:16:45.230641568 +0000
+++ grep-2.5.1/src/search.c	2004-11-05 16:36:19.679817421 +0000
@@ -305,11 +305,19 @@
   int backref, start, len;
   struct kwsmatch kwsm;
   size_t i, ret_val;
+  static int use_dfa;
+  static int use_dfa_checked = 0;
 #ifdef MBS_SUPPORT
   mbstate_t mbs;
   memset (&mbs, '\0', sizeof (mbstate_t));
 #endif /* MBS_SUPPORT */
 
+  if (!use_dfa_checked)
+    {
+      use_dfa = (getenv ("GREP_NO_DFA") == NULL);
+      use_dfa_checked = 1;
+    }
+
   buflim = buf + size;
 
   for (beg = end = buf; end < buflim; beg = end)
@@ -365,7 +373,8 @@
 		--beg;
 	      if (kwsm.index < kwset_exact_matches)
 		goto success_in_beg_and_end;
-	      if (dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1)
+	      if (use_dfa &&
+		  dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1)
 		continue;
 	    }
 	  else
@@ -374,7 +383,9 @@
 #ifdef MBS_SUPPORT
 	      size_t bytes_left = 0;
 #endif /* MBS_SUPPORT */
-	      size_t offset = dfaexec (&dfa, beg, buflim - beg, &backref);
+	      size_t offset = 0;
+	      if (use_dfa)
+		offset = dfaexec (&dfa, beg, buflim - beg, &backref);
 	      if (offset == (size_t) -1)
 		break;
 	      /* Narrow down to the line we've found. */
@@ -450,7 +461,11 @@
 		    if ((start == 0 || !WCHAR ((unsigned char) beg[start - 1]))
 			&& (len == end - beg - 1
 			    || !WCHAR ((unsigned char) beg[start + len])))
-		      goto success_in_start_and_len;
+		      {
+			if (len == 0)
+			  len++;
+			goto success_in_start_and_len;
+		      }
 		    if (len > 0)
 		      {
 			/* Try a shorter length anchored at the same place. */