"string", "blob", "argv", "i18nstring"
};
const char *tname, *sname;
- rpmtd names = rpmTagGetNames(1);
+ rpmtd names = rpmtdNew();
+ (void) rpmTagGetNames(names, 1);
while ((tname = rpmtdNextString(names))) {
sname = tname + strlen("RPMTAG_");
/** \ingroup rpmtag
* Return known rpm tag names, sorted by name.
+ * @retval tagnames tag container of string array type
* @param fullname return short or full name
- * @return tag container of string array type
+ * @return number of tag names, 0 on error
*/
-rpmtd rpmTagGetNames(int fullname);
+int rpmTagGetNames(rpmtd tagnames, int fullname);
#ifdef __cplusplus
}
return ((*rpmTags->tagValue)(tagstr));
}
-rpmtd rpmTagGetNames(int fullname)
+int rpmTagGetNames(rpmtd tagnames, int fullname)
{
const char **names;
const char *name;
- rpmtd td = rpmtdNew();
if (_rpmTags.byName == NULL)
tagLoadIndex(&_rpmTags.byName, &_rpmTags.byNameSize, tagCmpName);
+ if (tagnames == NULL ||_rpmTags.byName == NULL)
+ return 0;
- td->count = _rpmTags.byNameSize;
- td->data = names = xmalloc(td->count * sizeof(*names));
- td->type = RPM_STRING_ARRAY_TYPE;
- td->flags = RPMTD_ALLOCED | RPMTD_IMMUTABLE;
+ rpmtdReset(tagnames);
+ tagnames->count = _rpmTags.byNameSize;
+ tagnames->data = names = xmalloc(tagnames->count * sizeof(*names));
+ tagnames->type = RPM_STRING_ARRAY_TYPE;
+ tagnames->flags = RPMTD_ALLOCED | RPMTD_IMMUTABLE;
- for (int i = 0; i < td->count; i++) {
+ for (int i = 0; i < tagnames->count; i++) {
name = fullname ? _rpmTags.byName[i]->name :
_rpmTags.byName[i]->shortname;
names[i] = name;
}
- return td;
+ return tagnames->count;
}
dict = PyDict_New();
{ const char *tname, *sname;
- rpmtd names = rpmTagGetNames(1);
+ rpmtd names = rpmtdNew();
+ rpmTagGetNames(names, 1);
while ((tname = rpmtdNextString(names))) {
sname = tname + strlen("RPMTAG_");
PyDict_SetItem(dict, tag, o);
Py_DECREF(o);
}
+ rpmtdFreeData(names);
+ rpmtdFree(names);
}
PyDict_SetItemString(d, "tagnames", dict);
Py_DECREF(dict);