upgrade rpm version to 4.14.1
[platform/upstream/rpm.git] / lib / rpmtag.h
1 #ifndef _RPMTAG_H
2 #define _RPMTAG_H
3
4 /** \ingroup rpmtag
5  *  \file lib/rpmtag.h
6  *
7  * Accessing RPM tags: values, types, ...
8  */
9
10 #include <rpm/rpmtypes.h>
11
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15
16 /**
17  * Header private tags.
18  * @note General use tags should start at 1000 (RPM's tag space starts there).
19  */
20 #define HEADER_IMAGE            61
21 #define HEADER_SIGNATURES       62
22 #define HEADER_IMMUTABLE        63
23 #define HEADER_REGIONS          64
24 #define HEADER_I18NTABLE        100
25 #define HEADER_SIGBASE          256
26 #define HEADER_TAGBASE          1000
27
28 /** \ingroup rpmtag
29  * Tags identify data in package headers.
30  * @note tags should not have value 0!
31  * @note all new tags should be added above 5000
32  */
33 /** @todo: Somehow supply type **/
34 typedef enum rpmTag_e {
35     RPMTAG_NOT_FOUND            = -1,                   /*!< Unknown tag */
36
37     RPMTAG_HEADERIMAGE          = HEADER_IMAGE,         /*!< Current image. */
38     RPMTAG_HEADERSIGNATURES     = HEADER_SIGNATURES,    /*!< Signatures. */
39     RPMTAG_HEADERIMMUTABLE      = HEADER_IMMUTABLE,     /*!< Original image. */
40     RPMTAG_HEADERREGIONS        = HEADER_REGIONS,       /*!< Regions. */
41
42     RPMTAG_HEADERI18NTABLE      = HEADER_I18NTABLE,     /* s[] !< I18N string locales. */
43
44 /* Retrofit (and uniqify) signature tags for use by rpmTagGetName() and rpmQuery. */
45 /* the md5 sum was broken *twice* on big endian machines */
46 /* XXX 2nd underscore prevents tagTable generation */
47     RPMTAG_SIG_BASE             = HEADER_SIGBASE,
48     RPMTAG_SIGSIZE              = RPMTAG_SIG_BASE+1,    /* i */
49     RPMTAG_SIGLEMD5_1           = RPMTAG_SIG_BASE+2,    /* internal - obsolete */
50     RPMTAG_SIGPGP               = RPMTAG_SIG_BASE+3,    /* x */
51     RPMTAG_SIGLEMD5_2           = RPMTAG_SIG_BASE+4,    /* x internal - obsolete */
52     RPMTAG_SIGMD5               = RPMTAG_SIG_BASE+5,    /* x */
53 #define RPMTAG_PKGID    RPMTAG_SIGMD5                   /* x */
54     RPMTAG_SIGGPG               = RPMTAG_SIG_BASE+6,    /* x */
55     RPMTAG_SIGPGP5              = RPMTAG_SIG_BASE+7,    /* internal - obsolete */
56
57     RPMTAG_BADSHA1_1            = RPMTAG_SIG_BASE+8,    /* internal - obsolete */
58     RPMTAG_BADSHA1_2            = RPMTAG_SIG_BASE+9,    /* internal - obsolete */
59     RPMTAG_PUBKEYS              = RPMTAG_SIG_BASE+10,   /* s[] */
60     RPMTAG_DSAHEADER            = RPMTAG_SIG_BASE+11,   /* x */
61     RPMTAG_RSAHEADER            = RPMTAG_SIG_BASE+12,   /* x */
62     RPMTAG_SHA1HEADER           = RPMTAG_SIG_BASE+13,   /* s */
63 #define RPMTAG_HDRID    RPMTAG_SHA1HEADER       /* s */
64     RPMTAG_LONGSIGSIZE          = RPMTAG_SIG_BASE+14,   /* l */
65     RPMTAG_LONGARCHIVESIZE      = RPMTAG_SIG_BASE+15,   /* l */
66     /* RPMTAG_SIG_BASE+16 reserved */
67     RPMTAG_SHA256HEADER         = RPMTAG_SIG_BASE+17,   /* s */
68
69     RPMTAG_NAME                 = 1000, /* s */
70 #define RPMTAG_N        RPMTAG_NAME     /* s */
71     RPMTAG_VERSION              = 1001, /* s */
72 #define RPMTAG_V        RPMTAG_VERSION  /* s */
73     RPMTAG_RELEASE              = 1002, /* s */
74 #define RPMTAG_R        RPMTAG_RELEASE  /* s */
75     RPMTAG_EPOCH                = 1003, /* i */
76 #define RPMTAG_E        RPMTAG_EPOCH    /* i */
77     RPMTAG_SUMMARY              = 1004, /* s{} */
78     RPMTAG_DESCRIPTION          = 1005, /* s{} */
79     RPMTAG_BUILDTIME            = 1006, /* i */
80     RPMTAG_BUILDHOST            = 1007, /* s */
81     RPMTAG_INSTALLTIME          = 1008, /* i */
82     RPMTAG_SIZE                 = 1009, /* i */
83     RPMTAG_DISTRIBUTION         = 1010, /* s */
84     RPMTAG_VENDOR               = 1011, /* s */
85     RPMTAG_GIF                  = 1012, /* x */
86     RPMTAG_XPM                  = 1013, /* x */
87     RPMTAG_LICENSE              = 1014, /* s */
88     RPMTAG_PACKAGER             = 1015, /* s */
89     RPMTAG_GROUP                = 1016, /* s{} */
90     RPMTAG_CHANGELOG            = 1017, /* s[] internal */
91     RPMTAG_SOURCE               = 1018, /* s[] */
92     RPMTAG_PATCH                = 1019, /* s[] */
93     RPMTAG_URL                  = 1020, /* s */
94     RPMTAG_OS                   = 1021, /* s legacy used int */
95     RPMTAG_ARCH                 = 1022, /* s legacy used int */
96     RPMTAG_PREIN                = 1023, /* s */
97     RPMTAG_POSTIN               = 1024, /* s */
98     RPMTAG_PREUN                = 1025, /* s */
99     RPMTAG_POSTUN               = 1026, /* s */
100     RPMTAG_OLDFILENAMES         = 1027, /* s[] obsolete */
101     RPMTAG_FILESIZES            = 1028, /* i[] */
102     RPMTAG_FILESTATES           = 1029, /* c[] */
103     RPMTAG_FILEMODES            = 1030, /* h[] */
104     RPMTAG_FILEUIDS             = 1031, /* i[] internal - obsolete */
105     RPMTAG_FILEGIDS             = 1032, /* i[] internal - obsolete */
106     RPMTAG_FILERDEVS            = 1033, /* h[] */
107     RPMTAG_FILEMTIMES           = 1034, /* i[] */
108     RPMTAG_FILEDIGESTS          = 1035, /* s[] */
109 #define RPMTAG_FILEMD5S RPMTAG_FILEDIGESTS /* s[] */
110     RPMTAG_FILELINKTOS          = 1036, /* s[] */
111     RPMTAG_FILEFLAGS            = 1037, /* i[] */
112     RPMTAG_ROOT                 = 1038, /* internal - obsolete */
113     RPMTAG_FILEUSERNAME         = 1039, /* s[] */
114     RPMTAG_FILEGROUPNAME        = 1040, /* s[] */
115     RPMTAG_EXCLUDE              = 1041, /* internal - obsolete */
116     RPMTAG_EXCLUSIVE            = 1042, /* internal - obsolete */
117     RPMTAG_ICON                 = 1043, /* x */
118     RPMTAG_SOURCERPM            = 1044, /* s */
119     RPMTAG_FILEVERIFYFLAGS      = 1045, /* i[] */
120     RPMTAG_ARCHIVESIZE          = 1046, /* i */
121     RPMTAG_PROVIDENAME          = 1047, /* s[] */
122 #define RPMTAG_PROVIDES RPMTAG_PROVIDENAME      /* s[] */
123 #define RPMTAG_P        RPMTAG_PROVIDENAME      /* s[] */
124     RPMTAG_REQUIREFLAGS         = 1048, /* i[] */
125     RPMTAG_REQUIRENAME          = 1049, /* s[] */
126 #define RPMTAG_REQUIRES RPMTAG_REQUIRENAME      /* s[] */
127     RPMTAG_REQUIREVERSION       = 1050, /* s[] */
128     RPMTAG_NOSOURCE             = 1051, /* i[] */
129     RPMTAG_NOPATCH              = 1052, /* i[] */
130     RPMTAG_CONFLICTFLAGS        = 1053, /* i[] */
131     RPMTAG_CONFLICTNAME         = 1054, /* s[] */
132 #define RPMTAG_CONFLICTS RPMTAG_CONFLICTNAME    /* s[] */
133 #define RPMTAG_C        RPMTAG_CONFLICTNAME     /* s[] */
134     RPMTAG_CONFLICTVERSION      = 1055, /* s[] */
135     RPMTAG_DEFAULTPREFIX        = 1056, /* s internal - deprecated */
136     RPMTAG_BUILDROOT            = 1057, /* s internal - obsolete */
137     RPMTAG_INSTALLPREFIX        = 1058, /* s internal - deprecated */
138     RPMTAG_EXCLUDEARCH          = 1059, /* s[] */
139     RPMTAG_EXCLUDEOS            = 1060, /* s[] */
140     RPMTAG_EXCLUSIVEARCH        = 1061, /* s[] */
141     RPMTAG_EXCLUSIVEOS          = 1062, /* s[] */
142     RPMTAG_AUTOREQPROV          = 1063, /* s internal */
143     RPMTAG_RPMVERSION           = 1064, /* s */
144     RPMTAG_TRIGGERSCRIPTS       = 1065, /* s[] */
145     RPMTAG_TRIGGERNAME          = 1066, /* s[] */
146     RPMTAG_TRIGGERVERSION       = 1067, /* s[] */
147     RPMTAG_TRIGGERFLAGS         = 1068, /* i[] */
148     RPMTAG_TRIGGERINDEX         = 1069, /* i[] */
149     RPMTAG_VERIFYSCRIPT         = 1079, /* s */
150     RPMTAG_CHANGELOGTIME        = 1080, /* i[] */
151     RPMTAG_CHANGELOGNAME        = 1081, /* s[] */
152     RPMTAG_CHANGELOGTEXT        = 1082, /* s[] */
153     RPMTAG_BROKENMD5            = 1083, /* internal - obsolete */
154     RPMTAG_PREREQ               = 1084, /* internal */
155     RPMTAG_PREINPROG            = 1085, /* s[] */
156     RPMTAG_POSTINPROG           = 1086, /* s[] */
157     RPMTAG_PREUNPROG            = 1087, /* s[] */
158     RPMTAG_POSTUNPROG           = 1088, /* s[] */
159     RPMTAG_BUILDARCHS           = 1089, /* s[] */
160     RPMTAG_OBSOLETENAME         = 1090, /* s[] */
161 #define RPMTAG_OBSOLETES RPMTAG_OBSOLETENAME    /* s[] */
162 #define RPMTAG_O        RPMTAG_OBSOLETENAME     /* s[] */
163     RPMTAG_VERIFYSCRIPTPROG     = 1091, /* s[] */
164     RPMTAG_TRIGGERSCRIPTPROG    = 1092, /* s[] */
165     RPMTAG_DOCDIR               = 1093, /* internal */
166     RPMTAG_COOKIE               = 1094, /* s */
167     RPMTAG_FILEDEVICES          = 1095, /* i[] */
168     RPMTAG_FILEINODES           = 1096, /* i[] */
169     RPMTAG_FILELANGS            = 1097, /* s[] */
170     RPMTAG_PREFIXES             = 1098, /* s[] */
171     RPMTAG_INSTPREFIXES         = 1099, /* s[] */
172     RPMTAG_TRIGGERIN            = 1100, /* internal */
173     RPMTAG_TRIGGERUN            = 1101, /* internal */
174     RPMTAG_TRIGGERPOSTUN        = 1102, /* internal */
175     RPMTAG_AUTOREQ              = 1103, /* internal */
176     RPMTAG_AUTOPROV             = 1104, /* internal */
177     RPMTAG_CAPABILITY           = 1105, /* i internal - obsolete */
178     RPMTAG_SOURCEPACKAGE        = 1106, /* i */
179     RPMTAG_OLDORIGFILENAMES     = 1107, /* internal - obsolete */
180     RPMTAG_BUILDPREREQ          = 1108, /* internal */
181     RPMTAG_BUILDREQUIRES        = 1109, /* internal */
182     RPMTAG_BUILDCONFLICTS       = 1110, /* internal */
183     RPMTAG_BUILDMACROS          = 1111, /* internal - unused */
184     RPMTAG_PROVIDEFLAGS         = 1112, /* i[] */
185     RPMTAG_PROVIDEVERSION       = 1113, /* s[] */
186     RPMTAG_OBSOLETEFLAGS        = 1114, /* i[] */
187     RPMTAG_OBSOLETEVERSION      = 1115, /* s[] */
188     RPMTAG_DIRINDEXES           = 1116, /* i[] */
189     RPMTAG_BASENAMES            = 1117, /* s[] */
190     RPMTAG_DIRNAMES             = 1118, /* s[] */
191     RPMTAG_ORIGDIRINDEXES       = 1119, /* i[] relocation */
192     RPMTAG_ORIGBASENAMES        = 1120, /* s[] relocation */
193     RPMTAG_ORIGDIRNAMES         = 1121, /* s[] relocation */
194     RPMTAG_OPTFLAGS             = 1122, /* s */
195     RPMTAG_DISTURL              = 1123, /* s */
196     RPMTAG_PAYLOADFORMAT        = 1124, /* s */
197     RPMTAG_PAYLOADCOMPRESSOR    = 1125, /* s */
198     RPMTAG_PAYLOADFLAGS         = 1126, /* s */
199     RPMTAG_INSTALLCOLOR         = 1127, /* i transaction color when installed */
200     RPMTAG_INSTALLTID           = 1128, /* i */
201     RPMTAG_REMOVETID            = 1129, /* i */
202     RPMTAG_SHA1RHN              = 1130, /* internal - obsolete */
203     RPMTAG_RHNPLATFORM          = 1131, /* s internal - obsolete */
204     RPMTAG_PLATFORM             = 1132, /* s */
205     RPMTAG_PATCHESNAME          = 1133, /* s[] deprecated placeholder (SuSE) */
206     RPMTAG_PATCHESFLAGS         = 1134, /* i[] deprecated placeholder (SuSE) */
207     RPMTAG_PATCHESVERSION       = 1135, /* s[] deprecated placeholder (SuSE) */
208     RPMTAG_CACHECTIME           = 1136, /* i internal - obsolete */
209     RPMTAG_CACHEPKGPATH         = 1137, /* s internal - obsolete */
210     RPMTAG_CACHEPKGSIZE         = 1138, /* i internal - obsolete */
211     RPMTAG_CACHEPKGMTIME        = 1139, /* i internal - obsolete */
212     RPMTAG_FILECOLORS           = 1140, /* i[] */
213     RPMTAG_FILECLASS            = 1141, /* i[] */
214     RPMTAG_CLASSDICT            = 1142, /* s[] */
215     RPMTAG_FILEDEPENDSX         = 1143, /* i[] */
216     RPMTAG_FILEDEPENDSN         = 1144, /* i[] */
217     RPMTAG_DEPENDSDICT          = 1145, /* i[] */
218     RPMTAG_SOURCEPKGID          = 1146, /* x */
219     RPMTAG_FILECONTEXTS         = 1147, /* s[] - obsolete */
220     RPMTAG_FSCONTEXTS           = 1148, /* s[] extension */
221     RPMTAG_RECONTEXTS           = 1149, /* s[] extension */
222     RPMTAG_POLICIES             = 1150, /* s[] selinux *.te policy file. */
223     RPMTAG_PRETRANS             = 1151, /* s */
224     RPMTAG_POSTTRANS            = 1152, /* s */
225     RPMTAG_PRETRANSPROG         = 1153, /* s[] */
226     RPMTAG_POSTTRANSPROG        = 1154, /* s[] */
227     RPMTAG_DISTTAG              = 1155, /* s */
228     RPMTAG_OLDSUGGESTSNAME      = 1156, /* s[] - obsolete */
229 #define RPMTAG_OLDSUGGESTS RPMTAG_OLDSUGGESTSNAME /* s[] - obsolete */
230     RPMTAG_OLDSUGGESTSVERSION   = 1157, /* s[] - obsolete */
231     RPMTAG_OLDSUGGESTSFLAGS     = 1158, /* i[] - obsolete */
232     RPMTAG_OLDENHANCESNAME      = 1159, /* s[] - obsolete */
233 #define RPMTAG_OLDENHANCES RPMTAG_OLDENHANCESNAME /* s[] - obsolete */
234     RPMTAG_OLDENHANCESVERSION   = 1160, /* s[] - obsolete */
235     RPMTAG_OLDENHANCESFLAGS     = 1161, /* i[] - obsolete */
236     RPMTAG_PRIORITY             = 1162, /* i[] extension placeholder (unimplemented) */
237     RPMTAG_CVSID                = 1163, /* s (unimplemented) */
238 #define RPMTAG_SVNID    RPMTAG_CVSID    /* s (unimplemented) */
239     RPMTAG_BLINKPKGID           = 1164, /* s[] (unimplemented) */
240     RPMTAG_BLINKHDRID           = 1165, /* s[] (unimplemented) */
241     RPMTAG_BLINKNEVRA           = 1166, /* s[] (unimplemented) */
242     RPMTAG_FLINKPKGID           = 1167, /* s[] (unimplemented) */
243     RPMTAG_FLINKHDRID           = 1168, /* s[] (unimplemented) */
244     RPMTAG_FLINKNEVRA           = 1169, /* s[] (unimplemented) */
245     RPMTAG_PACKAGEORIGIN        = 1170, /* s (unimplemented) */
246     RPMTAG_TRIGGERPREIN         = 1171, /* internal */
247     RPMTAG_BUILDSUGGESTS        = 1172, /* internal (unimplemented) */
248     RPMTAG_BUILDENHANCES        = 1173, /* internal (unimplemented) */
249     RPMTAG_SCRIPTSTATES         = 1174, /* i[] scriptlet exit codes (unimplemented) */
250     RPMTAG_SCRIPTMETRICS        = 1175, /* i[] scriptlet execution times (unimplemented) */
251     RPMTAG_BUILDCPUCLOCK        = 1176, /* i (unimplemented) */
252     RPMTAG_FILEDIGESTALGOS      = 1177, /* i[] (unimplemented) */
253     RPMTAG_VARIANTS             = 1178, /* s[] (unimplemented) */
254     RPMTAG_XMAJOR               = 1179, /* i (unimplemented) */
255     RPMTAG_XMINOR               = 1180, /* i (unimplemented) */
256     RPMTAG_REPOTAG              = 1181, /* s (unimplemented) */
257     RPMTAG_KEYWORDS             = 1182, /* s[] (unimplemented) */
258     RPMTAG_BUILDPLATFORMS       = 1183, /* s[] (unimplemented) */
259     RPMTAG_PACKAGECOLOR         = 1184, /* i (unimplemented) */
260     RPMTAG_PACKAGEPREFCOLOR     = 1185, /* i (unimplemented) */
261     RPMTAG_XATTRSDICT           = 1186, /* s[] (unimplemented) */
262     RPMTAG_FILEXATTRSX          = 1187, /* i[] (unimplemented) */
263     RPMTAG_DEPATTRSDICT         = 1188, /* s[] (unimplemented) */
264     RPMTAG_CONFLICTATTRSX       = 1189, /* i[] (unimplemented) */
265     RPMTAG_OBSOLETEATTRSX       = 1190, /* i[] (unimplemented) */
266     RPMTAG_PROVIDEATTRSX        = 1191, /* i[] (unimplemented) */
267     RPMTAG_REQUIREATTRSX        = 1192, /* i[] (unimplemented) */
268     RPMTAG_BUILDPROVIDES        = 1193, /* internal (unimplemented) */
269     RPMTAG_BUILDOBSOLETES       = 1194, /* internal (unimplemented) */
270     RPMTAG_DBINSTANCE           = 1195, /* i extension */
271     RPMTAG_NVRA                 = 1196, /* s extension */
272
273     /* tags 1997-4999 reserved */
274     RPMTAG_FILENAMES            = 5000, /* s[] extension */
275     RPMTAG_FILEPROVIDE          = 5001, /* s[] extension */
276     RPMTAG_FILEREQUIRE          = 5002, /* s[] extension */
277     RPMTAG_FSNAMES              = 5003, /* s[] (unimplemented) */
278     RPMTAG_FSSIZES              = 5004, /* l[] (unimplemented) */
279     RPMTAG_TRIGGERCONDS         = 5005, /* s[] extension */
280     RPMTAG_TRIGGERTYPE          = 5006, /* s[] extension */
281     RPMTAG_ORIGFILENAMES        = 5007, /* s[] extension */
282     RPMTAG_LONGFILESIZES        = 5008, /* l[] */
283     RPMTAG_LONGSIZE             = 5009, /* l */
284     RPMTAG_FILECAPS             = 5010, /* s[] */
285     RPMTAG_FILEDIGESTALGO       = 5011, /* i file digest algorithm */
286     RPMTAG_BUGURL               = 5012, /* s */
287     RPMTAG_EVR                  = 5013, /* s extension */
288     RPMTAG_NVR                  = 5014, /* s extension */
289     RPMTAG_NEVR                 = 5015, /* s extension */
290     RPMTAG_NEVRA                = 5016, /* s extension */
291     RPMTAG_HEADERCOLOR          = 5017, /* i extension */
292     RPMTAG_VERBOSE              = 5018, /* i extension */
293     RPMTAG_EPOCHNUM             = 5019, /* i extension */
294     RPMTAG_PREINFLAGS           = 5020, /* i */
295     RPMTAG_POSTINFLAGS          = 5021, /* i */
296     RPMTAG_PREUNFLAGS           = 5022, /* i */
297     RPMTAG_POSTUNFLAGS          = 5023, /* i */
298     RPMTAG_PRETRANSFLAGS        = 5024, /* i */
299     RPMTAG_POSTTRANSFLAGS       = 5025, /* i */
300     RPMTAG_VERIFYSCRIPTFLAGS    = 5026, /* i */
301     RPMTAG_TRIGGERSCRIPTFLAGS   = 5027, /* i[] */
302     RPMTAG_COLLECTIONS          = 5029, /* s[] list of collections (unimplemented) */
303     RPMTAG_POLICYNAMES          = 5030, /* s[] */
304     RPMTAG_POLICYTYPES          = 5031, /* s[] */
305     RPMTAG_POLICYTYPESINDEXES   = 5032, /* i[] */
306     RPMTAG_POLICYFLAGS          = 5033, /* i[] */
307     RPMTAG_VCS                  = 5034, /* s */
308     RPMTAG_ORDERNAME            = 5035, /* s[] */
309     RPMTAG_ORDERVERSION         = 5036, /* s[] */
310     RPMTAG_ORDERFLAGS           = 5037, /* i[] */
311     RPMTAG_SECMANIFEST          = 5038, /* s[] security manifest file */
312     RPMTAG_SECSWSOURCE          = 5039, /* s[] security software source */
313     RPMTAG_INSTFILENAMES        = 5040, /* s[] extension */
314     RPMTAG_REQUIRENEVRS         = 5041, /* s[] extension */
315     RPMTAG_PROVIDENEVRS         = 5042, /* s[] extension */
316     RPMTAG_OBSOLETENEVRS        = 5043, /* s[] extension */
317     RPMTAG_CONFLICTNEVRS        = 5044, /* s[] extension */
318     RPMTAG_FILENLINKS           = 5045, /* i[] extension */
319     RPMTAG_RECOMMENDNAME        = 5046, /* s[] */
320 #define RPMTAG_RECOMMENDS RPMTAG_RECOMMENDNAME  /* s[] */
321     RPMTAG_RECOMMENDVERSION     = 5047, /* s[] */
322     RPMTAG_RECOMMENDFLAGS       = 5048, /* i[] */
323     RPMTAG_SUGGESTNAME          = 5049, /* s[] */
324 #define RPMTAG_SUGGESTS RPMTAG_SUGGESTNAME      /* s[] */
325     RPMTAG_SUGGESTVERSION       = 5050, /* s[] extension */
326     RPMTAG_SUGGESTFLAGS         = 5051, /* i[] extension */
327     RPMTAG_SUPPLEMENTNAME       = 5052, /* s[] */
328 #define RPMTAG_SUPPLEMENTS RPMTAG_SUPPLEMENTNAME /* s[] */
329     RPMTAG_SUPPLEMENTVERSION    = 5053, /* s[] */
330     RPMTAG_SUPPLEMENTFLAGS      = 5054, /* i[] */
331     RPMTAG_ENHANCENAME          = 5055, /* s[] */
332 #define RPMTAG_ENHANCES RPMTAG_ENHANCENAME      /* s[] */
333     RPMTAG_ENHANCEVERSION       = 5056, /* s[] */
334     RPMTAG_ENHANCEFLAGS         = 5057, /* i[] */
335     RPMTAG_RECOMMENDNEVRS       = 5058, /* s[] extension */
336     RPMTAG_SUGGESTNEVRS         = 5059, /* s[] extension */
337     RPMTAG_SUPPLEMENTNEVRS      = 5060, /* s[] extension */
338     RPMTAG_ENHANCENEVRS         = 5061, /* s[] extension */
339     RPMTAG_ENCODING             = 5062, /* s */
340     RPMTAG_FILETRIGGERIN                = 5063, /* internal */
341     RPMTAG_FILETRIGGERUN                = 5064, /* internal */
342     RPMTAG_FILETRIGGERPOSTUN            = 5065, /* internal */
343     RPMTAG_FILETRIGGERSCRIPTS           = 5066, /* s[] */
344     RPMTAG_FILETRIGGERSCRIPTPROG        = 5067, /* s[] */
345     RPMTAG_FILETRIGGERSCRIPTFLAGS       = 5068, /* i[] */
346     RPMTAG_FILETRIGGERNAME              = 5069, /* s[] */
347     RPMTAG_FILETRIGGERINDEX             = 5070, /* i[] */
348     RPMTAG_FILETRIGGERVERSION           = 5071, /* s[] */
349     RPMTAG_FILETRIGGERFLAGS             = 5072, /* i[] */
350     RPMTAG_TRANSFILETRIGGERIN           = 5073, /* internal */
351     RPMTAG_TRANSFILETRIGGERUN           = 5074, /* internal */
352     RPMTAG_TRANSFILETRIGGERPOSTUN       = 5075, /* internal */
353     RPMTAG_TRANSFILETRIGGERSCRIPTS      = 5076, /* s[] */
354     RPMTAG_TRANSFILETRIGGERSCRIPTPROG   = 5077, /* s[] */
355     RPMTAG_TRANSFILETRIGGERSCRIPTFLAGS  = 5078, /* i[] */
356     RPMTAG_TRANSFILETRIGGERNAME         = 5079, /* s[] */
357     RPMTAG_TRANSFILETRIGGERINDEX        = 5080, /* i[] */
358     RPMTAG_TRANSFILETRIGGERVERSION      = 5081, /* s[] */
359     RPMTAG_TRANSFILETRIGGERFLAGS        = 5082, /* i[] */
360     RPMTAG_REMOVEPATHPOSTFIXES  = 5083, /* s internal */
361     RPMTAG_FILETRIGGERPRIORITIES        = 5084, /* i[] */
362     RPMTAG_TRANSFILETRIGGERPRIORITIES   = 5085, /* i[] */
363     RPMTAG_FILETRIGGERCONDS             = 5086, /* s[] extension */
364     RPMTAG_FILETRIGGERTYPE              = 5087, /* s[] extension */
365     RPMTAG_TRANSFILETRIGGERCONDS        = 5088, /* s[] extension */
366     RPMTAG_TRANSFILETRIGGERTYPE         = 5089, /* s[] extension */
367     RPMTAG_FILESIGNATURES       = 5090, /* s[] */
368     RPMTAG_FILESIGNATURELENGTH  = 5091, /* i */
369     RPMTAG_PAYLOADDIGEST        = 5092, /* s[] */
370     RPMTAG_PAYLOADDIGESTALGO    = 5093, /* i */
371         /* Skip numbers which might be used in new RPM versions */
372         RPMTAG_BUILDINFO                        = 7000, /* s[] information about build */
373
374     RPMTAG_FIRSTFREE_TAG        /*!< internal */
375 } rpmTag;
376
377 #define RPMTAG_EXTERNAL_TAG             1000000
378
379 /** \ingroup rpmtag
380  * Rpm database index tags.
381  */
382 typedef enum rpmDbiTag_e {
383     RPMDBI_PACKAGES             = 0,    /* Installed package headers. */
384     RPMDBI_LABEL                = 2,    /* NEVRA label pseudo index */
385     RPMDBI_NAME                 = RPMTAG_NAME,
386     RPMDBI_BASENAMES            = RPMTAG_BASENAMES,
387     RPMDBI_GROUP                = RPMTAG_GROUP,
388     RPMDBI_REQUIRENAME          = RPMTAG_REQUIRENAME,
389     RPMDBI_PROVIDENAME          = RPMTAG_PROVIDENAME,
390     RPMDBI_CONFLICTNAME         = RPMTAG_CONFLICTNAME,
391     RPMDBI_OBSOLETENAME         = RPMTAG_OBSOLETENAME,
392     RPMDBI_TRIGGERNAME          = RPMTAG_TRIGGERNAME,
393     RPMDBI_DIRNAMES             = RPMTAG_DIRNAMES,
394     RPMDBI_INSTALLTID           = RPMTAG_INSTALLTID,
395     RPMDBI_SIGMD5               = RPMTAG_SIGMD5,
396     RPMDBI_SHA1HEADER           = RPMTAG_SHA1HEADER,
397     RPMDBI_INSTFILENAMES        = RPMTAG_INSTFILENAMES,
398     RPMDBI_FILETRIGGERNAME      = RPMTAG_FILETRIGGERNAME,
399     RPMDBI_TRANSFILETRIGGERNAME = RPMTAG_TRANSFILETRIGGERNAME,
400     RPMDBI_RECOMMENDNAME        = RPMTAG_RECOMMENDNAME,
401     RPMDBI_SUGGESTNAME          = RPMTAG_SUGGESTNAME,
402     RPMDBI_SUPPLEMENTNAME       = RPMTAG_SUPPLEMENTNAME,
403     RPMDBI_ENHANCENAME          = RPMTAG_ENHANCENAME,
404 } rpmDbiTag;
405
406 /** \ingroup signature
407  * Tags found in signature header from package.
408  */
409 typedef enum rpmSigTag_e {
410     RPMSIGTAG_SIZE      = 1000, /*!< internal Header+Payload size (32bit) in bytes. */
411     RPMSIGTAG_LEMD5_1   = 1001, /*!< internal Broken MD5, take 1 @deprecated legacy. */
412     RPMSIGTAG_PGP       = 1002, /*!< internal PGP 2.6.3 signature. */
413     RPMSIGTAG_LEMD5_2   = 1003, /*!< internal Broken MD5, take 2 @deprecated legacy. */
414     RPMSIGTAG_MD5       = 1004, /*!< internal MD5 signature. */
415     RPMSIGTAG_GPG       = 1005, /*!< internal GnuPG signature. */
416     RPMSIGTAG_PGP5      = 1006, /*!< internal PGP5 signature @deprecated legacy. */
417     RPMSIGTAG_PAYLOADSIZE = 1007,/*!< internal uncompressed payload size (32bit) in bytes. */
418     RPMSIGTAG_RESERVEDSPACE = 1008,/*!< internal space reserved for signatures */
419     RPMSIGTAG_BADSHA1_1 = RPMTAG_BADSHA1_1,     /*!< internal Broken SHA1, take 1. */
420     RPMSIGTAG_BADSHA1_2 = RPMTAG_BADSHA1_2,     /*!< internal Broken SHA1, take 2. */
421     RPMSIGTAG_DSA       = RPMTAG_DSAHEADER,     /*!< internal DSA header signature. */
422     RPMSIGTAG_RSA       = RPMTAG_RSAHEADER,     /*!< internal RSA header signature. */
423     RPMSIGTAG_SHA1      = RPMTAG_SHA1HEADER,    /*!< internal sha1 header digest. */
424     RPMSIGTAG_LONGSIZE  = RPMTAG_LONGSIGSIZE,   /*!< internal Header+Payload size (64bit) in bytes. */
425     RPMSIGTAG_LONGARCHIVESIZE = RPMTAG_LONGARCHIVESIZE, /*!< internal uncompressed payload size (64bit) in bytes. */
426     RPMSIGTAG_SHA256    = RPMTAG_SHA256HEADER,
427 } rpmSigTag;
428
429
430 /** \ingroup header
431  * The basic types of data in tags from headers.
432  */
433 typedef enum rpmTagType_e {
434 #define RPM_MIN_TYPE            0
435     RPM_NULL_TYPE               =  0,
436     RPM_CHAR_TYPE               =  1,
437     RPM_INT8_TYPE               =  2,
438     RPM_INT16_TYPE              =  3,
439     RPM_INT32_TYPE              =  4,
440     RPM_INT64_TYPE              =  5,
441     RPM_STRING_TYPE             =  6,
442     RPM_BIN_TYPE                =  7,
443     RPM_STRING_ARRAY_TYPE       =  8,
444     RPM_I18NSTRING_TYPE         =  9,
445 #define RPM_MAX_TYPE            9
446 #define RPM_FORCEFREE_TYPE      0xff
447 #define RPM_MASK_TYPE           0x0000ffff
448 } rpmTagType;
449
450 /** \ingroup rpmtag
451  * The classes of data in tags from headers.
452  */
453 typedef enum rpmTagClass_e {
454     RPM_NULL_CLASS      = 0,
455     RPM_NUMERIC_CLASS   = 1,
456     RPM_STRING_CLASS    = 2,
457     RPM_BINARY_CLASS    = 3,
458 } rpmTagClass;
459
460 /** \ingroup header
461  * New rpm data types under consideration/development.
462  * These data types may (or may not) be added to rpm at some point. In order
463  * to avoid incompatibility with legacy versions of rpm, these data (sub-)types
464  * are introduced into the header by overloading RPM_BIN_TYPE, with the binary
465  * value of the tag a 16 byte image of what should/will be in the header index,
466  * followed by per-tag private data.
467  */
468 typedef enum rpmSubTagType_e {
469     RPM_REGION_TYPE             = -10,
470     RPM_BIN_ARRAY_TYPE          = -11,
471   /*!<@todo Implement, kinda like RPM_STRING_ARRAY_TYPE for known (but variable)
472         length binary data. */
473     RPM_XREF_TYPE               = -12
474   /*!<@todo Implement, intent is to to carry a (???,tagNum,valNum) cross
475         reference to retrieve data from other tags. */
476 } rpmSubTagType;
477
478 /** \ingroup header
479  *  * Identify how to return the header data type.
480  *   */
481 enum rpmTagReturnType_e {
482     RPM_ANY_RETURN_TYPE         = 0,
483     RPM_SCALAR_RETURN_TYPE      = 0x00010000,
484     RPM_ARRAY_RETURN_TYPE       = 0x00020000,
485     RPM_MAPPING_RETURN_TYPE     = 0x00040000,
486     RPM_MASK_RETURN_TYPE        = 0xffff0000
487 };
488
489 typedef rpmFlags rpmTagReturnType;
490
491 /** \ingroup rpmtag
492  * Return tag name from value.
493  * @param tag           tag value
494  * @return              tag name, "(unknown)" on not found
495  */
496 const char * rpmTagGetName(rpmTagVal tag);
497
498 /** \ingroup rpmtag
499  * Return tag data type from value.
500  * @param tag           tag value
501  * @return              tag data type + return type, RPM_NULL_TYPE on not found.
502  */
503 rpmTagType rpmTagGetType(rpmTagVal tag);
504
505 /** \ingroup rpmtag
506  * Return tag data type from value.
507  * @param tag           tag value
508  * @return              tag data type, RPM_NULL_TYPE on not found.
509  */
510 rpmTagType rpmTagGetTagType(rpmTagVal tag);
511
512 /** \ingroup rpmtag
513  * Return tag data type from value.
514  * @param tag           tag value
515  * @return              tag data return type, RPM_NULL_TYPE on not found.
516  */
517 rpmTagReturnType rpmTagGetReturnType(rpmTagVal tag);
518
519 /** \ingroup rpmtag
520  * Return tag data class from value.
521  * @param tag           tag value
522  * @return              tag data class, RPM_NULL_CLASS on not found.
523  */
524 rpmTagClass rpmTagGetClass(rpmTagVal tag);
525
526 /** \ingroup rpmtag
527  * Return tag value from name.
528  * @param tagstr        name of tag
529  * @return              tag value, -1 on not found
530  */
531 rpmTagVal rpmTagGetValue(const char * tagstr);
532
533 /** \ingroup rpmtag
534  * Return data class of type
535  * @param type          tag type
536  * @return              data class, RPM_NULL_CLASS on unknown.
537  */
538 rpmTagClass rpmTagTypeGetClass(rpmTagType type);
539
540 /** \ingroup rpmtag
541  * Return known rpm tag names, sorted by name.
542  * @retval tagnames     tag container of string array type
543  * @param fullname      return short or full name
544  * @return              number of tag names, 0 on error
545  */
546 int rpmTagGetNames(rpmtd tagnames, int fullname);
547
548 #ifdef __cplusplus
549 }
550 #endif
551
552 #endif /* _RPMTAG_H */