X-Git-Url: http://www.sigaev.ru/git/gitweb.cgi?a=blobdiff_plain;f=sfxstr.c;h=3eb12c4c2c0de669db51f65de0c4acc287ff06bb;hb=49bc5b6975587c1c8f31e3bff5d420b00552af7e;hp=50cbab4ce95ec11edb83d4a521ec1619d5c1776a;hpb=e03ac24a619a4da8bc8cf291c16a9956adb2cd9f;p=tedtools.git diff --git a/sfxstr.c b/sfxstr.c index 50cbab4..3eb12c4 100644 --- a/sfxstr.c +++ b/sfxstr.c @@ -149,20 +149,28 @@ SFSFindData(SFSTree *info, char *word, int len) { in.key = word; in.keylen = len; - return SFSFindDataOrSave(info, &in, NULL); + return SFSFindDataFromSavedOrSave(info, &in, NULL); } void* SFSFindDataOrSave(SFSTree *info, SFSDataIO *in, SFSTreePosition *position) { + if ( position ) + memset(position, 0, sizeof(position)); + + return SFSFindDataFromSavedOrSave(info, in, position); +} + +void* +SFSFindDataFromSavedOrSave(SFSTree *info, SFSDataIO *in, SFSTreePosition *position) { SFSNode *node = info->node; SFSNode **pnode = &(info->node); SFSNodeData *StopLow, *StopHigh, *StopMiddle; u_int8_t *ptr =(u_int8_t*)in->key; - if ( position ) { - position->nodeptr = NULL; - position->node = NULL; - position->level = 0; + if ( position && position->nodeptr && position->node && in->keylen > position->level ) { + node = position->node; + pnode = position->nodeptr; + ptr += position->level; } while( node && !ISEND(ptr, in->key, in->keylen) ) {