ARGV_t const pendantry
[platform/upstream/rpm.git] / lib / rpmgi.h
1 #ifndef H_RPMGI
2 #define H_RPMGI
3
4 /** \ingroup rpmio
5  * \file lib/rpmgi.h
6  */
7
8 #include <rpm/rpmtypes.h>
9 #include <rpm/argv.h>
10
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14
15 /**
16  */
17 extern int _rpmgi_debug;
18
19 /** \ingroup rpmgi
20  */
21 typedef enum rpmgiFlags_e {
22     RPMGI_NONE          = 0,
23     RPMGI_TSADD         = (1 << 0),
24     RPMGI_TSORDER       = (1 << 1),
25     RPMGI_NOGLOB        = (1 << 2),
26     RPMGI_NOMANIFEST    = (1 << 3),
27     RPMGI_NOHEADER      = (1 << 4)
28 } rpmgiFlags;
29
30 /** \ingroup rpmgi
31  * rpmgi FTS-flags
32  */
33 #define RPMGI_COMFOLLOW   0x0001          /* follow command line symlinks */
34 #define RPMGI_LOGICAL     0x0002          /* logical walk */
35 #define RPMGI_NOCHDIR     0x0004          /* don't change directories */
36 #define RPMGI_NOSTAT      0x0008          /* don't get stat info */
37 #define RPMGI_PHYSICAL    0x0010          /* physical walk */
38 #define RPMGI_SEEDOT      0x0020          /* return dot and dot-dot */
39 #define RPMGI_XDEV        0x0040          /* don't cross devices */
40 #define RPMGI_WHITEOUT    0x0080          /* return whiteout information */
41
42 extern rpmgiFlags giFlags;
43
44 /** \ingroup rpmgi
45  * Unreference a generalized iterator instance.
46  * @param gi            generalized iterator
47  * @param msg
48  * @return              NULL always
49  */
50 rpmgi rpmgiUnlink (rpmgi gi, const char * msg);
51
52 /** \ingroup rpmgi
53  * Reference a generalized iterator instance.
54  * @param gi            generalized iterator
55  * @param msg
56  * @return              new generalized iterator reference
57  */
58 rpmgi rpmgiLink (rpmgi gi, const char * msg);
59
60 /** \ingroup rpmgi 
61  * Destroy a generalized iterator.
62  * @param gi            generalized iterator
63  * @return              NULL always
64  */
65 rpmgi rpmgiFree(rpmgi gi);
66
67 /** \ingroup rpmgi
68  * Return a generalized iterator.
69  * @param ts            transaction set
70  * @param tag           rpm tag
71  * @param keyp          key data (NULL for sequential access)
72  * @param keylen        key data length (0 will use strlen(keyp))
73  * @return              new iterator
74  */
75 rpmgi rpmgiNew(rpmts ts, rpmTag tag, const void * keyp,
76                 size_t keylen);
77
78 /** \ingroup rpmgi
79  * Perform next iteration step.
80  * @param gi            generalized iterator
81  * @returns             RPMRC_OK on success, RPMRC_NOTFOUND on EOI
82  */
83 rpmRC rpmgiNext(rpmgi gi);
84
85 /** \ingroup rpmgi
86  * Return current header path.
87  * @param gi            generalized iterator
88  * @returns             header path
89  */
90 const char * rpmgiHdrPath(rpmgi gi);
91
92 /** \ingroup rpmgi
93  * Return current iteration header.
94  * @param gi            generalized iterator
95  * @returns             header
96  */
97 Header rpmgiHeader(rpmgi gi);
98
99 /** \ingroup rpmgi
100  * Return current iteration transaction set.
101  * @param gi            generalized iterator
102  * @returns             transaction set
103  */
104 rpmts rpmgiTs(rpmgi gi);
105
106 /** \ingroup rpmgi
107  * Load iterator args.
108  * @param gi            generalized iterator
109  * @param argv          arg list
110  * @param ftsOpts       fts(3) flags
111  * @param flags         iterator flags
112  * @return              RPMRC_OK on success
113  */
114 rpmRC rpmgiSetArgs(rpmgi gi, ARGV_const_t argv,
115                 int ftsOpts, rpmgiFlags flags);
116
117
118 /** \ingroup rpmgi
119  * Retrieve iterator flags
120  * @param gi            generalized iterator
121  * @return              iterator flags
122  */
123 rpmgiFlags rpmgiGetFlags(rpmgi gi);
124
125 /** \ingroup rpmgi
126  * Return number of errors (file not found etc) encountered during iteration
127  * @param gi            generalized iterator
128  * @return              number of errors
129  */
130 int rpmgiNumErrors(rpmgi gi);
131
132 #ifdef __cplusplus
133 }
134 #endif
135
136 #endif  /* H_RPMGI */