From d12fe7841e93dfa5a28c6e2aab6568da977f1511 Mon Sep 17 00:00:00 2001 From: Panu Matilainen Date: Thu, 13 Sep 2012 11:54:54 +0300 Subject: [PATCH] Add pool-aware version of rpmdsRpmlib() --- lib/rpmds.c | 12 +++++++++--- lib/rpmds.h | 9 +++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/rpmds.c b/lib/rpmds.c index d21944c..2ed3d8d 100644 --- a/lib/rpmds.c +++ b/lib/rpmds.c @@ -982,7 +982,7 @@ static const struct rpmlibProvides_s rpmlibProvides[] = { }; -int rpmdsRpmlib(rpmds * dsp, const void * tblp) +int rpmdsRpmlibPool(rpmstrPool pool, rpmds * dsp, const void * tblp) { const struct rpmlibProvides_s * rltblp = tblp; const struct rpmlibProvides_s * rlp; @@ -992,16 +992,22 @@ int rpmdsRpmlib(rpmds * dsp, const void * tblp) rltblp = rpmlibProvides; for (rlp = rltblp; rlp->featureName != NULL && rc == 0; rlp++) { - rpmds ds = rpmdsSingle(RPMTAG_PROVIDENAME, rlp->featureName, + rpmds ds = rpmdsSinglePool(pool, RPMTAG_PROVIDENAME, rlp->featureName, rlp->featureEVR, rlp->featureFlags); rc = rpmdsMerge(dsp, ds); rpmdsFree(ds); } - if (*dsp) + /* freeze the pool to save memory, but only if private pool */ + if (*dsp && (*dsp)->pool != pool) rpmstrPoolFreeze((*dsp)->pool, 0); return rc; } +int rpmdsRpmlib(rpmds * dsp, const void * tblp) +{ + return rpmdsRpmlibPool(NULL, dsp, tblp); +} + rpmstrPool rpmdsPool(rpmds ds) { return (ds != NULL) ? ds->pool : NULL; diff --git a/lib/rpmds.h b/lib/rpmds.h index 8b5e813..9127e51 100644 --- a/lib/rpmds.h +++ b/lib/rpmds.h @@ -385,6 +385,15 @@ int rpmdsNVRMatchesDep(const Header h, const rpmds req, int nopromote); */ int rpmdsRpmlib(rpmds * dsp, const void * tblp); +/** + * Load rpmlib provides into a dependency set. + * @param pool shared string pool (or NULL for private pool) + * @retval *dsp (loaded) depedency set + * @param tblp rpmlib provides table (NULL uses internal table) + * @return 0 on success + */ +int rpmdsRpmlibPool(rpmstrPool pool, rpmds * dsp, const void * tblp); + /** \ingroup rpmds * Return dependency set string pool handle * @param fi dependency set -- 2.7.4