7 static DFA
build_dfa (char *pattern
, int len
)
10 char *tmp
= malloc(len
);
11 DFA dfa
= malloc(len
* sizeof(*dfa
));
18 memcpy (tmp
, pattern
, len
);
22 for (b
=0; b
<256; b
++) {
24 if (memchr(pattern
, b
, len
)) {
27 if (!memcmp(tmp
+j
-k
, pattern
, k
))
36 Search
*build_search(char *pattern
, int len
)
38 Search
*ret
= malloc(sizeof(Search
));
39 char *revpat
= malloc(len
);
43 ret
->forward
= build_dfa(pattern
, len
);
44 for (i
= 0; i
< len
; i
++)
45 revpat
[i
] = pattern
[len
-1-i
];
46 ret
->reverse
= build_dfa(revpat
, len
);
51 void free_search(Search
*s
)