/[packages]/cauldron/grep/current/SOURCES/65-dfa-optional.patch
ViewVC logotype

Contents of /cauldron/grep/current/SOURCES/65-dfa-optional.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 153 - (show annotations) (download)
Tue Jan 4 21:05:36 2011 UTC (13 years, 2 months ago) by tmb
File size: 1834 byte(s)
imported package grep
1 --- src/search.c 2008-12-20 20:56:09.000000000 +0100
2 +++ src/search.c.oden 2008-12-20 20:56:21.000000000 +0100
3 @@ -280,6 +280,8 @@ EXECUTE_FCT(EGexecute)
4 char eol = eolbyte;
5 int backref, start, len, best_len;
6 struct kwsmatch kwsm;
7 + static int use_dfa;
8 + static int use_dfa_checked = 0;
9 size_t i, ret_val;
10 #ifdef MBS_SUPPORT
11 int mb_cur_max = MB_CUR_MAX;
12 @@ -287,6 +289,26 @@ EXECUTE_FCT(EGexecute)
13 memset (&mbs, '\0', sizeof (mbstate_t));
14 #endif /* MBS_SUPPORT */
15
16 + if (!use_dfa_checked)
17 + {
18 + char *grep_use_dfa = getenv ("GREP_USE_DFA");
19 + if (!grep_use_dfa)
20 + {
21 +#ifdef MBS_SUPPORT
22 + /* Turn off DFA when processing multibyte input. */
23 + use_dfa = (MB_CUR_MAX == 1);
24 +#else
25 + use_dfa = 1;
26 +#endif /* MBS_SUPPORT */
27 + }
28 + else
29 + {
30 + use_dfa = atoi (grep_use_dfa);
31 + }
32 +
33 + use_dfa_checked = 1;
34 + }
35 +
36 buflim = buf + size;
37
38 for (beg = end = buf; end < buflim; beg = end)
39 @@ -355,7 +377,8 @@ EXECUTE_FCT(EGexecute)
40 #endif /* MBS_SUPPORT */
41 (kwsm.index < kwset_exact_matches))
42 goto success;
43 - if (dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1)
44 + if (use_dfa &&
45 + dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1)
46 continue;
47 }
48 else
49 @@ -364,7 +387,9 @@ EXECUTE_FCT(EGexecute)
50 #ifdef MBS_SUPPORT
51 size_t bytes_left = 0;
52 #endif /* MBS_SUPPORT */
53 - size_t offset = dfaexec (&dfa, beg, buflim - beg, &backref);
54 + size_t offset = 0;
55 + if (use_dfa)
56 + offset = dfaexec (&dfa, beg, buflim - beg, &backref);
57 if (offset == (size_t) -1)
58 break;
59 /* Narrow down to the line we've found. */
60 @@ -406,7 +431,7 @@ EXECUTE_FCT(EGexecute)
61 --beg;
62 }
63 /* Successful, no backreferences encountered! */
64 - if (!backref)
65 + if (use_dfa && !backref)
66 goto success;
67 }
68 else

  ViewVC Help
Powered by ViewVC 1.1.30