- Grand Renaming of rpm data types.
[platform/upstream/rpm.git] / lib / rpmfi.h
1 #ifndef H_RPMFI
2 #define H_RPMFI
3
4 /** \ingroup rpmdep rpmtrans
5  * \file lib/rpmfi.h
6  * Structure(s) used for file info tag sets.
7  */
8
9 /**
10  */
11 typedef struct sharedFileInfo_s *               sharedFileInfo;
12
13 /**
14  */
15 struct sharedFileInfo_s {
16     int pkgFileNum;
17     int otherFileNum;
18     int otherPkg;
19     int isRemoved;
20 };
21
22 /**
23  * A package filename set.
24  */
25 struct rpmfi_s {
26     int i;                      /*!< Current file index. */
27     int j;                      /*!< Current directory index. */
28
29 /*@observer@*/
30     const char * Type;          /*!< Tag name. */
31
32     rpmTag tagN;                /*!< Header tag. */
33 /*@refcounted@*/ /*@null@*/
34     Header h;                   /*!< Header for file set (or NULL) */
35
36 /*@only@*/ /*?null?*/
37     const char ** bnl;          /*!< Base name(s) (from header) */
38 /*@only@*/ /*?null?*/
39     const char ** dnl;          /*!< Directory name(s) (from header) */
40
41 /*@only@*/ /*?null?*/
42     const char ** fmd5s;        /*!< File MD5 sum(s) (from header) */
43 /*@only@*/ /*?null?*/
44     const char ** flinks;       /*!< File link(s) (from header) */
45 /*@only@*/ /*@null@*/
46     const char ** flangs;       /*!< File lang(s) (from header) */
47
48 /*@only@*/ /*?null?*/
49           uint_32 * dil;        /*!< Directory indice(s) (from header) */
50 /*@only@*/ /*?null?*/
51     const uint_32 * fflags;     /*!< File flag(s) (from header) */
52 /*@only@*/ /*?null?*/
53     const uint_32 * fsizes;     /*!< File size(s) (from header) */
54 /*@only@*/ /*?null?*/
55     const uint_32 * fmtimes;    /*!< File modification time(s) (from header) */
56 /*@only@*/ /*?null?*/
57           uint_16 * fmodes;     /*!< File mode(s) (from header) */
58 /*@only@*/ /*?null?*/
59     const uint_16 * frdevs;     /*!< File rdev(s) (from header) */
60
61 /*@only@*/ /*@null@*/
62     const char ** fuser;        /*!< File owner(s) (from header) */
63 /*@only@*/ /*@null@*/
64     const char ** fgroup;       /*!< File group(s) (from header) */
65 /*@only@*/ /*@null@*/
66     uid_t * fuids;              /*!< File uid(s) */
67 /*@only@*/ /*@null@*/
68     gid_t * fgids;              /*!< File gid(s) */
69
70 /*@only@*/ /*@null@*/
71     char * fstates;             /*!< File state(s) (from header) */
72
73 /*@only@*/ /*?null?*/
74     const uint_32 * vflags;     /*!< File verify flag(s) (from header) */
75
76     int_32 dc;                  /*!< No. of directories. */
77     int_32 fc;                  /*!< No. of files. */
78
79 /*=============================*/
80 /*@dependent@*/
81     rpmte te;
82
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). */
93 /*@owned@*/
94     fileAction * actions;       /*!< File disposition(s). */
95 /*@owned@*/
96     struct fingerPrint_s * fps; /*!< File fingerprint(s). */
97 /*@owned@*/
98     const char ** obnl;         /*!< Original basename(s) (from header) */
99 /*@owned@*/
100     const char ** odnl;         /*!< Original dirname(s) (from header) */
101 /*@unused@*/
102     int_32 * odil;              /*!< Original dirindex(s) (from header) */
103
104 /*@only@*/
105     unsigned char * md5s;       /*!< File md5 sums in binary. */
106
107 /*@only@*/ /*@null@*/
108     char * fn;                  /*!< File name buffer. */
109     int fnlen;                  /*!< FIle name buffer length. */
110
111     int astriplen;
112     int striplen;
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@*/
117     const char ** apath;
118     int mapflags;
119 /*@owned@*/ /*@null@*/
120     int * fmapflags;
121 /*@owned@*/
122     FSM_t fsm;                  /*!< File state machine data. */
123     int keep_header;            /*!< Keep header? */
124 /*@owned@*/
125     sharedFileInfo replaced;    /*!< (TR_ADDED) */
126 /*@owned@*/
127     uint_32 * replacedSizes;    /*!< (TR_ADDED) */
128     unsigned int record;        /*!< (TR_REMOVED) */
129     int magic;
130 #define RPMFIMAGIC      0x09697923
131 /*=============================*/
132
133 /*@refs@*/ int nrefs;           /*!< Reference count. */
134 };
135
136 #ifdef __cplusplus
137 extern "C" {
138 #endif
139
140 /**
141  * Unreference a file info set instance.
142  * @param fi            file info set
143  * @return              NULL always
144  */
145 /*@unused@*/ /*@null@*/
146 rpmfi rpmfiUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmfi fi,
147                 /*@null@*/ const char * msg)
148         /*@modifies fi @*/;
149
150 /** @todo Remove debugging entry from the ABI. */
151 /*@-exportlocal@*/
152 /*@null@*/
153 rpmfi XrpmfiUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmfi fi,
154                 /*@null@*/ const char * msg, const char * fn, unsigned ln)
155         /*@modifies fi @*/;
156 /*@=exportlocal@*/
157 #define rpmfiUnlink(_fi, _msg) XrpmfiUnlink(_fi, _msg, __FILE__, __LINE__)
158
159 /**
160  * Reference a file info set instance.
161  * @param fi            file info set
162  * @return              new file info set reference
163  */
164 /*@unused@*/
165 rpmfi rpmfiLink (/*@null@*/ rpmfi fi, /*@null@*/ const char * msg)
166         /*@modifies fi @*/;
167
168 /** @todo Remove debugging entry from the ABI. */
169 rpmfi XrpmfiLink (/*@null@*/ rpmfi fi, /*@null@*/ const char * msg,
170                 const char * fn, unsigned ln)
171         /*@modifies fi @*/;
172 #define rpmfiLink(_fi, _msg)    XrpmfiLink(_fi, _msg, __FILE__, __LINE__)
173
174 /**
175  * Retrieve key from transaction element file info.
176  * @param fi            transaction element file info
177  * @return              transaction element file info key
178  */
179 /*@exposed@*/ /*@dependent@*/ /*@null@*/
180 fnpyKey rpmfiKey(rpmfi fi)
181         /*@*/;
182
183 /**
184  * Return file count from file info set.
185  * @param fi            file info set
186  * @return              current file count
187  */
188 int rpmfiFC(/*@null@*/ rpmfi fi)
189         /*@*/;
190
191 /**
192  * Return current file index from file info set.
193  * @param fi            file info set
194  * @return              current file index
195  */
196 /*@unused@*/
197 int rpmfiFX(/*@null@*/ rpmfi fi)
198         /*@*/;
199
200 /**
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
205  */
206 /*@unused@*/
207 int rpmfiSetFX(/*@null@*/ rpmfi fi, int fx)
208         /*@modifies fi @*/;
209
210 /**
211  * Return directory count from file info set.
212  * @param fi            file info set
213  * @return              current directory count
214  */
215 int rpmfiDC(/*@null@*/ rpmfi fi)
216         /*@*/;
217
218 /**
219  * Return current directory index from file info set.
220  * @param fi            file info set
221  * @return              current directory index
222  */
223 int rpmfiDX(/*@null@*/ rpmfi fi)
224         /*@*/;
225
226 /**
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
231  */
232 int rpmfiSetDX(/*@null@*/ rpmfi fi, int dx)
233         /*@modifies fi @*/;
234
235 /**
236  * Return current base name from file info set.
237  * @param fi            file info set
238  * @return              current base name, NULL on invalid
239  */
240 /*@observer@*/ /*@null@*/
241 const char * rpmfiBN(/*@null@*/ rpmfi fi)
242         /*@*/;
243
244 /**
245  * Return current directory name from file info set.
246  * @param fi            file info set
247  * @return              current directory, NULL on invalid
248  */
249 /*@observer@*/ /*@null@*/
250 const char * rpmfiDN(/*@null@*/ rpmfi fi)
251         /*@*/;
252
253 /**
254  * Return current file name from file info set.
255  * @param fi            file info set
256  * @return              current file name
257  */
258 /*@observer@*/
259 const char * rpmfiFN(/*@null@*/ rpmfi fi)
260         /*@modifies fi @*/;
261
262 /**
263  * Return current file flags from file info set.
264  * @param fi            file info set
265  * @return              current file flags, 0 on invalid
266  */
267 int_32 rpmfiFFlags(/*@null@*/ rpmfi fi)
268         /*@*/;
269
270 /**
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
274  */
275 int_32 rpmfiVFlags(/*@null@*/ rpmfi fi)
276         /*@*/;
277
278 /**
279  * Return current file mode from file info set.
280  * @param fi            file info set
281  * @return              current file mode, 0 on invalid
282  */
283 int_16 rpmfiFMode(/*@null@*/ rpmfi fi)
284         /*@*/;
285
286 /**
287  * Return current file state from file info set.
288  * @param fi            file info set
289  * @return              current file state, 0 on invalid
290  */
291 rpmfileState rpmfiFState(/*@null@*/ rpmfi fi)
292         /*@*/;
293
294 /**
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
298  */
299 /*@observer@*/ /*@null@*/
300 const unsigned char * rpmfiMD5(/*@null@*/ rpmfi fi)
301         /*@*/;
302
303 /**
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
307  */
308 /*@observer@*/ /*@null@*/
309 const char * rpmfiFLink(/*@null@*/ rpmfi fi)
310         /*@*/;
311
312 /**
313  * Return current file size from file info set.
314  * @param fi            file info set
315  * @return              current file size, 0 on invalid
316  */
317 int_32 rpmfiFSize(/*@null@*/ rpmfi fi)
318         /*@*/;
319
320 /**
321  * Return current file rdev from file info set.
322  * @param fi            file info set
323  * @return              current file rdev, 0 on invalid
324  */
325 int_16 rpmfiFRdev(/*@null@*/ rpmfi fi)
326         /*@*/;
327
328 /**
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
332  */
333 int_32 rpmfiFMtime(/*@null@*/ rpmfi fi)
334         /*@*/;
335
336 /**
337  * Return current file owner from file info set.
338  * @param fi            file info set
339  * @return              current file owner, NULL on invalid
340  */
341 /*@observer@*/ /*@null@*/
342 const char * rpmfiFUser(/*@null@*/ rpmfi fi)
343         /*@*/;
344
345 /**
346  * Return current file group from file info set.
347  * @param fi            file info set
348  * @return              current file group, NULL on invalid
349  */
350 /*@observer@*/ /*@null@*/
351 const char * rpmfiFGroup(/*@null@*/ rpmfi fi)
352         /*@*/;
353
354 /**
355  * Return next file iterator index.
356  * @param fi            file info set
357  * @return              file iterator index, -1 on termination
358  */
359 int rpmfiNext(/*@null@*/ rpmfi fi)
360         /*@modifies fi @*/;
361
362 /**
363  * Initialize file iterator index.
364  * @param fi            file info set
365  * @param fx            file iterator index
366  * @return              file info set
367  */
368 /*@null@*/
369 rpmfi rpmfiInit(/*@null@*/ rpmfi fi, int fx)
370         /*@modifies fi @*/;
371
372 /**
373  * Return next directory iterator index.
374  * @param fi            file info set
375  * @return              directory iterator index, -1 on termination
376  */
377 /*@unused@*/
378 int rpmfiNextD(/*@null@*/ rpmfi fi)
379         /*@modifies fi @*/;
380
381 /**
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
386  */
387 /*@unused@*/ /*@null@*/
388 rpmfi rpmfiInitD(/*@null@*/ rpmfi fi, int dx)
389         /*@modifies fi @*/;
390
391 /**
392  * Destroy a file info set.
393  * @param fi            file set
394  * @param freefimem     free fi memory too?
395  * @return              NULL always
396  */
397 /*@null@*/
398 rpmfi rpmfiFree(/*@killref@*/ /*@only@*/ /*@null@*/ rpmfi fi, int freefimem)
399         /*@modifies fi@*/;
400
401 /**
402  * Create and load a file info set.
403  * @param ts            transaction set
404  * @param fi            file set (NULL if creating)
405  * @param h             header
406  * @param tagN          RPMTAG_BASENAMES
407  * @param scareMem      Use pointers to refcounted header memory?
408  * @return              new file set
409  */
410 /*@null@*/
411 rpmfi rpmfiNew(rpmts ts, /*@null@*/ rpmfi fi,
412                 Header h, rpmTag tagN, int scareMem)
413         /*@modifies ts, fi, h @*/;
414
415 /**
416  * Return file type from mode_t.
417  * @param mode          file mode bits (from header)
418  * @return              file type
419  */
420 fileTypes whatis(uint_16 mode)
421         /*@*/;
422
423 #ifdef __cplusplus
424 }
425 #endif
426
427 #endif  /* H_RPMDS */