if (headerGet((_h), (_tag), (_td), (_flags))) \
_data = (td.data)
-rpmfi rpmfiNew(const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags)
+rpmfi rpmfiNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, rpmfiFlags flags)
{
rpmfi fi = xcalloc(1, sizeof(*fi));
unsigned char * t;
/* XXX: ensure the global misc. pool exists */
if (miscpool == NULL)
miscpool = rpmstrPoolCreate();
- fi->pool = rpmstrPoolCreate();
+ /* private or shared pool? */
+ fi->pool = (pool != NULL) ? rpmstrPoolLink(pool) : rpmstrPoolCreate();
/* XXX TODO: all these should be sanity checked, ugh... */
if (!(flags & RPMFI_NOFILEMODES))
/* lazily alloced from rpmfiFN() */
fi->fn = NULL;
- rpmstrPoolFreeze(fi->pool);
+ /* only freeze private pool */
+ if (fi->pool != pool)
+ rpmstrPoolFreeze(fi->pool);
exit:
return NULL;
}
+rpmfi rpmfiNew(const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags)
+{
+ return rpmfiNewPool(NULL, h, tagN, flags);
+}
+
void rpmfiSetFReplacedSizeIndex(rpmfi fi, int ix, rpm_loff_t newsize)
{
if (fi != NULL && ix >= 0 && ix < fi->fc) {
rpmfi rpmfiNew(const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags);
/** \ingroup rpmfi
+ * Create and load a file info set.
+ * @param pool shared string pool (or NULL for private pool)
+ * @param h header
+ * @param tagN unused
+ * @param flags Flags to control what information is loaded.
+ * @return new file info set
+ */
+rpmfi rpmfiNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, rpmfiFlags flags);
+
+/** \ingroup rpmfi
* Return file type from mode_t.
* @param mode file mode bits (from header)
* @return file type