csomh / source-git / rpm

Forked from source-git/rpm 4 years ago
Clone
2ff057
#ifndef H_RPMFI
2ff057
#define H_RPMFI
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * \file lib/rpmfi.h
2ff057
 * File info set iterator API.
2ff057
 */
2ff057
2ff057
#include <rpm/rpmtypes.h>
2ff057
#include <rpm/rpmfiles.h>
2ff057
#include <rpm/rpmarchive.h>
2ff057
2ff057
#ifdef __cplusplus
2ff057
extern "C" {
2ff057
#endif
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Reference a file info set iterator instance.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		new file info set iterator reference
2ff057
 */
2ff057
rpmfi rpmfiLink (rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return file count from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file count
2ff057
 */
2ff057
rpm_count_t rpmfiFC(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file index from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file index
2ff057
 */
2ff057
int rpmfiFX(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Set current file index in file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @param fx		new file index
2ff057
 * @return		current file index
2ff057
 */
2ff057
int rpmfiSetFX(rpmfi fi, int fx);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return directory count from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current directory count
2ff057
 */
2ff057
rpm_count_t rpmfiDC(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current directory index from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current directory index
2ff057
 */
2ff057
int rpmfiDX(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Set current directory index in file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @param dx		new directory index
2ff057
 * @return		current directory index
2ff057
 */
2ff057
int rpmfiSetDX(rpmfi fi, int dx);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current base name from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current base name, NULL on invalid
2ff057
 */
2ff057
const char * rpmfiBN(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current directory name from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current directory, NULL on invalid
2ff057
 */
2ff057
const char * rpmfiDN(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file name from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file name
2ff057
 */
2ff057
const char * rpmfiFN(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return file index of the given file name or -1 if file is not in the rpmfi.
2ff057
 * The file name may have "." prefixed but is then interpreted as a global
2ff057
 * path without the prefixing "."
2ff057
 * @param fi            file info set iterator
2ff057
 * @param fn		file name
2ff057
 * @return              file index or -1
2ff057
 */
2ff057
int rpmfiFindFN(rpmfi fi, const char * fn);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current original base name from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current base name, NULL on invalid
2ff057
 */
2ff057
const char * rpmfiOBN(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current original directory name from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current directory, NULL on invalid
2ff057
 */
2ff057
const char * rpmfiODN(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current original file name from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file name
2ff057
 */
2ff057
const char * rpmfiOFN(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return file index of the given original file name or -1 if file is not
2ff057
 * in the rpmfi. The file name may have "." prefixed but is then interpreted
2ff057
 * as a global path without the prefixing "."
2ff057
 * @param fi            file info set iterator
2ff057
 * @param fn		file name
2ff057
 * @return              file index or -1
2ff057
 */
2ff057
int rpmfiFindOFN(rpmfi fi, const char * fn);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file flags from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file flags, 0 on invalid
2ff057
 */
2ff057
rpmfileAttrs rpmfiFFlags(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file verify flags from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file verify flags, 0 on invalid
2ff057
 */
2ff057
rpmVerifyAttrs rpmfiVFlags(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file mode from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file mode, 0 on invalid
2ff057
 */
2ff057
rpm_mode_t rpmfiFMode(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file state from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file state, 0 on invalid
2ff057
 */
2ff057
rpmfileState rpmfiFState(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return digest algorithm of a file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		digest algorithm of file info set iterator, 0 on invalid
2ff057
 */
2ff057
int rpmfiDigestAlgo(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file (binary) digest of file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @retval algo		digest hash algorithm used (pass NULL to ignore)
2ff057
 * @retval diglen	digest hash length (pass NULL to ignore)
2ff057
 * @return		current file digest, NULL on invalid
2ff057
 */
2ff057
const unsigned char * rpmfiFDigest(rpmfi fi, int *algo, size_t *diglen);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file (hex) digest of file info set iterator.
2ff057
 * The file info set iterator stores file digests in binary format to conserve
2ff057
 * memory, this converts the binary data back to hex presentation used in
2ff057
 * headers. 
2ff057
 * @param fi		file info set iterator
2ff057
 * @retval algo		digest hash algorithm used (pass NULL to ignore)
2ff057
 * @return		current file digest (malloc'ed), NULL on invalid
2ff057
 */
2ff057
char * rpmfiFDigestHex(rpmfi fi, int *algo);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file (binary) signature of file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @retval siglen	signature length (pass NULL to ignore)
2ff057
 * @return		current file signature, NULL on invalid
2ff057
 */
2ff057
const unsigned char * rpmfiFSignature(rpmfi fi, size_t *siglen);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file linkto (i.e. symlink(2) target) from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file linkto, NULL on invalid
2ff057
 */
2ff057
const char * rpmfiFLink(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file size from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file size, 0 on invalid
2ff057
 */
2ff057
rpm_loff_t rpmfiFSize(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file rdev from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file rdev, 0 on invalid
2ff057
 */
2ff057
rpm_rdev_t rpmfiFRdev(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file inode from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file inode, 0 on invalid
2ff057
 */
2ff057
rpm_ino_t rpmfiFInode(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return union of all file color bits from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current color
2ff057
 */
2ff057
rpm_color_t rpmfiColor(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file color bits from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file color
2ff057
 */
2ff057
rpm_color_t rpmfiFColor(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file class from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file class, 0 on invalid
2ff057
 */
2ff057
const char * rpmfiFClass(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file depends dictionary from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @retval *fddictp	file depends dictionary array (or NULL)
2ff057
 * @return		no. of file depends entries, 0 on invalid
2ff057
 */
2ff057
uint32_t rpmfiFDepends(rpmfi fi,
2ff057
		const uint32_t ** fddictp);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return (calculated) current file nlink count from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file nlink count, 0 on invalid
2ff057
 */
2ff057
uint32_t rpmfiFNlink(rpmfi fi);
2ff057
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return (calculated) current file nlink count from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @param files         returns array of file ids hardlinked including ix,
2ff057
			NULL for nlink count == 1
2ff057
 * @return		current file nlink count, 0 on invalid
2ff057
 */
2ff057
uint32_t rpmfiFLinks(rpmfi fi, const int ** files);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file modify time from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file modify time, 0 on invalid
2ff057
 */
2ff057
rpm_time_t rpmfiFMtime(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file owner from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file owner, NULL on invalid
2ff057
 */
2ff057
const char * rpmfiFUser(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file group from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file group, NULL on invalid
2ff057
 */
2ff057
const char * rpmfiFGroup(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return textual representation of current file capabilities 
2ff057
 * from file info set iterator. See cap_from_text(3) for details.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		file capability description, "" for no capabilities
2ff057
 * 			and NULL on invalid
2ff057
 */
2ff057
const char * rpmfiFCaps(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return current file language(s) from file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		current file language(s), NULL on invalid
2ff057
 */
2ff057
const char * rpmfiFLangs(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Map file stat(2) info.
2ff057
 * @param fi		file info iterator
2ff057
 * @param flags		flags
2ff057
 * @retval sb		mapped stat(2) data
2ff057
 */
2ff057
int rpmfiStat(rpmfi fi, int flags, struct stat *sb);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return next file iterator index.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		file iterator index, -1 on termination
2ff057
 */
2ff057
int rpmfiNext(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Initialize file iterator index.
2ff057
 * @param fi		file info set iterator
2ff057
 * @param fx		file iterator index
2ff057
 * @return		file info set iterator
2ff057
 */
2ff057
rpmfi rpmfiInit(rpmfi fi, int fx);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return next directory iterator index.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		directory iterator index, -1 on termination
2ff057
 */
2ff057
int rpmfiNextD(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Initialize directory iterator index.
2ff057
 * @param fi		file info set iterator
2ff057
 * @param dx		directory iterator index
2ff057
 * @return		file info set iterator, NULL if dx is out of range
2ff057
 */
2ff057
rpmfi rpmfiInitD(rpmfi fi, int dx);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Destroy a file info set iterator.
2ff057
 * @param fi		file info set iterator
2ff057
 * @return		NULL always
2ff057
 */
2ff057
rpmfi rpmfiFree(rpmfi fi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Create and load a file info set iterator.
2ff057
 * @param pool		shared string pool (or NULL for private pool)
2ff057
 * @param h		header
2ff057
 * @param tagN		unused
2ff057
 * @param flags		Flags to control what information is loaded.
2ff057
 * @return		new file info set iterator
2ff057
 */
2ff057
rpmfi rpmfiNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, rpmfiFlags flags);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Create and load a file info set iterator.
2ff057
 * @param ts		unused
2ff057
 * @param h		header
2ff057
 * @param tagN		unused
2ff057
 * @param flags		Flags to control what information is loaded.
2ff057
 * @return		new file info set iterator
2ff057
 */
2ff057
rpmfi rpmfiNew(const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return file type from mode_t.
2ff057
 * @param mode		file mode bits (from header)
2ff057
 * @return		file type
2ff057
 */
2ff057
rpmFileTypes rpmfiWhatis(rpm_mode_t mode);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Return file info comparison.
2ff057
 * @param afi		1st file info
2ff057
 * @param bfi		2nd file info
2ff057
 * @return		0 if identical
2ff057
 */
2ff057
int rpmfiCompare(const rpmfi afi, const rpmfi bfi);
2ff057
2ff057
/** \ingroup rpmfi
2ff057
 * Verify file attributes (including digest).
2ff057
 * @param fi		file info iterator
2ff057
 * @param omitMask	bit(s) to disable verify checks
2ff057
 * @return		bit(s) to indicate failure (ie 0 for passed verify)
2ff057
 */
2ff057
rpmVerifyAttrs rpmfiVerify(rpmfi fi, rpmVerifyAttrs omitMask);
2ff057
2ff057
#ifdef __cplusplus
2ff057
}
2ff057
#endif
2ff057
2ff057
#endif	/* H_RPMDS */