void parse_MetaNames_from_buffer(INDEXDATAHEADER *header, char *buffer) { int len; int num_metanames; int metaType, i, alias, sort_len, bias, metaID; char *word; unsigned char *s = (unsigned char *)buffer; struct metaEntry *m; /* First clear out the default metanames */ freeMetaEntries( header ); num_metanames = uncompress2(&s); for (i = 0; i < num_metanames; i++) { len = uncompress2(&s); word = emalloc(len +1); memcpy(word,s,len); s += len; word[len] = '\0'; /* Read metaID */ metaID = uncompress2(&s); /* metaType was saved as metaType+1 */ metaType = uncompress2(&s); alias = uncompress2(&s) - 1; sort_len = uncompress2(&s); bias = uncompress2(&s) - RANK_BIAS_RANGE - 1; /* add the meta tag */ if ( !(m = addNewMetaEntry(header, word, metaType, metaID))) progerr("failed to add new meta entry '%s:%d'", word, metaID ); m->alias = alias; m->rank_bias = bias; m->sort_len = sort_len; efree(word); } }
static IndexFILE *free_index( IndexFILE *indexf ) { IndexFILE *next = indexf->next; SWISH *sw = indexf->sw; int i; /* Close any pending DB */ if ( indexf->DB ) DB_Close(sw, indexf->DB); /* free the meteEntry array */ if ( indexf->header.metaCounter) freeMetaEntries(&indexf->header); /* free the in-use cached meta list */ if ( indexf->meta_list ) efree(indexf->meta_list); /* free the in-use cached property list */ if ( indexf->prop_list ) efree(indexf->prop_list); /* free data loaded into header */ free_header(&indexf->header); /* free array of words for each letter (-k) $$$ eight bit */ for (i = 0; i < 256; i++) if ( indexf->keywords[i]) efree(indexf->keywords[i]); /* free the name of the index file */ efree( indexf->line ); /* free the stem cache if any */ free_word_hash_table( &indexf->hashstemcache); /* finally free up the index itself */ efree( indexf ); return next; }