From: Panu Matilainen Date: Thu, 18 Oct 2007 10:45:25 +0000 (+0300) Subject: Add API for iterating over rpmps problems X-Git-Tag: rpm-4.6.0-rc1~1612 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=96ad2a1fee7528e182f3923440f7b3038e996c8d;p=platform%2Fupstream%2Frpm.git Add API for iterating over rpmps problems --- diff --git a/lib/rpmps.c b/lib/rpmps.c index 8e991e6..d536c17 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)); diff --git a/lib/rpmps.h b/lib/rpmps.h index b0c591b..35fc34e 100644 --- a/lib/rpmps.h +++ b/lib/rpmps.h @@ -24,6 +24,8 @@ typedef struct rpmProblem_s * rpmProblem; */ typedef struct rpmps_s * rpmps; +typedef struct rpmpsi_s * rpmpsi; + /** * Enumerate transaction set problem types. */ @@ -62,6 +64,11 @@ struct rpmps_s { int nrefs; /*!< Reference count. */ }; +struct rpmpsi_s { + size_t ix; + rpmps ps; +}; + /** * Return formatted string representation of a problem. * @param prob rpm problem @@ -104,6 +111,34 @@ rpmps XrpmpsLink (rpmps ps, int rpmpsNumProblems(rpmps ps); /** + * Initialize problem set iterator. + * @param ps problem set + * @return problem set iterator + */ +rpmpsi rpmpsInitIterator(rpmps ps); + +/** + * Destroy problem set iterator. + * @param psi problem set iterator + * @return problem set iterator (NULL) + */ +rpmpsi rpmpsFreeIterator(rpmpsi psi); + +/** + * Return next problem set iterator index + * @param psi problem set iterator + * @return iterator index, -1 on termination + */ +int rpmpsNextIterator(rpmpsi psi); + +/** + * Return current problem from problem set + * @param psi problem set iterator + * @return current rpmProblem + */ +rpmProblem rpmpsProblem(rpmpsi psi); + +/** * Create a problem set. * @return new problem set */