rpm  4.11.1-rc1
rpmtd.h
Go to the documentation of this file.
1 #ifndef _RPMTD_H
2 #define _RPMTD_H
3 
4 #include <rpm/rpmtypes.h>
5 #include <rpm/argv.h>
6 
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 
13  RPMTD_ALLOCED = (1 << 0), /* was memory allocated? */
14  RPMTD_PTR_ALLOCED = (1 << 1), /* were array pointers allocated? */
15  RPMTD_IMMUTABLE = (1 << 2), /* header data or modifiable? */
16  RPMTD_ARGV = (1 << 3), /* string array is NULL-terminated? */
17  RPMTD_INVALID = (1 << 4), /* invalid data (in header) */
18 };
19 
21 
26 struct rpmtd_s {
27  rpm_tag_t tag; /* rpm tag of this data entry*/
28  rpm_tagtype_t type; /* data type */
29  rpm_count_t count; /* number of entries */
30  rpm_data_t data; /* pointer to actual data */
31  rpmtdFlags flags; /* flags on memory allocation etc */
32  int ix; /* iteration index */
33 };
34 
39 rpmtd rpmtdNew(void);
40 
47 
53 void rpmtdReset(rpmtd td);
54 
60 void rpmtdFreeData(rpmtd td);
61 
68 
75 
82 
89 
95 rpmtdFlags rpmtdGetFlags(rpmtd td);
96 
102 int rpmtdGetIndex(rpmtd td);
103 
112 int rpmtdSetIndex(rpmtd td, int index);
113 
119 int rpmtdInit(rpmtd td);
120 
126 int rpmtdNext(rpmtd td);
127 
133 uint32_t *rpmtdNextUint32(rpmtd td);
134 
140 uint64_t *rpmtdNextUint64(rpmtd td);
141 
147 const char *rpmtdNextString(rpmtd td);
148 
157 char *rpmtdGetChar(rpmtd td);
158 
167 uint16_t * rpmtdGetUint16(rpmtd td);
168 
177 uint32_t * rpmtdGetUint32(rpmtd td);
178 
187 uint64_t * rpmtdGetUint64(rpmtd td);
188 
197 const char * rpmtdGetString(rpmtd td);
198 
208 uint64_t rpmtdGetNumber(rpmtd td);
209 
210 typedef enum rpmtdFormats_e {
211  RPMTD_FORMAT_STRING = 0, /* plain string (any type) */
212  RPMTD_FORMAT_ARMOR = 1, /* ascii armor format (bin types) */
213  RPMTD_FORMAT_BASE64 = 2, /* base64 encoding (bin types) */
214  RPMTD_FORMAT_PGPSIG = 3, /* pgp/gpg signature (bin types) */
215  RPMTD_FORMAT_DEPFLAGS = 4, /* dependency flags (int types) */
216  RPMTD_FORMAT_FFLAGS = 5, /* file flags (int types) */
217  RPMTD_FORMAT_PERMS = 6, /* permission string (int types) */
218  RPMTD_FORMAT_TRIGGERTYPE = 7, /* trigger types (int types) */
219  RPMTD_FORMAT_XML = 8, /* xml format (any type) */
220  RPMTD_FORMAT_OCTAL = 9, /* octal format (int types) */
221  RPMTD_FORMAT_HEX = 10, /* hex format (int types) */
222  RPMTD_FORMAT_DATE = 11, /* date format (int types) */
223  RPMTD_FORMAT_DAY = 12, /* day format (int types) */
224  RPMTD_FORMAT_SHESCAPE = 13, /* shell escaped (any type) */
225  RPMTD_FORMAT_ARRAYSIZE = 14, /* size of contained array (any type) */
226  RPMTD_FORMAT_DEPTYPE = 15, /* dependency types (int types) */
227  RPMTD_FORMAT_FSTATE = 16, /* file states (int types) */
228  RPMTD_FORMAT_VFLAGS = 17, /* file verify flags (int types) */
229  RPMTD_FORMAT_EXPAND = 18, /* macro expansion (string types) */
230  RPMTD_FORMAT_FSTATUS = 19, /* file verify status (int types) */
231 } rpmtdFormats;
232 
244 char *rpmtdFormat(rpmtd td, rpmtdFormats fmt, const char *errmsg);
245 
254 int rpmtdSetTag(rpmtd td, rpmTagVal tag);
255 
267 int rpmtdFromUint8(rpmtd td, rpmTagVal tag, uint8_t *data, rpm_count_t count);
268 
279 int rpmtdFromUint16(rpmtd td, rpmTagVal tag, uint16_t *data, rpm_count_t count);
280 
291 int rpmtdFromUint32(rpmtd td, rpmTagVal tag, uint32_t *data, rpm_count_t count);
292 
303 int rpmtdFromUint64(rpmtd td, rpmTagVal tag, uint64_t *data, rpm_count_t count);
304 
313 int rpmtdFromString(rpmtd td, rpmTagVal tag, const char *data);
314 
325 int rpmtdFromStringArray(rpmtd td, rpmTagVal tag, const char **data, rpm_count_t count);
326 
336 int rpmtdFromArgv(rpmtd td, rpmTagVal tag, ARGV_t argv);
337 
347 int rpmtdFromArgi(rpmtd td, rpmTagVal tag, ARGI_t argi);
348 
349 /* \ingroup rpmtd
350  * Perform deep copy of container.
351  * Create a modifiable copy of tag data container (on string arrays each
352  * string is separately allocated)
353  * @todo Only string arrays types are supported currently
354  * @param td Container to copy
355  * @return New container or NULL on error
356  */
357 rpmtd rpmtdDup(rpmtd td);
358 
359 /* \ingroup rpmtd
360  * Push string array container contents to a string pool, return string ids.
361  * @param td Tag data container
362  * @param pool String pool
363  * @return Array of string id's (malloced)
364  */
365 rpmsid * rpmtdToPool(rpmtd td, rpmstrPool pool);
366 
367 #ifdef __cplusplus
368 }
369 #endif
370 
371 #endif /* _RPMTD_H */