]>
Commit | Line | Data |
---|---|---|
3ce6a8ad MT |
1 | #ifndef H_RPMTAG |
2 | #define H_RPMTAG | |
3 | ||
4 | /** \ingroup header | |
5 | * \file rpmdb/rpmtag.h | |
6 | */ | |
7 | ||
b55979b4 MT |
8 | #include "rpmiotypes.h" |
9 | #include "rpmsw.h" | |
3ce6a8ad MT |
10 | |
11 | #ifdef __cplusplus | |
12 | extern "C" { | |
13 | #endif | |
14 | ||
15 | /** \ingroup header | |
16 | */ | |
17 | typedef const char * errmsg_t; | |
18 | ||
19 | /** \ingroup header | |
20 | */ | |
21 | typedef /*@abstract@*/ /*@refcounted@*/ struct headerToken_s * Header; | |
22 | ||
23 | /** \ingroup header | |
24 | * The basic types of data in tags from headers. | |
25 | */ | |
26 | enum rpmTagType_e { | |
27 | /* RPM_NULL_TYPE = 0 - never been used. */ | |
28 | /* RPM_CHAR_TYPE = 1 - never been used, same as RPM_UINT8_TYPE. */ | |
29 | RPM_UINT8_TYPE = 2, | |
30 | RPM_UINT16_TYPE = 3, | |
31 | RPM_UINT32_TYPE = 4, | |
32 | RPM_UINT64_TYPE = 5, | |
33 | RPM_STRING_TYPE = 6, | |
34 | RPM_BIN_TYPE = 7, | |
35 | RPM_STRING_ARRAY_TYPE = 8, | |
36 | RPM_I18NSTRING_TYPE = 9 | |
37 | /* RPM_ASN1_TYPE = 10 - never been used. */ | |
38 | /* RPM_OPENPGP_TYPE= 11 - never been used. */ | |
39 | }; | |
40 | #define RPM_MIN_TYPE 2 | |
41 | #define RPM_MAX_TYPE 9 | |
42 | #define RPM_MASK_TYPE 0x0000ffff | |
43 | ||
44 | /** \ingroup header | |
45 | */ | |
46 | typedef enum rpmTagType_e rpmTagType; /*!< tag data type. */ | |
47 | ||
48 | /** \ingroup header | |
49 | */ | |
50 | typedef union rpmDataType_u rpmTagData; /*!< tag data. */ | |
51 | ||
52 | /** \ingroup header | |
53 | */ | |
54 | typedef rpmuint32_t rpmTagCount; /*!< tag data element count. */ | |
55 | ||
56 | /** \ingroup header | |
57 | */ | |
58 | typedef struct _HE_s * HE_t; /*!< tag container. */ | |
59 | ||
60 | /** \ingroup header | |
61 | */ | |
62 | /*@-typeuse -fielduse@*/ | |
63 | #if !defined(SWIG) | |
64 | union rpmDataType_u { | |
65 | /*@null@*/ | |
66 | void * ptr; | |
67 | rpmuint8_t * ui8p; /*!< RPM_UINT8_TYPE | RPM_CHAR_TYPE */ | |
68 | rpmuint16_t * ui16p; /*!< RPM_UINT16_TYPE */ | |
69 | rpmuint32_t * ui32p; /*!< RPM_UINT32_TYPE */ | |
70 | rpmuint64_t * ui64p; /*!< RPM_UINT64_TYPE */ | |
71 | /*@relnull@*/ | |
72 | const char * str; /*!< RPM_STRING_TYPE */ | |
73 | unsigned char * blob; /*!< RPM_BIN_TYPE */ | |
74 | const char ** argv; /*!< RPM_STRING_ARRAY_TYPE */ | |
75 | HE_t he; | |
76 | }; | |
77 | #endif | |
78 | /*@=typeuse =fielduse@*/ | |
79 | ||
80 | /*@=typeuse =fielduse@*/ | |
81 | /** \ingroup header | |
82 | */ | |
83 | /*@-enummemuse -typeuse @*/ | |
84 | typedef enum rpmSubTagType_e { | |
85 | RPM_REGION_TYPE = -10, | |
86 | RPM_BIN_ARRAY_TYPE = -11, | |
87 | RPM_XREF_TYPE = -12 | |
88 | } rpmSubTagType; | |
89 | /*@=enummemuse =typeuse @*/ | |
90 | ||
91 | /** \ingroup header | |
92 | * Identify how to return the header data type. | |
93 | */ | |
94 | /*@-enummemuse -typeuse @*/ | |
95 | typedef enum rpmTagReturnType_e { | |
96 | RPM_ANY_RETURN_TYPE = 0, | |
97 | RPM_SCALAR_RETURN_TYPE = 0x00010000, | |
98 | RPM_ARRAY_RETURN_TYPE = 0x00020000, | |
99 | RPM_MAPPING_RETURN_TYPE = 0x00040000, | |
100 | /* 0x00080000 */ | |
101 | RPM_PROBE_RETURN_TYPE = 0x00100000, | |
102 | RPM_TREE_RETURN_TYPE = 0x00200000, | |
103 | RPM_OPENPGP_RETURN_TYPE = 0x00400000, | |
104 | RPM_X509_RETURN_TYPE = 0x00800000, | |
105 | RPM_ASN1_RETURN_TYPE = 0x01000000, | |
106 | RPM_OPAQUE_RETURN_TYPE = 0x10000000, | |
107 | RPM_MASK_RETURN_TYPE = 0xffff0000 | |
108 | } rpmTagReturnType; | |
109 | /*@=enummemuse =typeuse @*/ | |
110 | ||
111 | /** | |
112 | * Header private tags. | |
113 | * @note General use tags should start at 1000 (RPM's tag space starts there). | |
114 | */ | |
115 | #define HEADER_IMAGE 61 | |
116 | #define HEADER_SIGNATURES 62 | |
117 | #define HEADER_IMMUTABLE 63 | |
118 | #define HEADER_REGIONS 64 | |
119 | #define HEADER_I18NTABLE 100 | |
120 | #define HEADER_SIGBASE 256 | |
121 | #define HEADER_TAGBASE 1000 | |
122 | ||
123 | /** \ingroup header | |
124 | */ | |
125 | typedef /*@abstract@*/ struct headerIterator_s * HeaderIterator; | |
126 | ||
127 | /** \ingroup header | |
128 | */ | |
129 | typedef /*@abstract@*/ struct headerTagIndices_s * headerTagIndices; | |
130 | ||
131 | /** \ingroup header | |
132 | */ | |
133 | typedef /*@abstract@*/ const struct headerSprintfExtension_s * headerSprintfExtension; | |
134 | ||
135 | /** | |
136 | * Pseudo-tags used by the rpmdb and rpmgi iterator API's. | |
137 | */ | |
138 | #define RPMDBI_PACKAGES 0 /* Installed package headers. */ | |
139 | #define RPMDBI_DEPENDS 1 /* Dependency resolution cache. */ | |
140 | /* (obsolete) RPMDBI_LABEL was 2 */ | |
141 | #define RPMDBI_ADDED 3 /* Added package headers. */ | |
142 | #define RPMDBI_REMOVED 4 /* Removed package headers. */ | |
143 | #define RPMDBI_AVAILABLE 5 /* Available package headers. */ | |
144 | #define RPMDBI_HDLIST 6 /* (rpmgi) Header list. */ | |
145 | #define RPMDBI_ARGLIST 7 /* (rpmgi) Argument list. */ | |
146 | #define RPMDBI_FTSWALK 8 /* (rpmgi) File tree walk. */ | |
147 | #define RPMDBI_SEQNO 9 /* Sequence numbers. */ | |
148 | #define RPMDBI_BTREE 10 /* (development) Generic DB_BTREE. */ | |
149 | #define RPMDBI_HASH 11 /* (development) Generic DB_HASH. */ | |
150 | #define RPMDBI_QUEUE 12 /* (development) Generic DB_QUEUE. */ | |
151 | #define RPMDBI_RECNO 13 /* (development) Generic DB_RECNO. */ | |
152 | #define RPMDBI_REPACKAGES 14 /* Re-packaged package paths. */ | |
153 | #define RPMDBI_REPOSITORY 15 /* Repository URI's. */ | |
154 | ||
155 | /** \ingroup header | |
156 | * Tags identify data in package headers. | |
157 | * @note tags should not have value 0! | |
158 | */ | |
159 | enum rpmTag_e { | |
160 | ||
161 | RPMTAG_HEADERIMAGE = HEADER_IMAGE, /*!< internal Current image. */ | |
162 | RPMTAG_HEADERSIGNATURES = HEADER_SIGNATURES, /*!< internal Signatures. */ | |
163 | RPMTAG_HEADERIMMUTABLE = HEADER_IMMUTABLE, /*!< x Original image. */ | |
164 | /*@-enummemuse@*/ | |
165 | RPMTAG_HEADERREGIONS = HEADER_REGIONS, /*!< internal Regions. */ | |
166 | ||
167 | RPMTAG_HEADERI18NTABLE = HEADER_I18NTABLE, /*!< s[] I18N string locales. */ | |
168 | /*@=enummemuse@*/ | |
169 | ||
170 | /* Retrofit (and uniqify) signature tags for use by tagName() and rpmQuery. */ | |
171 | /* the md5 sum was broken *twice* on big endian machines */ | |
172 | /* XXX 2nd underscore prevents tagTable generation */ | |
173 | RPMTAG_SIG_BASE = HEADER_SIGBASE, | |
174 | RPMTAG_SIGSIZE = RPMTAG_SIG_BASE+1, /* i */ | |
175 | RPMTAG_SIGLEMD5_1 = RPMTAG_SIG_BASE+2, /* internal - obsolete */ | |
176 | RPMTAG_SIGPGP = RPMTAG_SIG_BASE+3, /* x */ | |
177 | RPMTAG_SIGLEMD5_2 = RPMTAG_SIG_BASE+4, /* x internal - obsolete */ | |
178 | RPMTAG_SIGMD5 = RPMTAG_SIG_BASE+5, /* x */ | |
179 | #define RPMTAG_PKGID RPMTAG_SIGMD5 /* x */ | |
180 | RPMTAG_SIGGPG = RPMTAG_SIG_BASE+6, /* x */ | |
181 | RPMTAG_SIGPGP5 = RPMTAG_SIG_BASE+7, /* internal - obsolete */ | |
182 | ||
183 | RPMTAG_BADSHA1_1 = RPMTAG_SIG_BASE+8, /* internal - obsolete */ | |
184 | RPMTAG_BADSHA1_2 = RPMTAG_SIG_BASE+9, /* internal - obsolete */ | |
185 | RPMTAG_PUBKEYS = RPMTAG_SIG_BASE+10, /* s[] */ | |
186 | RPMTAG_DSAHEADER = RPMTAG_SIG_BASE+11, /* x */ | |
187 | RPMTAG_RSAHEADER = RPMTAG_SIG_BASE+12, /* x */ | |
188 | RPMTAG_SHA1HEADER = RPMTAG_SIG_BASE+13, /* s */ | |
189 | #define RPMTAG_HDRID RPMTAG_SHA1HEADER /* s */ | |
190 | ||
191 | RPMTAG_NAME = 1000, /* s */ | |
192 | #define RPMTAG_N RPMTAG_NAME /* s */ | |
193 | RPMTAG_VERSION = 1001, /* s */ | |
194 | #define RPMTAG_V RPMTAG_VERSION /* s */ | |
195 | RPMTAG_RELEASE = 1002, /* s */ | |
196 | #define RPMTAG_R RPMTAG_RELEASE /* s */ | |
197 | RPMTAG_EPOCH = 1003, /* i */ | |
198 | #define RPMTAG_E RPMTAG_EPOCH /* i */ | |
199 | RPMTAG_SUMMARY = 1004, /* s{} */ | |
200 | RPMTAG_DESCRIPTION = 1005, /* s{} */ | |
201 | RPMTAG_BUILDTIME = 1006, /* i */ | |
202 | RPMTAG_BUILDHOST = 1007, /* s */ | |
203 | RPMTAG_INSTALLTIME = 1008, /* i[] */ | |
204 | RPMTAG_SIZE = 1009, /* i */ | |
205 | RPMTAG_DISTRIBUTION = 1010, /* s */ | |
206 | RPMTAG_VENDOR = 1011, /* s */ | |
207 | RPMTAG_GIF = 1012, /* x */ | |
208 | RPMTAG_XPM = 1013, /* x */ | |
209 | RPMTAG_LICENSE = 1014, /* s */ | |
210 | RPMTAG_PACKAGER = 1015, /* s */ | |
211 | RPMTAG_GROUP = 1016, /* s{} */ | |
212 | /*@-enummemuse@*/ | |
213 | RPMTAG_CHANGELOG = 1017, /* s[] internal */ | |
214 | /*@=enummemuse@*/ | |
215 | RPMTAG_SOURCE = 1018, /* s[] */ | |
216 | RPMTAG_PATCH = 1019, /* s[] */ | |
217 | RPMTAG_URL = 1020, /* s */ | |
218 | RPMTAG_OS = 1021, /* s legacy used int */ | |
219 | RPMTAG_ARCH = 1022, /* s legacy used int */ | |
220 | RPMTAG_PREIN = 1023, /* s */ | |
221 | RPMTAG_POSTIN = 1024, /* s */ | |
222 | RPMTAG_PREUN = 1025, /* s */ | |
223 | RPMTAG_POSTUN = 1026, /* s */ | |
224 | RPMTAG_OLDFILENAMES = 1027, /* s[] obsolete */ | |
225 | RPMTAG_FILESIZES = 1028, /* i[] */ | |
226 | RPMTAG_FILESTATES = 1029, /* c[] */ | |
227 | RPMTAG_FILEMODES = 1030, /* h[] */ | |
228 | RPMTAG_FILEUIDS = 1031, /* i[] internal */ | |
229 | RPMTAG_FILEGIDS = 1032, /* i[] internal */ | |
230 | RPMTAG_FILERDEVS = 1033, /* h[] */ | |
231 | RPMTAG_FILEMTIMES = 1034, /* i[] */ | |
232 | RPMTAG_FILEDIGESTS = 1035, /* s[] */ | |
233 | #define RPMTAG_FILEMD5S RPMTAG_FILEDIGESTS /* s[] */ | |
234 | RPMTAG_FILELINKTOS = 1036, /* s[] */ | |
235 | RPMTAG_FILEFLAGS = 1037, /* i[] */ | |
236 | /*@-enummemuse@*/ | |
237 | RPMTAG_ROOT = 1038, /* internal - obsolete */ | |
238 | /*@=enummemuse@*/ | |
239 | RPMTAG_FILEUSERNAME = 1039, /* s[] */ | |
240 | RPMTAG_FILEGROUPNAME = 1040, /* s[] */ | |
241 | /*@-enummemuse@*/ | |
242 | RPMTAG_EXCLUDE = 1041, /* internal - obsolete */ | |
243 | RPMTAG_EXCLUSIVE = 1042, /* internal - obsolete */ | |
244 | /*@=enummemuse@*/ | |
245 | RPMTAG_ICON = 1043, /* x */ | |
246 | RPMTAG_SOURCERPM = 1044, /* s */ | |
247 | RPMTAG_FILEVERIFYFLAGS = 1045, /* i[] */ | |
248 | RPMTAG_ARCHIVESIZE = 1046, /* i */ | |
249 | RPMTAG_PROVIDENAME = 1047, /* s[] */ | |
250 | #define RPMTAG_PROVIDES RPMTAG_PROVIDENAME /* s[] */ | |
251 | #define RPMTAG_P RPMTAG_PROVIDENAME /* s[] */ | |
252 | RPMTAG_REQUIREFLAGS = 1048, /* i[] */ | |
253 | RPMTAG_REQUIRENAME = 1049, /* s[] */ | |
254 | #define RPMTAG_REQUIRES RPMTAG_REQUIRENAME /* s[] */ | |
255 | RPMTAG_REQUIREVERSION = 1050, /* s[] */ | |
256 | RPMTAG_NOSOURCE = 1051, /* i internal */ | |
257 | RPMTAG_NOPATCH = 1052, /* i internal */ | |
258 | RPMTAG_CONFLICTFLAGS = 1053, /* i[] */ | |
259 | RPMTAG_CONFLICTNAME = 1054, /* s[] */ | |
260 | #define RPMTAG_CONFLICTS RPMTAG_CONFLICTNAME /* s[] */ | |
261 | #define RPMTAG_C RPMTAG_CONFLICTNAME /* s[] */ | |
262 | RPMTAG_CONFLICTVERSION = 1055, /* s[] */ | |
263 | RPMTAG_DEFAULTPREFIX = 1056, /* s internal - deprecated */ | |
264 | RPMTAG_BUILDROOT = 1057, /* s internal */ | |
265 | RPMTAG_INSTALLPREFIX = 1058, /* s internal - deprecated */ | |
266 | RPMTAG_EXCLUDEARCH = 1059, /* s[] */ | |
267 | RPMTAG_EXCLUDEOS = 1060, /* s[] */ | |
268 | RPMTAG_EXCLUSIVEARCH = 1061, /* s[] */ | |
269 | RPMTAG_EXCLUSIVEOS = 1062, /* s[] */ | |
270 | RPMTAG_AUTOREQPROV = 1063, /* s internal */ | |
271 | RPMTAG_RPMVERSION = 1064, /* s */ | |
272 | RPMTAG_TRIGGERSCRIPTS = 1065, /* s[] */ | |
273 | RPMTAG_TRIGGERNAME = 1066, /* s[] */ | |
274 | RPMTAG_TRIGGERVERSION = 1067, /* s[] */ | |
275 | RPMTAG_TRIGGERFLAGS = 1068, /* i[] */ | |
276 | RPMTAG_TRIGGERINDEX = 1069, /* i[] */ | |
277 | RPMTAG_VERIFYSCRIPT = 1079, /* s */ | |
278 | RPMTAG_CHANGELOGTIME = 1080, /* i[] */ | |
279 | RPMTAG_CHANGELOGNAME = 1081, /* s[] */ | |
280 | RPMTAG_CHANGELOGTEXT = 1082, /* s[] */ | |
281 | /*@-enummemuse@*/ | |
282 | RPMTAG_BROKENMD5 = 1083, /* internal - obsolete */ | |
283 | /*@=enummemuse@*/ | |
284 | RPMTAG_PREREQ = 1084, /* internal */ | |
285 | RPMTAG_PREINPROG = 1085, /* s */ | |
286 | RPMTAG_POSTINPROG = 1086, /* s */ | |
287 | RPMTAG_PREUNPROG = 1087, /* s */ | |
288 | RPMTAG_POSTUNPROG = 1088, /* s */ | |
289 | RPMTAG_BUILDARCHS = 1089, /* s[] */ | |
290 | RPMTAG_OBSOLETENAME = 1090, /* s[] */ | |
291 | #define RPMTAG_OBSOLETES RPMTAG_OBSOLETENAME /* s[] */ | |
292 | #define RPMTAG_O RPMTAG_OBSOLETENAME /* s[] */ | |
293 | RPMTAG_VERIFYSCRIPTPROG = 1091, /* s */ | |
294 | RPMTAG_TRIGGERSCRIPTPROG = 1092, /* s[] */ | |
295 | RPMTAG_DOCDIR = 1093, /* internal */ | |
296 | RPMTAG_COOKIE = 1094, /* s */ | |
297 | RPMTAG_FILEDEVICES = 1095, /* i[] */ | |
298 | RPMTAG_FILEINODES = 1096, /* i[] */ | |
299 | RPMTAG_FILELANGS = 1097, /* s[] */ | |
300 | RPMTAG_PREFIXES = 1098, /* s[] */ | |
301 | RPMTAG_INSTPREFIXES = 1099, /* s[] */ | |
302 | RPMTAG_TRIGGERIN = 1100, /* internal */ | |
303 | RPMTAG_TRIGGERUN = 1101, /* internal */ | |
304 | RPMTAG_TRIGGERPOSTUN = 1102, /* internal */ | |
305 | RPMTAG_AUTOREQ = 1103, /* internal */ | |
306 | RPMTAG_AUTOPROV = 1104, /* internal */ | |
307 | /*@-enummemuse@*/ | |
308 | RPMTAG_CAPABILITY = 1105, /* i legacy - obsolete */ | |
309 | /*@=enummemuse@*/ | |
310 | RPMTAG_SOURCEPACKAGE = 1106, /* i legacy - obsolete */ | |
311 | /*@-enummemuse@*/ | |
312 | RPMTAG_OLDORIGFILENAMES = 1107, /* internal - obsolete */ | |
313 | /*@=enummemuse@*/ | |
314 | RPMTAG_BUILDPREREQ = 1108, /* internal */ | |
315 | RPMTAG_BUILDREQUIRES = 1109, /* internal */ | |
316 | RPMTAG_BUILDCONFLICTS = 1110, /* internal */ | |
317 | /*@-enummemuse@*/ | |
318 | RPMTAG_BUILDMACROS = 1111, /* s[] srpms only */ | |
319 | /*@=enummemuse@*/ | |
320 | RPMTAG_PROVIDEFLAGS = 1112, /* i[] */ | |
321 | RPMTAG_PROVIDEVERSION = 1113, /* s[] */ | |
322 | RPMTAG_OBSOLETEFLAGS = 1114, /* i[] */ | |
323 | RPMTAG_OBSOLETEVERSION = 1115, /* s[] */ | |
324 | RPMTAG_DIRINDEXES = 1116, /* i[] */ | |
325 | RPMTAG_BASENAMES = 1117, /* s[] */ | |
326 | RPMTAG_DIRNAMES = 1118, /* s[] */ | |
327 | RPMTAG_ORIGDIRINDEXES = 1119, /* i[] relocation */ | |
328 | RPMTAG_ORIGBASENAMES = 1120, /* s[] relocation */ | |
329 | RPMTAG_ORIGDIRNAMES = 1121, /* s[] relocation */ | |
330 | RPMTAG_OPTFLAGS = 1122, /* s */ | |
331 | RPMTAG_DISTURL = 1123, /* s */ | |
332 | RPMTAG_PAYLOADFORMAT = 1124, /* s */ | |
333 | RPMTAG_PAYLOADCOMPRESSOR = 1125, /* s */ | |
334 | RPMTAG_PAYLOADFLAGS = 1126, /* s */ | |
335 | RPMTAG_INSTALLCOLOR = 1127, /* i transaction color when installed */ | |
336 | RPMTAG_INSTALLTID = 1128, /* i[] */ | |
337 | RPMTAG_REMOVETID = 1129, /* i[] */ | |
338 | /*@-enummemuse@*/ | |
339 | RPMTAG_SHA1RHN = 1130, /* internal - obsolete */ | |
340 | /*@=enummemuse@*/ | |
341 | RPMTAG_RHNPLATFORM = 1131, /* s deprecated */ | |
342 | RPMTAG_PLATFORM = 1132, /* s */ | |
343 | RPMTAG_PATCHESNAME = 1133, /* s[] deprecated placeholder (SuSE) */ | |
344 | RPMTAG_PATCHESFLAGS = 1134, /* i[] deprecated placeholder (SuSE) */ | |
345 | RPMTAG_PATCHESVERSION = 1135, /* s[] deprecated placeholder (SuSE) */ | |
346 | RPMTAG_CACHECTIME = 1136, /* i rpmcache(8) only */ | |
347 | RPMTAG_CACHEPKGPATH = 1137, /* s rpmcache(8) only */ | |
348 | RPMTAG_CACHEPKGSIZE = 1138, /* i rpmcache(8) only */ | |
349 | RPMTAG_CACHEPKGMTIME = 1139, /* i rpmcache(8) only */ | |
350 | RPMTAG_FILECOLORS = 1140, /* i[] */ | |
351 | RPMTAG_FILECLASS = 1141, /* i[] */ | |
352 | RPMTAG_CLASSDICT = 1142, /* s[] */ | |
353 | RPMTAG_FILEDEPENDSX = 1143, /* i[] */ | |
354 | RPMTAG_FILEDEPENDSN = 1144, /* i[] */ | |
355 | RPMTAG_DEPENDSDICT = 1145, /* i[] */ | |
356 | RPMTAG_SOURCEPKGID = 1146, /* x */ | |
357 | RPMTAG_FILECONTEXTS = 1147, /* s[] */ | |
358 | RPMTAG_FSCONTEXTS = 1148, /* s[] extension */ | |
359 | RPMTAG_RECONTEXTS = 1149, /* s[] extension */ | |
360 | RPMTAG_POLICIES = 1150, /* s[] selinux *.te policy file. */ | |
361 | RPMTAG_PRETRANS = 1151, /* s */ | |
362 | RPMTAG_POSTTRANS = 1152, /* s */ | |
363 | RPMTAG_PRETRANSPROG = 1153, /* s */ | |
364 | RPMTAG_POSTTRANSPROG = 1154, /* s */ | |
365 | RPMTAG_DISTTAG = 1155, /* s */ | |
366 | RPMTAG_SUGGESTSNAME = 1156, /* s[] extension */ | |
367 | #define RPMTAG_SUGGESTS RPMTAG_SUGGESTSNAME /* s[] */ | |
368 | RPMTAG_SUGGESTSVERSION = 1157, /* s[] extension */ | |
369 | RPMTAG_SUGGESTSFLAGS = 1158, /* i[] extension */ | |
370 | RPMTAG_ENHANCESNAME = 1159, /* s[] extension placeholder */ | |
371 | #define RPMTAG_ENHANCES RPMTAG_ENHANCESNAME /* s[] */ | |
372 | RPMTAG_ENHANCESVERSION = 1160, /* s[] extension placeholder */ | |
373 | RPMTAG_ENHANCESFLAGS = 1161, /* i[] extension placeholder */ | |
374 | RPMTAG_PRIORITY = 1162, /* i[] extension placeholder */ | |
375 | RPMTAG_CVSID = 1163, /* s */ | |
376 | #define RPMTAG_SVNID RPMTAG_CVSID /* s */ | |
377 | RPMTAG_BLINKPKGID = 1164, /* s[] */ | |
378 | RPMTAG_BLINKHDRID = 1165, /* s[] */ | |
379 | RPMTAG_BLINKNEVRA = 1166, /* s[] */ | |
380 | RPMTAG_FLINKPKGID = 1167, /* s[] */ | |
381 | RPMTAG_FLINKHDRID = 1168, /* s[] */ | |
382 | RPMTAG_FLINKNEVRA = 1169, /* s[] */ | |
383 | RPMTAG_PACKAGEORIGIN = 1170, /* s */ | |
384 | RPMTAG_TRIGGERPREIN = 1171, /* internal */ | |
385 | RPMTAG_BUILDSUGGESTS = 1172, /* internal */ | |
386 | RPMTAG_BUILDENHANCES = 1173, /* internal */ | |
387 | RPMTAG_SCRIPTSTATES = 1174, /* i[] scriptlet exit codes */ | |
388 | RPMTAG_SCRIPTMETRICS = 1175, /* i[] scriptlet execution times */ | |
389 | RPMTAG_BUILDCPUCLOCK = 1176, /* i */ | |
390 | RPMTAG_FILEDIGESTALGOS = 1177, /* i[] */ | |
391 | RPMTAG_VARIANTS = 1178, /* s[] */ | |
392 | RPMTAG_XMAJOR = 1179, /* i */ | |
393 | RPMTAG_XMINOR = 1180, /* i */ | |
394 | RPMTAG_REPOTAG = 1181, /* s */ | |
395 | RPMTAG_KEYWORDS = 1182, /* s[] */ | |
396 | RPMTAG_BUILDPLATFORMS = 1183, /* s[] */ | |
397 | RPMTAG_PACKAGECOLOR = 1184, /* i */ | |
398 | RPMTAG_PACKAGEPREFCOLOR = 1185, /* i (unimplemented) */ | |
399 | RPMTAG_XATTRSDICT = 1186, /* s[] (unimplemented) */ | |
400 | RPMTAG_FILEXATTRSX = 1187, /* i[] (unimplemented) */ | |
401 | RPMTAG_DEPATTRSDICT = 1188, /* s[] (unimplemented) */ | |
402 | RPMTAG_CONFLICTATTRSX = 1189, /* i[] (unimplemented) */ | |
403 | RPMTAG_OBSOLETEATTRSX = 1190, /* i[] (unimplemented) */ | |
404 | RPMTAG_PROVIDEATTRSX = 1191, /* i[] (unimplemented) */ | |
405 | RPMTAG_REQUIREATTRSX = 1192, /* i[] (unimplemented) */ | |
406 | RPMTAG_BUILDPROVIDES = 1193, /* internal */ | |
407 | RPMTAG_BUILDOBSOLETES = 1194, /* internal */ | |
408 | RPMTAG_DBINSTANCE = 1195, /* i */ | |
409 | RPMTAG_NVRA = 1196, /* s */ | |
410 | RPMTAG_FILEPATHS = 1197, /* s[] */ | |
411 | RPMTAG_ORIGPATHS = 1198, /* s[] */ | |
412 | RPMTAG_RPMLIBVERSION = 1199, /* i */ | |
413 | RPMTAG_RPMLIBTIMESTAMP = 1200, /* i */ | |
414 | RPMTAG_RPMLIBVENDOR = 1201, /* i */ | |
415 | RPMTAG_CLASS = 1202, /* s arbitrary */ | |
416 | RPMTAG_TRACK = 1203, /* s internal arbitrary */ | |
417 | RPMTAG_TRACKPROG = 1204, /* s internal arbitrary */ | |
418 | RPMTAG_SANITYCHECK = 1205, /* s */ | |
419 | RPMTAG_SANITYCHECKPROG = 1206, /* s */ | |
420 | RPMTAG_FILESTAT = 1207, /* s[] stat(2) from metadata extension*/ | |
421 | RPMTAG_STAT = 1208, /* s[] stat(2) from disk extension */ | |
422 | RPMTAG_ORIGINTID = 1209, /* i[] */ | |
423 | RPMTAG_ORIGINTIME = 1210, /* i[] */ | |
424 | RPMTAG_HEADERSTARTOFF = 1211, /* l */ | |
425 | RPMTAG_HEADERENDOFF = 1212, /* l */ | |
426 | RPMTAG_PACKAGETIME = 1213, /* l */ | |
427 | RPMTAG_PACKAGESIZE = 1214, /* l */ | |
428 | RPMTAG_PACKAGEDIGEST = 1215, /* s */ | |
429 | RPMTAG_PACKAGESTAT = 1216, /* x */ | |
430 | RPMTAG_PACKAGEBASEURL = 1217, /* s */ | |
431 | RPMTAG_DISTEPOCH = 1218, /* s */ | |
432 | #define RPMTAG_D RPMTAG_DISTEPOCH /* s */ | |
433 | ||
434 | RPMTAG_CONFLICTYAMLENTRY = 1219, /* s[] */ | |
435 | RPMTAG_OBSOLETEYAMLENTRY = 1220, /* s[] */ | |
436 | RPMTAG_PROVIDEYAMLENTRY = 1221, /* s[] */ | |
437 | RPMTAG_REQUIREYAMLENTRY = 1222, /* s[] */ | |
438 | ||
439 | RPMTAG_FILEDIGESTALGO = 5011, /* i file checksum algorithm */ | |
440 | RPMTAG_BUGURL = 5012, /* s */ | |
441 | ||
442 | /*@-enummemuse@*/ | |
443 | RPMTAG_FIRSTFREE_TAG, /*!< internal */ | |
444 | /*@=enummemuse@*/ | |
445 | ||
446 | RPMTAG_PACKAGETRANSFLAGS = 0x4efaafd9, /* s[] arbitrary */ | |
447 | RPMTAG_PACKAGEDEPFLAGS = 0x748a8314, /* s[] arbitrary */ | |
448 | ||
449 | RPMTAG_BUILDPREPPROG = 0x4ba37c9e, /* s[] arbitrary */ | |
450 | RPMTAG_BUILDPREP = 0x799c0b4d, /* s[] arbitrary */ | |
451 | RPMTAG_BUILDBUILDPROG = 0x6fb46014, /* s[] arbitrary */ | |
452 | RPMTAG_BUILDBUILD = 0x5bae1a5a, /* s[] arbitrary */ | |
453 | RPMTAG_BUILDINSTALLPROG = 0x70d4ab6f, /* s[] arbitrary */ | |
454 | RPMTAG_BUILDINSTALL = 0x567f5983, /* s[] arbitrary */ | |
455 | RPMTAG_BUILDCHECKPROG = 0x488a60ce, /* s[] arbitrary */ | |
456 | RPMTAG_BUILDCHECK = 0x7f3b97b5, /* s[] arbitrary */ | |
457 | RPMTAG_BUILDCLEANPROG = 0x42c93d41, /* s[] arbitrary */ | |
458 | RPMTAG_BUILDCLEAN = 0x566042bf, /* s[] arbitrary */ | |
459 | ||
460 | RPMTAG_LASTARBITRARY_TAG = 0x80000000 /*!< internal */ | |
461 | }; | |
462 | ||
463 | #define RPMTAG_EXTERNAL_TAG 1000000 | |
464 | ||
465 | /** \ingroup signature | |
466 | * Tags found in signature header from package. | |
467 | */ | |
468 | enum rpmSigTag_e { | |
469 | RPMSIGTAG_SIZE = 1000, /*!< internal Header+Payload size in bytes. */ | |
470 | RPMSIGTAG_LEMD5_1 = 1001, /*!< internal Broken MD5, take 1 @deprecated legacy. */ | |
471 | RPMSIGTAG_PGP = 1002, /*!< internal PGP 2.6.3 signature. */ | |
472 | RPMSIGTAG_LEMD5_2 = 1003, /*!< internal Broken MD5, take 2 @deprecated legacy. */ | |
473 | RPMSIGTAG_MD5 = 1004, /*!< internal MD5 signature. */ | |
474 | RPMSIGTAG_GPG = 1005, /*!< internal GnuPG signature. */ | |
475 | RPMSIGTAG_PGP5 = 1006, /*!< internal PGP5 signature @deprecated legacy. */ | |
476 | RPMSIGTAG_PAYLOADSIZE = 1007,/*!< internal uncompressed payload size in bytes. */ | |
477 | RPMSIGTAG_BADSHA1_1 = RPMTAG_BADSHA1_1, /*!< internal Broken SHA1, take 1. */ | |
478 | RPMSIGTAG_BADSHA1_2 = RPMTAG_BADSHA1_2, /*!< internal Broken SHA1, take 2. */ | |
479 | RPMSIGTAG_SHA1 = RPMTAG_SHA1HEADER, /*!< internal sha1 header digest. */ | |
480 | RPMSIGTAG_DSA = RPMTAG_DSAHEADER, /*!< internal DSA header signature. */ | |
481 | RPMSIGTAG_RSA = RPMTAG_RSAHEADER, /*!< internal RSA header signature. */ | |
482 | RPMSIGTAG_PADDING = 0x3fffffff /*!< signature header padding */ | |
483 | }; | |
484 | ||
485 | /** \ingroup header | |
486 | */ | |
487 | typedef enum rpmTag_e rpmTag; | |
488 | ||
489 | /** \ingroup header | |
490 | */ | |
491 | typedef enum rpmSigTag_e rpmSigTag; | |
492 | ||
493 | /** \ingroup header | |
494 | */ | |
495 | /*@-typeuse -fielduse@*/ | |
496 | #if !defined(SWIG) | |
497 | struct _HE_s { | |
498 | rpmTag tag; | |
499 | rpmTagType t; | |
500 | /*@owned@*/ /*@null@*/ | |
501 | rpmTagData p; | |
502 | rpmTagCount c; | |
503 | int ix; | |
504 | unsigned int freeData : 1; | |
505 | unsigned int avail : 1; | |
506 | unsigned int append : 1; | |
507 | }; | |
508 | #endif | |
509 | ||
510 | /** | |
511 | */ | |
512 | typedef struct _HE_s HE_s; | |
513 | ||
514 | /** \ingroup rpmdb | |
515 | */ | |
516 | typedef struct tagStore_s * tagStore_t; | |
517 | ||
518 | /** | |
519 | */ | |
520 | typedef /*@abstract@*/ const struct headerTagTableEntry_s * headerTagTableEntry; | |
521 | ||
522 | #if defined(_RPMTAG_INTERNAL) | |
523 | /** | |
524 | */ | |
525 | /** \ingroup header | |
526 | * Associate tag names with numeric values. | |
527 | */ | |
528 | #if !defined(SWIG) | |
529 | struct headerTagTableEntry_s { | |
530 | /*@observer@*/ /*@relnull@*/ | |
531 | const char * name; /*!< Tag name. */ | |
532 | rpmTag val; /*!< Tag numeric value. */ | |
533 | rpmTagType type; /*!< Tag type. */ | |
534 | }; | |
535 | #endif | |
536 | ||
537 | /** | |
538 | */ | |
539 | struct tagStore_s { | |
540 | /*@only@*/ | |
541 | const char * str; /*!< Tag string (might be arbitrary). */ | |
542 | rpmTag tag; /*!< Tag number. */ | |
543 | rpmiob iob; /*!< Tag contents. */ | |
544 | }; | |
545 | #endif /* _RPMTAG_INTERNAL */ | |
546 | ||
547 | /** | |
548 | * Automatically generated table of tag name/value pairs. | |
549 | */ | |
550 | /*@-redecl@*/ | |
551 | /*@observer@*/ /*@unchecked@*/ | |
552 | extern headerTagTableEntry rpmTagTable; | |
553 | /*@=redecl@*/ | |
554 | ||
555 | /** | |
556 | * Number of entries in rpmTagTable. | |
557 | */ | |
558 | /*@-redecl@*/ | |
559 | /*@unchecked@*/ | |
560 | extern int rpmTagTableSize; | |
561 | ||
562 | /*@unchecked@*/ | |
563 | extern headerTagIndices rpmTags; | |
564 | /*@=redecl@*/ | |
565 | ||
566 | #if defined(_RPMTAG_INTERNAL) | |
567 | /** | |
568 | */ | |
569 | #if !defined(SWIG) | |
570 | struct headerTagIndices_s { | |
571 | /*@relnull@*/ | |
572 | int (*loadIndex) (headerTagTableEntry ** ipp, size_t * np, | |
573 | int (*cmp) (const void * avp, const void * bvp)) | |
574 | /*@ modifies *ipp, *np */; /*!< Load sorted tag index. */ | |
575 | /*@relnull@*/ | |
576 | headerTagTableEntry * byName; /*!< rpmTag's sorted by name. */ | |
577 | size_t byNameSize; /*!< No. of entries. */ | |
578 | int (*byNameCmp) (const void * avp, const void * bvp) | |
579 | /*@*/; /*!< Compare entries by name. */ | |
580 | rpmTag (*tagValue) (const char * name) | |
581 | /*@*/; /*!< Return value from name. */ | |
582 | /*@relnull@*/ | |
583 | headerTagTableEntry * byValue; /*!< rpmTag's sorted by value. */ | |
584 | size_t byValueSize; /*!< No. of entries. */ | |
585 | int (*byValueCmp) (const void * avp, const void * bvp) | |
586 | /*@*/; /*!< Compare entries by value. */ | |
587 | const char * (*tagName) (rpmTag value) | |
588 | /*@*/; /*!< Return name from value. */ | |
589 | rpmTag (*tagType) (rpmTag value) | |
590 | /*@*/; /*!< Return type from value. */ | |
591 | size_t nameBufLen; /*!< No. bytes allocated for nameBuf. */ | |
592 | /*@relnull@*/ | |
593 | const char ** aTags; /*!< Arbitrary tags array (ARGV_t) */ | |
594 | /*@owned@*/ /*@null@*/ | |
595 | char * nameBuf; /* Name buffer. */ | |
596 | /*@only@*/ | |
597 | char * (*tagCanonicalize) (const char * s) | |
598 | /*@*/; /*!< Canonicalize arbitrary string. */ | |
599 | rpmTag (*tagGenerate) (const char * s) | |
600 | /*@*/; /*!< Generate tag from string. */ | |
601 | }; | |
602 | #endif | |
603 | #endif /* _RPMTAG_INTERNAL */ | |
604 | ||
605 | /** | |
606 | * Return tag name from value. | |
607 | * @param tag tag value | |
608 | * @return tag name, "(unknown)" on not found | |
609 | */ | |
610 | /*@observer@*/ | |
611 | const char * tagName(rpmTag tag) | |
612 | /*@*/; | |
613 | ||
614 | /** | |
615 | * Return tag data type from value. | |
616 | * @todo Return rpmTagType-like, not unsigned int. There's no clear typedef yet. | |
617 | * @param tag tag value | |
618 | * @return tag data type, 0 on not found. | |
619 | */ | |
620 | unsigned int tagType(rpmTag tag) | |
621 | /*@*/; | |
622 | ||
623 | /** | |
624 | * Return tag value from name. | |
625 | * @param tagstr name of tag | |
626 | * @return tag value, 0xffffffff on not found | |
627 | */ | |
628 | rpmTag tagValue(const char * tagstr) | |
629 | /*@*/; | |
630 | ||
631 | /** | |
632 | * Canonicalize a rpmTag string. | |
633 | * @param s string | |
634 | * @return canonicalized string | |
635 | */ | |
636 | /*@only@*/ | |
637 | char * tagCanonicalize(const char * s) | |
638 | /*@*/; | |
639 | ||
640 | /** | |
641 | * Generate a tag from arbitrary string. | |
642 | * @param s string | |
643 | * @return generated tag value | |
644 | */ | |
645 | rpmTag tagGenerate(const char * s) | |
646 | /*@*/; | |
647 | ||
648 | /** | |
649 | * Free memory in header tag indices. | |
650 | * @param _rpmTags header tag indices (NULL uses rpmTags) | |
651 | */ | |
652 | void tagClean(/*@null@*/ headerTagIndices _rpmTags) | |
653 | /*@globals rpmTags @*/ | |
654 | /*@modifies _rpmTags, rpmTags @*/; | |
655 | ||
656 | /** | |
657 | * Destroy tagStore array. | |
658 | * @param dbiTags dbi tag storage | |
659 | * @param dbiNTags no. of dbi tags | |
660 | * @return NULL always | |
661 | */ | |
662 | /*@null@*/ | |
663 | tagStore_t tagStoreFree(/*@only@*//*@null@*/tagStore_t dbiTags, size_t dbiNTags) | |
664 | /*@modifies dbiTags @*/; | |
665 | ||
666 | #if defined(_RPMTAG_INTERNAL) | |
667 | /** \ingroup header | |
668 | */ | |
669 | typedef enum headerSprintfExtensionType_e { | |
670 | HEADER_EXT_LAST = 0, /*!< End of extension chain. */ | |
671 | HEADER_EXT_FORMAT, /*!< headerTagFormatFunction() extension */ | |
672 | HEADER_EXT_MORE, /*!< Chain to next table. */ | |
673 | HEADER_EXT_TAG /*!< headerTagTagFunction() extension */ | |
674 | } headerSprintfExtensionType; | |
675 | ||
676 | /** \ingroup header | |
677 | * HEADER_EXT_TAG format function prototype. | |
678 | * | |
679 | * @param he tag container | |
680 | * @param av parameter array (or NULL) | |
681 | * @return formatted string | |
682 | */ | |
683 | typedef /*only@*/ char * (*headerTagFormatFunction) (HE_t he, /*@null@*/ const char ** av) | |
684 | /*@modifies he @*/; | |
685 | ||
686 | /** \ingroup header | |
687 | * HEADER_EXT_FORMAT format function prototype. | |
688 | * This is allowed to fail, which indicates the tag doesn't exist. | |
689 | * | |
690 | * @param h header | |
691 | * @retval he tag container | |
692 | * @return 0 on success | |
693 | */ | |
694 | typedef int (*headerTagTagFunction) (Header h, HE_t he) | |
695 | /*@modifies he @*/; | |
696 | ||
697 | /** \ingroup header | |
698 | * Define header tag output formats. | |
699 | */ | |
700 | #if !defined(SWIG) | |
701 | struct headerSprintfExtension_s { | |
702 | headerSprintfExtensionType type; /*!< Type of extension. */ | |
703 | /*@observer@*/ /*@null@*/ | |
704 | const char * name; /*!< Name of extension. */ | |
705 | union { | |
706 | /*@observer@*/ /*@null@*/ | |
707 | void * generic; /*!< Private extension. */ | |
708 | headerTagFormatFunction fmtFunction; /*!< HEADER_EXT_TAG extension. */ | |
709 | headerTagTagFunction tagFunction; /*!< HEADER_EXT_FORMAT extension. */ | |
710 | headerSprintfExtension * more; /*!< Chained table extension. */ | |
711 | } u; | |
712 | }; | |
713 | #endif | |
714 | #endif /* _RPMTAG_INTERNAL */ | |
715 | ||
716 | /** \ingroup header | |
717 | * Supported default header tag output formats. | |
718 | */ | |
719 | /*@unchecked@*/ /*@observer@*/ | |
720 | extern headerSprintfExtension headerDefaultFormats; | |
721 | ||
722 | /** \ingroup header | |
723 | * Supported default header extension/tag output formats. | |
724 | */ | |
725 | /*@unchecked@*/ /*@observer@*/ | |
726 | extern headerSprintfExtension headerCompoundFormats; | |
727 | ||
728 | /** | |
729 | * Display list of tags that can be used in --queryformat. | |
730 | * @param fp file handle to use for display (NULL uses stdout) | |
731 | * @param _rpmTagTable rpm tag table (NULL uses rpmTagTable) | |
732 | * @param _rpmHeaderFormats rpm tag extensions & formats (NULL uses headerCompoundFormats) | |
733 | */ | |
734 | void rpmDisplayQueryTags(/*@null@*/ FILE * fp, | |
735 | /*@null@*/ headerTagTableEntry _rpmTagTable, | |
736 | /*@null@*/ headerSprintfExtension _rpmHeaderFormats) | |
737 | /*@globals fileSystem, internalState @*/ | |
738 | /*@modifies *fp, fileSystem, internalState @*/; | |
739 | ||
740 | /** \ingroup header | |
741 | * Return formatted output string from header tags. | |
742 | * The returned string must be free()d. | |
743 | * | |
744 | * @param h header | |
745 | * @param fmt format to use | |
746 | * @param tags array of tag name/value/type triples (NULL uses default) | |
747 | * @param exts formatting extensions chained table (NULL uses default) | |
748 | * @retval errmsg error message (if any) | |
749 | * @return formatted output string (malloc'ed) | |
750 | */ | |
751 | /*@only@*/ /*@null@*/ | |
752 | char * headerSprintf(Header h, const char * fmt, | |
753 | /*@null@*/ headerTagTableEntry tags, | |
754 | /*@null@*/ headerSprintfExtension exts, | |
755 | /*@null@*/ /*@out@*/ errmsg_t * errmsg) | |
756 | /*@globals headerCompoundFormats, fileSystem, internalState @*/ | |
757 | /*@modifies h, *errmsg, fileSystem, internalState @*/; | |
758 | ||
759 | /** \ingroup header | |
760 | * Retrieve extension or tag value from a header. | |
761 | * | |
762 | * @param h header | |
763 | * @param he tag container | |
764 | * @param flags tag retrieval flags | |
765 | * @return 1 on success, 0 on failure | |
766 | */ | |
767 | int headerGet(Header h, HE_t he, unsigned int flags) | |
768 | /*@globals internalState @*/ | |
769 | /*@modifies he, internalState @*/; | |
770 | #define HEADERGET_NOEXTENSION (1 << 0) /*!< Extension search disabler. */ | |
771 | #define HEADERGET_NOI18NSTRING (1 << 1) /*!< Return i18n strings as argv. */ | |
772 | ||
773 | /** \ingroup header | |
774 | * Add or append tag container to header. | |
775 | * | |
776 | * @param h header | |
777 | * @param he tag container | |
778 | * @param flags (unused) | |
779 | * @return 1 on success, 0 on failure | |
780 | */ | |
781 | /*@mayexit@*/ | |
782 | int headerPut(Header h, HE_t he, /*@unused@*/ unsigned int flags) | |
783 | /*@modifies h @*/; | |
784 | ||
785 | /** \ingroup header | |
786 | * Remove tag container from header. | |
787 | * | |
788 | * @param h header | |
789 | * @param he tag container | |
790 | * @param flags (unused) | |
791 | * @return 1 on success, 0 on failure | |
792 | */ | |
793 | /*@mayexit@*/ | |
794 | int headerDel(Header h, HE_t he, /*@unused@*/ unsigned int flags) | |
795 | /*@modifies h @*/; | |
796 | ||
797 | /** \ingroup header | |
798 | * Modify tag container in header. | |
799 | * If there are multiple entries with this tag, the first one gets replaced. | |
800 | * @param h header | |
801 | * @param he tag container | |
802 | * @param flags (unused) | |
803 | * @return 1 on success, 0 on failure | |
804 | */ | |
805 | int headerMod(Header h, HE_t he, /*@unused@*/ unsigned int flags) | |
806 | /*@modifies h @*/; | |
807 | ||
808 | /** \ingroup header | |
809 | * Destroy header tag container iterator. | |
810 | * @param hi header tag container iterator | |
811 | * @return NULL always | |
812 | */ | |
813 | /*@null@*/ | |
814 | HeaderIterator headerFini(/*@only@*/ HeaderIterator hi) | |
815 | /*@globals fileSystem @*/ | |
816 | /*@modifies hi, fileSystem */; | |
817 | ||
818 | /** \ingroup header | |
819 | * Create header tag iterator. | |
820 | * @param h header | |
821 | * @return header tag iterator | |
822 | */ | |
823 | HeaderIterator headerInit(Header h) | |
824 | /*@globals fileSystem @*/ | |
825 | /*@modifies h, fileSystem */; | |
826 | ||
827 | /** \ingroup header | |
828 | * Return next tag from header. | |
829 | * @param hi header tag iterator | |
830 | * @param he tag container | |
831 | * @param flags (unused) | |
832 | * @return 1 on success, 0 on failure | |
833 | */ | |
834 | int headerNext(HeaderIterator hi, HE_t he, /*@unused@*/ unsigned int flags) | |
835 | /*@globals internalState @*/ | |
836 | /*@modifies hi, he, internalState @*/; | |
837 | ||
838 | /** \ingroup header | |
839 | * Reference a header instance. | |
840 | * @param h header | |
841 | * @return referenced header instance | |
842 | */ | |
843 | Header headerLink(Header h) | |
844 | /*@modifies h @*/; | |
845 | #define headerLink(_h) \ | |
846 | ((Header)rpmioLinkPoolItem((rpmioItem)(_h), __FUNCTION__, __FILE__, __LINE__)) | |
847 | ||
848 | /** \ingroup header | |
849 | * Dereference a header instance. | |
850 | * @param h header | |
851 | * @return NULL on last dereference | |
852 | */ | |
853 | /*@null@*/ | |
854 | Header headerUnlink(/*@killref@*/ /*@null@*/ Header h) | |
855 | /*@modifies h @*/; | |
856 | #define headerUnlink(_h) \ | |
857 | ((Header)rpmioUnlinkPoolItem((rpmioItem)(_h), __FUNCTION__, __FILE__, __LINE__)) | |
858 | ||
859 | /** \ingroup header | |
860 | * Dereference a header instance. | |
861 | * @param h header | |
862 | * @return NULL on last dereference | |
863 | */ | |
864 | /*@null@*/ | |
865 | Header headerFree(/*@killref@*/ /*@null@*/ Header h) | |
866 | /*@modifies h @*/; | |
867 | #define headerFree(_h) \ | |
868 | ((Header)rpmioFreePoolItem((rpmioItem)(_h), __FUNCTION__, __FILE__, __LINE__)) | |
869 | ||
870 | /** \ingroup header | |
871 | * Create new (empty) header instance. | |
872 | * @return header | |
873 | */ | |
874 | Header headerNew(void) | |
875 | /*@globals fileSystem @*/ | |
876 | /*@modifies fileSystem @*/; | |
877 | ||
878 | /** \ingroup header | |
879 | * Return size of on-disk header representation in bytes. | |
880 | * @param h header | |
881 | * @return size of on-disk header | |
882 | */ | |
883 | size_t headerSizeof(/*@null@*/ Header h) | |
884 | /*@modifies h @*/; | |
885 | ||
886 | /** \ingroup header | |
887 | * headerUnload. | |
888 | * @param h header | |
889 | * @retval *lenp no. bytes in unloaded header blob | |
890 | * @return unloaded header blob (NULL on error) | |
891 | */ | |
892 | /*@only@*/ /*@null@*/ | |
893 | void * headerUnload(Header h, /*@out@*/ /*@null@*/ size_t * lenp) | |
894 | /*@globals internalState @*/ | |
895 | /*@modifies h, *lenp, internalState @*/; | |
896 | ||
897 | /** \ingroup header | |
898 | * Convert header to on-disk representation, and then reload. | |
899 | * This is used to insure that all header data is in a single | |
900 | * contiguous memory allocation. | |
901 | * @param h header (with pointers) | |
902 | * @param tag region tag | |
903 | * @return on-disk header (with offsets) | |
904 | */ | |
905 | /*@null@*/ | |
906 | Header headerReload(/*@only@*/ Header h, int tag) | |
907 | /*@globals fileSystem, internalState @*/ | |
908 | /*@modifies h, fileSystem, internalState @*/; | |
909 | ||
910 | /** \ingroup header | |
911 | * Duplicate a header. | |
912 | * @param h header | |
913 | * @return new header instance | |
914 | */ | |
915 | /*@null@*/ | |
916 | Header headerCopy(Header h) | |
917 | /*@globals fileSystem, internalState @*/ | |
918 | /*@modifies h, fileSystem, internalState @*/; | |
919 | ||
920 | /** \ingroup header | |
921 | * Convert header to in-memory representation. | |
922 | * @param uh on-disk header blob (i.e. with offsets) | |
923 | * @return header | |
924 | */ | |
925 | /*@null@*/ | |
926 | Header headerLoad(/*@kept@*/ void * uh) | |
927 | /*@globals fileSystem, internalState @*/ | |
928 | /*@modifies uh, fileSystem, internalState @*/; | |
929 | ||
930 | /** \ingroup header | |
931 | * Make a copy and convert header to in-memory representation. | |
932 | * @param uh on-disk header blob (i.e. with offsets) | |
933 | * @return header | |
934 | */ | |
935 | /*@null@*/ | |
936 | Header headerCopyLoad(const void * uh) | |
937 | /*@globals fileSystem, internalState @*/ | |
938 | /*@modifies fileSystem, internalState @*/; | |
939 | ||
940 | /** \ingroup header | |
941 | * Check if tag is in header. | |
942 | * @param h header | |
943 | * @param tag tag | |
944 | * @return 1 on success, 0 on failure | |
945 | */ | |
946 | int headerIsEntry(/*@null@*/ Header h, rpmTag tag) | |
947 | /*@*/; | |
948 | ||
949 | /** \ingroup header | |
950 | * Add locale specific tag to header. | |
951 | * A NULL lang is interpreted as the C locale. Here are the rules: | |
952 | * \verbatim | |
953 | * - If the tag isn't in the header, it's added with the passed string | |
954 | * as new value. | |
955 | * - If the tag occurs multiple times in entry, which tag is affected | |
956 | * by the operation is undefined. | |
957 | * - If the tag is in the header w/ this language, the entry is | |
958 | * *replaced* (like headerModifyEntry()). | |
959 | * \endverbatim | |
960 | * This function is intended to just "do the right thing". If you need | |
961 | * more fine grained control use headerAddEntry() and headerModifyEntry(). | |
962 | * | |
963 | * @param h header | |
964 | * @param tag tag | |
965 | * @param string tag value | |
966 | * @param lang locale | |
967 | * @return 1 on success, 0 on failure | |
968 | */ | |
969 | int headerAddI18NString(Header h, rpmTag tag, const char * string, | |
970 | const char * lang) | |
971 | /*@modifies h @*/; | |
972 | ||
973 | /** \ingroup header | |
974 | * Duplicate tag values from one header into another. | |
975 | * @param headerFrom source header | |
976 | * @param headerTo destination header | |
977 | * @param tagstocopy array of tags that are copied | |
978 | */ | |
979 | void headerCopyTags(Header headerFrom, Header headerTo, rpmTag * tagstocopy) | |
980 | /*@globals internalState @*/ | |
981 | /*@modifies headerTo, internalState @*/; | |
982 | ||
983 | /** \ingroup header | |
984 | * Return header magic. | |
985 | * @param h header | |
986 | * @param *magicp magic array | |
987 | * @param *nmagicp no. bytes of magic | |
988 | * @return 0 always | |
989 | */ | |
990 | int headerGetMagic(/*@null@*/ Header h, unsigned char **magicp, size_t *nmagicp) | |
991 | /*@modifies *magicp, *nmagicp @*/; | |
992 | ||
993 | /** \ingroup header | |
994 | * Store header magic. | |
995 | * @param h header | |
996 | * @param magic magic array | |
997 | * @param nmagic no. bytes of magic | |
998 | * @return 0 always | |
999 | */ | |
1000 | int headerSetMagic(/*@null@*/ Header h, unsigned char * magic, size_t nmagic) | |
1001 | /*@modifies h @*/; | |
1002 | ||
1003 | /** \ingroup header | |
1004 | * Return header origin (e.g path or URL). | |
1005 | * @param h header | |
1006 | * @return header origin | |
1007 | */ | |
1008 | /*@observer@*/ /*@null@*/ | |
1009 | const char * headerGetOrigin(/*@null@*/ Header h) | |
1010 | /*@*/; | |
1011 | ||
1012 | /** \ingroup header | |
1013 | * Store header origin (e.g path or URL). | |
1014 | * @param h header | |
1015 | * @param origin new header origin | |
1016 | * @return 0 always | |
1017 | */ | |
1018 | int headerSetOrigin(/*@null@*/ Header h, const char * origin) | |
1019 | /*@modifies h @*/; | |
1020 | ||
1021 | /** \ingroup header | |
1022 | * Return header parent identifier (e.g parent's NVRA). | |
1023 | * @param h header | |
1024 | * @return header parent | |
1025 | */ | |
1026 | /*@observer@*/ /*@null@*/ | |
1027 | const char * headerGetParent(/*@null@*/ Header h) | |
1028 | /*@*/; | |
1029 | ||
1030 | /** \ingroup header | |
1031 | * Store header parent (e.g parent's NVRA). | |
1032 | * @param h header | |
1033 | * @param parent new header parent | |
1034 | * @return 0 always | |
1035 | */ | |
1036 | int headerSetParent(/*@null@*/ Header h, const char * parent) | |
1037 | /*@modifies h @*/; | |
1038 | ||
1039 | /** \ingroup header | |
1040 | * Return header base URL (e.g path or URL). | |
1041 | * @param h header | |
1042 | * @return header origin | |
1043 | */ | |
1044 | /*@observer@*/ /*@null@*/ | |
1045 | const char * headerGetBaseURL(/*@null@*/ Header h) | |
1046 | /*@*/; | |
1047 | ||
1048 | /** \ingroup header | |
1049 | * Store header base URL (e.g path or URL). | |
1050 | * @param h header | |
1051 | * @param baseurl new header baseurl | |
1052 | * @return 0 always | |
1053 | */ | |
1054 | int headerSetBaseURL(/*@null@*/ Header h, const char * baseurl) | |
1055 | /*@modifies h @*/; | |
1056 | ||
1057 | /** \ingroup header | |
1058 | * Return header stat(2) buffer (of origin *.rpm file). | |
1059 | * @param h header | |
1060 | * @return header stat(2) buffer | |
1061 | */ | |
1062 | struct stat * headerGetStatbuf(/*@null@*/ Header h) | |
1063 | /*@*/; | |
1064 | ||
1065 | /** \ingroup header | |
1066 | * Copy into header stat(2) buffer (of origin *.rpm file). | |
1067 | * @param h header | |
1068 | * @param st new header stat(2) buffer | |
1069 | * @return 0 always | |
1070 | */ | |
1071 | int headerSetStatbuf(/*@null@*/ Header h, struct stat * st) | |
1072 | /*@modifies h @*/; | |
1073 | ||
1074 | /** \ingroup header | |
1075 | * Return digest of origin *.rpm file. | |
1076 | * @param h header | |
1077 | * @return header digest | |
1078 | */ | |
1079 | /*@null@*/ | |
1080 | const char * headerGetDigest(/*@null@*/ Header h) | |
1081 | /*@*/; | |
1082 | ||
1083 | /** \ingroup header | |
1084 | * Store digest of origin *.rpm file. | |
1085 | * @param h header | |
1086 | * @param st new header digest | |
1087 | * @return 0 always | |
1088 | */ | |
1089 | int headerSetDigest(/*@null@*/ Header h, const char * digest) | |
1090 | /*@modifies h @*/; | |
1091 | ||
1092 | /** \ingroup header | |
1093 | * Return rpmdb pointer. | |
1094 | * @param h header | |
1095 | * @return rpmdb pointer | |
1096 | */ | |
1097 | /*@null@*/ | |
1098 | void * headerGetRpmdb(/*@null@*/ Header h) | |
1099 | /*@*/; | |
1100 | ||
1101 | /** \ingroup header | |
1102 | * Store rpmdb pointer. | |
1103 | * @param h header | |
1104 | * @param rpmdb new rpmdb pointer (or NULL to unset) | |
1105 | * @return NULL always | |
1106 | */ | |
1107 | /*@null@*/ | |
1108 | void * headerSetRpmdb(/*@null@*/ Header h, /*@null@*/ void * rpmdb) | |
1109 | /*@modifies h @*/; | |
1110 | ||
1111 | /** \ingroup header | |
1112 | * Return header instance (if from rpmdb). | |
1113 | * @param h header | |
1114 | * @return header instance | |
1115 | */ | |
1116 | uint32_t headerGetInstance(/*@null@*/ Header h) | |
1117 | /*@*/; | |
1118 | ||
1119 | /** \ingroup header | |
1120 | * Store header instance (e.g path or URL). | |
1121 | * @param h header | |
1122 | * @param instance new header instance | |
1123 | * @return 0 always | |
1124 | */ | |
1125 | uint32_t headerSetInstance(/*@null@*/ Header h, uint32_t instance) | |
1126 | /*@modifies h @*/; | |
1127 | ||
1128 | /** \ingroup header | |
1129 | * Return header starting byte offset. | |
1130 | * @param h header | |
1131 | * @return header starting byte offset | |
1132 | */ | |
1133 | rpmuint32_t headerGetStartOff(/*@null@*/ Header h) | |
1134 | /*@*/; | |
1135 | ||
1136 | /** \ingroup header | |
1137 | * Store header starting byte offset. | |
1138 | * @param h header | |
1139 | * @param startoff new header starting byte offset | |
1140 | * @return 0 always | |
1141 | */ | |
1142 | rpmuint32_t headerSetStartOff(/*@null@*/ Header h, rpmuint32_t startoff) | |
1143 | /*@modifies h @*/; | |
1144 | ||
1145 | /** \ingroup header | |
1146 | * Return header ending byte offset. | |
1147 | * @param h header | |
1148 | * @return header ending byte offset | |
1149 | */ | |
1150 | rpmuint32_t headerGetEndOff(/*@null@*/ Header h) | |
1151 | /*@*/; | |
1152 | ||
1153 | /** \ingroup header | |
1154 | * Store header ending byte offset. | |
1155 | * @param h header | |
1156 | * @param startoff new header ending byte offset | |
1157 | * @return 0 always | |
1158 | */ | |
1159 | rpmuint32_t headerSetEndOff(/*@null@*/ Header h, rpmuint32_t endoff) | |
1160 | /*@modifies h @*/; | |
1161 | ||
1162 | /** \ingroup header | |
1163 | * Return header stats accumulator structure. | |
1164 | * @param h header | |
1165 | * @param opx per-header accumulator index (aka rpmtsOpX) | |
1166 | * @return per-header accumulator pointer | |
1167 | */ | |
1168 | /*@null@*/ | |
1169 | void * headerGetStats(Header h, int opx) | |
1170 | /*@*/; | |
1171 | ||
1172 | /** | |
1173 | * Define per-header macros. | |
1174 | * @param h header | |
1175 | * @return 0 always | |
1176 | */ | |
1177 | int headerMacrosLoad(Header h) | |
1178 | /*@globals internalState @*/ | |
1179 | /*@modifies internalState @*/; | |
1180 | ||
1181 | /** | |
1182 | * Define per-header macros. | |
1183 | * @param h header | |
1184 | * @return 0 always | |
1185 | */ | |
1186 | int headerMacrosUnload(Header h) | |
1187 | /*@globals internalState @*/ | |
1188 | /*@modifies internalState @*/; | |
1189 | ||
1190 | /** \ingroup header | |
1191 | * Return name, epoch, version, release, arch strings from header. | |
1192 | * @param h header | |
1193 | * @retval *np name pointer (or NULL) | |
1194 | * @retval *ep epoch pointer (or NULL) | |
1195 | * @retval *vp version pointer (or NULL) | |
1196 | * @retval *rp release pointer (or NULL) | |
1197 | * @retval *ap arch pointer (or NULL) | |
1198 | * @return 0 always | |
1199 | */ | |
1200 | int headerNEVRA(Header h, | |
1201 | /*@null@*/ /*@out@*/ const char ** np, | |
1202 | /*@null@*/ /*@out@*/ /*@unused@*/ const char ** ep, | |
1203 | /*@null@*/ /*@out@*/ const char ** vp, | |
1204 | /*@null@*/ /*@out@*/ const char ** rp, | |
1205 | /*@null@*/ /*@out@*/ const char ** ap) | |
1206 | /*@globals internalState @*/ | |
1207 | /*@modifies h, *np, *vp, *rp, *ap, internalState @*/; | |
1208 | ||
1209 | /** | |
1210 | * Return header color. | |
1211 | * @param h header | |
1212 | * @return header color | |
1213 | */ | |
1214 | rpmuint32_t hGetColor(Header h) | |
1215 | /*@globals internalState @*/ | |
1216 | /*@modifies h, internalState @*/; | |
1217 | ||
1218 | /** \ingroup header | |
1219 | * Translate and merge legacy signature tags into header. | |
1220 | * @todo Remove headerSort() through headerInitIterator() modifies sig. | |
1221 | * @param h header | |
1222 | * @param sigh signature header | |
1223 | */ | |
1224 | void headerMergeLegacySigs(Header h, const Header sigh) | |
1225 | /*@globals fileSystem, internalState @*/ | |
1226 | /*@modifies h, sigh, fileSystem, internalState @*/; | |
1227 | ||
1228 | /** \ingroup header | |
1229 | * Regenerate signature header. | |
1230 | * @todo Remove headerSort() through headerInitIterator() modifies h. | |
1231 | * @param h header | |
1232 | * @param noArchiveSize don't copy archive size tag (pre rpm-4.1) | |
1233 | * @return regenerated signature header | |
1234 | */ | |
1235 | Header headerRegenSigHeader(const Header h, int noArchiveSize) | |
1236 | /*@globals fileSystem, internalState @*/ | |
1237 | /*@modifies h, fileSystem, internalState @*/; | |
1238 | ||
1239 | #ifdef __cplusplus | |
1240 | } | |
1241 | #endif | |
1242 | ||
1243 | #endif /* H_RPMTAG */ |