diff options
author | Panu Matilainen <pmatilai@redhat.com> | 2007-10-18 13:45:25 +0300 |
---|---|---|
committer | Panu Matilainen <pmatilai@redhat.com> | 2007-10-18 13:45:25 +0300 |
commit | 96ad2a1fee7528e182f3923440f7b3038e996c8d (patch) | |
tree | 4357b38859c428606d2a2ddf82b6d3d938a52ce6 /lib/rpmps.c | |
parent | 2240b4f8d67ab98de0f090ad146103f7a1984cfb (diff) | |
download | rpm-96ad2a1fee7528e182f3923440f7b3038e996c8d.tar.gz rpm-96ad2a1fee7528e182f3923440f7b3038e996c8d.tar.bz2 rpm-96ad2a1fee7528e182f3923440f7b3038e996c8d.zip |
Add API for iterating over rpmps problems
Diffstat (limited to 'lib/rpmps.c')
-rw-r--r-- | lib/rpmps.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/rpmps.c b/lib/rpmps.c index 8e991e6d0..d536c17d9 100644 --- a/lib/rpmps.c +++ b/lib/rpmps.c @@ -40,6 +40,50 @@ int rpmpsNumProblems(rpmps ps) return numProblems; } +rpmpsi rpmpsInitIterator(rpmps ps) +{ + rpmpsi psi = NULL; + if (ps != NULL) { + psi = xcalloc(1, sizeof(*psi)); + psi->ps = rpmpsLink(ps, "iter ref"); + psi->ix = -1; + } + return psi; +} + +rpmpsi rpmpsFreeIterator(rpmpsi psi) +{ + if (psi != NULL) { + rpmpsUnlink(psi->ps, "iter unref"); + free(psi); + psi = NULL; + } + return psi; +} + +int rpmpsNextIterator(rpmpsi psi) +{ + int i = -1; + + if (psi != NULL && ++psi->ix >= 0) { + if (psi->ix < rpmpsNumProblems(psi->ps)) { + i = psi->ix; + } else { + psi->ix = -1; + } + } + return i; +} + +rpmProblem rpmpsProblem(rpmpsi psi) +{ + rpmProblem p = NULL; + if (psi != NULL && psi->ix >= 0 && psi->ix < rpmpsNumProblems(psi->ps)) { + p = psi->ps->probs + psi->ix; + } + return p; +} + rpmps rpmpsCreate(void) { rpmps ps = xcalloc(1, sizeof(*ps)); |