rpm  5.4.15
rpmgi.h
Go to the documentation of this file.
1 #ifndef H_RPMGI
2 #define H_RPMGI
3 
8 #include <fts.h>
9 #include <argv.h>
10 #include <rpmtypes.h>
11 #include <rpmiotypes.h>
12 #include <rpmds.h>
13 #include <rpmte.h>
14 #include <rpmts.h>
15 #include <rpmtag.h>
16 #include <rpmio.h> /* XXX FD_t typedef */
17 
20 /*@-exportlocal@*/
21 /*@unchecked@*/
22 extern int _rpmgi_debug;
23 /*@=exportlocal@*/
24 
27 typedef enum rpmgiFlags_e {
29  RPMGI_TSADD = (1 << 0),
30  RPMGI_TSORDER = (1 << 1),
31  RPMGI_NOGLOB = (1 << 2),
32  RPMGI_NOMANIFEST = (1 << 3),
33  RPMGI_NOHEADER = (1 << 4),
34  RPMGI_ERASING = (1 << 5)
35 } rpmgiFlags;
36 
39 /*@unchecked@*/
40 extern rpmgiFlags giFlags;
41 
42 #if defined(_RPMGI_INTERNAL)
43 
45 struct rpmgi_s {
46  struct rpmioItem_s _item;
47 /*@refcounted@*/
48  rpmts ts;
49  int (*tsOrder) (rpmts ts);
50  rpmTag tag;
51 /*@kept@*/ /*@relnull@*/
52  const void * keyp;
53  size_t keylen;
56  int active;
57  int i;
58 /*@null@*/
59  const char * hdrPath;
60 /*@refcounted@*/ /*@null@*/
61  Header h;
62  int rc;
64 /*@null@*/
65  rpmtsi tsi;
66 
67 /*@null@*/
68  rpmmi mi;
69 
70 /*@refcounted@*/ /*@relnull@*/
71  FD_t fd;
72 
73  ARGV_t argv;
74  int argc;
75 
76  int ftsOpts;
77 /*@null@*/
78  FTS * ftsp;
79 /*@relnull@*/
80  FTSENT * fts;
81 /*@null@*/
82  rpmRC (*walkPathFilter) (rpmgi gi);
83 /*@null@*/
84  rpmRC (*stash) (rpmgi gi, Header h);
85 
86 #if defined(__LCLINT__)
87 /*@refs@*/
88  int nrefs;
89 #endif
90 };
91 #endif
92 
93 #ifdef __cplusplus
94 extern "C" {
95 #endif
96 
99 
106 /*@unused@*/ /*@null@*/
107 rpmgi rpmgiUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmgi gi,
108  /*@null@*/ const char * msg)
109  /*@modifies gi @*/;
110 #define rpmgiUnlink(_gi, _msg) \
111  ((rpmgi)rpmioUnlinkPoolItem((rpmioItem)(_gi), _msg, __FILE__, __LINE__))
112 
119 /*@unused@*/ /*@newref@*/ /*@null@*/
120 rpmgi rpmgiLink (/*@null@*/ rpmgi gi, /*@null@*/ const char * msg)
121  /*@modifies gi @*/;
122 #define rpmgiLink(_gi, _msg) \
123  ((rpmgi)rpmioLinkPoolItem((rpmioItem)(_gi), _msg, __FILE__, __LINE__))
124 
129 /*@null@*/
130 rpmgi rpmgiFree(/*@killref@*/ /*@only@*/ /*@null@*/ rpmgi gi)
131  /*@globals rpmGlobalMacroContext, h_errno, internalState @*/
132  /*@modifies gi, rpmGlobalMacroContext, h_errno, internalState @*/;
133 #define rpmgiFree(_gi) \
134  ((rpmgi)rpmioFreePoolItem((rpmioItem)(_gi), __FUNCTION__, __FILE__, __LINE__))
135 
144 /*@null@*/
145 rpmgi rpmgiNew(rpmts ts, int tag, /*@kept@*/ /*@null@*/ const void * keyp,
146  size_t keylen)
147  /*@globals internalState @*/
148  /*@modifies ts, internalState @*/;
149 
155 rpmRC rpmgiNext(/*@null@*/ rpmgi gi)
156  /*@globals rpmGlobalMacroContext, h_errno, internalState @*/
157  /*@modifies gi, rpmGlobalMacroContext, h_errno, internalState @*/;
158 
164 rpmgiFlags rpmgiGetFlags(/*@null@*/ rpmgi gi)
165  /*@*/;
166 
172 /*@observer@*/ /*@null@*/
173 const char * rpmgiHdrPath(/*@null@*/ rpmgi gi)
174  /*@*/;
175 
181 /*@null@*/
182 Header rpmgiHeader(/*@null@*/ rpmgi gi)
183  /*@*/;
184 
190 /*@null@*/
191 rpmts rpmgiTs(/*@null@*/ rpmgi gi)
192  /*@*/;
193 
199 /*@null@*/
200 int rpmgiRc(/*@null@*/ rpmgi gi)
201  /*@*/;
202 
208 const char * rpmgiEscapeSpaces(const char * s)
209  /*@*/;
210 
219 rpmRC rpmgiSetArgs(/*@null@*/ rpmgi gi, /*@null@*/ ARGV_t argv,
220  int ftsOpts, rpmgiFlags flags)
221  /*@globals internalState @*/
222  /*@modifies gi, internalState @*/;
223 
230 /*@null@*/
231 Header rpmgiReadHeader(rpmgi gi, const char * path)
232  /*@globals rpmGlobalMacroContext, h_errno, internalState @*/
233  /*@modifies gi, rpmGlobalMacroContext, h_errno, internalState @*/;
234 
237 #ifdef __cplusplus
238 }
239 #endif
240 
241 #endif /* H_RPMGI */
#define rpmgiFree(_gi)
Definition: rpmgi.h:133
Header rpmgiHeader(rpmgi gi)
Return current iteration header.
Definition: rpmgi.c:847
#define rpmgiLink(_gi, _msg)
Definition: rpmgi.h:122
const char bson_timestamp_t * ts
Definition: bson.h:1004
Structures used for an "rpmte" transaction element.
int _rpmgi_debug
Definition: rpmgi.c:37
The Header data structure.
Definition: rpmdb.c:436
struct rpmtsi_s * rpmtsi
Transaction element iterator.
Definition: rpmte.h:31
const char * rpmgiEscapeSpaces(const char *s)
Escape isspace(3) characters in string.
Definition: rpmgi.c:364
rpmgiFlags rpmgiGetFlags(rpmgi gi)
Return current iteration flags.
Definition: rpmgi.c:837
Header rpmgiReadHeader(rpmgi gi, const char *path)
Return header from package.
Definition: rpmgi.c:156
enum rpmgiFlags_e rpmgiFlags
Structure(s) used for dependency tag sets.
const char * rpmgiHdrPath(rpmgi gi)
Return current header path.
Definition: rpmgi.c:842
The FD_t File Handle data structure.
Definition: fts.h:54
rpmts rpmgiTs(rpmgi gi)
Return current iteration transaction set.
Definition: rpmgi.c:854
const char const bson int mongo_write_concern int flags
Definition: mongo.h:485
int rpmgiRc(rpmgi gi)
Return current iteration item(s) exit code.
Definition: rpmgi.c:861
rpmRC rpmgiNext(rpmgi gi)
Perform next iteration step.
Definition: rpmgi.c:584
struct rpmgi_s * rpmgi
Generalized iterator.
Definition: rpmtypes.h:53
enum rpmRC_e rpmRC
RPM return codes.
const char const int i
Definition: bson.h:778
Definition: fts.h:102
struct rpmts_s * rpmts
The RPM Transaction Set.
Definition: rpmtypes.h:14
rpmgi rpmgiNew(rpmts ts, int tag, const void *keyp, size_t keylen)
Return a generalized iterator.
Definition: rpmgi.c:543
Structures and prototypes used for an "rpmts" transaction set.
rpmgiFlags_e
Definition: rpmgi.h:27
rpmRC rpmgiSetArgs(rpmgi gi, ARGV_t argv, int ftsOpts, rpmgiFlags flags)
Load iterator args.
Definition: rpmgi.c:866
ARGstr_t * ARGV_t
Definition: argv.h:12
enum rpmTag_e rpmTag
Definition: rpmtag.h:470
rpmgiFlags giFlags
Definition: rpmgi.c:42
#define rpmgiUnlink(_gi, _msg)
Definition: rpmgi.h:110