4 /** \ingroup rpmdep rpmtrans
6 * Structure(s) used for file info tag sets.
11 extern int _rpmfi_debug;
14 #if defined(_RPMFI_INTERNAL)
17 typedef struct sharedFileInfo_s * sharedFileInfo;
21 struct sharedFileInfo_s {
29 * A package filename set.
32 int i; /*!< Current file index. */
33 int j; /*!< Current directory index. */
36 const char * Type; /*!< Tag name. */
38 rpmTag tagN; /*!< Header tag. */
39 /*@refcounted@*/ /*@null@*/
40 Header h; /*!< Header for file info set (or NULL) */
43 const char ** bnl; /*!< Base name(s) (from header) */
45 const char ** dnl; /*!< Directory name(s) (from header) */
47 /*@only@*/ /*@relnull@*/
48 const char ** fmd5s; /*!< File MD5 sum(s) (from header) */
49 /*@only@*/ /*@relnull@*/
50 const char ** flinks; /*!< File link(s) (from header) */
52 const char ** flangs; /*!< File lang(s) (from header) */
54 /*@only@*/ /*@relnull@*/
55 uint_32 * dil; /*!< Directory indice(s) (from header) */
57 const uint_32 * fflags; /*!< File flag(s) (from header) */
59 const uint_32 * fsizes; /*!< File size(s) (from header) */
61 const uint_32 * fmtimes; /*!< File modification time(s) (from header) */
63 uint_16 * fmodes; /*!< File mode(s) (from header) */
65 const uint_16 * frdevs; /*!< File rdev(s) (from header) */
67 const uint_32 * finodes; /*!< File inodes(s) (from header) */
70 const char ** fuser; /*!< File owner(s) (from header) */
72 const char ** fgroup; /*!< File group(s) (from header) */
75 char * fstates; /*!< File state(s) (from header) */
78 const uint_32 * fcolors; /*!< File color bits (header) */
81 const char ** fcontexts; /*! FIle security contexts. */
84 const char ** cdict; /*!< File class dictionary (header) */
85 int_32 ncdict; /*!< No. of class entries. */
87 const uint_32 * fcdictx; /*!< File class dictionary index (header) */
90 const uint_32 * ddict; /*!< File depends dictionary (header) */
91 int_32 nddict; /*!< No. of depends entries. */
93 const uint_32 * fddictx; /*!< File depends dictionary start (header) */
95 const uint_32 * fddictn; /*!< File depends dictionary count (header) */
98 const uint_32 * vflags; /*!< File verify flag(s) (from header) */
100 int_32 dc; /*!< No. of directories. */
101 int_32 fc; /*!< No. of files. */
103 /*=============================*/
104 /*@dependent@*/ /*@relnull@*/
107 HGE_t hge; /*!< Vector to headerGetEntry() */
108 HAE_t hae; /*!< Vector to headerAddEntry() */
109 HME_t hme; /*!< Vector to headerModifyEntry() */
110 HRE_t hre; /*!< Vector to headerRemoveEntry() */
111 HFD_t hfd; /*!< Vector to headerFreeData() */
112 /*-----------------------------*/
113 uid_t uid; /*!< File uid (default). */
114 gid_t gid; /*!< File gid (default). */
115 uint_32 flags; /*!< File flags (default). */
116 fileAction action; /*!< File disposition (default). */
117 /*@owned@*/ /*@relnull@*/
118 fileAction * actions; /*!< File disposition(s). */
120 struct fingerPrint_s * fps; /*!< File fingerprint(s). */
122 const char ** obnl; /*!< Original basename(s) (from header) */
124 const char ** odnl; /*!< Original dirname(s) (from header) */
126 int_32 * odil; /*!< Original dirindex(s) (from header) */
128 /*@only@*/ /*@relnull@*/
129 unsigned char * md5s; /*!< File md5 sums in binary. */
131 /*@only@*/ /*@null@*/
132 char * fn; /*!< File name buffer. */
133 int fnlen; /*!< FIle name buffer length. */
137 unsigned int archivePos;
138 unsigned int archiveSize;
139 mode_t dperms; /*!< Directory perms (0755) if not mapped. */
140 mode_t fperms; /*!< File perms (0644) if not mapped. */
141 /*@only@*/ /*@null@*/
144 /*@owned@*/ /*@null@*/
147 FSM_t fsm; /*!< File state machine data. */
148 int keep_header; /*!< Keep header? */
149 uint_32 color; /*!< Color bit(s) from file color union. */
151 sharedFileInfo replaced; /*!< (TR_ADDED) */
153 uint_32 * replacedSizes; /*!< (TR_ADDED) */
154 unsigned int record; /*!< (TR_REMOVED) */
156 #define RPMFIMAGIC 0x09697923
157 /*=============================*/
159 /*@refs@*/ int nrefs; /*!< Reference count. */
162 #endif /* _RPMFI_INTERNAL */
169 * Unreference a file info set instance.
170 * @param fi file info set
172 * @return NULL always
174 /*@unused@*/ /*@null@*/
175 rpmfi rpmfiUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmfi fi,
176 /*@null@*/ const char * msg)
179 /** @todo Remove debugging entry from the ABI.
180 * @param fi file info set
184 * @return NULL always
188 rpmfi XrpmfiUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmfi fi,
189 /*@null@*/ const char * msg, const char * fn, unsigned ln)
192 #define rpmfiUnlink(_fi, _msg) XrpmfiUnlink(_fi, _msg, __FILE__, __LINE__)
195 * Reference a file info set instance.
196 * @param fi file info set
198 * @return new file info set reference
200 /*@unused@*/ /*@null@*/
201 rpmfi rpmfiLink (/*@null@*/ rpmfi fi, /*@null@*/ const char * msg)
204 /** @todo Remove debugging entry from the ABI.
205 * @param fi file info set
209 * @return NULL always
212 rpmfi XrpmfiLink (/*@null@*/ rpmfi fi, /*@null@*/ const char * msg,
213 const char * fn, unsigned ln)
215 #define rpmfiLink(_fi, _msg) XrpmfiLink(_fi, _msg, __FILE__, __LINE__)
218 * Return file count from file info set.
219 * @param fi file info set
220 * @return current file count
222 int rpmfiFC(/*@null@*/ rpmfi fi)
226 * Return current file index from file info set.
227 * @param fi file info set
228 * @return current file index
231 int rpmfiFX(/*@null@*/ rpmfi fi)
235 * Set current file index in file info set.
236 * @param fi file info set
237 * @param fx new file index
238 * @return current file index
241 int rpmfiSetFX(/*@null@*/ rpmfi fi, int fx)
245 * Return directory count from file info set.
246 * @param fi file info set
247 * @return current directory count
249 int rpmfiDC(/*@null@*/ rpmfi fi)
253 * Return current directory index from file info set.
254 * @param fi file info set
255 * @return current directory index
257 int rpmfiDX(/*@null@*/ rpmfi fi)
261 * Set current directory index in file info set.
262 * @param fi file info set
263 * @param dx new directory index
264 * @return current directory index
266 int rpmfiSetDX(/*@null@*/ rpmfi fi, int dx)
270 * Return current base name from file info set.
271 * @param fi file info set
272 * @return current base name, NULL on invalid
274 /*@observer@*/ /*@null@*/
275 extern const char * rpmfiBN(/*@null@*/ rpmfi fi)
279 * Return current directory name from file info set.
280 * @param fi file info set
281 * @return current directory, NULL on invalid
283 /*@observer@*/ /*@null@*/
284 extern const char * rpmfiDN(/*@null@*/ rpmfi fi)
288 * Return current file name from file info set.
289 * @param fi file info set
290 * @return current file name
293 extern const char * rpmfiFN(/*@null@*/ rpmfi fi)
297 * Return current file flags from file info set.
298 * @param fi file info set
299 * @return current file flags, 0 on invalid
301 int_32 rpmfiFFlags(/*@null@*/ rpmfi fi)
305 * Return current file verify flags from file info set.
306 * @param fi file info set
307 * @return current file verify flags, 0 on invalid
309 int_32 rpmfiVFlags(/*@null@*/ rpmfi fi)
313 * Return current file mode from file info set.
314 * @param fi file info set
315 * @return current file mode, 0 on invalid
317 int_16 rpmfiFMode(/*@null@*/ rpmfi fi)
321 * Return current file state from file info set.
322 * @param fi file info set
323 * @return current file state, 0 on invalid
325 rpmfileState rpmfiFState(/*@null@*/ rpmfi fi)
329 * Return current file (binary) md5 digest from file info set.
330 * @param fi file info set
331 * @return current file md5 digest, NULL on invalid
333 /*@observer@*/ /*@null@*/
334 extern const unsigned char * rpmfiMD5(/*@null@*/ rpmfi fi)
338 * Return current file linkto (i.e. symlink(2) target) from file info set.
339 * @param fi file info set
340 * @return current file linkto, NULL on invalid
342 /*@observer@*/ /*@null@*/
343 extern const char * rpmfiFLink(/*@null@*/ rpmfi fi)
347 * Return current file size from file info set.
348 * @param fi file info set
349 * @return current file size, 0 on invalid
351 int_32 rpmfiFSize(/*@null@*/ rpmfi fi)
355 * Return current file rdev from file info set.
356 * @param fi file info set
357 * @return current file rdev, 0 on invalid
359 int_16 rpmfiFRdev(/*@null@*/ rpmfi fi)
363 * Return current file inode from file info set.
364 * @param fi file info set
365 * @return current file inode, 0 on invalid
367 int_32 rpmfiFInode(/*@null@*/ rpmfi fi)
371 * Return union of all file color bits from file info set.
372 * @param fi file info set
373 * @return current color
375 uint_32 rpmfiColor(/*@null@*/ rpmfi fi)
379 * Return current file color bits from file info set.
380 * @param fi file info set
381 * @return current file color
383 uint_32 rpmfiFColor(/*@null@*/ rpmfi fi)
387 * Return current file class from file info set.
388 * @param fi file info set
389 * @return current file class, 0 on invalid
392 /*@observer@*/ /*@null@*/
393 extern const char * rpmfiFClass(/*@null@*/ rpmfi fi)
398 * Return current file security context from file info set.
399 * @param fi file info set
400 * @return current file context, 0 on invalid
403 /*@observer@*/ /*@null@*/
404 extern const char * rpmfiFContext(/*@null@*/ rpmfi fi)
409 * Return current file depends dictionary from file info set.
410 * @param fi file info set
411 * @retval *fddictp file depends dictionary array (or NULL)
412 * @return no. of file depends entries, 0 on invalid
414 int_32 rpmfiFDepends(/*@null@*/ rpmfi fi,
415 /*@out@*/ /*@null@*/ const int_32 ** fddictp)
416 /*@modifies *fddictp @*/;
419 * Return (calculated) current file nlink count from file info set.
420 * @param fi file info set
421 * @return current file nlink count, 0 on invalid
423 int_32 rpmfiFNlink(/*@null@*/ rpmfi fi)
427 * Return current file modify time from file info set.
428 * @param fi file info set
429 * @return current file modify time, 0 on invalid
431 int_32 rpmfiFMtime(/*@null@*/ rpmfi fi)
435 * Return current file owner from file info set.
436 * @param fi file info set
437 * @return current file owner, NULL on invalid
439 /*@observer@*/ /*@null@*/
440 extern const char * rpmfiFUser(/*@null@*/ rpmfi fi)
444 * Return current file group from file info set.
445 * @param fi file info set
446 * @return current file group, NULL on invalid
448 /*@observer@*/ /*@null@*/
449 extern const char * rpmfiFGroup(/*@null@*/ rpmfi fi)
453 * Return next file iterator index.
454 * @param fi file info set
455 * @return file iterator index, -1 on termination
457 int rpmfiNext(/*@null@*/ rpmfi fi)
461 * Initialize file iterator index.
462 * @param fi file info set
463 * @param fx file iterator index
464 * @return file info set
467 rpmfi rpmfiInit(/*@null@*/ rpmfi fi, int fx)
471 * Return next directory iterator index.
472 * @param fi file info set
473 * @return directory iterator index, -1 on termination
476 int rpmfiNextD(/*@null@*/ rpmfi fi)
480 * Initialize directory iterator index.
481 * @param fi file info set
482 * @param dx directory iterator index
483 * @return file info set, NULL if dx is out of range
485 /*@unused@*/ /*@null@*/
486 rpmfi rpmfiInitD(/*@null@*/ rpmfi fi, int dx)
490 * Destroy a file info set.
491 * @param fi file info set
492 * @return NULL always
495 rpmfi rpmfiFree(/*@killref@*/ /*@only@*/ /*@null@*/ rpmfi fi)
496 /*@globals fileSystem @*/
497 /*@modifies fi, fileSystem @*/;
500 * Create and load a file info set.
501 * @param ts transaction set (NULL skips path relocation)
503 * @param tagN RPMTAG_BASENAMES
504 * @param scareMem Use pointers to refcounted header memory?
505 * @return new file info set
508 rpmfi rpmfiNew(/*@null@*/ const rpmts ts, Header h, rpmTag tagN, int scareMem)
509 /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
510 /*@modifies ts, h, rpmGlobalMacroContext, fileSystem @*/;
513 * Retrieve file classes from header.
515 * This function is used to retrieve file classes from the header.
518 * @retval *fclassp array of file classes
519 * @retval *fcp number of files
521 void rpmfiBuildFClasses(Header h,
522 /*@out@*/ const char *** fclassp, /*@out@*/ int * fcp)
523 /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
524 /*@modifies h, *fclassp, *fcp, rpmGlobalMacroContext, fileSystem @*/;
527 * Retrieve file security contexts from header.
529 * This function is used to retrieve file contexts from the header.
532 * @retval *fcontextp array of file contexts
533 * @retval *fcp number of files
535 void rpmfiBuildFContexts(Header h,
536 /*@out@*/ const char *** fcontextp, /*@out@*/ int * fcp)
537 /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
538 /*@modifies h, *fcontextp, *fcp, rpmGlobalMacroContext, fileSystem @*/;
541 * Retrieve file security contexts from file system.
543 * This function is used to retrieve file contexts from the file system.
546 * @retval *fcontextp array of file contexts
547 * @retval *fcp number of files
549 void rpmfiBuildFSContexts(Header h,
550 /*@out@*/ const char *** fcontextp, /*@out@*/ int * fcp)
551 /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
552 /*@modifies h, *fcontextp, *fcp, rpmGlobalMacroContext, fileSystem @*/;
555 * Retrieve file security contexts from policy RE's.
557 * This function is used to retrieve file contexts from policy RE's.
560 * @retval *fcontextp array of file contexts
561 * @retval *fcp number of files
563 void rpmfiBuildREContexts(Header h,
564 /*@out@*/ const char *** fcontextp, /*@out@*/ int * fcp)
565 /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
566 /*@modifies h, *fcontextp, *fcp, rpmGlobalMacroContext, fileSystem @*/;
569 * Retrieve per-file dependencies from header.
571 * This function is used to retrieve per-file dependencies from the header.
574 * @param tagN RPMTAG_PROVIDENAME | RPMTAG_REQUIRENAME
575 * @retval *fdepsp array of file dependencies
576 * @retval *fcp number of files
578 void rpmfiBuildFDeps(Header h, rpmTag tagN,
579 /*@out@*/ const char *** fdepsp, /*@out@*/ int * fcp)
580 /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
581 /*@modifies h, *fdepsp, *fcp, rpmGlobalMacroContext, fileSystem @*/;
584 * Return file type from mode_t.
585 * @param mode file mode bits (from header)
588 fileTypes whatis(uint_16 mode)
592 * Return file info comparison.
593 * @param afi 1st file info
594 * @param bfi 2nd file info
595 * @return 0 if identical
597 int rpmfiCompare(const rpmfi afi, const rpmfi bfi)
601 * Return file disposition.
602 * @param ofi old file info
603 * @param nfi new file info
604 * @param skipMissing OK to skip missing files?
605 * @return file dispostion
607 fileAction rpmfiDecideFate(const rpmfi ofi, rpmfi nfi, int skipMissing)
608 /*@globals h_errno, fileSystem, internalState @*/
609 /*@modifies nfi, fileSystem, internalState @*/;
612 * Return formatted string representation of package disposition.
613 * @param fi file info set
614 * @return formatted string
618 const char *const rpmfiTypeString(rpmfi fi)