4 /** \ingroup rpmdep rpmtrans
6 * Structure(s) used for file info tag sets.
9 #include <rpm/rpmtypes.h>
10 #include <rpm/rpmvf.h>
11 #include <rpm/rpmpgp.h>
17 extern int _rpmfi_debug;
21 * These are the file types used internally by rpm. The file
22 * type is determined by applying stat(2) macros like S_ISDIR to
23 * the file mode tag from a header. The values are arbitrary,
24 * but are identical to the linux stat(2) file types.
26 typedef enum rpmFileTypes_e {
27 PIPE = 1, /*!< pipe/fifo */
28 CDEV = 2, /*!< character device */
29 XDIR = 4, /*!< directory */
30 BDEV = 6, /*!< block device */
31 REG = 8, /*!< regular file */
32 LINK = 10, /*!< hard link */
33 SOCK = 12 /*!< socket */
37 * File States (when installed).
39 typedef enum rpmfileState_e {
40 RPMFILE_STATE_NORMAL = 0,
41 RPMFILE_STATE_REPLACED = 1,
42 RPMFILE_STATE_NOTINSTALLED = 2,
43 RPMFILE_STATE_NETSHARED = 3,
44 RPMFILE_STATE_WRONGCOLOR = 4
46 #define RPMFILE_STATE_MISSING -1 /* XXX used for unavailable data */
51 typedef enum rpmfileAttrs_e {
53 RPMFILE_CONFIG = (1 << 0), /*!< from %%config */
54 RPMFILE_DOC = (1 << 1), /*!< from %%doc */
55 RPMFILE_ICON = (1 << 2), /*!< from %%donotuse. */
56 RPMFILE_MISSINGOK = (1 << 3), /*!< from %%config(missingok) */
57 RPMFILE_NOREPLACE = (1 << 4), /*!< from %%config(noreplace) */
58 RPMFILE_SPECFILE = (1 << 5), /*!< @todo (unnecessary) marks 1st file in srpm. */
59 RPMFILE_GHOST = (1 << 6), /*!< from %%ghost */
60 RPMFILE_LICENSE = (1 << 7), /*!< from %%license */
61 RPMFILE_README = (1 << 8), /*!< from %%readme */
62 RPMFILE_EXCLUDE = (1 << 9), /*!< from %%exclude, internal */
63 RPMFILE_UNPATCHED = (1 << 10), /*!< placeholder (SuSE) */
64 RPMFILE_PUBKEY = (1 << 11), /*!< from %%pubkey */
65 RPMFILE_POLICY = (1 << 12) /*!< from %%policy */
68 #define RPMFILE_ALL ~(RPMFILE_NONE)
71 * File disposition(s) during package install/erase transaction.
73 typedef enum rpmFileAction_e {
74 FA_UNKNOWN = 0, /*!< initial action for file ... */
75 FA_CREATE, /*!< ... copy in from payload. */
76 FA_COPYIN, /*!< ... copy in from payload. */
77 FA_COPYOUT, /*!< ... copy out to payload. */
78 FA_BACKUP, /*!< ... renamed with ".rpmorig" extension. */
79 FA_SAVE, /*!< ... renamed with ".rpmsave" extension. */
80 FA_SKIP, /*!< ... already replaced, don't remove. */
81 FA_ALTNAME, /*!< ... create with ".rpmnew" extension. */
82 FA_ERASE, /*!< ... to be removed. */
83 FA_SKIPNSTATE, /*!< ... untouched, state "not installed". */
84 FA_SKIPNETSHARED, /*!< ... untouched, state "netshared". */
85 FA_SKIPCOLOR /*!< ... untouched, state "wrong color". */
88 #define XFA_SKIPPING(_a) \
89 ((_a) == FA_SKIP || (_a) == FA_SKIPNSTATE || (_a) == FA_SKIPNETSHARED || (_a) == FA_SKIPCOLOR)
92 * We pass these around as an array with a sentinel.
94 struct rpmRelocation_s {
95 char * oldPath; /*!< NULL here evals to RPMTAG_DEFAULTPREFIX, */
96 char * newPath; /*!< NULL means to omit the file completely! */
100 * Unreference a file info set instance.
101 * @param fi file info set
103 * @return NULL always
105 rpmfi rpmfiUnlink (rpmfi fi,
109 * Reference a file info set instance.
110 * @param fi file info set
112 * @return new file info set reference
114 rpmfi rpmfiLink (rpmfi fi, const char * msg);
117 * Return file count from file info set.
118 * @param fi file info set
119 * @return current file count
121 rpm_count_t rpmfiFC(rpmfi fi);
124 * Return current file index from file info set.
125 * @param fi file info set
126 * @return current file index
128 int rpmfiFX(rpmfi fi);
131 * Set current file index in file info set.
132 * @param fi file info set
133 * @param fx new file index
134 * @return current file index
136 int rpmfiSetFX(rpmfi fi, int fx);
139 * Return directory count from file info set.
140 * @param fi file info set
141 * @return current directory count
143 rpm_count_t rpmfiDC(rpmfi fi);
146 * Return current directory index from file info set.
147 * @param fi file info set
148 * @return current directory index
150 int rpmfiDX(rpmfi fi);
153 * Set current directory index in file info set.
154 * @param fi file info set
155 * @param dx new directory index
156 * @return current directory index
158 int rpmfiSetDX(rpmfi fi, int dx);
161 * Return current base name from file info set.
162 * @param fi file info set
163 * @return current base name, NULL on invalid
165 const char * rpmfiBN(rpmfi fi);
168 * Return current directory name from file info set.
169 * @param fi file info set
170 * @return current directory, NULL on invalid
172 const char * rpmfiDN(rpmfi fi);
175 * Return current file name from file info set.
176 * @param fi file info set
177 * @return current file name
179 const char * rpmfiFN(rpmfi fi);
182 * Return current file flags from file info set.
183 * @param fi file info set
184 * @return current file flags, 0 on invalid
186 rpmfileAttrs rpmfiFFlags(rpmfi fi);
189 * Return current file verify flags from file info set.
190 * @param fi file info set
191 * @return current file verify flags, 0 on invalid
193 rpmVerifyAttrs rpmfiVFlags(rpmfi fi);
196 * Return current file mode from file info set.
197 * @param fi file info set
198 * @return current file mode, 0 on invalid
200 rpm_mode_t rpmfiFMode(rpmfi fi);
203 * Return current file state from file info set.
204 * @param fi file info set
205 * @return current file state, 0 on invalid
207 rpmfileState rpmfiFState(rpmfi fi);
210 * Return current file (binary) digest of file info set.
211 * @param fi file info set
212 * @retval algo digest hash algoritm used (pass NULL to ignore)
213 * @retval diglen digest hash length (pass NULL to ignore)
214 * @return current file digest, NULL on invalid
216 const unsigned char * rpmfiFDigest(rpmfi fi, pgpHashAlgo *algo, size_t *diglen);
219 * Return current file (binary) md5 digest from file info set.
220 * @param fi file info set
221 * @return current file md5 digest, NULL on invalid
223 const unsigned char * rpmfiMD5(rpmfi fi);
226 * Return current file linkto (i.e. symlink(2) target) from file info set.
227 * @param fi file info set
228 * @return current file linkto, NULL on invalid
230 const char * rpmfiFLink(rpmfi fi);
233 * Return current file size from file info set.
234 * @param fi file info set
235 * @return current file size, 0 on invalid
237 rpm_off_t rpmfiFSize(rpmfi fi);
240 * Return current file rdev from file info set.
241 * @param fi file info set
242 * @return current file rdev, 0 on invalid
244 rpm_rdev_t rpmfiFRdev(rpmfi fi);
247 * Return current file inode from file info set.
248 * @param fi file info set
249 * @return current file inode, 0 on invalid
251 rpm_ino_t rpmfiFInode(rpmfi fi);
254 * Return union of all file color bits from file info set.
255 * @param fi file info set
256 * @return current color
258 rpm_color_t rpmfiColor(rpmfi fi);
261 * Return current file color bits from file info set.
262 * @param fi file info set
263 * @return current file color
265 rpm_color_t rpmfiFColor(rpmfi fi);
268 * Return current file class from file info set.
269 * @param fi file info set
270 * @return current file class, 0 on invalid
272 const char * rpmfiFClass(rpmfi fi);
275 * Return current file security context from file info set.
276 * @param fi file info set
277 * @return current file context, 0 on invalid
279 const char * rpmfiFContext(rpmfi fi);
282 * Return current file depends dictionary from file info set.
283 * @param fi file info set
284 * @retval *fddictp file depends dictionary array (or NULL)
285 * @return no. of file depends entries, 0 on invalid
287 uint32_t rpmfiFDepends(rpmfi fi,
288 const uint32_t ** fddictp);
291 * Return (calculated) current file nlink count from file info set.
292 * @param fi file info set
293 * @return current file nlink count, 0 on invalid
295 uint32_t rpmfiFNlink(rpmfi fi);
298 * Return current file modify time from file info set.
299 * @param fi file info set
300 * @return current file modify time, 0 on invalid
302 rpm_time_t rpmfiFMtime(rpmfi fi);
305 * Return current file owner from file info set.
306 * @param fi file info set
307 * @return current file owner, NULL on invalid
309 const char * rpmfiFUser(rpmfi fi);
312 * Return current file group from file info set.
313 * @param fi file info set
314 * @return current file group, NULL on invalid
316 const char * rpmfiFGroup(rpmfi fi);
319 * Return next file iterator index.
320 * @param fi file info set
321 * @return file iterator index, -1 on termination
323 int rpmfiNext(rpmfi fi);
326 * Initialize file iterator index.
327 * @param fi file info set
328 * @param fx file iterator index
329 * @return file info set
331 rpmfi rpmfiInit(rpmfi fi, int fx);
334 * Return next directory iterator index.
335 * @param fi file info set
336 * @return directory iterator index, -1 on termination
338 int rpmfiNextD(rpmfi fi);
341 * Initialize directory iterator index.
342 * @param fi file info set
343 * @param dx directory iterator index
344 * @return file info set, NULL if dx is out of range
346 rpmfi rpmfiInitD(rpmfi fi, int dx);
349 * Destroy a file info set.
350 * @param fi file info set
351 * @return NULL always
353 rpmfi rpmfiFree(rpmfi fi);
356 * Create and load a file info set.
357 * @deprecated Only scareMem = 0 will be permitted.
358 * @param ts transaction set (NULL skips path relocation)
360 * @param tagN RPMTAG_BASENAMES
361 * @param scareMem Use pointers to refcounted header memory?
362 * @return new file info set
364 rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, int scareMem);
367 * Retrieve file names from header.
369 * The representation of file names in package headers changed in rpm-4.0.
370 * Originally, file names were stored as an array of absolute paths.
371 * In rpm-4.0, file names are stored as separate arrays of dirname's and
372 * basename's, * with a dirname index to associate the correct dirname
375 * This function is used to retrieve file names independent of how the
376 * file names are represented in the package header.
379 * @param tagN RPMTAG_BASENAMES | PMTAG_ORIGBASENAMES
380 * @retval *fnp array of file names
381 * @retval *fcp number of files
383 void rpmfiBuildFNames(Header h, rpmTag tagN,
384 const char *** fnp, rpm_count_t * fcp);
387 * Return file type from mode_t.
388 * @param mode file mode bits (from header)
391 rpmFileTypes rpmfiWhatis(rpm_mode_t mode);
394 * Return file info comparison.
395 * @param afi 1st file info
396 * @param bfi 2nd file info
397 * @return 0 if identical
399 int rpmfiCompare(const rpmfi afi, const rpmfi bfi);
402 * Return file disposition.
403 * @param ofi old file info
404 * @param nfi new file info
405 * @param skipMissing OK to skip missing files?
406 * @return file dispostion
408 rpmFileAction rpmfiDecideFate(const rpmfi ofi, rpmfi nfi, int skipMissing);
411 * Return whether file is conflicting config
412 * @param fi file info
413 * @return 1 if config file and file on disk conflicts
415 int rpmfiConfigConflict(const rpmfi fi);
418 * Return formatted string representation of package disposition.
419 * @param fi file info set
420 * @return formatted string
422 const char * rpmfiTypeString(rpmfi fi);