From c62b69b4fa71416510aad06314eb29cf811abf02 Mon Sep 17 00:00:00 2001 From: Panu Matilainen Date: Wed, 21 May 2008 16:32:37 +0300 Subject: [PATCH] Add rpmTagGetNames() public function for retrieving known tag names - use rpmtd as container to avoid inventing yet more datastructures and iterators --- lib/rpmtag.h | 7 +++++++ lib/tagname.c | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/lib/rpmtag.h b/lib/rpmtag.h index ff9b26c..9a77098 100644 --- a/lib/rpmtag.h +++ b/lib/rpmtag.h @@ -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 diff --git a/lib/tagname.c b/lib/tagname.c index c962330..b995d97 100644 --- a/lib/tagname.c +++ b/lib/tagname.c @@ -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; +} -- 2.7.4