apply some patch for pythons rpm from opensource
[platform/upstream/rpm.git] / lib / rpmfi.h
1 #ifndef H_RPMFI
2 #define H_RPMFI
3
4 /** \ingroup rpmfi
5  * \file lib/rpmfi.h
6  * File info set iterator API.
7  */
8
9 #include <rpm/rpmtypes.h>
10 #include <rpm/rpmfiles.h>
11 #include <rpm/rpmarchive.h>
12
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16
17 /** \ingroup rpmfi
18
19  * Reference a file info set iterator instance.
20  * @param fi            file info set iterator
21  * @return              new file info set iterator reference
22  */
23 rpmfi rpmfiLink (rpmfi fi);
24
25 /** \ingroup rpmfi
26  * Return file count from file info set iterator.
27  * @param fi            file info set iterator
28  * @return              current file count
29  */
30 rpm_count_t rpmfiFC(rpmfi fi);
31
32 /** \ingroup rpmfi
33  * Return current file index from file info set iterator.
34  * @param fi            file info set iterator
35  * @return              current file index
36  */
37 int rpmfiFX(rpmfi fi);
38
39 /** \ingroup rpmfi
40  * Set current file index in file info set iterator.
41  * @param fi            file info set iterator
42  * @param fx            new file index
43  * @return              current file index
44  */
45 int rpmfiSetFX(rpmfi fi, int fx);
46
47 /** \ingroup rpmfi
48  * Return directory count from file info set iterator.
49  * @param fi            file info set iterator
50  * @return              current directory count
51  */
52 rpm_count_t rpmfiDC(rpmfi fi);
53
54 /** \ingroup rpmfi
55  * Return current directory index from file info set iterator.
56  * @param fi            file info set iterator
57  * @return              current directory index
58  */
59 int rpmfiDX(rpmfi fi);
60
61 /** \ingroup rpmfi
62  * Set current directory index in file info set iterator.
63  * @param fi            file info set iterator
64  * @param dx            new directory index
65  * @return              current directory index
66  */
67 int rpmfiSetDX(rpmfi fi, int dx);
68
69 /** \ingroup rpmfi
70  * Return current base name from file info set iterator.
71  * @param fi            file info set iterator
72  * @return              current base name, NULL on invalid
73  */
74 const char * rpmfiBN(rpmfi fi);
75
76 /** \ingroup rpmfi
77  * Return current directory name from file info set iterator.
78  * @param fi            file info set iterator
79  * @return              current directory, NULL on invalid
80  */
81 const char * rpmfiDN(rpmfi fi);
82
83 /** \ingroup rpmfi
84  * Return current file name from file info set iterator.
85  * @param fi            file info set iterator
86  * @return              current file name
87  */
88 const char * rpmfiFN(rpmfi fi);
89
90 /** \ingroup rpmfi
91  * Return file index of the given file name or -1 if file is not in the rpmfi.
92  * The file name may have "." prefixed but is then interpreted as a global
93  * path without the prefixing "."
94  * @param fi            file info set iterator
95  * @param fn            file name
96  * @return              file index or -1
97  */
98 int rpmfiFindFN(rpmfi fi, const char * fn);
99
100 /** \ingroup rpmfi
101  * Return current original base name from file info set iterator.
102  * @param fi            file info set iterator
103  * @return              current base name, NULL on invalid
104  */
105 const char * rpmfiOBN(rpmfi fi);
106
107 /** \ingroup rpmfi
108  * Return current original directory name from file info set iterator.
109  * @param fi            file info set iterator
110  * @return              current directory, NULL on invalid
111  */
112 const char * rpmfiODN(rpmfi fi);
113
114 /** \ingroup rpmfi
115  * Return current original file name from file info set iterator.
116  * @param fi            file info set iterator
117  * @return              current file name
118  */
119 const char * rpmfiOFN(rpmfi fi);
120
121 /** \ingroup rpmfi
122  * Return file index of the given original file name or -1 if file is not
123  * in the rpmfi. The file name may have "." prefixed but is then interpreted
124  * as a global path without the prefixing "."
125  * @param fi            file info set iterator
126  * @param fn            file name
127  * @return              file index or -1
128  */
129 int rpmfiFindOFN(rpmfi fi, const char * fn);
130
131 /** \ingroup rpmfi
132  * Return current file flags from file info set iterator.
133  * @param fi            file info set iterator
134  * @return              current file flags, 0 on invalid
135  */
136 rpmfileAttrs rpmfiFFlags(rpmfi fi);
137
138 /** \ingroup rpmfi
139  * Return current file verify flags from file info set iterator.
140  * @param fi            file info set iterator
141  * @return              current file verify flags, 0 on invalid
142  */
143 rpmVerifyAttrs rpmfiVFlags(rpmfi fi);
144
145 /** \ingroup rpmfi
146  * Return current file mode from file info set iterator.
147  * @param fi            file info set iterator
148  * @return              current file mode, 0 on invalid
149  */
150 rpm_mode_t rpmfiFMode(rpmfi fi);
151
152 /** \ingroup rpmfi
153  * Return current file state from file info set iterator.
154  * @param fi            file info set iterator
155  * @return              current file state, 0 on invalid
156  */
157 rpmfileState rpmfiFState(rpmfi fi);
158
159 /** \ingroup rpmfi
160  * Return digest algorithm of a file info set iterator.
161  * @param fi            file info set iterator
162  * @return              digest algorithm of file info set iterator, 0 on invalid
163  */
164 int rpmfiDigestAlgo(rpmfi fi);
165
166 /** \ingroup rpmfi
167  * Return current file (binary) digest of file info set iterator.
168  * @param fi            file info set iterator
169  * @retval algo         digest hash algorithm used (pass NULL to ignore)
170  * @retval diglen       digest hash length (pass NULL to ignore)
171  * @return              current file digest, NULL on invalid
172  */
173 const unsigned char * rpmfiFDigest(rpmfi fi, int *algo, size_t *diglen);
174
175 /** \ingroup rpmfi
176  * Return current file (hex) digest of file info set iterator.
177  * The file info set iterator stores file digests in binary format to conserve
178  * memory, this converts the binary data back to hex presentation used in
179  * headers. 
180  * @param fi            file info set iterator
181  * @retval algo         digest hash algorithm used (pass NULL to ignore)
182  * @return              current file digest (malloc'ed), NULL on invalid
183  */
184 char * rpmfiFDigestHex(rpmfi fi, int *algo);
185
186 /** \ingroup rpmfi
187  * Return current file (binary) signature of file info set iterator.
188  * @param fi            file info set iterator
189  * @retval siglen       signature length (pass NULL to ignore)
190  * @return              current file signature, NULL on invalid
191  */
192 const unsigned char * rpmfiFSignature(rpmfi fi, size_t *siglen);
193
194 /** \ingroup rpmfi
195  * Return current file linkto (i.e. symlink(2) target) from file info set iterator.
196  * @param fi            file info set iterator
197  * @return              current file linkto, NULL on invalid
198  */
199 const char * rpmfiFLink(rpmfi fi);
200
201 /** \ingroup rpmfi
202  * Return current file size from file info set iterator.
203  * @param fi            file info set iterator
204  * @return              current file size, 0 on invalid
205  */
206 rpm_loff_t rpmfiFSize(rpmfi fi);
207
208 /** \ingroup rpmfi
209  * Return current file rdev from file info set iterator.
210  * @param fi            file info set iterator
211  * @return              current file rdev, 0 on invalid
212  */
213 rpm_rdev_t rpmfiFRdev(rpmfi fi);
214
215 /** \ingroup rpmfi
216  * Return current file inode from file info set iterator.
217  * @param fi            file info set iterator
218  * @return              current file inode, 0 on invalid
219  */
220 rpm_ino_t rpmfiFInode(rpmfi fi);
221
222 /** \ingroup rpmfi
223  * Return union of all file color bits from file info set iterator.
224  * @param fi            file info set iterator
225  * @return              current color
226  */
227 rpm_color_t rpmfiColor(rpmfi fi);
228
229 /** \ingroup rpmfi
230  * Return current file color bits from file info set iterator.
231  * @param fi            file info set iterator
232  * @return              current file color
233  */
234 rpm_color_t rpmfiFColor(rpmfi fi);
235
236 /** \ingroup rpmfi
237  * Return current file class from file info set iterator.
238  * @param fi            file info set iterator
239  * @return              current file class, 0 on invalid
240  */
241 const char * rpmfiFClass(rpmfi fi);
242
243 /** \ingroup rpmfi
244  * Return current file depends dictionary from file info set iterator.
245  * @param fi            file info set iterator
246  * @retval *fddictp     file depends dictionary array (or NULL)
247  * @return              no. of file depends entries, 0 on invalid
248  */
249 uint32_t rpmfiFDepends(rpmfi fi,
250                 const uint32_t ** fddictp);
251
252 /** \ingroup rpmfi
253  * Return (calculated) current file nlink count from file info set iterator.
254  * @param fi            file info set iterator
255  * @return              current file nlink count, 0 on invalid
256  */
257 uint32_t rpmfiFNlink(rpmfi fi);
258
259
260 /** \ingroup rpmfi
261  * Return (calculated) current file nlink count from file info set iterator.
262  * @param fi            file info set iterator
263  * @param files         returns array of file ids hardlinked including ix,
264                         NULL for nlink count == 1
265  * @return              current file nlink count, 0 on invalid
266  */
267 uint32_t rpmfiFLinks(rpmfi fi, const int ** files);
268
269 /** \ingroup rpmfi
270  * Return current file modify time from file info set iterator.
271  * @param fi            file info set iterator
272  * @return              current file modify time, 0 on invalid
273  */
274 rpm_time_t rpmfiFMtime(rpmfi fi);
275
276 /** \ingroup rpmfi
277  * Return current file owner from file info set iterator.
278  * @param fi            file info set iterator
279  * @return              current file owner, NULL on invalid
280  */
281 const char * rpmfiFUser(rpmfi fi);
282
283 /** \ingroup rpmfi
284  * Return current file group from file info set iterator.
285  * @param fi            file info set iterator
286  * @return              current file group, NULL on invalid
287  */
288 const char * rpmfiFGroup(rpmfi fi);
289
290 /** \ingroup rpmfi
291  * Return textual representation of current file capabilities 
292  * from file info set iterator. See cap_from_text(3) for details.
293  * @param fi            file info set iterator
294  * @return              file capability description, "" for no capabilities
295  *                      and NULL on invalid
296  */
297 const char * rpmfiFCaps(rpmfi fi);
298
299 /** \ingroup rpmfi
300  * Return current file language(s) from file info set iterator.
301  * @param fi            file info set iterator
302  * @return              current file language(s), NULL on invalid
303  */
304 const char * rpmfiFLangs(rpmfi fi);
305
306 /** \ingroup rpmfi
307  * Map file stat(2) info.
308  * @param fi            file info iterator
309  * @param flags         flags
310  * @retval sb           mapped stat(2) data
311  */
312 int rpmfiStat(rpmfi fi, int flags, struct stat *sb);
313
314 /** \ingroup rpmfi
315  * Return next file iterator index.
316  * @param fi            file info set iterator
317  * @return              file iterator index, -1 on termination
318  */
319 int rpmfiNext(rpmfi fi);
320
321 /** \ingroup rpmfi
322  * Initialize file iterator index.
323  * @param fi            file info set iterator
324  * @param fx            file iterator index
325  * @return              file info set iterator
326  */
327 rpmfi rpmfiInit(rpmfi fi, int fx);
328
329 /** \ingroup rpmfi
330  * Return next directory iterator index.
331  * @param fi            file info set iterator
332  * @return              directory iterator index, -1 on termination
333  */
334 int rpmfiNextD(rpmfi fi);
335
336 /** \ingroup rpmfi
337  * Initialize directory iterator index.
338  * @param fi            file info set iterator
339  * @param dx            directory iterator index
340  * @return              file info set iterator, NULL if dx is out of range
341  */
342 rpmfi rpmfiInitD(rpmfi fi, int dx);
343
344 /** \ingroup rpmfi
345  * Destroy a file info set iterator.
346  * @param fi            file info set iterator
347  * @return              NULL always
348  */
349 rpmfi rpmfiFree(rpmfi fi);
350
351 /** \ingroup rpmfi
352  * Create and load a file info set iterator.
353  * @param pool          shared string pool (or NULL for private pool)
354  * @param h             header
355  * @param tagN          unused
356  * @param flags         Flags to control what information is loaded.
357  * @return              new file info set iterator
358  */
359 rpmfi rpmfiNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, rpmfiFlags flags);
360
361 /** \ingroup rpmfi
362  * Create and load a file info set iterator.
363  * @param ts            unused
364  * @param h             header
365  * @param tagN          unused
366  * @param flags         Flags to control what information is loaded.
367  * @return              new file info set iterator
368  */
369 rpmfi rpmfiNew(const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags);
370
371 /** \ingroup rpmfi
372  * Return file type from mode_t.
373  * @param mode          file mode bits (from header)
374  * @return              file type
375  */
376 rpmFileTypes rpmfiWhatis(rpm_mode_t mode);
377
378 /** \ingroup rpmfi
379  * Return file info comparison.
380  * @param afi           1st file info
381  * @param bfi           2nd file info
382  * @return              0 if identical
383  */
384 int rpmfiCompare(const rpmfi afi, const rpmfi bfi);
385
386 /** \ingroup rpmfi
387  * Verify file attributes (including digest).
388  * @param fi            file info iterator
389  * @param omitMask      bit(s) to disable verify checks
390  * @return              bit(s) to indicate failure (ie 0 for passed verify)
391  */
392 rpmVerifyAttrs rpmfiVerify(rpmfi fi, rpmVerifyAttrs omitMask);
393
394 #ifdef __cplusplus
395 }
396 #endif
397
398 #endif  /* H_RPMDS */