struct metaEntry *addMetaEntry(INDEXDATAHEADER *header, char *metaname, int metaType, int metaID) { struct metaEntry *tmpEntry = NULL; char *metaWord; if (metaname == NULL || metaname[0] == '\0') progerr("internal error - called addMetaEntry without a name"); metaWord = estrdup( metaname ); strtolower(metaWord); /* See if there is a previous metaname with the same name */ // tmpEntry = metaType & META_PROP // ? getPropNameByName(header, metaWord) // : getMetaNameByName(header, metaWord); if (!tmpEntry) /* metaName not found - Create a new one */ tmpEntry = addNewMetaEntry( header, metaWord, metaType, metaID); else /* This allows adding Numeric or Date onto an existing property. */ /* Probably not needed */ tmpEntry->metaType |= metaType; efree( metaWord ); return tmpEntry; }
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); } }
struct metaEntry *cloneMetaEntry(INDEXDATAHEADER *header, struct metaEntry *meta ) { struct metaEntry *new_meta = addNewMetaEntry( header, meta->metaName, meta->metaType, 0 ); if ( !new_meta ) return NULL; /* Copy important attributes */ new_meta->rank_bias = meta->rank_bias; new_meta->sort_len = meta->sort_len; new_meta->max_len = meta->max_len; /* not needed when merging */ /* * other attribues, extractpath_default, sorted_data, sorted_loaded, in_tag * are not needed when merging and/or cannot be copied */ return new_meta; }