549 lines
13 KiB
C
549 lines
13 KiB
C
#ifndef H_RPMTE
|
|
#define H_RPMTE
|
|
|
|
/** \ingroup rpmts rpmte
|
|
* \file lib/rpmte.h
|
|
* Structures used for an "rpmte" transaction element.
|
|
*/
|
|
|
|
/**
|
|
*/
|
|
/*@-exportlocal@*/
|
|
/*@unchecked@*/
|
|
extern int _rpmte_debug;
|
|
/*@=exportlocal@*/
|
|
|
|
/**
|
|
* Transaction element ordering chain linkage.
|
|
*/
|
|
typedef /*@abstract@*/ struct tsortInfo_s * tsortInfo;
|
|
|
|
/**
|
|
* Transaction element iterator.
|
|
*/
|
|
typedef /*@abstract@*/ struct rpmtsi_s * rpmtsi;
|
|
|
|
/** \ingroup rpmte
|
|
* Transaction element type.
|
|
*/
|
|
typedef enum rpmElementType_e {
|
|
TR_ADDED = (1 << 0), /*!< Package will be installed. */
|
|
TR_REMOVED = (1 << 1) /*!< Package will be removed. */
|
|
} rpmElementType;
|
|
|
|
#if defined(_RPMTE_INTERNAL)
|
|
/** \ingroup rpmte
|
|
* Dependncy ordering information.
|
|
*/
|
|
/*@-fielduse@*/ /* LCL: confused by union? */
|
|
struct tsortInfo_s {
|
|
union {
|
|
int count;
|
|
/*@exposed@*/ /*@dependent@*/ /*@null@*/
|
|
rpmte suc;
|
|
} tsi_u;
|
|
#define tsi_count tsi_u.count
|
|
#define tsi_suc tsi_u.suc
|
|
/*@owned@*/ /*@null@*/
|
|
struct tsortInfo_s * tsi_next;
|
|
/*@exposed@*/ /*@dependent@*/ /*@null@*/
|
|
rpmte tsi_chain;
|
|
int tsi_reqx;
|
|
int tsi_qcnt;
|
|
};
|
|
/*@=fielduse@*/
|
|
|
|
/** \ingroup rpmte
|
|
* A single package instance to be installed/removed atomically.
|
|
*/
|
|
struct rpmte_s {
|
|
rpmElementType type; /*!< Package disposition (installed/removed). */
|
|
|
|
/*@refcounted@*/ /*@relnull@*/
|
|
Header h; /*!< Package header. */
|
|
/*@only@*/
|
|
const char * NEVR; /*!< Package name-version-release. */
|
|
/*@only@*/
|
|
const char * NEVRA; /*!< Package name-version-release.arch. */
|
|
/*@owned@*/
|
|
const char * name; /*!< Name: */
|
|
/*@only@*/ /*@null@*/
|
|
char * epoch;
|
|
/*@dependent@*/ /*@null@*/
|
|
char * version; /*!< Version: */
|
|
/*@dependent@*/ /*@null@*/
|
|
char * release; /*!< Release: */
|
|
/*@only@*/ /*@null@*/
|
|
const char * arch; /*!< Architecture hint. */
|
|
/*@only@*/ /*@null@*/
|
|
const char * os; /*!< Operating system hint. */
|
|
|
|
rpmte parent; /*!< Parent transaction element. */
|
|
int degree; /*!< No. of immediate children. */
|
|
int depth; /*!< Max. depth in dependency tree. */
|
|
int npreds; /*!< No. of predecessors. */
|
|
int tree; /*!< Tree index. */
|
|
/*@owned@*/
|
|
tsortInfo tsi; /*!< Dependency ordering chains. */
|
|
|
|
/*@refcounted@*/ /*@null@*/
|
|
rpmds this; /*!< This package's provided NEVR. */
|
|
/*@refcounted@*/ /*@null@*/
|
|
rpmds provides; /*!< Provides: dependencies. */
|
|
/*@refcounted@*/ /*@null@*/
|
|
rpmds requires; /*!< Requires: dependencies. */
|
|
/*@refcounted@*/ /*@null@*/
|
|
rpmds conflicts; /*!< Conflicts: dependencies. */
|
|
/*@refcounted@*/ /*@null@*/
|
|
rpmds obsoletes; /*!< Obsoletes: dependencies. */
|
|
/*@refcounted@*/ /*@null@*/
|
|
rpmfi fi; /*!< File information. */
|
|
|
|
uint_32 color; /*!< Color bit(s) from package dependencies. */
|
|
uint_32 pkgFileSize; /*!< No. of bytes in package file (approx). */
|
|
|
|
/*@exposed@*/ /*@dependent@*/ /*@null@*/
|
|
fnpyKey key; /*!< (TR_ADDED) Retrieval key. */
|
|
/*@owned@*/ /*@null@*/
|
|
rpmRelocation * relocs; /*!< (TR_ADDED) Payload file relocations. */
|
|
/*@refcounted@*/ /*@null@*/
|
|
FD_t fd; /*!< (TR_ADDED) Payload file descriptor. */
|
|
|
|
/*@-fielduse@*/ /* LCL: confused by union? */
|
|
union {
|
|
/*@exposed@*/ /*@dependent@*/ /*@null@*/
|
|
alKey addedKey;
|
|
struct {
|
|
/*@exposed@*/ /*@dependent@*/ /*@null@*/
|
|
alKey dependsOnKey;
|
|
int dboffset;
|
|
} removed;
|
|
} u;
|
|
/*@=fielduse@*/
|
|
|
|
};
|
|
|
|
/**
|
|
* Iterator across transaction elements, forward on install, backward on erase.
|
|
*/
|
|
struct rpmtsi_s {
|
|
/*@refcounted@*/
|
|
rpmts ts; /*!< transaction set. */
|
|
int reverse; /*!< reversed traversal? */
|
|
int ocsave; /*!< last returned iterator index. */
|
|
int oc; /*!< iterator index. */
|
|
};
|
|
|
|
#endif /* _RPMTE_INTERNAL */
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* Destroy a transaction element.
|
|
* @param te transaction element
|
|
* @return NULL always
|
|
*/
|
|
/*@null@*/
|
|
rpmte rpmteFree(/*@only@*/ /*@null@*/ rpmte te)
|
|
/*@globals fileSystem @*/
|
|
/*@modifies te, fileSystem @*/;
|
|
|
|
/**
|
|
* Create a transaction element.
|
|
* @param ts transaction set
|
|
* @param h header
|
|
* @param type TR_ADDED/TR_REMOVED
|
|
* @param key (TR_ADDED) package retrieval key (e.g. file name)
|
|
* @param relocs (TR_ADDED) package file relocations
|
|
* @param dboffset (TR_REMOVED) rpmdb instance
|
|
* @param pkgKey associated added package (if any)
|
|
* @return new transaction element
|
|
*/
|
|
/*@only@*/ /*@null@*/
|
|
rpmte rpmteNew(const rpmts ts, Header h, rpmElementType type,
|
|
/*@exposed@*/ /*@dependent@*/ /*@null@*/ fnpyKey key,
|
|
/*@null@*/ rpmRelocation * relocs,
|
|
int dboffset,
|
|
/*@exposed@*/ /*@dependent@*/ /*@null@*/ alKey pkgKey)
|
|
/*@globals fileSystem @*/
|
|
/*@modifies ts, h, fileSystem @*/;
|
|
|
|
/**
|
|
* Retrieve type of transaction element.
|
|
* @param te transaction element
|
|
* @return type
|
|
*/
|
|
rpmElementType rpmteType(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Retrieve name string of transaction element.
|
|
* @param te transaction element
|
|
* @return name string
|
|
*/
|
|
/*@observer@*/
|
|
extern const char * rpmteN(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Retrieve epoch string of transaction element.
|
|
* @param te transaction element
|
|
* @return epoch string
|
|
*/
|
|
/*@observer@*/ /*@null@*/
|
|
extern const char * rpmteE(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Retrieve version string of transaction element.
|
|
* @param te transaction element
|
|
* @return version string
|
|
*/
|
|
/*@observer@*/ /*@null@*/
|
|
extern const char * rpmteV(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Retrieve release string of transaction element.
|
|
* @param te transaction element
|
|
* @return release string
|
|
*/
|
|
/*@observer@*/ /*@null@*/
|
|
extern const char * rpmteR(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Retrieve arch string of transaction element.
|
|
* @param te transaction element
|
|
* @return arch string
|
|
*/
|
|
/*@observer@*/ /*@null@*/
|
|
extern const char * rpmteA(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Retrieve os string of transaction element.
|
|
* @param te transaction element
|
|
* @return os string
|
|
*/
|
|
/*@observer@*/ /*@null@*/
|
|
extern const char * rpmteO(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Retrieve color bits of transaction element.
|
|
* @param te transaction element
|
|
* @return color bits
|
|
*/
|
|
uint_32 rpmteColor(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Set color bits of transaction element.
|
|
* @param te transaction element
|
|
* @param color new color bits
|
|
* @return previous color bits
|
|
*/
|
|
uint_32 rpmteSetColor(rpmte te, uint_32 color)
|
|
/*@modifies te @*/;
|
|
|
|
/**
|
|
* Retrieve size in bytes of package file.
|
|
* @todo Signature header is estimated at 256b.
|
|
* @param te transaction element
|
|
* @return size in bytes of package file.
|
|
*/
|
|
uint_32 rpmtePkgFileSize(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Retrieve tsort tree depth of transaction element.
|
|
* @param te transaction element
|
|
* @return depth
|
|
*/
|
|
int rpmteDepth(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Set tsort tree depth of transaction element.
|
|
* @param te transaction element
|
|
* @param ndepth new depth
|
|
* @return previous depth
|
|
*/
|
|
int rpmteSetDepth(rpmte te, int ndepth)
|
|
/*@modifies te @*/;
|
|
|
|
/**
|
|
* Retrieve tsort no. of predecessors of transaction element.
|
|
* @param te transaction element
|
|
* @return no. of predecessors
|
|
*/
|
|
int rpmteNpreds(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Set tsort no. of predecessors of transaction element.
|
|
* @param te transaction element
|
|
* @param npreds new no. of predecessors
|
|
* @return previous no. of predecessors
|
|
*/
|
|
int rpmteSetNpreds(rpmte te, int npreds)
|
|
/*@modifies te @*/;
|
|
|
|
/**
|
|
* Retrieve tree index of transaction element.
|
|
* @param te transaction element
|
|
* @return tree index
|
|
*/
|
|
int rpmteTree(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Set tree index of transaction element.
|
|
* @param te transaction element
|
|
* @param ntree new tree index
|
|
* @return previous tree index
|
|
*/
|
|
int rpmteSetTree(rpmte te, int ntree)
|
|
/*@modifies te @*/;
|
|
|
|
/**
|
|
* Retrieve parent transaction element.
|
|
* @param te transaction element
|
|
* @return parent transaction element
|
|
*/
|
|
/*@observer@*/ /*@unused@*/
|
|
rpmte rpmteParent(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Set parent transaction element.
|
|
* @param te transaction element
|
|
* @param pte new parent transaction element
|
|
* @return previous parent transaction element
|
|
*/
|
|
/*@null@*/
|
|
rpmte rpmteSetParent(rpmte te, rpmte pte)
|
|
/*@modifies te @*/;
|
|
|
|
/**
|
|
* Retrieve number of children of transaction element.
|
|
* @param te transaction element
|
|
* @return tree index
|
|
*/
|
|
int rpmteDegree(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Set number of children of transaction element.
|
|
* @param te transaction element
|
|
* @param ndegree new number of children
|
|
* @return previous number of children
|
|
*/
|
|
int rpmteSetDegree(rpmte te, int ndegree)
|
|
/*@modifies te @*/;
|
|
|
|
/**
|
|
* Retrieve tsort info for transaction element.
|
|
* @param te transaction element
|
|
* @return tsort info
|
|
*/
|
|
tsortInfo rpmteTSI(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Destroy tsort info of transaction element.
|
|
* @param te transaction element
|
|
*/
|
|
void rpmteFreeTSI(rpmte te)
|
|
/*@modifies te @*/;
|
|
|
|
/**
|
|
* Initialize tsort info of transaction element.
|
|
* @param te transaction element
|
|
*/
|
|
void rpmteNewTSI(rpmte te)
|
|
/*@modifies te @*/;
|
|
|
|
/**
|
|
* Destroy dependency set info of transaction element.
|
|
* @param te transaction element
|
|
*/
|
|
/*@unused@*/
|
|
void rpmteCleanDS(rpmte te)
|
|
/*@modifies te @*/;
|
|
|
|
/**
|
|
* Retrieve pkgKey of TR_ADDED transaction element.
|
|
* @param te transaction element
|
|
* @return pkgKey
|
|
*/
|
|
/*@exposed@*/ /*@dependent@*/ /*@null@*/
|
|
alKey rpmteAddedKey(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Set pkgKey of TR_ADDED transaction element.
|
|
* @param te transaction element
|
|
* @param npkgKey new pkgKey
|
|
* @return previous pkgKey
|
|
*/
|
|
/*@exposed@*/ /*@dependent@*/ /*@null@*/
|
|
alKey rpmteSetAddedKey(rpmte te,
|
|
/*@exposed@*/ /*@dependent@*/ /*@null@*/ alKey npkgKey)
|
|
/*@modifies te @*/;
|
|
|
|
/**
|
|
* Retrieve dependent pkgKey of TR_REMOVED transaction element.
|
|
* @param te transaction element
|
|
* @return dependent pkgKey
|
|
*/
|
|
/*@exposed@*/ /*@dependent@*/ /*@null@*/
|
|
alKey rpmteDependsOnKey(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Retrieve rpmdb instance of TR_REMOVED transaction element.
|
|
* @param te transaction element
|
|
* @return rpmdb instance
|
|
*/
|
|
int rpmteDBOffset(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Retrieve name-version-release string from transaction element.
|
|
* @param te transaction element
|
|
* @return name-version-release string
|
|
*/
|
|
/*@observer@*/
|
|
extern const char * rpmteNEVR(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Retrieve name-version-release.arch string from transaction element.
|
|
* @param te transaction element
|
|
* @return name-version-release.arch string
|
|
*/
|
|
/*@-exportlocal@*/
|
|
/*@observer@*/
|
|
extern const char * rpmteNEVRA(rpmte te)
|
|
/*@*/;
|
|
/*@=exportlocal@*/
|
|
|
|
/**
|
|
* Retrieve file handle from transaction element.
|
|
* @param te transaction element
|
|
* @return file handle
|
|
*/
|
|
FD_t rpmteFd(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Retrieve key from transaction element.
|
|
* @param te transaction element
|
|
* @return key
|
|
*/
|
|
/*@exposed@*/
|
|
fnpyKey rpmteKey(rpmte te)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Retrieve dependency tag set from transaction element.
|
|
* @param te transaction element
|
|
* @param tag dependency tag
|
|
* @return dependency tag set
|
|
*/
|
|
rpmds rpmteDS(rpmte te, rpmTag tag)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Retrieve file info tag set from transaction element.
|
|
* @param te transaction element
|
|
* @param tag file info tag (RPMTAG_BASENAMES)
|
|
* @return file info tag set
|
|
*/
|
|
rpmfi rpmteFI(rpmte te, rpmTag tag)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Calculate transaction element dependency colors/refs from file info.
|
|
* @param te transaction element
|
|
* @param tag dependency tag (RPMTAG_PROVIDENAME, RPMTAG_REQUIRENAME)
|
|
*/
|
|
/*@-exportlocal@*/
|
|
void rpmteColorDS(rpmte te, rpmTag tag)
|
|
/*@modifies te @*/;
|
|
/*@=exportlocal@*/
|
|
|
|
/**
|
|
* Return transaction element index.
|
|
* @param tsi transaction element iterator
|
|
* @return transaction element index
|
|
*/
|
|
int rpmtsiOc(rpmtsi tsi)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Destroy transaction element iterator.
|
|
* @param tsi transaction element iterator
|
|
* @return NULL always
|
|
*/
|
|
/*@unused@*/ /*@null@*/
|
|
rpmtsi rpmtsiFree(/*@only@*//*@null@*/ rpmtsi tsi)
|
|
/*@globals fileSystem @*/
|
|
/*@modifies fileSystem @*/;
|
|
|
|
/**
|
|
* Destroy transaction element iterator.
|
|
* @param tsi transaction element iterator
|
|
* @param fn
|
|
* @param ln
|
|
* @return NULL always
|
|
*/
|
|
/*@null@*/
|
|
rpmtsi XrpmtsiFree(/*@only@*//*@null@*/ rpmtsi tsi,
|
|
const char * fn, unsigned int ln)
|
|
/*@globals fileSystem @*/
|
|
/*@modifies fileSystem @*/;
|
|
#define rpmtsiFree(_tsi) XrpmtsiFree(_tsi, __FILE__, __LINE__)
|
|
|
|
/**
|
|
* Create transaction element iterator.
|
|
* @param ts transaction set
|
|
* @return transaction element iterator
|
|
*/
|
|
/*@unused@*/ /*@only@*/
|
|
rpmtsi rpmtsiInit(rpmts ts)
|
|
/*@modifies ts @*/;
|
|
|
|
/**
|
|
* Create transaction element iterator.
|
|
* @param ts transaction set
|
|
* @param fn
|
|
* @param ln
|
|
* @return transaction element iterator
|
|
*/
|
|
/*@unused@*/ /*@only@*/
|
|
rpmtsi XrpmtsiInit(rpmts ts,
|
|
const char * fn, unsigned int ln)
|
|
/*@modifies ts @*/;
|
|
#define rpmtsiInit(_ts) XrpmtsiInit(_ts, __FILE__, __LINE__)
|
|
|
|
/**
|
|
* Return next transaction element of type.
|
|
* @param tsi transaction element iterator
|
|
* @param type transaction element type selector (0 for any)
|
|
* @return next transaction element of type, NULL on termination
|
|
*/
|
|
/*@dependent@*/ /*@null@*/
|
|
rpmte rpmtsiNext(rpmtsi tsi, rpmElementType type)
|
|
/*@modifies tsi @*/;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* H_RPMTE */
|