if (headerGet((_h), (_tag), (_td), (_flags))) \
_data = (td.data)
-rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, int scareMem)
+rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, rpmfiFlags flags)
{
rpmte p;
rpmfi fi = NULL;
unsigned char * t;
struct rpmtd_s fdigests, digalgo;
struct rpmtd_s td;
- headerGetFlags scareFlags = scareMem ? HEADERGET_MINMEM : HEADERGET_ALLOC;
+ headerGetFlags scareFlags = (flags & RPMFI_KEEPHEADER) ?
+ HEADERGET_MINMEM : HEADERGET_ALLOC;
headerGetFlags defFlags = HEADERGET_ALLOC;
int len;
int i;
fi->scareFlags = scareFlags;
- fi->h = (scareMem ? headerLink(h) : NULL);
+ fi->keep_header = (flags & RPMFI_KEEPHEADER);
+ fi->h = fi->keep_header ? headerLink(h) : NULL;
if (fi->fsm == NULL)
fi->fsm = newFSM();
if (fi->actions == NULL)
fi->actions = xcalloc(fi->fc, sizeof(*fi->actions));
- fi->keep_header = (scareMem ? 1 : 0);
-
/* XXX TR_REMOVED needs CPIO_MAP_{ABSOLUTE,ADDDOT} CPIO_ALL_HARDLINKS */
fi->mapflags =
CPIO_MAP_PATH | CPIO_MAP_MODE | CPIO_MAP_UID | CPIO_MAP_GID;
foo = headerFree(foo);
}
- if (!scareMem) {
+ if (!fi->keep_header) {
fi->h = headerFree(fi->h);
}
*/
rpmfi rpmfiFree(rpmfi fi);
+typedef enum rpmfiFlags_e {
+ RPMFI_NOHEADER = 0,
+ RPMFI_KEEPHEADER = (1 << 0),
+} rpmfiFlags;
+
/** \ingroup rpmfi
* Create and load a file info set.
* @deprecated Only scareMem = 0 will be permitted.
* @param ts transaction set (NULL skips path relocation)
* @param h header
* @param tagN RPMTAG_BASENAMES
- * @param scareMem Use pointers to refcounted header memory?
+ * @param flags Flags to control what information is loaded.
* @return new file info set
*/
-rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, int scareMem);
+rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, rpmfiFlags flags);
/** \ingroup rpmfi
* Return file type from mode_t.