Add macro %isu_package to generate ISU Package
[platform/upstream/rpm.git] / lib / rpmfi.h
index af0ad23..b77c828 100644 (file)
  * Structure(s) used for file info tag sets.
  */
 
-/*@-exportlocal@*/
-/*@unchecked@*/
-extern int _rpmfi_debug;
-/*@=exportlocal@*/
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmvf.h>
+#include <rpm/rpmpgp.h>
 
-#if defined(_RPMFI_INTERNAL)
-/**
- */
-typedef struct sharedFileInfo_s *              sharedFileInfo;
-
-/**
- */
-struct sharedFileInfo_s {
-    int pkgFileNum;
-    int otherFileNum;
-    int otherPkg;
-    int isRemoved;
-};
+#ifdef __cplusplus
+extern "C" {
+#endif
 
-/**
- * A package filename set.
- */
-struct rpmfi_s {
-    int i;                     /*!< Current file index. */
-    int j;                     /*!< Current directory index. */
-
-/*@observer@*/
-    const char * Type;         /*!< Tag name. */
-
-    rpmTag tagN;               /*!< Header tag. */
-/*@refcounted@*/ /*@null@*/
-    Header h;                  /*!< Header for file info set (or NULL) */
-
-/*@only@*/ /*?null?*/
-    const char ** bnl;         /*!< Base name(s) (from header) */
-/*@only@*/ /*?null?*/
-    const char ** dnl;         /*!< Directory name(s) (from header) */
-
-/*@only@*/ /*@relnull@*/
-    const char ** fmd5s;       /*!< File MD5 sum(s) (from header) */
-/*@only@*/ /*@relnull@*/
-    const char ** flinks;      /*!< File link(s) (from header) */
-/*@only@*/ /*@null@*/
-    const char ** flangs;      /*!< File lang(s) (from header) */
-
-/*@only@*/ /*@relnull@*/
-          uint_32 * dil;       /*!< Directory indice(s) (from header) */
-/*@only@*/ /*?null?*/
-    const uint_32 * fflags;    /*!< File flag(s) (from header) */
-/*@only@*/ /*?null?*/
-    const uint_32 * fsizes;    /*!< File size(s) (from header) */
-/*@only@*/ /*?null?*/
-    const uint_32 * fmtimes;   /*!< File modification time(s) (from header) */
-/*@only@*/ /*?null?*/
-          uint_16 * fmodes;    /*!< File mode(s) (from header) */
-/*@only@*/ /*?null?*/
-    const uint_16 * frdevs;    /*!< File rdev(s) (from header) */
-/*@only@*/ /*?null?*/
-    const uint_32 * finodes;   /*!< File inodes(s) (from header) */
-
-/*@only@*/ /*@null@*/
-    const char ** fuser;       /*!< File owner(s) (from header) */
-/*@only@*/ /*@null@*/
-    const char ** fgroup;      /*!< File group(s) (from header) */
-/*@only@*/ /*@null@*/
-    uid_t * fuids;             /*!< File uid(s) */
-/*@only@*/ /*@null@*/
-    gid_t * fgids;             /*!< File gid(s) */
-
-/*@only@*/ /*@null@*/
-    char * fstates;            /*!< File state(s) (from header) */
-
-/*@only@*/ /*@null@*/
-    const uint_32 * fcolors;   /*!< File color bits (header) */
-
-/*@only@*/ /*@null@*/
-    const char ** fcontexts;   /*! FIle security contexts. */
-
-/*@only@*/ /*@null@*/
-    const char ** cdict;       /*!< File class dictionary (header) */
-    int_32 ncdict;             /*!< No. of class entries. */
-/*@only@*/ /*@null@*/
-    const uint_32 * fcdictx;   /*!< File class dictionary index (header) */
-
-/*@only@*/ /*@null@*/
-    const uint_32 * ddict;     /*!< File depends dictionary (header) */
-    int_32 nddict;             /*!< No. of depends entries. */
-/*@only@*/ /*@null@*/
-    const uint_32 * fddictx;   /*!< File depends dictionary start (header) */
-/*@only@*/ /*@null@*/
-    const uint_32 * fddictn;   /*!< File depends dictionary count (header) */
-
-/*@only@*/ /*?null?*/
-    const uint_32 * vflags;    /*!< File verify flag(s) (from header) */
-
-    int_32 dc;                 /*!< No. of directories. */
-    int_32 fc;                 /*!< No. of files. */
-
-/*=============================*/
-/*@dependent@*/ /*@relnull@*/
-    rpmte te;
-
-    HGE_t hge;                 /*!< Vector to headerGetEntry() */
-    HAE_t hae;                 /*!< Vector to headerAddEntry() */
-    HME_t hme;                 /*!< Vector to headerModifyEntry() */
-    HRE_t hre;                 /*!< Vector to headerRemoveEntry() */
-    HFD_t hfd;                 /*!< Vector to headerFreeData() */
-/*-----------------------------*/
-    uid_t uid;                 /*!< File uid (default). */
-    gid_t gid;                 /*!< File gid (default). */
-    uint_32 flags;             /*!< File flags (default). */
-    fileAction action;         /*!< File disposition (default). */
-/*@owned@*/ /*@relnull@*/
-    fileAction * actions;      /*!< File disposition(s). */
-/*@owned@*/
-    struct fingerPrint_s * fps;        /*!< File fingerprint(s). */
-/*@owned@*/
-    const char ** obnl;                /*!< Original basename(s) (from header) */
-/*@owned@*/
-    const char ** odnl;                /*!< Original dirname(s) (from header) */
-/*@unused@*/
-    int_32 * odil;             /*!< Original dirindex(s) (from header) */
-
-/*@only@*/ /*@relnull@*/
-    unsigned char * md5s;      /*!< File md5 sums in binary. */
-
-/*@only@*/ /*@null@*/
-    char * fn;                 /*!< File name buffer. */
-    int fnlen;                 /*!< FIle name buffer length. */
-
-    int astriplen;
-    int striplen;
-    unsigned int archivePos;
-    unsigned int archiveSize;
-    mode_t dperms;             /*!< Directory perms (0755) if not mapped. */
-    mode_t fperms;             /*!< File perms (0644) if not mapped. */
-/*@only@*/ /*@null@*/
-    const char ** apath;
-    int mapflags;
-/*@owned@*/ /*@null@*/
-    int * fmapflags;
-/*@owned@*/
-    FSM_t fsm;                 /*!< File state machine data. */
-    int keep_header;           /*!< Keep header? */
-    uint_32 color;             /*!< Color bit(s) from file color union. */
-/*@owned@*/
-    sharedFileInfo replaced;   /*!< (TR_ADDED) */
-/*@owned@*/
-    uint_32 * replacedSizes;   /*!< (TR_ADDED) */
-    unsigned int record;       /*!< (TR_REMOVED) */
-    int magic;
-#define        RPMFIMAGIC      0x09697923
-/*=============================*/
-
-/*@refs@*/ int nrefs;          /*!< Reference count. */
+/** \ingroup rpmfi
+ * File types.
+ * These are the file types used internally by rpm. The file
+ * type is determined by applying stat(2) macros like S_ISDIR to
+ * the file mode tag from a header. The values are arbitrary,
+ * but are identical to the linux stat(2) file types.
+ */
+typedef enum rpmFileTypes_e {
+    PIPE       =  1,   /*!< pipe/fifo */
+    CDEV       =  2,   /*!< character device */
+    XDIR       =  4,   /*!< directory */
+    BDEV       =  6,   /*!< block device */
+    REG                =  8,   /*!< regular file */
+    LINK       = 10,   /*!< hard link */
+    SOCK       = 12    /*!< socket */
+} rpmFileTypes;
+
+/**
+ * File States (when installed).
+ */
+typedef enum rpmfileState_e {
+    RPMFILE_STATE_MISSING      = -1,   /* used for unavailable data */
+    RPMFILE_STATE_NORMAL       = 0,
+    RPMFILE_STATE_REPLACED     = 1,
+    RPMFILE_STATE_NOTINSTALLED = 2,
+    RPMFILE_STATE_NETSHARED    = 3,
+    RPMFILE_STATE_WRONGCOLOR   = 4
+} rpmfileState;
+
+#define RPMFILE_IS_INSTALLED(_x) ((_x) == RPMFILE_STATE_NORMAL || (_x) == RPMFILE_STATE_NETSHARED)
+
+/**
+ * Exported File Attributes (ie RPMTAG_FILEFLAGS)
+ */
+enum rpmfileAttrs_e {
+    RPMFILE_NONE       = 0,
+    RPMFILE_CONFIG     = (1 <<  0),    /*!< from %%config */
+    RPMFILE_DOC                = (1 <<  1),    /*!< from %%doc */
+    RPMFILE_ICON       = (1 <<  2),    /*!< from %%donotuse. */
+    RPMFILE_MISSINGOK  = (1 <<  3),    /*!< from %%config(missingok) */
+    RPMFILE_NOREPLACE  = (1 <<  4),    /*!< from %%config(noreplace) */
+    RPMFILE_SPECFILE   = (1 <<  5),    /*!< @todo (unnecessary) marks 1st file in srpm. */
+    RPMFILE_GHOST      = (1 <<  6),    /*!< from %%ghost */
+    RPMFILE_LICENSE    = (1 <<  7),    /*!< from %%license */
+    RPMFILE_README     = (1 <<  8),    /*!< from %%readme */
+    /* bits 9-10 unused */
+    RPMFILE_PUBKEY     = (1 << 11),    /*!< from %%pubkey */
+    RPMFILE_SECMANIFEST        = (1 << 12),    /*!< from %%manifest */
 };
 
-#endif /* _RPMFI_INTERNAL */
+typedef rpmFlags rpmfileAttrs;
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+#define        RPMFILE_ALL     ~(RPMFILE_NONE)
 
-/**
- * Unreference a file info set instance.
- * @param fi           file info set
- * @param msg
- * @return             NULL always
+/** \ingroup rpmfi
+ * File disposition(s) during package install/erase transaction.
  */
-/*@unused@*/ /*@null@*/
-rpmfi rpmfiUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmfi fi,
-               /*@null@*/ const char * msg)
-       /*@modifies fi @*/;
+typedef enum rpmFileAction_e {
+    FA_UNKNOWN = 0,    /*!< initial action for file ... */
+    FA_CREATE,         /*!< ... copy in from payload. */
+    FA_COPYIN,         /*!< ... copy in from payload. */
+    FA_COPYOUT,                /*!< ... copy out to payload. */
+    FA_BACKUP,         /*!< ... renamed with ".rpmorig" extension. */
+    FA_SAVE,           /*!< ... renamed with ".rpmsave" extension. */
+    FA_SKIP,           /*!< ... already replaced, don't remove. */
+    FA_ALTNAME,                /*!< ... create with ".rpmnew" extension. */
+    FA_ERASE,          /*!< ... to be removed. */
+    FA_SKIPNSTATE,     /*!< ... untouched, state "not installed". */
+    FA_SKIPNETSHARED,  /*!< ... untouched, state "netshared". */
+    FA_SKIPCOLOR       /*!< ... untouched, state "wrong color". */
+} rpmFileAction;
 
-/** @todo Remove debugging entry from the ABI.
- * @param fi           file info set
- * @param msg
- * @param fn
- * @param ln
- * @return             NULL always
- */
-/*@-exportlocal@*/
-/*@null@*/
-rpmfi XrpmfiUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmfi fi,
-               /*@null@*/ const char * msg, const char * fn, unsigned ln)
-       /*@modifies fi @*/;
-/*@=exportlocal@*/
-#define        rpmfiUnlink(_fi, _msg) XrpmfiUnlink(_fi, _msg, __FILE__, __LINE__)
+#define XFA_SKIPPING(_a)       \
+    ((_a) == FA_SKIP || (_a) == FA_SKIPNSTATE || (_a) == FA_SKIPNETSHARED || (_a) == FA_SKIPCOLOR)
 
 /**
- * Reference a file info set instance.
- * @param fi           file info set
- * @param msg
- * @return             new file info set reference
+ * We pass these around as an array with a sentinel.
  */
