rpm  4.12.0.1
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 */
uint32_t * rpmtdNextUint32(rpmtd td)
Iterate over uint32_t type tag data container.
int rpmtdInit(rpmtd td)
Initialize tag container for iteration.
int rpmtdSetTag(rpmtd td, rpmTagVal tag)
Set container tag and type.
rpmtd rpmtdFree(rpmtd td)
Destroy tag data container.
char ** ARGV_t
Definition: argv.h:15
const char * rpmtdNextString(rpmtd td)
Iterate over string / string array type tag data container.
rpmsid * rpmtdToPool(rpmtd td, rpmstrPool pool)
void * rpm_data_t
Definition: rpmtypes.h:33
rpm_count_t count
Definition: rpmtd.h:29
int32_t rpm_tag_t
Definition: rpmtypes.h:27
rpmFlags rpmtdFlags
Definition: rpmtd.h:20
enum rpmtdFormats_e rpmtdFormats
rpmTagType rpmtdType(rpmtd td)
Retrieve type of the container.
int rpmtdFromStringArray(rpmtd td, rpmTagVal tag, const char **data, rpm_count_t count)
Construct tag container from a string array.
rpm_tagtype_t type
Definition: rpmtd.h:28
uint64_t * rpmtdGetUint64(rpmtd td)
Return uint64_t data from tag container.
rpmtdFlags flags
Definition: rpmtd.h:31
int rpmtdFromUint64(rpmtd td, rpmTagVal tag, uint64_t *data, rpm_count_t count)
Construct tag container from uint64_t pointer.
char * rpmtdGetChar(rpmtd td)
Return char data from tag container.
rpm_count_t rpmtdCount(rpmtd td)
Retrieve array size of the container.
uint32_t rpmFlags
Definition: rpmtypes.h:42
struct rpmstrPool_s * rpmstrPool
Definition: rpmtypes.h:83
uint32_t rpmsid
Definition: rpmtypes.h:82
void rpmtdReset(rpmtd td)
(Re-)initialize tag data container.
int ix
Definition: rpmtd.h:32
rpmtdFormats_e
Definition: rpmtd.h:210
int rpmtdFromUint16(rpmtd td, rpmTagVal tag, uint16_t *data, rpm_count_t count)
Construct tag container from uint16_t pointer.
int rpmtdFromUint8(rpmtd td, rpmTagVal tag, uint8_t *data, rpm_count_t count)
Construct tag container from uint8_t pointer.
rpmTagVal rpmtdTag(rpmtd td)
Retrieve tag of the container.
enum rpmTagType_e rpmTagType
The basic types of data in tags from headers.
rpm_data_t data
Definition: rpmtd.h:30
rpm_tag_t tag
Definition: rpmtd.h:27
uint32_t rpm_count_t
Definition: rpmtypes.h:29
uint16_t * rpmtdGetUint16(rpmtd td)
Return uint16_t data from tag container.
rpmtd rpmtdNew(void)
Create new tag data container.
void rpmtdFreeData(rpmtd td)
Free contained data.
rpm_tag_t rpmTagVal
Definition: rpmtypes.h:30
uint64_t rpmtdGetNumber(rpmtd td)
Return numeric value from tag container.
uint32_t * rpmtdGetUint32(rpmtd td)
Return uint32_t data from tag container.
rpmtd rpmtdDup(rpmtd td)
rpmtdFlags_e
Definition: rpmtd.h:11
Container for rpm tag data (from headers or extensions).
Definition: rpmtd.h:26
int rpmtdFromUint32(rpmtd td, rpmTagVal tag, uint32_t *data, rpm_count_t count)
Construct tag container from uint32_t pointer.
int rpmtdFromArgi(rpmtd td, rpmTagVal tag, ARGI_t argi)
Construct tag container from ARGI_t array.
int rpmtdNext(rpmtd td)
Iterate over tag data container.
int rpmtdSetIndex(rpmtd td, int index)
Set iteration index of the container.
enum rpmTagClass_e rpmTagClass
The classes of data in tags from headers.
uint32_t rpm_tagtype_t
Definition: rpmtypes.h:28
rpmtdFlags rpmtdGetFlags(rpmtd td)
Retrieve flags of the container (allocation details etc)
uint64_t * rpmtdNextUint64(rpmtd td)
Iterate over uint64_t type tag data container.
char * rpmtdFormat(rpmtd td, rpmtdFormats fmt, const char *errmsg)
Format data from tag container to string presentation of given format.
int rpmtdFromArgv(rpmtd td, rpmTagVal tag, ARGV_t argv)
Construct tag container from ARGV_t array.
Definition: argv.h:19
int rpmtdGetIndex(rpmtd td)
Retrieve current iteration index of the container.
int rpmtdFromString(rpmtd td, rpmTagVal tag, const char *data)
Construct tag container from a string.
const char * rpmtdGetString(rpmtd td)
Return string data from tag container.
rpmTagClass rpmtdClass(rpmtd td)
Retrieve class of the container.