Lclint fiddles.
[platform/upstream/rpm.git] / lib / rpmds.h
1 #ifndef H_RPMDS
2 #define H_RPMDS
3
4 /** \ingroup rpmdep rpmtrans
5  * \file lib/rpmds.h
6  * Structure(s) used for dependency tag sets.
7  */
8
9 /**
10  */
11 /*@-exportlocal@*/
12 /*@unchecked@*/
13 extern int _rpmds_debug;
14 /*@=exportlocal@*/
15
16 #if defined(_RPMDS_INTERNAL)
17 /**
18  * A package dependency set.
19  */
20 struct rpmds_s {
21     int i;                      /*!< Element index. */
22
23 /*@observer@*/
24     const char * Type;          /*!< Tag name. */
25 /*@only@*/ /*@null@*/
26     const char * DNEVR;         /*!< Formatted dependency string. */
27
28     rpmTag tagN;                /*!< Header tag. */
29 /*@refcounted@*/ /*@null@*/
30     Header h;                   /*!< Header for dependency set (or NULL) */
31
32 /*@only@*/
33     const char ** N;            /*!< Name. */
34 /*@only@*/
35     const char ** EVR;          /*!< Epoch-Version-Release. */
36 /*@only@*/
37     int_32 * Flags;             /*!< Flags identifying context/comparison. */
38     rpmTagType Nt, EVRt, Ft;    /*!< Tag data types. */
39     int_32 Count;               /*!< No. of elements */
40 /*@refs@*/ int nrefs;           /*!< Reference count. */
41 };
42 #endif  /* _RPMDS_INTERNAL */
43
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47
48 /**
49  * Unreference a dependency set instance.
50  * @param ds            dependency set
51  * @param msg
52  * @return              NULL always
53  */
54 /*@unused@*/ /*@null@*/
55 rpmds rpmdsUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmds ds,
56                 /*@null@*/ const char * msg)
57         /*@modifies ds @*/;
58
59 /** @todo Remove debugging entry from the ABI. */
60 /*@-exportlocal@*/
61 /*@null@*/
62 rpmds XrpmdsUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmds ds,
63                 /*@null@*/ const char * msg, const char * fn, unsigned ln)
64         /*@modifies ds @*/;
65 /*@=exportlocal@*/
66 #define rpmdsUnlink(_ds, _msg)  XrpmdsUnlink(_ds, _msg, __FILE__, __LINE__)
67
68 /**
69  * Reference a dependency set instance.
70  * @param ds            dependency set
71  * @param msg
72  * @return              new dependency set reference
73  */
74 /*@unused@*/
75 rpmds rpmdsLink (/*@null@*/ rpmds ds, /*@null@*/ const char * msg)
76         /*@modifies ds @*/;
77
78 /** @todo Remove debugging entry from the ABI. */
79 rpmds XrpmdsLink (/*@null@*/ rpmds ds, /*@null@*/ const char * msg,
80                 const char * fn, unsigned ln)
81         /*@modifies ds @*/;
82 #define rpmdsLink(_ds, _msg)    XrpmdsLink(_ds, _msg, __FILE__, __LINE__)
83
84 /**
85  * Destroy a dependency set.
86  * @param ds            dependency set
87  * @return              NULL always
88  */
89 /*@null@*/
90 rpmds rpmdsFree(/*@killref@*/ /*@only@*/ /*@null@*/ rpmds ds)
91         /*@modifies ds@*/;
92 /**
93  * Create and load a dependency set.
94  * @param h             header
95  * @param tagN          type of dependency
96  * @param scareMem      Use pointers to refcounted header memory?
97  * @return              new dependency set
98  */
99 /*@null@*/
100 rpmds rpmdsNew(Header h, rpmTag tagN, int scareMem)
101         /*@modifies h @*/;
102
103 /**
104  * Return new formatted dependency string.
105  * @param dspfx         formatted dependency string prefix
106  * @param ds            dependency set
107  * @return              new formatted dependency (malloc'ed)
108  */
109 /*@only@*/
110 char * rpmdsNewDNEVR(const char * dspfx, const rpmds ds)
111         /*@*/;
112
113 /**
114  * Create, load and initialize a dependency for this header. 
115  * @param h             header
116  * @param tagN          type of dependency
117  * @param Flags         comparison flags
118  * @return              new dependency set
119  */
120 /*@null@*/
121 rpmds rpmdsThis(Header h, rpmTag tagN, int_32 Flags)
122         /*@*/;
123
124 /**
125  * Create, load and initialize a dependency set of size 1.
126  * @param tagN          type of dependency
127  * @param N             name
128  * @param EVR           epoch:version-release
129  * @param Flags         comparison flags
130  * @return              new dependency set
131  */
132 /*@null@*/
133 rpmds rpmdsSingle(rpmTag tagN, const char * N, const char * EVR, int_32 Flags)
134         /*@*/;
135
136 /**
137  * Return dependency set count.
138  * @param ds            dependency set
139  * @return              current count
140  */
141 int rpmdsCount(/*@null@*/ const rpmds ds)
142         /*@*/;
143
144 /**
145  * Return dependency set index.
146  * @param ds            dependency set
147  * @return              current index
148  */
149 int rpmdsIx(/*@null@*/ const rpmds ds)
150         /*@*/;
151
152 /**
153  * Set dependency set index.
154  * @param ds            dependency set
155  * @param ix            new index
156  * @return              current index
157  */
158 int rpmdsSetIx(/*@null@*/ rpmds ds, int ix)
159         /*@modifies ds @*/;
160
161 /**
162  * Return current formatted dependency string.
163  * @param ds            dependency set
164  * @return              current dependency DNEVR, NULL on invalid
165  */
166 /*@observer@*/ /*@null@*/
167 const char * rpmdsDNEVR(/*@null@*/ const rpmds ds)
168         /*@*/;
169
170 /**
171  * Return current dependency name.
172  * @param ds            dependency set
173  * @return              current dependency name, NULL on invalid
174  */
175 /*@observer@*/ /*@null@*/
176 const char * rpmdsN(/*@null@*/ const rpmds ds)
177         /*@*/;
178
179 /**
180  * Return current dependency epoch-version-release.
181  * @param ds            dependency set
182  * @return              current dependency EVR, NULL on invalid
183  */
184 /*@observer@*/ /*@null@*/
185 const char * rpmdsEVR(/*@null@*/ const rpmds ds)
186         /*@*/;
187
188 /**
189  * Return current dependency flags.
190  * @param ds            dependency set
191  * @return              current dependency flags, 0 on invalid
192  */
193 int_32 rpmdsFlags(/*@null@*/ const rpmds ds)
194         /*@*/;
195
196 /**
197  * Return current dependency type.
198  * @param ds            dependency set
199  * @return              current dependency type, 0 on invalid
200  */
201 rpmTag rpmdsTagN(/*@null@*/ const rpmds ds)
202         /*@*/;
203
204 /**
205  * Notify of results of dependency match.
206  * @param ds            dependency set
207  * @param where         where dependency was resolved (or NULL)
208  * @param rc            0 == YES, otherwise NO
209  */
210 /*@-globuse@*/ /* FIX: rpmMessage annotation is a lie */
211 void rpmdsNotify(/*@null@*/ rpmds ds, /*@null@*/ const char * where, int rc)
212         /*@globals fileSystem @*/
213         /*@modifies fileSystem @*/;
214 /*@=globuse@*/
215
216 /**
217  * Return next dependency set iterator index.
218  * @param ds            dependency set
219  * @return              dependency set iterator index, -1 on termination
220  */
221 int rpmdsNext(/*@null@*/ rpmds ds)
222         /*@modifies ds @*/;
223
224 /**
225  * Initialize dependency set iterator.
226  * @param ds            dependency set
227  * @return              dependency set
228  */
229 /*@null@*/
230 rpmds rpmdsInit(/*@null@*/ rpmds ds)
231         /*@modifies ds @*/;
232
233 /**
234  * Compare two versioned dependency ranges, looking for overlap.
235  * @param A             1st dependency
236  * @param B             2nd dependency
237  * @return              1 if dependencies overlap, 0 otherwise
238  */
239 int rpmdsCompare(const rpmds A, const rpmds B)
240         /*@*/;
241
242 /**
243  * Report a Requires: or Conflicts: dependency problem.
244  * @param ps            transaction set problems
245  * @param pkgNEVR       package name/epoch/version/release
246  * @param ds            dependency set
247  * @param suggestedKeys
248  */
249 void rpmdsProblem(/*@null@*/ rpmps ps, const char * pkgNEVR, const rpmds ds,
250                 /*@only@*/ /*@null@*/ const fnpyKey * suggestedKeys)
251         /*@modifies ps @*/;
252
253 /**
254  * Compare package provides dependencies from header with a single dependency.
255  * @param h             header
256  * @param req           dependency set
257  */
258 int rangeMatchesDepFlags (Header h, const rpmds req)
259         /*@modifies h @*/;
260
261 /**
262  * Compare package name-version-release from header with a single dependency.
263  * @deprecated Remove from API when obsoletes is correctly implemented.
264  * @param h             header
265  * @param req           dependency
266  * @return              1 if dependency overlaps, 0 otherwise
267  */
268 int headerMatchesDepFlags(const Header h, const rpmds req)
269         /*@*/;
270
271 #ifdef __cplusplus
272 }
273 #endif
274
275 #endif  /* H_RPMDS */