4
/** \ingroup rpmdep rpmtrans
6
* Structures used for dependency checking.
12
* Dependncy ordering information.
17
/*@kept@*/ /*@null@*/ struct availablePackage * suc;
19
#define tsi_count tsi_u.count
20
#define tsi_suc tsi_u.suc
21
/*@owned@*/ /*@null@*/ struct tsortInfo * tsi_next;
22
/*@kept@*/ /*@null@*/ struct availablePackage * tsi_pkg;
28
* Info about a single package to be installed.
30
struct availablePackage {
31
Header h; /*!< Package header. */
32
/*@dependent@*/ const char * name; /*!< Header name. */
33
/*@dependent@*/ const char * version; /*!< Header version. */
34
/*@dependent@*/ const char * release; /*!< Header release. */
35
/*@owned@*/ const char ** provides; /*!< Provides: name strings. */
36
/*@owned@*/ const char ** providesEVR; /*!< Provides: [epoch:]version[-release] strings. */
37
/*@dependent@*/ int * provideFlags; /*!< Provides: logical range qualifiers. */
38
/*@owned@*//*@null@*/ const char ** requires; /*!< Requires: name strings. */
39
/*@owned@*//*@null@*/ const char ** requiresEVR;/*!< Requires: [epoch:]version[-release] strings. */
40
/*@dependent@*//*@null@*/ int * requireFlags; /*!< Requires: logical range qualifiers. */
41
/*@owned@*//*@null@*/ const char ** baseNames; /*!< Header file basenames. */
42
/*@dependent@*//*@null@*/ int_32 * epoch; /*!< Header epoch (if any). */
43
int providesCount; /*!< No. of Provide:'s in header. */
44
int requiresCount; /*!< No. of Require:'s in header. */
45
int filesCount; /*!< No. of files in header. */
46
int npreds; /*!< No. of predecessors. */
47
int depth; /*!< Max. depth in dependency tree. */
48
struct tsortInfo tsi; /*!< Dependency tsort data. */
49
uint_32 multiLib; /* MULTILIB */
50
/*@kept@*//*@null@*/ const void * key; /*!< Private data associated with a package (e.g. file name of package). */
51
/*@null@*/ rpmRelocation * relocs;
56
* A single available item (e.g. a Provides: dependency).
58
struct availableIndexEntry {
59
/*@dependent@*/ struct availablePackage * package; /*!< Containing package. */
60
/*@dependent@*/ const char * entry; /*!< Available item name. */
61
int entryLen; /*!< No. of bytes in name. */
62
int entryIx; /*!< Item index. */
64
IET_PROVIDES=1 /*!< A Provides: dependency. */
65
} type; /*!< Type of available item. */
69
* Index of all available items.
71
struct availableIndex {
72
/*@null@*/ struct availableIndexEntry * index; /*!< Array of available items. */
73
int size; /*!< No. of available items. */
77
* A file to be installed/removed.
79
struct fileIndexEntry {
80
int pkgNum; /*!< Containing package number. */
81
int fileFlags; /* MULTILIB */
82
/*@dependent@*/ /*@null@*/ const char * baseName; /*!< File basename. */
86
* A directory to be installed/removed.
88
typedef struct dirInfo_s {
89
/*@owned@*/ const char * dirName; /*!< Directory path (+ trailing '/'). */
90
int dirNameLen; /*!< No. bytes in directory path. */
91
/*@owned@*/ struct fileIndexEntry * files; /*!< Array of files in directory. */
92
int numFiles; /*!< No. files in directory. */
96
* Set of available packages, items, and directories.
98
typedef /*@abstract@*/ struct availableList_s {
99
/*@owned@*/ /*@null@*/ struct availablePackage * list; /*!< Set of packages. */
100
struct availableIndex index; /*!< Set of available items. */
101
int delta; /*!< Delta for pkg list reallocation. */
102
int size; /*!< No. of pkgs in list. */
103
int alloced; /*!< No. of pkgs allocated for list. */
104
int numDirs; /*!< No. of directories. */
105
/*@owned@*/ /*@null@*/ dirInfo dirs; /*!< Set of directories. */
109
* A single package instance to be installed/removed atomically.
111
struct transactionElement {
112
enum rpmTransactionType {
113
TR_ADDED, /*!< Package will be installed. */
114
TR_REMOVED /*!< Package will be removed. */
115
} type; /*!< Package disposition (installed/removed). */
117
/*@unused@*/ int addedIndex;
118
/*@unused@*/ struct {
126
* The set of packages to be installed/removed atomically.
128
struct rpmTransactionSet_s {
129
rpmtransFlags transFlags; /*!< Bit(s) to control operation. */
130
/*@null@*/ rpmCallbackFunction notify; /*!< Callback function. */
131
/*@observer@*/ /*@null@*/ rpmCallbackData notifyData;
132
/*!< Callback private data. */
133
/*@dependent@*/ rpmProblemSet probs; /*!< Current problems in transaction. */
134
rpmprobFilterFlags ignoreSet; /*!< Bits to filter current problems. */
135
int filesystemCount; /*!< No. of mounted filesystems. */
136
/*@dependent@*/ const char ** filesystems; /*!< Mounted filesystem names. */
137
/*@only@*/ struct diskspaceInfo * di; /*!< Per filesystem disk/inode usage. */
138
/*@kept@*/ /*@null@*/ rpmdb rpmdb; /*!< Database handle. */
139
/*@only@*/ int * removedPackages; /*!< Set of packages being removed. */
140
int numRemovedPackages; /*!< No. removed rpmdb instances. */
141
int allocedRemovedPackages; /*!< Size of removed packages array. */
142
struct availableList_s addedPackages;
143
/*!< Set of packages being installed. */
144
struct availableList_s availablePackages;
145
/*!< Universe of possible packages. */
146
/*@only@*/ struct transactionElement * order;
147
/*!< Packages sorted by dependencies. */
148
int orderCount; /*!< No. of transaction elements. */
149
int orderAlloced; /*!< No. of allocated transaction elements. */
150
/*@only@*/ TFI_t flList; /*!< Transaction element(s) file info. */
151
int flEntries; /*!< No. of transaction elements. */
152
int chrootDone; /*!< Has chroot(2) been been done? */
153
/*@only@*/ const char * rootDir;/*!< Path to top of install tree. */
154
/*@only@*/ const char * currDir;/*!< Current working directory. */
155
/*@null@*/ FD_t scriptFd; /*!< Scriptlet stdout/stderr. */
156
int delta; /*!< Delta for reallocation. */
157
int id; /*!< Transaction id. */
161
* Problems encountered while checking dependencies.
163
typedef /*@abstract@*/ struct problemsSet_s {
164
rpmDependencyConflict problems; /*!< Problems encountered. */
165
int num; /*!< No. of problems found. */
166
int alloced; /*!< No. of problems allocated. */
174
* Compare package name-version-release from header with dependency, looking
176
* @deprecated Remove from API when obsoletes is correctly eliminated.
178
* @param reqName dependency name
179
* @param reqEVR dependency [epoch:]version[-release]
180
* @param reqFlags dependency logical range qualifiers
181
* @return 1 if dependency overlaps, 0 otherwise
183
int headerMatchesDepFlags(Header h,
184
const char * reqName, const char * reqEVR, int reqFlags)
191
#endif /* H_DEPENDS */