#define RPM_MASK_TYPE 0x0000ffff
} rpmTagType;
+/** \ingroup rpmtag
+ * The classes of data in tags from headers.
+ */
+typedef enum rpmTagClass_e {
+ RPM_NULL_CLASS = 0,
+ RPM_NUMERIC_CLASS = 1,
+ RPM_STRING_CLASS = 2,
+ RPM_BINARY_CLASS = 3,
+} rpmTagClass;
+
/** \ingroup header
* New rpm data types under consideration/development.
* These data types may (or may not) be added to rpm at some point. In order
rpmTagType rpmTagGetType(rpmTag tag);
/** \ingroup rpmtag
+ * Return tag data class from value.
+ * @param tag tag value
+ * @return tag data class, RPM_NULL_CLASS on not found.
+ */
+rpmTagClass rpmTagGetClass(rpmTag tag);
+
+/** \ingroup rpmtag
* Return tag value from name.
* @param tagstr name of tag
* @return tag value, -1 on not found
return td->type;
}
+rpmTagClass rpmtdClass(rpmtd td)
+{
+ assert(td != NULL);
+ return rpmTagGetClass(td->tag);
+}
+
int rpmtdGetIndex(rpmtd td)
{
assert(td != NULL);
rpmTagType rpmtdType(rpmtd td);
/** \ingroup rpmtd
+ * Retrieve class of the container.
+ * @param td Tag data container
+ * @return Rpm tag class
+ */
+rpmTagClass rpmtdClass(rpmtd td);
+
+/** \ingroup rpmtd
* Retrieve current iteration index of the container.
* @param td Tag data container
* @return Iteration index (or -1 if not iterating)
return ((*rpmTags->tagType)(tag));
}
+rpmTagClass rpmTagGetClass(rpmTag tag)
+{
+ rpmTagClass class;
+ switch (rpmTagGetType(tag) & RPM_MASK_TYPE) {
+ case RPM_CHAR_TYPE:
+ case RPM_INT8_TYPE:
+ case RPM_INT16_TYPE:
+ case RPM_INT32_TYPE:
+ case RPM_INT64_TYPE:
+ class = RPM_NUMERIC_CLASS;
+ break;
+ case RPM_STRING_TYPE:
+ case RPM_STRING_ARRAY_TYPE:
+ case RPM_I18NSTRING_TYPE:
+ class = RPM_STRING_CLASS;
+ break;
+ case RPM_BIN_TYPE:
+ class = RPM_BINARY_CLASS;
+ break;
+ case RPM_NULL_TYPE:
+ default:
+ class = RPM_NULL_CLASS;
+ break;
+ }
+ return class;
+}
+
rpmTag rpmTagGetValue(const char * tagstr)
{
return ((*rpmTags->tagValue)(tagstr));