225 lines
5.8 KiB
C
225 lines
5.8 KiB
C
#ifndef H_RPMDB_INTERNAL
|
|
#define H_RPMDB_INTERNAL
|
|
|
|
#include <assert.h>
|
|
|
|
#include <rpm/rpmsw.h>
|
|
#include <rpm/rpmtypes.h>
|
|
#include <rpm/rpmutil.h>
|
|
#include "lib/backend/dbi.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#undef HASHTYPE
|
|
#undef HTKEYTYPE
|
|
#undef HTDATATYPE
|
|
#define HASHTYPE packageHash
|
|
#define HTKEYTYPE unsigned int
|
|
#define HTDATATYPE struct rpmte_s *
|
|
#include "rpmhash.H"
|
|
#undef HASHTYPE
|
|
#undef HTKEYTYPE
|
|
#undef HTDATATYPE
|
|
|
|
enum rpmdbRebuildFlags_e {
|
|
RPMDB_REBUILD_FLAG_SALVAGE = (1 << 0),
|
|
};
|
|
|
|
/** \ingroup rpmdb
|
|
* Reference a database instance.
|
|
* @param db rpm database
|
|
* @return new rpm database reference
|
|
*/
|
|
rpmdb rpmdbLink(rpmdb db);
|
|
|
|
/** \ingroup rpmdb
|
|
* Open rpm database.
|
|
* @param prefix path to top of install tree
|
|
* @param[out] dbp address of rpm database
|
|
* @param mode open(2) flags: O_RDWR or O_RDONLY (O_CREAT also)
|
|
* @param perms database permissions
|
|
* @return 0 on success
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int rpmdbOpen (const char * prefix, rpmdb * dbp, int mode, int perms);
|
|
|
|
/** \ingroup rpmdb
|
|
* Initialize database.
|
|
* @param prefix path to top of install tree
|
|
* @param perms database permissions
|
|
* @return 0 on success
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int rpmdbInit(const char * prefix, int perms);
|
|
|
|
/** \ingroup rpmdb
|
|
* Close all database indices and free rpmdb.
|
|
* @param db rpm database
|
|
* @return 0 on success
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int rpmdbClose (rpmdb db);
|
|
|
|
/** \ingroup rpmdb
|
|
* Rebuild database indices from package headers.
|
|
* @param prefix path to top of install tree
|
|
* @param ts transaction set (or NULL)
|
|
* @param (*hdrchk) headerCheck() vector (or NULL)
|
|
* @param rebuildflags flags
|
|
* @return 0 on success
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int rpmdbRebuild(const char * prefix, rpmts ts,
|
|
rpmRC (*hdrchk) (rpmts ts, const void *uh, size_t uc, char ** msg),
|
|
int rebuildflags);
|
|
|
|
/** \ingroup rpmdb
|
|
* Verify database components.
|
|
* @param prefix path to top of install tree
|
|
* @return 0 on success
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int rpmdbVerify(const char * prefix);
|
|
|
|
/** \ingroup rpmdb
|
|
* Add package header to rpm database and indices.
|
|
* @param db rpm database
|
|
* @param h header
|
|
* @return 0 on success
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int rpmdbAdd(rpmdb db, Header h);
|
|
|
|
/** \ingroup rpmdb
|
|
* Remove package header from rpm database and indices.
|
|
* @param db rpm database
|
|
* @param hdrNum package instance number in database
|
|
* @return 0 on success
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int rpmdbRemove(rpmdb db, unsigned int hdrNum);
|
|
|
|
/** \ingroup rpmdb
|
|
* Return rpmdb home directory (depending on chroot state)
|
|
* param db rpmdb handle
|
|
* return db home directory (or NULL on error)
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
const char *rpmdbHome(rpmdb db);
|
|
|
|
/** \ingroup rpmdb
|
|
* Return database iterator.
|
|
* @param mi rpm database iterator
|
|
* @param keyp key data (NULL for sequential access)
|
|
* @param keylen key data length (0 will use strlen(keyp))
|
|
* @return 0 on success
|
|
*/
|
|
int rpmdbExtendIterator(rpmdbMatchIterator mi,
|
|
const void * keyp, size_t keylen);
|
|
|
|
/** \ingroup rpmdb
|
|
* sort the iterator by (recnum, filenum)
|
|
* Return database iterator.
|
|
* @param mi rpm database iterator
|
|
*/
|
|
void rpmdbSortIterator(rpmdbMatchIterator mi);
|
|
|
|
/** \ingroup rpmdb
|
|
* uniq the iterator by recnum
|
|
* Return database iterator.
|
|
* @param mi rpm database iterator
|
|
*/
|
|
void rpmdbUniqIterator(rpmdbMatchIterator mi);
|
|
|
|
/** \ingroup rpmdb
|
|
* If neg equals to zero then it leaves in iterator only packages that
|
|
* header numbers are in hdrNums. If neg is not zero then removes from iterator
|
|
* all packages that header numbers are in hdrNums.
|
|
* @param mi rpm database iterator
|
|
* @param hdrNums hash of package numbers
|
|
* @param neg mode
|
|
* return 0 on success, 1 on failure (bad args)
|
|
*/
|
|
int rpmdbFilterIterator(rpmdbMatchIterator mi, packageHash hdrNums, int neg);
|
|
|
|
/** \ingroup rpmdb
|
|
* Remove items from set of package instances to iterate.
|
|
* @note Sorted hdrNums are always passed in rpmlib.
|
|
* @param mi rpm database iterator
|
|
* @param hdrNums hash of package instances
|
|
* @return 0 on success, 1 on failure (bad args)
|
|
*/
|
|
int rpmdbPruneIterator(rpmdbMatchIterator mi, packageHash hdrNums);
|
|
|
|
/** \ingroup rpmdb
|
|
* Create a new, empty match iterator (for purposes of extending it
|
|
* through other means)
|
|
* @param db rpm database
|
|
* @param dbitag database index tag
|
|
* @return empty match iterator
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
rpmdbMatchIterator rpmdbNewIterator(rpmdb db, rpmDbiTagVal dbitag);
|
|
|
|
/** \ingroup rpmdb
|
|
* Return database iterator that iterates over database items
|
|
* starting with pfx.
|
|
* @param db rpm database
|
|
* @param rpmtag database index tag
|
|
* @param pfx prefix data
|
|
* @param plen prefix data length (0 will use strlen(keyp))
|
|
* @return NULL on failure
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
rpmdbMatchIterator rpmdbInitPrefixIterator(rpmdb db, rpmDbiTagVal rpmtag,
|
|
const void * pfx, size_t plen);
|
|
/** \ingroup rpmdb
|
|
* Get package offsets of entries
|
|
* @param ii index iterator
|
|
* @return db offsets of pkgs
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
const unsigned int *rpmdbIndexIteratorPkgOffsets(rpmdbIndexIterator ii);
|
|
|
|
/** \ingroup rpmdb
|
|
* Return current index (position) in iterator.
|
|
* @param mi rpm database iterator
|
|
* @return current index
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int rpmdbGetIteratorIndex(rpmdbMatchIterator mi);
|
|
|
|
/** \ingroup rpmdb
|
|
* Set iterator index.
|
|
* @param mi rpm database iterator
|
|
* @param ix index
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
void rpmdbSetIteratorIndex(rpmdbMatchIterator mi, unsigned int ix);
|
|
|
|
/** \ingroup rpmdb
|
|
* Return offset of package with given index.
|
|
* @param mi rpm database iterator
|
|
* @param ix index
|
|
* @return package offset
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
unsigned int rpmdbGetIteratorOffsetFor(rpmdbMatchIterator mi, unsigned int ix);
|
|
|
|
/** \ingroup rpmdb
|
|
* Return header located in rpmdb at given offset.
|
|
* @param db rpm database
|
|
* @param offset database offset
|
|
* @return header at given offset
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
Header rpmdbGetHeaderAt(rpmdb db, unsigned int offset);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|