Add rpmTagGetNames() public function for retrieving known tag names
authorPanu Matilainen <pmatilai@redhat.com>
Wed, 21 May 2008 13:32:37 +0000 (16:32 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Wed, 21 May 2008 13:32:37 +0000 (16:32 +0300)
- use rpmtd as container to avoid inventing yet more datastructures and
  iterators

lib/rpmtag.h
lib/tagname.c

index ff9b26c..9a77098 100644 (file)
@@ -371,6 +371,13 @@ rpmTagType rpmTagGetType(rpmTag tag);
  */
 rpmTag rpmTagGetValue(const char * tagstr);
 
+/** \ingroup rpmtag
+ * Return known rpm tag names, sorted by name.
+ * @param fullname     return short or full name
+ * @return             tag container of string array type
+ */
+rpmtd rpmTagGetNames(int fullname);
+
 #ifdef __cplusplus
 }
 #endif
index c962330..b995d97 100644 (file)
@@ -289,3 +289,24 @@ rpmTag rpmTagGetValue(const char * tagstr)
     return ((*rpmTags->tagValue)(tagstr));
 }
 
+rpmtd rpmTagGetNames(int fullname)
+{
+    const char **names;
+    const char *name;
+    rpmtd td = rpmtdNew();
+
+    if (_rpmTags.byName == NULL)
+       tagLoadIndex(&_rpmTags.byName, &_rpmTags.byNameSize, tagCmpName);
+
+    td->count = _rpmTags.byNameSize;
+    td->data = names = xmalloc(td->count * sizeof(*names));
+    td->type = RPM_STRING_ARRAY_TYPE;
+    td->flags = RPMTD_ALLOCED | RPMTD_IMMUTABLE;
+
+    for (int i = 0; i < td->count; i++) {
+       name = fullname ? _rpmTags.byName[i]->name : 
+                         _rpmTags.byName[i]->shortname;
+       names[i] = name;
+    }
+    return td;
+}