rpm  4.10.0
rpmtd.h
Go to the documentation of this file.
00001 #ifndef _RPMTD_H
00002 #define _RPMTD_H
00003 
00004 #include <rpm/rpmtypes.h>
00005 #include <rpm/argv.h>
00006 
00007 #ifdef __cplusplus
00008 extern "C" {
00009 #endif
00010 
00011 enum rpmtdFlags_e {
00012     RPMTD_NONE          = 0,
00013     RPMTD_ALLOCED       = (1 << 0),     /* was memory allocated? */
00014     RPMTD_PTR_ALLOCED   = (1 << 1),     /* were array pointers allocated? */
00015     RPMTD_IMMUTABLE     = (1 << 2),     /* header data or modifiable? */
00016     RPMTD_ARGV          = (1 << 3),     /* string array is NULL-terminated? */
00017     RPMTD_INVALID       = (1 << 4),     /* invalid data (in header) */
00018 };
00019 
00020 typedef rpmFlags rpmtdFlags;
00021 
00026 struct rpmtd_s {
00027     rpm_tag_t tag;      /* rpm tag of this data entry*/
00028     rpm_tagtype_t type; /* data type */
00029     rpm_count_t count;  /* number of entries */
00030     rpm_data_t data;    /* pointer to actual data */
00031     rpmtdFlags flags;   /* flags on memory allocation etc */
00032     int ix;             /* iteration index */
00033 };
00034 
00039 rpmtd rpmtdNew(void);
00040 
00046 rpmtd rpmtdFree(rpmtd td);
00047  
00053 void rpmtdReset(rpmtd td);
00054 
00060 void rpmtdFreeData(rpmtd td);
00061 
00067 rpm_count_t rpmtdCount(rpmtd td);
00068 
00074 rpmTagVal rpmtdTag(rpmtd td);
00075 
00081 rpmTagType rpmtdType(rpmtd td);
00082 
00088 rpmTagClass rpmtdClass(rpmtd td);
00089 
00095 rpmtdFlags rpmtdGetFlags(rpmtd td);
00096 
00102 int rpmtdGetIndex(rpmtd td);
00103 
00112 int rpmtdSetIndex(rpmtd td, int index);
00113 
00119 int rpmtdInit(rpmtd td);
00120 
00126 int rpmtdNext(rpmtd td);
00127 
00133 uint32_t *rpmtdNextUint32(rpmtd td);
00134 
00140 uint64_t *rpmtdNextUint64(rpmtd td);
00141 
00147 const char *rpmtdNextString(rpmtd td);
00148 
00157 char *rpmtdGetChar(rpmtd td);
00158 
00167 uint16_t * rpmtdGetUint16(rpmtd td);
00168 
00177 uint32_t * rpmtdGetUint32(rpmtd td);
00178 
00187 uint64_t * rpmtdGetUint64(rpmtd td);
00188 
00197 const char * rpmtdGetString(rpmtd td);
00198 
00208 uint64_t rpmtdGetNumber(rpmtd td);
00209 
00210 typedef enum rpmtdFormats_e {
00211     RPMTD_FORMAT_STRING         = 0,    /* plain string (any type) */
00212     RPMTD_FORMAT_ARMOR          = 1,    /* ascii armor format (bin types) */
00213     RPMTD_FORMAT_BASE64         = 2,    /* base64 encoding (bin types) */
00214     RPMTD_FORMAT_PGPSIG         = 3,    /* pgp/gpg signature (bin types) */
00215     RPMTD_FORMAT_DEPFLAGS       = 4,    /* dependency flags (int types) */
00216     RPMTD_FORMAT_FFLAGS         = 5,    /* file flags (int types) */
00217     RPMTD_FORMAT_PERMS          = 6,    /* permission string (int types) */
00218     RPMTD_FORMAT_TRIGGERTYPE    = 7,    /* trigger types (int types) */
00219     RPMTD_FORMAT_XML            = 8,    /* xml format (any type) */
00220     RPMTD_FORMAT_OCTAL          = 9,    /* octal format (int types) */
00221     RPMTD_FORMAT_HEX            = 10,   /* hex format (int types) */
00222     RPMTD_FORMAT_DATE           = 11,   /* date format (int types) */
00223     RPMTD_FORMAT_DAY            = 12,   /* day format (int types) */
00224     RPMTD_FORMAT_SHESCAPE       = 13,   /* shell escaped (any type) */
00225     RPMTD_FORMAT_ARRAYSIZE      = 14,   /* size of contained array (any type) */
00226     RPMTD_FORMAT_DEPTYPE        = 15,   /* dependency types (int types) */
00227     RPMTD_FORMAT_FSTATE         = 16,   /* file states (int types) */
00228     RPMTD_FORMAT_VFLAGS         = 17,   /* file verify flags (int types) */
00229     RPMTD_FORMAT_EXPAND         = 18,   /* macro expansion (string types) */
00230     RPMTD_FORMAT_FSTATUS        = 19,   /* file verify status (int types) */
00231 } rpmtdFormats;
00232 
00244 char *rpmtdFormat(rpmtd td, rpmtdFormats fmt, const char *errmsg);
00245 
00254 int rpmtdSetTag(rpmtd td, rpmTagVal tag);
00255 
00267 int rpmtdFromUint8(rpmtd td, rpmTagVal tag, uint8_t *data, rpm_count_t count);
00268 
00279 int rpmtdFromUint16(rpmtd td, rpmTagVal tag, uint16_t *data, rpm_count_t count);
00280 
00291 int rpmtdFromUint32(rpmtd td, rpmTagVal tag, uint32_t *data, rpm_count_t count);
00292 
00303 int rpmtdFromUint64(rpmtd td, rpmTagVal tag, uint64_t *data, rpm_count_t count);
00304 
00313 int rpmtdFromString(rpmtd td, rpmTagVal tag, const char *data);
00314 
00325 int rpmtdFromStringArray(rpmtd td, rpmTagVal tag, const char **data, rpm_count_t count);
00326 
00336 int rpmtdFromArgv(rpmtd td, rpmTagVal tag, ARGV_t argv);
00337 
00347 int rpmtdFromArgi(rpmtd td, rpmTagVal tag, ARGI_t argi);
00348 
00349 /* \ingroup rpmtd
00350  * Perform deep copy of container.
00351  * Create a modifiable copy of tag data container (on string arrays each
00352  * string is separately allocated)
00353  * @todo                Only string arrays types are supported currently
00354  * @param td            Container to copy
00355  * @return              New container or NULL on error
00356  */
00357 rpmtd rpmtdDup(rpmtd td);
00358 
00359 #ifdef __cplusplus
00360 }
00361 #endif
00362 
00363 #endif /* _RPMTD_H */