'Adjust extern C {} blocks.'
[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 "rpmlib.h"
9 #include "rpmte.h"
10 #include "rpmts.h"
11 #include "argv.h"
12
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16
17 /**
18  */
19 extern int _rpmgi_debug;
20
21 /**
22  */
23 typedef enum rpmgiFlags_e {
24     RPMGI_NONE          = 0,
25     RPMGI_TSADD         = (1 << 0),
26     RPMGI_TSORDER       = (1 << 1),
27     RPMGI_NOGLOB        = (1 << 2),
28     RPMGI_NOMANIFEST    = (1 << 3),
29     RPMGI_NOHEADER      = (1 << 4)
30 } rpmgiFlags;
31
32 extern rpmgiFlags giFlags;
33
34 #if defined(_RPMGI_INTERNAL)
35 #include "fts.h"
36 /** \ingroup rpmio
37  */
38 struct rpmgi_s {
39     rpmts ts;                   /*!< Iterator transaction set. */
40     int tag;                    /*!< Iterator type. */
41     const void * keyp;          /*!< Iterator key. */
42     size_t keylen;              /*!< Iterator key length. */
43
44     rpmgiFlags flags;           /*!< Iterator control bits. */
45     int active;                 /*!< Iterator is active? */
46     int i;                      /*!< Element index. */
47     const char * hdrPath;       /*!< Path to current iterator header. */
48     Header h;                   /*!< Current iterator header. */
49
50     rpmtsi tsi;
51
52     rpmdbMatchIterator mi;
53
54     FD_t fd;
55
56     ARGV_t argv;
57     int argc;
58
59     int ftsOpts;
60     FTS * ftsp;
61     FTSENT * fts;
62
63     int nrefs;                  /*!< Reference count. */
64 };
65 #endif
66
67 /**
68  * Unreference a generalized iterator instance.
69  * @param gi            generalized iterator
70  * @param msg
71  * @return              NULL always
72  */
73 rpmgi rpmgiUnlink (rpmgi gi,
74                 const char * msg);
75
76 /** @todo Remove debugging entry from the ABI. */
77 rpmgi XrpmgiUnlink (rpmgi gi,
78                 const char * msg, const char * fn, unsigned ln);
79 #define rpmgiUnlink(_gi, _msg)  XrpmgiUnlink(_gi, _msg, __FILE__, __LINE__)
80
81 /**
82  * Reference a generalized iterator instance.
83  * @param gi            generalized iterator
84  * @param msg
85  * @return              new generalized iterator reference
86  */
87 rpmgi rpmgiLink (rpmgi gi, const char * msg);
88
89 /** @todo Remove debugging entry from the ABI. */
90 rpmgi XrpmgiLink (rpmgi gi, const char * msg,
91                 const char * fn, unsigned ln);
92 #define rpmgiLink(_gi, _msg)    XrpmgiLink(_gi, _msg, __FILE__, __LINE__)
93
94 /** Destroy a generalized iterator.
95  * @param gi            generalized iterator
96  * @return              NULL always
97  */
98 rpmgi rpmgiFree(rpmgi gi);
99
100 /**
101  * Return a generalized iterator.
102  * @param ts            transaction set
103  * @param tag           rpm tag
104  * @param keyp          key data (NULL for sequential access)
105  * @param keylen        key data length (0 will use strlen(keyp))
106  * @return              new iterator
107  */
108 rpmgi rpmgiNew(rpmts ts, int tag, const void * keyp,
109                 size_t keylen);
110
111 /**
112  * Perform next iteration step.
113  * @param gi            generalized iterator
114  * @returns             RPMRC_OK on success, RPMRC_NOTFOUND on EOI
115  */
116 rpmRC rpmgiNext(rpmgi gi);
117
118 /**
119  * Return current header path.
120  * @param gi            generalized iterator
121  * @returns             header path
122  */
123 const char * rpmgiHdrPath(rpmgi gi);
124
125 /**
126  * Return current iteration header.
127  * @param gi            generalized iterator
128  * @returns             header
129  */
130 Header rpmgiHeader(rpmgi gi);
131
132 /**
133  * Return current iteration transaction set.
134  * @param gi            generalized iterator
135  * @returns             transaction set
136  */
137 rpmts rpmgiTs(rpmgi gi);
138
139 /**
140  * Load iterator args.
141  * @param gi            generalized iterator
142  * @param argv          arg list
143  * @param ftsOpts       fts(3) flags
144  * @param flags         iterator flags
145  * @returns             RPMRC_OK on success
146  */
147 rpmRC rpmgiSetArgs(rpmgi gi, ARGV_t argv,
148                 int ftsOpts, rpmgiFlags flags);
149
150 #ifdef __cplusplus
151 }
152 #endif
153
154 #endif  /* H_RPMGI */