if (fi != NULL && fi->i >= 0 && fi->i < fi->fc) {
if (fi->flinks != NULL)
- flink = fi->flinks[fi->i];
+ flink = strcacheGet(fi->flinkcache, fi->flinks[fi->i]);
}
return flink;
}
fi->bnl = _free(fi->bnl);
fi->dnl = _free(fi->dnl);
+ fi->flinkcache = strcacheFree(fi->flinkcache);
fi->flinks = _free(fi->flinks);
fi->flangs = _free(fi->flangs);
fi->digests = _free(fi->digests);
}
}
- if (!(flags & RPMFI_NOFILELINKTOS))
- _hgfi(h, RPMTAG_FILELINKTOS, &td, defFlags, fi->flinks);
+ if (!(flags & RPMFI_NOFILELINKTOS)) {
+ fi->flinkcache = strcacheNew();
+ fi->flinks = cacheTag(fi->flinkcache, h, RPMTAG_FILELINKTOS);
+ }
/* FILELANGS are only interesting when installing */
if ((headerGetInstance(h) == 0) && !(flags & RPMFI_NOFILELANGS))
fi->flangs = cacheTag(langcache, h, RPMTAG_FILELANGS);
/*?null?*/
const char ** dnl; /*!< Directory name(s) (from header) */
- const char ** flinks; /*!< File link(s) (from header) */
+ strcache flinkcache; /*!< File link cache */
+ scidx_t * flinks; /*!< Index to file link(s) cache */
scidx_t * flangs; /*!< Index to file lang(s) cache */
uint32_t * dil; /*!< Directory indice(s) (from header) */