X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=dict%2Flookgrep.c;h=23369702f7a18c7cb1ddbe0a7ba13025a6a57463;hb=d07818ca27f4e0efc9683148cb5d9891d34b9495;hp=dc922695e93aca4448eb4162840473497d3a35ed;hpb=462c4c58fa0f21af1ffa7d44d5f2053aec671e08;p=idzebra-moved-to-github.git diff --git a/dict/lookgrep.c b/dict/lookgrep.c index dc92269..2336970 100644 --- a/dict/lookgrep.c +++ b/dict/lookgrep.c @@ -4,7 +4,22 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: lookgrep.c,v $ - * Revision 1.8 1995-10-19 14:57:21 adam + * Revision 1.13 1996-01-08 09:09:30 adam + * Function dfa_parse got 'const' string argument. + * + * Revision 1.12 1995/12/11 09:04:48 adam + * Bug fix: the lookup/scan/lookgrep didn't handle empty dictionary. + * + * Revision 1.11 1995/12/06 14:43:02 adam + * New function: dict_delete. + * + * Revision 1.10 1995/11/16 17:00:44 adam + * Changed stupid log. + * + * Revision 1.9 1995/10/27 13:58:09 adam + * Makes 'Database unavailable' diagnostic. + * + * Revision 1.8 1995/10/19 14:57:21 adam * New feature: grep lookup saves length of longest prefix match. * * Revision 1.7 1995/10/17 18:01:22 adam @@ -353,16 +368,18 @@ static int dict_grep (Dict dict, Dict_ptr ptr, MatchContext *mc, } int dict_lookup_grep (Dict dict, Dict_char *pattern, int range, void *client, + int *max_pos, int (*userfunc)(Dict_char *name, const char *info, void *client)) { MatchWord *Rj; Dict_char prefix[MAX_LENGTH+1]; - char *this_pattern = pattern; + const char *this_pattern = pattern; MatchContext *mc; struct DFA *dfa = dfa_init(); - int i, d, max_pos; + int i, d; + logf (LOG_DEBUG, "dict_lookup_grep '%s' range=%d", pattern, range); i = dfa_parse (dfa, &this_pattern); if (i || *this_pattern) { @@ -375,7 +392,6 @@ int dict_lookup_grep (Dict dict, Dict_char *pattern, int range, void *client, Rj = xcalloc ((MAX_LENGTH+1) * mc->n, sizeof(*Rj)); - max_pos = 0; set_bit (mc, Rj, 0, 0); for (d = 1; d<=mc->range; d++) { @@ -392,9 +408,13 @@ int dict_lookup_grep (Dict dict, Dict_char *pattern, int range, void *client, } } } - i = dict_grep (dict, 1, mc, Rj, 0, client, userfunc, prefix, dfa, - &max_pos); - logf (LOG_DEBUG, "max_pos = %d", max_pos); + *max_pos = 0; + if (dict->head.last > 1) + i = dict_grep (dict, 1, mc, Rj, 0, client, userfunc, prefix, + dfa, max_pos); + else + i = 0; + logf (LOG_DEBUG, "max_pos = %d", *max_pos); dfa_delete (&dfa); xfree (Rj); rm_MatchContext (&mc);