-/*@unused@*/ /*@null@*/
-rpmfi rpmfiLink (/*@null@*/ rpmfi fi, /*@null@*/ const char * msg)
-       /*@modifies fi @*/;
+struct rpmRelocation_s {
+    char * oldPath;    /*!< NULL here evals to RPMTAG_DEFAULTPREFIX, */
+    char * newPath;    /*!< NULL means to omit the file completely! */
+};
 
-/** @todo Remove debugging entry from the ABI.
+/** \ingroup rpmfi
+ * Reference a file info set instance.
  * @param fi           file info set
- * @param msg
- * @param fn
- * @param ln
- * @return             NULL always
+ * @return             new file info set reference
  */
-/*@null@*/
-rpmfi XrpmfiLink (/*@null@*/ rpmfi fi, /*@null@*/ const char * msg,
-               const char * fn, unsigned ln)
-        /*@modifies fi @*/;
-#define        rpmfiLink(_fi, _msg)    XrpmfiLink(_fi, _msg, __FILE__, __LINE__)
+rpmfi rpmfiLink (rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return file count from file info set.
  * @param fi           file info set
  * @return             current file count
  */
-int rpmfiFC(/*@null@*/ rpmfi fi)
-       /*@*/;
+rpm_count_t rpmfiFC(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current file index from file info set.
  * @param fi           file info set
  * @return             current file index
  */
-/*@unused@*/
-int rpmfiFX(/*@null@*/ rpmfi fi)
-       /*@*/;
+int rpmfiFX(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Set current file index in file info set.
  * @param fi           file info set
  * @param fx           new file index
  * @return             current file index
  */
-/*@unused@*/
-int rpmfiSetFX(/*@null@*/ rpmfi fi, int fx)
-       /*@modifies fi @*/;
+int rpmfiSetFX(rpmfi fi, int fx);
 
-/**
+/** \ingroup rpmfi
  * Return directory count from file info set.
  * @param fi           file info set
  * @return             current directory count
  */
-int rpmfiDC(/*@null@*/ rpmfi fi)
-       /*@*/;
+rpm_count_t rpmfiDC(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current directory index from file info set.
  * @param fi           file info set
  * @return             current directory index
  */
-int rpmfiDX(/*@null@*/ rpmfi fi)
-       /*@*/;
+int rpmfiDX(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Set current directory index in file info set.
  * @param fi           file info set
  * @param dx           new directory index
  * @return             current directory index
  */
-int rpmfiSetDX(/*@null@*/ rpmfi fi, int dx)
-       /*@modifies fi @*/;
+int rpmfiSetDX(rpmfi fi, int dx);
 
-/**
+/** \ingroup rpmfi
  * Return current base name from file info set.
  * @param fi           file info set
  * @return             current base name, NULL on invalid
  */
-/*@observer@*/ /*@null@*/
-extern const char * rpmfiBN(/*@null@*/ rpmfi fi)
-       /*@*/;
+const char * rpmfiBN(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current directory name from file info set.
  * @param fi           file info set
  * @return             current directory, NULL on invalid
  */
-/*@observer@*/ /*@null@*/
-extern const char * rpmfiDN(/*@null@*/ rpmfi fi)
-       /*@*/;
+const char * rpmfiDN(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current file name from file info set.
  * @param fi           file info set
  * @return             current file name
  */
-/*@observer@*/
-extern const char * rpmfiFN(/*@null@*/ rpmfi fi)
-       /*@modifies fi @*/;
+const char * rpmfiFN(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current file flags from file info set.
  * @param fi           file info set
  * @return             current file flags, 0 on invalid
  */
-int_32 rpmfiFFlags(/*@null@*/ rpmfi fi)
-       /*@*/;
+rpmfileAttrs rpmfiFFlags(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current file verify flags from file info set.
  * @param fi           file info set
  * @return             current file verify flags, 0 on invalid
  */
-int_32 rpmfiVFlags(/*@null@*/ rpmfi fi)
-       /*@*/;
+rpmVerifyAttrs rpmfiVFlags(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current file mode from file info set.
  * @param fi           file info set
  * @return             current file mode, 0 on invalid
  */
-int_16 rpmfiFMode(/*@null@*/ rpmfi fi)
-       /*@*/;
+rpm_mode_t rpmfiFMode(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current file state from file info set.
  * @param fi           file info set
  * @return             current file state, 0 on invalid
  */
-rpmfileState rpmfiFState(/*@null@*/ rpmfi fi)
-       /*@*/;
+rpmfileState rpmfiFState(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
+ * Return digest algorithm of a file info set.
+ * @param fi           file info set
+ * @return             digest algorithm of file info set, 0 on invalid
+ */
+int rpmfiDigestAlgo(rpmfi fi);
+
+/** \ingroup rpmfi
+ * Return current file (binary) digest of file info set.
+ * @param fi           file info set
+ * @retval algo                digest hash algoritm used (pass NULL to ignore)
+ * @retval diglen      digest hash length (pass NULL to ignore)
+ * @return             current file digest, NULL on invalid
+ */
+const unsigned char * rpmfiFDigest(rpmfi fi, int *algo, size_t *diglen);
+
+/** \ingroup rpmfi
+ * Return current file (hex) digest of file info set.
+ * The file info set stores file digests in binary format to conserve
+ * memory, this converts the binary data back to hex presentation used in
+ * headers. 
+ * @param fi           file info set
+ * @retval algo                digest hash algoritm used (pass NULL to ignore)
+ * @return             current file digest (malloc'ed), NULL on invalid
+ */
+char * rpmfiFDigestHex(rpmfi fi, int *algo);
+
+/** \ingroup rpmfi
  * Return current file (binary) md5 digest from file info set.
+ * @deprecated         Use rpmfiFDigest() instead
  * @param fi           file info set
  * @return             current file md5 digest, NULL on invalid
  */
-/*@observer@*/ /*@null@*/
-extern const unsigned char * rpmfiMD5(/*@null@*/ rpmfi fi)
-       /*@*/;
+const unsigned char * rpmfiMD5(rpmfi fi) RPM_GNUC_DEPRECATED;
 
-/**
+/** \ingroup rpmfi
  * Return current file linkto (i.e. symlink(2) target) from file info set.
  * @param fi           file info set
  * @return             current file linkto, NULL on invalid
  */
-/*@observer@*/ /*@null@*/
-extern const char * rpmfiFLink(/*@null@*/ rpmfi fi)
-       /*@*/;
+const char * rpmfiFLink(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current file size from file info set.
  * @param fi           file info set
  * @return             current file size, 0 on invalid
  */
-int_32 rpmfiFSize(/*@null@*/ rpmfi fi)
-       /*@*/;
+rpm_loff_t rpmfiFSize(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current file rdev from file info set.
  * @param fi           file info set
  * @return             current file rdev, 0 on invalid
  */
-int_16 rpmfiFRdev(/*@null@*/ rpmfi fi)
-       /*@*/;
+rpm_rdev_t rpmfiFRdev(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current file inode from file info set.
  * @param fi           file info set
  * @return             current file inode, 0 on invalid
  */
-int_32 rpmfiFInode(/*@null@*/ rpmfi fi)
-       /*@*/;
+rpm_ino_t rpmfiFInode(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return union of all file color bits from file info set.
  * @param fi           file info set
  * @return             current color
  */
-uint_32 rpmfiColor(/*@null@*/ rpmfi fi)
-       /*@*/;
+rpm_color_t rpmfiColor(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current file color bits from file info set.
  * @param fi           file info set
  * @return             current file color
  */
-uint_32 rpmfiFColor(/*@null@*/ rpmfi fi)
-       /*@*/;
+rpm_color_t rpmfiFColor(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current file class from file info set.
  * @param fi           file info set
  * @return             current file class, 0 on invalid
  */
-/*@-exportlocal@*/
-/*@observer@*/ /*@null@*/
-extern const char * rpmfiFClass(/*@null@*/ rpmfi fi)
-       /*@*/;
-/*@=exportlocal@*/
+const char * rpmfiFClass(rpmfi fi);
 
-/**
- * Return current file security context from file info set.
- * @param fi           file info set
- * @return             current file context, 0 on invalid
- */
-/*@-exportlocal@*/
-/*@observer@*/ /*@null@*/
-extern const char * rpmfiFContext(/*@null@*/ rpmfi fi)
-       /*@*/;
-/*@=exportlocal@*/
-
-/**
+/** \ingroup rpmfi
  * Return current file depends dictionary from file info set.
  * @param fi           file info set
  * @retval *fddictp    file depends dictionary array (or NULL)
  * @return             no. of file depends entries, 0 on invalid
  */
-int_32 rpmfiFDepends(/*@null@*/ rpmfi fi,
-               /*@out@*/ /*@null@*/ const int_32 ** fddictp)
-       /*@modifies *fddictp @*/;
+uint32_t rpmfiFDepends(rpmfi fi,
+               const uint32_t ** fddictp);
 
-/**
+/** \ingroup rpmfi
  * Return (calculated) current file nlink count from file info set.
  * @param fi           file info set
  * @return             current file nlink count, 0 on invalid
  */
-int_32 rpmfiFNlink(/*@null@*/ rpmfi fi)
-       /*@*/;
+uint32_t rpmfiFNlink(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current file modify time from file info set.
  * @param fi           file info set
  * @return             current file modify time, 0 on invalid
  */
-int_32 rpmfiFMtime(/*@null@*/ rpmfi fi)
-       /*@*/;
+rpm_time_t rpmfiFMtime(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current file owner from file info set.
  * @param fi           file info set
  * @return             current file owner, NULL on invalid
  */
-/*@observer@*/ /*@null@*/
-extern const char * rpmfiFUser(/*@null@*/ rpmfi fi)
-       /*@*/;
+const char * rpmfiFUser(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Return current file group from file info set.
  * @param fi           file info set
  * @return             current file group, NULL on invalid
  */
-/*@observer@*/ /*@null@*/
-extern const char * rpmfiFGroup(/*@null@*/ rpmfi fi)
-       /*@*/;
+const char * rpmfiFGroup(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
+ * Return textual representation of current file capabilities 
+ * from file info set. See cap_from_text(3) for details.
+ * @param fi           file info set
+ * @return             file capability description, "" for no capabilities
+ *                     and NULL on invalid
+ */
+const char * rpmfiFCaps(rpmfi fi);
+
+/** \ingroup rpmfi
+ * Return current file language(s) from file info set.
+ * @param fi           file info set
+ * @return             current file language(s), NULL on invalid
+ */
+const char * rpmfiFLangs(rpmfi fi);
+
+/** \ingroup rpmfi
  * Return next file iterator index.
  * @param fi           file info set
  * @return             file iterator index, -1 on termination
  */
-int rpmfiNext(/*@null@*/ rpmfi fi)
-       /*@modifies fi @*/;
+int rpmfiNext(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Initialize file iterator index.
  * @param fi           file info set
  * @param fx           file iterator index
  * @return             file info set
  */
-/*@null@*/
-rpmfi rpmfiInit(/*@null@*/ rpmfi fi, int fx)
-       /*@modifies fi @*/;
+rpmfi rpmfiInit(rpmfi fi, int fx);
 
-/**
+/** \ingroup rpmfi
  * Return next directory iterator index.
  * @param fi           file info set
  * @return             directory iterator index, -1 on termination
  */
-/*@unused@*/
-int rpmfiNextD(/*@null@*/ rpmfi fi)
-       /*@modifies fi @*/;
+int rpmfiNextD(rpmfi fi);
 
-/**
+/** \ingroup rpmfi
  * Initialize directory iterator index.
  * @param fi           file info set
  * @param dx           directory iterator index
  * @return             file info set, NULL if dx is out of range
  */
-/*@unused@*/ /*@null@*/
-rpmfi rpmfiInitD(/*@null@*/ rpmfi fi, int dx)
-       /*@modifies fi @*/;
+rpmfi rpmfiInitD(rpmfi fi, int dx);
 
-/**
+/** \ingroup rpmfi
  * Destroy a file info set.
  * @param fi           file info set
  * @return             NULL always
  */
-/*@null@*/
-rpmfi rpmfiFree(/*@killref@*/ /*@only@*/ /*@null@*/ rpmfi fi)
-       /*@globals fileSystem @*/
-       /*@modifies fi, fileSystem @*/;
+rpmfi rpmfiFree(rpmfi fi);
+
+enum rpmfiFlags_e {
+    RPMFI_NOHEADER             = 0,
+    RPMFI_KEEPHEADER           = (1 << 0),
+    RPMFI_NOFILECLASS          = (1 << 1),
+    RPMFI_NOFILEDEPS           = (1 << 2),
+    RPMFI_NOFILELANGS          = (1 << 3),
+    RPMFI_NOFILEUSER           = (1 << 4),
+    RPMFI_NOFILEGROUP          = (1 << 5),
+    RPMFI_NOFILEMODES          = (1 << 6),
+    RPMFI_NOFILESIZES          = (1 << 7),
+    RPMFI_NOFILECAPS           = (1 << 8),
+    RPMFI_NOFILELINKTOS                = (1 << 9),
+    RPMFI_NOFILEDIGESTS                = (1 << 10),
+    RPMFI_NOFILEMTIMES         = (1 << 11),
+    RPMFI_NOFILERDEVS          = (1 << 12),
+    RPMFI_NOFILEINODES         = (1 << 13),
+    RPMFI_NOFILESTATES         = (1 << 14),
+    RPMFI_NOFILECOLORS         = (1 << 15),
+    RPMFI_NOFILEVERIFYFLAGS    = (1 << 16),
+    RPMFI_NOFILEFLAGS          = (1 << 17),
+};
 
-/**
- * Create and load a file info set.
- * @param ts           transaction set (NULL skips path relocation)
- * @param h            header
- * @param tagN         RPMTAG_BASENAMES
- * @param scareMem     Use pointers to refcounted header memory?
- * @return             new file info set
- */
-/*@null@*/
-rpmfi rpmfiNew(/*@null@*/ rpmts ts, Header h, rpmTag tagN, int scareMem)
-       /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
-       /*@modifies ts, h, rpmGlobalMacroContext, fileSystem @*/;
+typedef rpmFlags rpmfiFlags;
 
-/**
- * Retrieve file classes from header.
- *
- * This function is used to retrieve file classes from the header.
- * 
- * @param h            header
- * @retval *fclassp    array of file classes
- * @retval *fcp                number of files
- */
-void rpmfiBuildFClasses(Header h,
-               /*@out@*/ const char *** fclassp, /*@out@*/ int * fcp)
-       /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
-       /*@modifies h, *fclassp, *fcp, rpmGlobalMacroContext, fileSystem @*/;
+#define RPMFI_FLAGS_ERASE \
+    (RPMFI_NOFILECLASS | RPMFI_NOFILELANGS | \
+     RPMFI_NOFILEMTIMES | RPMFI_NOFILERDEVS | RPMFI_NOFILEINODES | \
+     RPMFI_NOFILEVERIFYFLAGS)
 
-/**
- * Retrieve file security contexts from header.
- *
- * This function is used to retrieve file contexts from the header.
- * 
- * @param h            header
- * @retval *fcontextp  array of file contexts
- * @retval *fcp                number of files
- */
-void rpmfiBuildFContexts(Header h,
-               /*@out@*/ const char *** fcontextp, /*@out@*/ int * fcp)
-       /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
-       /*@modifies h, *fcontextp, *fcp, rpmGlobalMacroContext, fileSystem @*/;
+#define RPMFI_FLAGS_INSTALL \
+    (RPMFI_NOFILECLASS | RPMFI_NOFILEVERIFYFLAGS)
 
-/**
- * Retrieve file security contexts from file system.
- *
- * This function is used to retrieve file contexts from the file system.
- * 
- * @param h            header
- * @retval *fcontextp  array of file contexts
- * @retval *fcp                number of files
- */
-void rpmfiBuildFSContexts(Header h,
-               /*@out@*/ const char *** fcontextp, /*@out@*/ int * fcp)
-       /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
-       /*@modifies h, *fcontextp, *fcp, rpmGlobalMacroContext, fileSystem @*/;
+#define RPMFI_FLAGS_VERIFY \
+    (RPMFI_NOFILECLASS | RPMFI_NOFILEDEPS | RPMFI_NOFILELANGS | \
+     RPMFI_NOFILECOLORS)
 
-/**
- * Retrieve file security contexts from policy RE's.
- *
- * This function is used to retrieve file contexts from policy RE's.
- * 
- * @param h            header
- * @retval *fcontextp  array of file contexts
- * @retval *fcp                number of files
- */
-void rpmfiBuildREContexts(Header h,
-               /*@out@*/ const char *** fcontextp, /*@out@*/ int * fcp)
-       /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
-       /*@modifies h, *fcontextp, *fcp, rpmGlobalMacroContext, fileSystem @*/;
+#define RPMFI_FLAGS_QUERY \
+    (RPMFI_NOFILECLASS | RPMFI_NOFILEDEPS | RPMFI_NOFILELANGS | \
+     RPMFI_NOFILECOLORS | RPMFI_NOFILEVERIFYFLAGS)
 
-/**
- * Retrieve per-file dependencies from header.
- *
- * This function is used to retrieve per-file dependencies from the header.
- * 
+/** \ingroup rpmfi
+ * Create and load a file info set.
+ * @param ts           unused
  * @param h            header
- * @param tagN         RPMTAG_PROVIDENAME | RPMTAG_REQUIRENAME
- * @retval *fdepsp     array of file dependencies
- * @retval *fcp                number of files
+ * @param tagN         unused
+ * @param flags                Flags to control what information is loaded.
+ * @return             new file info set
  */
-void rpmfiBuildFDeps(Header h, rpmTag tagN,
-               /*@out@*/ const char *** fdepsp, /*@out@*/ int * fcp)
-       /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
-       /*@modifies h, *fdepsp, *fcp, rpmGlobalMacroContext, fileSystem @*/;
+rpmfi rpmfiNew(const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags);
 
-/**
+/** \ingroup rpmfi
  * Return file type from mode_t.
  * @param mode         file mode bits (from header)
  * @return             file type
  */
-fileTypes whatis(uint_16 mode)
-       /*@*/;
+rpmFileTypes rpmfiWhatis(rpm_mode_t mode);
 
-/**
+/** \ingroup rpmfi
  * Return file info comparison.
  * @param afi          1st file info
  * @param bfi          2nd file info
  * @return             0 if identical
  */
-int rpmfiCompare(const rpmfi afi, const rpmfi bfi)
-       /*@*/;
+int rpmfiCompare(const rpmfi afi, const rpmfi bfi);
 
-/**
+/** \ingroup rpmfi
  * Return file disposition.
  * @param ofi          old file info
  * @param nfi          new file info
  * @param skipMissing  OK to skip missing files?
  * @return             file dispostion
  */
-fileAction rpmfiDecideFate(const rpmfi ofi, rpmfi nfi, int skipMissing)
-       /*@globals h_errno, fileSystem, internalState @*/
-       /*@modifies nfi, fileSystem, internalState @*/;
+rpmFileAction rpmfiDecideFate(const rpmfi ofi, rpmfi nfi, int skipMissing);
 
-/**
- * Return formatted string representation of package disposition.
- * @param fi           file info set
- * @return             formatted string
+/** \ingroup rpmfi
+ * Return whether file is conflicting config
+ * @param fi           file info
+ * @return             1 if config file and file on disk conflicts
  */
-/*@-redef@*/
-/*@observer@*/
-const char *const rpmfiTypeString(rpmfi fi)
-       /*@*/;
-/*@=redef@*/
+int rpmfiConfigConflict(const rpmfi fi);
 
 #ifdef __cplusplus
 }