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>
19 * These are the file types used internally by rpm. The file
20 * type is determined by applying stat(2) macros like S_ISDIR to
21 * the file mode tag from a header. The values are arbitrary,
22 * but are identical to the linux stat(2) file types.
24 typedef enum rpmFileTypes_e {
25 PIPE = 1, /*!< pipe/fifo */
26 CDEV = 2, /*!< character device */
27 XDIR = 4, /*!< directory */
28 BDEV = 6, /*!< block device */
29 REG = 8, /*!< regular file */
30 LINK = 10, /*!< hard link */
31 SOCK = 12 /*!< socket */
35 * File States (when installed).
37 typedef enum rpmfileState_e {
38 RPMFILE_STATE_MISSING = -1, /* used for unavailable data */
39 RPMFILE_STATE_NORMAL = 0,
40 RPMFILE_STATE_REPLACED = 1,
41 RPMFILE_STATE_NOTINSTALLED = 2,
42 RPMFILE_STATE_NETSHARED = 3,
43 RPMFILE_STATE_WRONGCOLOR = 4
46 #define RPMFILE_IS_INSTALLED(_x) ((_x) == RPMFILE_STATE_NORMAL || (_x) == RPMFILE_STATE_NETSHARED)
49 * Exported File Attributes (ie RPMTAG_FILEFLAGS)
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 /* bits 9-10 unused */
63 RPMFILE_PUBKEY = (1 << 11), /*!< from %%pubkey */
64 RPMFILE_SECMANIFEST = (1 << 12), /*!< from %%manifest */
67 typedef rpmFlags rpmfileAttrs;
69 #define RPMFILE_ALL ~(RPMFILE_NONE)
72 * File disposition(s) during package install/erase transaction.
74 typedef enum rpmFileAction_e {
75 FA_UNKNOWN = 0, /*!< initial action for file ... */
76 FA_CREATE, /*!< ... copy in from payload. */
77 FA_COPYIN, /*!< ... copy in from payload. */
78 FA_COPYOUT, /*!< ... copy out to payload. */
79 FA_BACKUP, /*!< ... renamed with ".rpmorig" extension. */
80 FA_SAVE, /*!< ... renamed with ".rpmsave" extension. */
81 FA_SKIP, /*!< ... already replaced, don't remove. */
82 FA_ALTNAME, /*!< ... create with ".rpmnew" extension. */
83 FA_ERASE, /*!< ... to be removed. */
84 FA_SKIPNSTATE, /*!< ... untouched, state "not installed". */
85 FA_SKIPNETSHARED, /*!< ... untouched, state "netshared". */
86 FA_SKIPCOLOR /*!< ... untouched, state "wrong color". */
89 #define XFA_SKIPPING(_a) \
90 ((_a) == FA_SKIP || (_a) == FA_SKIPNSTATE || (_a) == FA_SKIPNETSHARED || (_a) == FA_SKIPCOLOR)
93 * We pass these around as an array with a sentinel.
95 struct rpmRelocation_s {
96 char * oldPath; /*!< NULL here evals to RPMTAG_DEFAULTPREFIX, */
97 char * newPath; /*!< NULL means to omit the file completely! */
101 * Reference a file info set instance.
102 * @param fi file info set
103 * @return new file info set reference
105 rpmfi rpmfiLink (rpmfi fi);
108 * Return file count from file info set.
109 * @param fi file info set
110 * @return current file count
112 rpm_count_t rpmfiFC(rpmfi fi);
115 * Return current file index from file info set.
116 * @param fi file info set
117 * @return current file index
119 int rpmfiFX(rpmfi fi);
122 * Set current file index in file info set.
123 * @param fi file info set
124 * @param fx new file index
125 * @return current file index
127 int rpmfiSetFX(rpmfi fi, int fx);
130 * Return directory count from file info set.
131 * @param fi file info set
132 * @return current directory count
134 rpm_count_t rpmfiDC(rpmfi fi);
137 * Return current directory index from file info set.
138 * @param fi file info set
139 * @return current directory index
141 int rpmfiDX(rpmfi fi);
144 * Set current directory index in file info set.
145 * @param fi file info set
146 * @param dx new directory index
147 * @return current directory index
149 int rpmfiSetDX(rpmfi fi, int dx);
152 * Return current base name from file info set.
153 * @param fi file info set
154 * @return current base name, NULL on invalid
156 const char * rpmfiBN(rpmfi fi);
159 * Return current directory name from file info set.
160 * @param fi file info set
161 * @return current directory, NULL on invalid
163 const char * rpmfiDN(rpmfi fi);
166 * Return current file name from file info set.
167 * @param fi file info set
168 * @return current file name
170 const char * rpmfiFN(rpmfi fi);
173 * Return current file flags from file info set.
174 * @param fi file info set
175 * @return current file flags, 0 on invalid
177 rpmfileAttrs rpmfiFFlags(rpmfi fi);
180 * Return current file verify flags from file info set.
181 * @param fi file info set
182 * @return current file verify flags, 0 on invalid
184 rpmVerifyAttrs rpmfiVFlags(rpmfi fi);
187 * Return current file mode from file info set.
188 * @param fi file info set
189 * @return current file mode, 0 on invalid
191 rpm_mode_t rpmfiFMode(rpmfi fi);
194 * Return current file state from file info set.
195 * @param fi file info set
196 * @return current file state, 0 on invalid
198 rpmfileState rpmfiFState(rpmfi fi);
201 * Return digest algorithm of a file info set.
202 * @param fi file info set
203 * @return digest algorithm of file info set, 0 on invalid
205 int rpmfiDigestAlgo(rpmfi fi);
208 * Return current file (binary) digest of file info set.
209 * @param fi file info set
210 * @retval algo digest hash algoritm used (pass NULL to ignore)
211 * @retval diglen digest hash length (pass NULL to ignore)
212 * @return current file digest, NULL on invalid
214 const unsigned char * rpmfiFDigest(rpmfi fi, int *algo, size_t *diglen);
217 * Return current file (hex) digest of file info set.
218 * The file info set stores file digests in binary format to conserve
219 * memory, this converts the binary data back to hex presentation used in
221 * @param fi file info set
222 * @retval algo digest hash algoritm used (pass NULL to ignore)
223 * @return current file digest (malloc'ed), NULL on invalid
225 char * rpmfiFDigestHex(rpmfi fi, int *algo);
228 * Return current file (binary) md5 digest from file info set.
229 * @deprecated Use rpmfiFDigest() instead
230 * @param fi file info set
231 * @return current file md5 digest, NULL on invalid
233 const unsigned char * rpmfiMD5(rpmfi fi) RPM_GNUC_DEPRECATED;
236 * Return current file linkto (i.e. symlink(2) target) from file info set.
237 * @param fi file info set
238 * @return current file linkto, NULL on invalid
240 const char * rpmfiFLink(rpmfi fi);
243 * Return current file size from file info set.
244 * @param fi file info set
245 * @return current file size, 0 on invalid
247 rpm_loff_t rpmfiFSize(rpmfi fi);
250 * Return current file rdev from file info set.
251 * @param fi file info set
252 * @return current file rdev, 0 on invalid
254 rpm_rdev_t rpmfiFRdev(rpmfi fi);
257 * Return current file inode from file info set.
258 * @param fi file info set
259 * @return current file inode, 0 on invalid
261 rpm_ino_t rpmfiFInode(rpmfi fi);
264 * Return union of all file color bits from file info set.
265 * @param fi file info set
266 * @return current color
268 rpm_color_t rpmfiColor(rpmfi fi);
271 * Return current file color bits from file info set.
272 * @param fi file info set
273 * @return current file color
275 rpm_color_t rpmfiFColor(rpmfi fi);
278 * Return current file class from file info set.
279 * @param fi file info set
280 * @return current file class, 0 on invalid
282 const char * rpmfiFClass(rpmfi fi);
285 * Return current file depends dictionary from file info set.
286 * @param fi file info set
287 * @retval *fddictp file depends dictionary array (or NULL)
288 * @return no. of file depends entries, 0 on invalid
290 uint32_t rpmfiFDepends(rpmfi fi,
291 const uint32_t ** fddictp);
294 * Return (calculated) current file nlink count from file info set.
295 * @param fi file info set
296 * @return current file nlink count, 0 on invalid
298 uint32_t rpmfiFNlink(rpmfi fi);
301 * Return current file modify time from file info set.
302 * @param fi file info set
303 * @return current file modify time, 0 on invalid
305 rpm_time_t rpmfiFMtime(rpmfi fi);
308 * Return current file owner from file info set.
309 * @param fi file info set
310 * @return current file owner, NULL on invalid
312 const char * rpmfiFUser(rpmfi fi);
315 * Return current file group from file info set.
316 * @param fi file info set
317 * @return current file group, NULL on invalid
319 const char * rpmfiFGroup(rpmfi fi);
322 * Return textual representation of current file capabilities
323 * from file info set. See cap_from_text(3) for details.
324 * @param fi file info set
325 * @return file capability description, "" for no capabilities
326 * and NULL on invalid
328 const char * rpmfiFCaps(rpmfi fi);
331 * Return current file language(s) from file info set.
332 * @param fi file info set
333 * @return current file language(s), NULL on invalid
335 const char * rpmfiFLangs(rpmfi fi);
338 * Return next file iterator index.
339 * @param fi file info set
340 * @return file iterator index, -1 on termination
342 int rpmfiNext(rpmfi fi);
345 * Initialize file iterator index.
346 * @param fi file info set
347 * @param fx file iterator index
348 * @return file info set
350 rpmfi rpmfiInit(rpmfi fi, int fx);
353 * Return next directory iterator index.
354 * @param fi file info set
355 * @return directory iterator index, -1 on termination
357 int rpmfiNextD(rpmfi fi);
360 * Initialize directory iterator index.
361 * @param fi file info set
362 * @param dx directory iterator index
363 * @return file info set, NULL if dx is out of range
365 rpmfi rpmfiInitD(rpmfi fi, int dx);
368 * Destroy a file info set.
369 * @param fi file info set
370 * @return NULL always
372 rpmfi rpmfiFree(rpmfi fi);
376 RPMFI_KEEPHEADER = (1 << 0),
377 RPMFI_NOFILECLASS = (1 << 1),
378 RPMFI_NOFILEDEPS = (1 << 2),
379 RPMFI_NOFILELANGS = (1 << 3),
380 RPMFI_NOFILEUSER = (1 << 4),
381 RPMFI_NOFILEGROUP = (1 << 5),
382 RPMFI_NOFILEMODES = (1 << 6),
383 RPMFI_NOFILESIZES = (1 << 7),
384 RPMFI_NOFILECAPS = (1 << 8),
385 RPMFI_NOFILELINKTOS = (1 << 9),
386 RPMFI_NOFILEDIGESTS = (1 << 10),
387 RPMFI_NOFILEMTIMES = (1 << 11),
388 RPMFI_NOFILERDEVS = (1 << 12),
389 RPMFI_NOFILEINODES = (1 << 13),
390 RPMFI_NOFILESTATES = (1 << 14),
391 RPMFI_NOFILECOLORS = (1 << 15),
392 RPMFI_NOFILEVERIFYFLAGS = (1 << 16),
393 RPMFI_NOFILEFLAGS = (1 << 17),
396 typedef rpmFlags rpmfiFlags;
398 #define RPMFI_FLAGS_ERASE \
399 (RPMFI_NOFILECLASS | RPMFI_NOFILELANGS | \
400 RPMFI_NOFILEMTIMES | RPMFI_NOFILERDEVS | RPMFI_NOFILEINODES | \
401 RPMFI_NOFILEVERIFYFLAGS)
403 #define RPMFI_FLAGS_INSTALL \
404 (RPMFI_NOFILECLASS | RPMFI_NOFILEVERIFYFLAGS)
406 #define RPMFI_FLAGS_VERIFY \
407 (RPMFI_NOFILECLASS | RPMFI_NOFILEDEPS | RPMFI_NOFILELANGS | \
410 #define RPMFI_FLAGS_QUERY \
411 (RPMFI_NOFILECLASS | RPMFI_NOFILEDEPS | RPMFI_NOFILELANGS | \
412 RPMFI_NOFILECOLORS | RPMFI_NOFILEVERIFYFLAGS)
415 * Create and load a file info set.
419 * @param flags Flags to control what information is loaded.
420 * @return new file info set
422 rpmfi rpmfiNew(const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags);
425 * Return file type from mode_t.
426 * @param mode file mode bits (from header)
429 rpmFileTypes rpmfiWhatis(rpm_mode_t mode);
432 * Return file info comparison.
433 * @param afi 1st file info
434 * @param bfi 2nd file info
435 * @return 0 if identical
437 int rpmfiCompare(const rpmfi afi, const rpmfi bfi);
440 * Return file disposition.
441 * @param ofi old file info
442 * @param nfi new file info
443 * @param skipMissing OK to skip missing files?
444 * @return file dispostion
446 rpmFileAction rpmfiDecideFate(const rpmfi ofi, rpmfi nfi, int skipMissing);
449 * Return whether file is conflicting config
450 * @param fi file info
451 * @return 1 if config file and file on disk conflicts
453 int rpmfiConfigConflict(const rpmfi fi);