diff --git a/lib/rpmtd.c b/lib/rpmtd.c index 911405944..e1d240842 100644 --- a/lib/rpmtd.c +++ b/lib/rpmtd.c @@ -71,6 +71,23 @@ rpmTagType rpmtdType(rpmtd td) return td->type; } +int rpmtdGetIndex(rpmtd td) +{ + assert(td != NULL); + return td->ix; +} + +int rpmtdSetIndex(rpmtd td, int index) +{ + assert(td != NULL); + + if (index < 0 || index >= rpmtdCount(td)) { + return -1; + } + td->ix = index; + return td->ix; +} + int rpmtdInit(rpmtd td) { assert(td != NULL); diff --git a/lib/rpmtd.h b/lib/rpmtd.h index bc368fa25..6da2482b5 100644 --- a/lib/rpmtd.h +++ b/lib/rpmtd.h @@ -72,6 +72,23 @@ rpmTag rpmtdTag(rpmtd td); */ rpmTagType rpmtdType(rpmtd td); +/** \ingroup rpmtd + * Retrieve current iteration index of the container. + * @param td Tag data container + * @return Iteration index (or -1 if not iterating) + */ +int rpmtdGetIndex(rpmtd td); + +/** \ingroup rpmtd + * Set iteration index of the container. + * If new index is out of bounds for the container, -1 is returned and + * iteration index is left untouched. + * @param td Tag data container + * @param index New index + * @return New index, or -1 if index out of bounds + */ +int rpmtdSetIndex(rpmtd td, int index); + /** \ingroup rpmtd * Initialize tag container for iteration * @param td Tag data container