4 /** \ingroup rpmdep rpmtrans
6 * Structure(s) used for file info tag sets.
11 typedef struct sharedFileInfo_s * sharedFileInfo;
15 struct sharedFileInfo_s {
23 * A package filename set.
26 int i; /*!< Current file index. */
27 int j; /*!< Current directory index. */
30 const char * Type; /*!< Tag name. */
32 rpmTag tagN; /*!< Header tag. */
33 /*@refcounted@*/ /*@null@*/
34 Header h; /*!< Header for file set (or NULL) */
37 const char ** bnl; /*!< Base name(s) (from header) */
39 const char ** dnl; /*!< Directory name(s) (from header) */
42 const char ** fmd5s; /*!< File MD5 sum(s) (from header) */
44 const char ** flinks; /*!< File link(s) (from header) */
46 const char ** flangs; /*!< File lang(s) (from header) */
49 uint_32 * dil; /*!< Directory indice(s) (from header) */
51 const uint_32 * fflags; /*!< File flag(s) (from header) */
53 const uint_32 * fsizes; /*!< File size(s) (from header) */
55 const uint_32 * fmtimes; /*!< File modification time(s) (from header) */
57 uint_16 * fmodes; /*!< File mode(s) (from header) */
59 const uint_16 * frdevs; /*!< File rdev(s) (from header) */
62 const char ** fuser; /*!< File owner(s) (from header) */
64 const char ** fgroup; /*!< File group(s) (from header) */
66 uid_t * fuids; /*!< File uid(s) */
68 gid_t * fgids; /*!< File gid(s) */
71 char * fstates; /*!< File state(s) (from header) */
74 const uint_32 * vflags; /*!< File verify flag(s) (from header) */
76 int_32 dc; /*!< No. of directories. */
77 int_32 fc; /*!< No. of files. */
79 /*=============================*/
83 HGE_t hge; /*!< Vector to headerGetEntry() */
84 HAE_t hae; /*!< Vector to headerAddEntry() */
85 HME_t hme; /*!< Vector to headerModifyEntry() */
86 HRE_t hre; /*!< Vector to headerRemoveEntry() */
87 HFD_t hfd; /*!< Vector to headerFreeData() */
88 /*-----------------------------*/
89 uid_t uid; /*!< File uid (default). */
90 gid_t gid; /*!< File gid (default). */
91 uint_32 flags; /*!< File flags (default). */
92 fileAction action; /*!< File disposition (default). */
94 fileAction * actions; /*!< File disposition(s). */
96 struct fingerPrint_s * fps; /*!< File fingerprint(s). */
98 const char ** obnl; /*!< Original basename(s) (from header) */
100 const char ** odnl; /*!< Original dirname(s) (from header) */
102 int_32 * odil; /*!< Original dirindex(s) (from header) */
105 unsigned char * md5s; /*!< File md5 sums in binary. */
107 /*@only@*/ /*@null@*/
108 char * fn; /*!< File name buffer. */
109 int fnlen; /*!< FIle name buffer length. */
113 unsigned int archiveSize;
114 mode_t dperms; /*!< Directory perms (0755) if not mapped. */
115 mode_t fperms; /*!< File perms (0644) if not mapped. */
116 /*@only@*/ /*@null@*/
119 /*@owned@*/ /*@null@*/
122 FSM_t fsm; /*!< File state machine data. */
123 int keep_header; /*!< Keep header? */
125 sharedFileInfo replaced; /*!< (TR_ADDED) */
127 uint_32 * replacedSizes; /*!< (TR_ADDED) */
128 unsigned int record; /*!< (TR_REMOVED) */
130 #define RPMFIMAGIC 0x09697923
131 /*=============================*/
133 /*@refs@*/ int nrefs; /*!< Reference count. */
141 * Unreference a file info set instance.
142 * @param fi file info set
143 * @return NULL always
145 /*@unused@*/ /*@null@*/
146 rpmfi rpmfiUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmfi fi,
147 /*@null@*/ const char * msg)
150 /** @todo Remove debugging entry from the ABI. */
153 rpmfi XrpmfiUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmfi fi,
154 /*@null@*/ const char * msg, const char * fn, unsigned ln)
157 #define rpmfiUnlink(_fi, _msg) XrpmfiUnlink(_fi, _msg, __FILE__, __LINE__)
160 * Reference a file info set instance.
161 * @param fi file info set
162 * @return new file info set reference
165 rpmfi rpmfiLink (/*@null@*/ rpmfi fi, /*@null@*/ const char * msg)
168 /** @todo Remove debugging entry from the ABI. */
169 rpmfi XrpmfiLink (/*@null@*/ rpmfi fi, /*@null@*/ const char * msg,
170 const char * fn, unsigned ln)
172 #define rpmfiLink(_fi, _msg) XrpmfiLink(_fi, _msg, __FILE__, __LINE__)
175 * Retrieve key from transaction element file info.
176 * @param fi transaction element file info
177 * @return transaction element file info key
179 /*@exposed@*/ /*@dependent@*/ /*@null@*/
180 fnpyKey rpmfiKey(rpmfi fi)
184 * Return file count from file info set.
185 * @param fi file info set
186 * @return current file count
188 int rpmfiFC(/*@null@*/ rpmfi fi)
192 * Return current file index from file info set.
193 * @param fi file info set
194 * @return current file index
197 int rpmfiFX(/*@null@*/ rpmfi fi)
201 * Set current file index in file info set.
202 * @param fi file info set
203 * @param fx new file index
204 * @return current file index
207 int rpmfiSetFX(/*@null@*/ rpmfi fi, int fx)
211 * Return directory count from file info set.
212 * @param fi file info set
213 * @return current directory count
215 int rpmfiDC(/*@null@*/ rpmfi fi)
219 * Return current directory index from file info set.
220 * @param fi file info set
221 * @return current directory index
223 int rpmfiDX(/*@null@*/ rpmfi fi)
227 * Set current directory index in file info set.
228 * @param fi file info set
229 * @param fx new directory index
230 * @return current directory index
232 int rpmfiSetDX(/*@null@*/ rpmfi fi, int dx)
236 * Return current base name from file info set.
237 * @param fi file info set
238 * @return current base name, NULL on invalid
240 /*@observer@*/ /*@null@*/
241 const char * rpmfiBN(/*@null@*/ rpmfi fi)
245 * Return current directory name from file info set.
246 * @param fi file info set
247 * @return current directory, NULL on invalid
249 /*@observer@*/ /*@null@*/
250 const char * rpmfiDN(/*@null@*/ rpmfi fi)
254 * Return current file name from file info set.
255 * @param fi file info set
256 * @return current file name
259 const char * rpmfiFN(/*@null@*/ rpmfi fi)
263 * Return current file flags from file info set.
264 * @param fi file info set
265 * @return current file flags, 0 on invalid
267 int_32 rpmfiFFlags(/*@null@*/ rpmfi fi)
271 * Return current file verify flags from file info set.
272 * @param fi file info set
273 * @return current file verify flags, 0 on invalid
275 int_32 rpmfiVFlags(/*@null@*/ rpmfi fi)
279 * Return current file mode from file info set.
280 * @param fi file info set
281 * @return current file mode, 0 on invalid
283 int_16 rpmfiFMode(/*@null@*/ rpmfi fi)
287 * Return current file state from file info set.
288 * @param fi file info set
289 * @return current file state, 0 on invalid
291 rpmfileState rpmfiFState(/*@null@*/ rpmfi fi)
295 * Return current file (binary) md5 digest from file info set.
296 * @param fi file info set
297 * @return current file md5 digest, NULL on invalid
299 /*@observer@*/ /*@null@*/
300 const unsigned char * rpmfiMD5(/*@null@*/ rpmfi fi)
304 * Return current file linkto (i.e. symlink(2) target) from file info set.
305 * @param fi file info set
306 * @return current file linkto, NULL on invalid
308 /*@observer@*/ /*@null@*/
309 const char * rpmfiFLink(/*@null@*/ rpmfi fi)
313 * Return current file size from file info set.
314 * @param fi file info set
315 * @return current file size, 0 on invalid
317 int_32 rpmfiFSize(/*@null@*/ rpmfi fi)
321 * Return current file rdev from file info set.
322 * @param fi file info set
323 * @return current file rdev, 0 on invalid
325 int_16 rpmfiFRdev(/*@null@*/ rpmfi fi)
329 * Return current file modify time from file info set.
330 * @param fi file info set
331 * @return current file modify time, 0 on invalid
333 int_32 rpmfiFMtime(/*@null@*/ rpmfi fi)
337 * Return current file owner from file info set.
338 * @param fi file info set
339 * @return current file owner, NULL on invalid
341 /*@observer@*/ /*@null@*/
342 const char * rpmfiFUser(/*@null@*/ rpmfi fi)
346 * Return current file group from file info set.
347 * @param fi file info set
348 * @return current file group, NULL on invalid
350 /*@observer@*/ /*@null@*/
351 const char * rpmfiFGroup(/*@null@*/ rpmfi fi)
355 * Return next file iterator index.
356 * @param fi file info set
357 * @return file iterator index, -1 on termination
359 int rpmfiNext(/*@null@*/ rpmfi fi)
363 * Initialize file iterator index.
364 * @param fi file info set
365 * @param fx file iterator index
366 * @return file info set
369 rpmfi rpmfiInit(/*@null@*/ rpmfi fi, int fx)
373 * Return next directory iterator index.
374 * @param fi file info set
375 * @return directory iterator index, -1 on termination
378 int rpmfiNextD(/*@null@*/ rpmfi fi)
382 * Initialize directory iterator index.
383 * @param fi file info set
384 * @param dx directory iterator index
385 * @return file info set, NULL if dx is out of range
387 /*@unused@*/ /*@null@*/
388 rpmfi rpmfiInitD(/*@null@*/ rpmfi fi, int dx)
392 * Destroy a file info set.
394 * @param freefimem free fi memory too?
395 * @return NULL always
398 rpmfi rpmfiFree(/*@killref@*/ /*@only@*/ /*@null@*/ rpmfi fi, int freefimem)
402 * Create and load a file info set.
403 * @param ts transaction set
404 * @param fi file set (NULL if creating)
406 * @param tagN RPMTAG_BASENAMES
407 * @param scareMem Use pointers to refcounted header memory?
408 * @return new file set
411 rpmfi rpmfiNew(rpmts ts, /*@null@*/ rpmfi fi,
412 Header h, rpmTag tagN, int scareMem)
413 /*@modifies ts, fi, h @*/;
416 * Return file type from mode_t.
417 * @param mode file mode bits (from header)
420 fileTypes whatis(uint_16 mode)