4 /** \ingroup rpmdep rpmtrans
6 * Structure used for handling a dependency set.
11 typedef struct sharedFileInfo_s * sharedFileInfo;
15 struct sharedFileInfo_s {
23 * A package filename set.
26 int i; /*!< File index. */
29 const char * Type; /*!< Tag name. */
31 rpmTag tagN; /*!< Header tag. */
32 /*@refcounted@*/ /*@null@*/
33 Header h; /*!< Header for file name set (or NULL) */
36 const char ** bnl; /*!< Base name(s) (from header) */
38 const char ** dnl; /*!< Directory name(s) (from header) */
41 const char ** fmd5s; /*!< File MD5 sum(s) (from header) */
43 const char ** flinks; /*!< File link(s) (from header) */
45 const char ** flangs; /*!< File lang(s) */
48 uint_32 * dil; /*!< Directory indice(s) (from header) */
50 const uint_32 * fflags; /*!< File flag(s) (from header) */
52 const uint_32 * fsizes; /*!< File size(s) (from header) */
54 const uint_32 * fmtimes; /*!< File modification time(s) (from header) */
56 uint_16 * fmodes; /*!< File mode(s) (from header) */
58 const uint_16 * frdevs; /*!< File rdev(s) (from header) */
61 const char ** fuser; /*!< File owner(s) */
63 const char ** fgroup; /*!< File group(s) */
65 uid_t * fuids; /*!< File uid(s) */
67 gid_t * fgids; /*!< File gid(s) */
70 char * fstates; /*!< File state(s) (from header) */
72 int_32 dc; /*!< No. of directories. */
73 int_32 fc; /*!< No. of files. */
75 /*=============================*/
77 transactionElement te;
79 HGE_t hge; /*!< Vector to headerGetEntry() */
80 HAE_t hae; /*!< Vector to headerAddEntry() */
81 HME_t hme; /*!< Vector to headerModifyEntry() */
82 HRE_t hre; /*!< Vector to headerRemoveEntry() */
83 HFD_t hfd; /*!< Vector to headerFreeData() */
84 /*-----------------------------*/
85 uid_t uid; /*!< File uid (default). */
86 gid_t gid; /*!< File gid (default). */
87 uint_32 flags; /*!< File flags (default). */
88 fileAction action; /*!< File disposition (default). */
90 fileAction * actions; /*!< File disposition(s). */
92 struct fingerPrint_s * fps; /*!< File fingerprint(s). */
94 const char ** obnl; /*!< Original basename(s) (from header) */
96 const char ** odnl; /*!< Original dirname(s) (from header) */
98 int_32 * odil; /*!< Original dirindex(s) (from header) */
99 int bnlmax; /*!< Length (in bytes) of longest basename. */
100 int dnlmax; /*!< Length (in bytes) of longest dirname. */
103 unsigned int archiveSize;
104 mode_t dperms; /*!< Directory perms (0755) if not mapped. */
105 mode_t fperms; /*!< File perms (0644) if not mapped. */
106 /*@only@*/ /*@null@*/
109 /*@owned@*/ /*@null@*/
112 FSM_t fsm; /*!< File state machine data. */
113 int keep_header; /*!< Keep header? */
115 sharedFileInfo replaced; /*!< (TR_ADDED) */
117 uint_32 * replacedSizes; /*!< (TR_ADDED) */
118 unsigned int record; /*!< (TR_REMOVED) */
120 #define TFIMAGIC 0x09697923
121 /*=============================*/
123 /*@refs@*/ int nrefs; /*!< Reference count. */
127 * A package dependency set.
130 int i; /*!< Element index. */
133 const char * Type; /*!< Tag name. */
134 /*@only@*/ /*@null@*/
135 const char * DNEVR; /*!< Formatted dependency string. */
137 rpmTag tagN; /*!< Header tag. */
138 /*@refcounted@*/ /*@null@*/
139 Header h; /*!< Header for dependency set (or NULL) */
142 const char ** N; /*!< Name. */
144 const char ** EVR; /*!< Epoch-Version-Release. */
146 int_32 * Flags; /*!< Flags identifying context/comparison. */
147 rpmTagType Nt, EVRt, Ft; /*!< Tag data types. */
148 int_32 Count; /*!< No. of elements */
149 /*@refs@*/ int nrefs; /*!< Reference count. */
157 * Unreference a file info set instance.
158 * @param fns file info set
159 * @return NULL always
161 /*@unused@*/ /*@null@*/
162 rpmFNSet rpmfnsUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmFNSet fns,
163 /*@null@*/ const char * msg)
166 /** @todo Remove debugging entry from the ABI. */
169 rpmFNSet XrpmfnsUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmFNSet fns,
170 /*@null@*/ const char * msg, const char * fn, unsigned ln)
173 #define rpmfnsUnlink(_fns, _msg) XrpmfnsUnlink(_fns, _msg, __FILE__, __LINE__)
176 * Reference a file info set instance.
177 * @param fns file info set
178 * @return new file info set reference
181 rpmFNSet rpmfnsLink (/*@null@*/ rpmFNSet fns, /*@null@*/ const char * msg)
184 /** @todo Remove debugging entry from the ABI. */
185 rpmFNSet XrpmfnsLink (/*@null@*/ rpmFNSet fns, /*@null@*/ const char * msg,
186 const char * fn, unsigned ln)
188 #define rpmfnsLink(_fns, _msg) XrpmfnsLink(_fns, _msg, __FILE__, __LINE__)
191 * Destroy a file name set.
192 * @param ds file name set
193 * @return NULL always
196 rpmFNSet fnsFree(/*@killref@*/ /*@only@*/ /*@null@*/ rpmFNSet fns)
200 * Create and load a file name set.
202 * @param tagN RPMTAG_BASENAMES
203 * @param scareMem Use pointers to refcounted header memory?
204 * @return new file name set
207 rpmFNSet fnsNew(Header h, rpmTag tagN, int scareMem)
211 * Unreference a dependency set instance.
212 * @param ds dependency set
213 * @return NULL always
215 /*@unused@*/ /*@null@*/
216 rpmDepSet rpmdsUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmDepSet ds,
217 /*@null@*/ const char * msg)
220 /** @todo Remove debugging entry from the ABI. */
223 rpmDepSet XrpmdsUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmDepSet ds,
224 /*@null@*/ const char * msg, const char * fn, unsigned ln)
227 #define rpmdsUnlink(_ds, _msg) XrpmdsUnlink(_ds, _msg, __FILE__, __LINE__)
230 * Reference a dependency set instance.
231 * @param ds dependency set
232 * @return new dependency set reference
235 rpmDepSet rpmdsLink (/*@null@*/ rpmDepSet ds, /*@null@*/ const char * msg)
238 /** @todo Remove debugging entry from the ABI. */
239 rpmDepSet XrpmdsLink (/*@null@*/ rpmDepSet ds, /*@null@*/ const char * msg,
240 const char * fn, unsigned ln)
242 #define rpmdsLink(_ds, _msg) XrpmdsLink(_ds, _msg, __FILE__, __LINE__)
245 * Destroy a dependency set.
246 * @param ds dependency set
247 * @return NULL always
250 rpmDepSet dsFree(/*@killref@*/ /*@only@*/ /*@null@*/ rpmDepSet ds)
253 * Create and load a dependency set.
255 * @param tagN type of dependency
256 * @param scareMem Use pointers to refcounted header memory?
257 * @return new dependency set
260 rpmDepSet dsNew(Header h, rpmTag tagN, int scareMem)
264 * Return new formatted dependency string.
265 * @param dspfx formatted dependency string prefix
266 * @param ds dependency set
267 * @return new formatted dependency (malloc'ed)
270 char * dsDNEVR(const char * dspfx, const rpmDepSet ds)
274 * Create, load and initialize a dependency for this header.
276 * @param tagN type of dependency
277 * @param Flags comparison flags
278 * @return new dependency set
281 rpmDepSet dsThis(Header h, rpmTag tagN, int_32 Flags)
285 * Create, load and initialize a dependency set of size 1.
286 * @param tagN type of dependency
288 * @param EVR epoch:version-release
289 * @param Flags comparison flags
290 * @return new dependency set
293 rpmDepSet dsSingle(rpmTag tagN, const char * N, const char * EVR, int_32 Flags)
297 * Return dependency set count.
298 * @param ds dependency set
299 * @return current count
301 int dsiGetCount(/*@null@*/ rpmDepSet ds)
305 * Return dependency set index.
306 * @param ds dependency set
307 * @return current index
309 int dsiGetIx(/*@null@*/ rpmDepSet ds)
313 * Set dependency set index.
314 * @param ds dependency set
315 * @param ix new index
316 * @return current index
318 int dsiSetIx(/*@null@*/ rpmDepSet ds, int ix)
322 * Return current formatted dependency string.
323 * @param ds dependency set
324 * @return current dependency DNEVR, NULL on invalid
327 const char * dsiGetDNEVR(/*@null@*/ rpmDepSet ds)
331 * Return current dependency name.
332 * @param ds dependency set
333 * @return current dependency name, NULL on invalid
336 const char * dsiGetN(/*@null@*/ rpmDepSet ds)
340 * Return current dependency epoch-version-release.
341 * @param ds dependency set
342 * @return current dependency EVR, NULL on invalid
345 const char * dsiGetEVR(/*@null@*/ rpmDepSet ds)
349 * Return current dependency Flags.
350 * @param ds dependency set
351 * @return current dependency EVR, 0 on invalid
353 int_32 dsiGetFlags(/*@null@*/ rpmDepSet ds)
357 * Notify of results of dependency match;
358 * @param ds dependency set
359 * @param where where dependency was resolved (or NULL)
360 * @param rc 0 == YES, otherwise NO
362 /*@-globuse@*/ /* FIX: rpmMessage annotation is a lie */
363 void dsiNotify(/*@null@*/ rpmDepSet ds, /*@null@*/ const char * where, int rc)
364 /*@globals fileSystem @*/
365 /*@modifies fileSystem @*/;
369 * Return next dependency set iterator index.
370 * @param ds dependency set
371 * @return dependency set iterator index, -1 on termination
373 int dsiNext(/*@null@*/ rpmDepSet ds)
377 * Initialize dependency set iterator.
378 * @param ds dependency set
379 * @return dependency set
382 rpmDepSet dsiInit(/*@returned@*/ /*@null@*/ rpmDepSet ds)
386 * Compare two versioned dependency ranges, looking for overlap.
387 * @param A 1st dependency
388 * @param B 2nd dependency
389 * @return 1 if dependencies overlap, 0 otherwise
391 int dsCompare(const rpmDepSet A, const rpmDepSet B)
395 * Report a Requires: or Conflicts: dependency problem.
397 void dsProblem(/*@null@*/ rpmProblemSet tsprobs,
398 const char * pkgNEVR, const rpmDepSet ds,
399 /*@only@*/ /*@null@*/ const fnpyKey * suggestedKeys)
400 /*@modifies tsprobs @*/;
403 * Compare package provides dependencies from header with a single dependency.
405 * @param ds dependency set
407 int rangeMatchesDepFlags (Header h, const rpmDepSet req)
411 * Compare package name-version-release from header with a single dependency.
412 * @deprecated Remove from API when obsoletes is correctly implemented.
414 * @param req dependency
415 * @return 1 if dependency overlaps, 0 otherwise
417 int headerMatchesDepFlags(const Header h, const rpmDepSet req)