/** * Check installed package dependencies for problems. * @param ts transaction set * @param h header * @return number of problems found (0 for no problems) */ static int verifyDependencies(rpmts ts, Header h) { rpmps ps; rpmte te; int rc; rpmtsEmpty(ts); (void) rpmtsAddInstallElement(ts, h, NULL, 0, NULL); (void) rpmtsCheck(ts); te = rpmtsElement(ts, 0); ps = rpmteProblems(te); rc = rpmpsNumProblems(ps); if (rc > 0) { rpmlog(RPMLOG_NOTICE, _("Unsatisfied dependencies for %s:\n"), rpmteNEVRA(te)); rpmpsi psi = rpmpsInitIterator(ps); rpmProblem p; while ((p = rpmpsiNext(psi)) != NULL) { char * ps = rpmProblemString(p); rpmlog(RPMLOG_NOTICE, "\t%s\n", ps); free(ps); } rpmpsFreeIterator(psi); } rpmpsFree(ps); rpmtsEmpty(ts); return rc; }
void rpmpsPrint(FILE *fp, rpmps ps) { rpmProblem p; rpmpsi psi = rpmpsInitIterator(ps); FILE *f = (fp != NULL) ? fp : stderr; while ((p = rpmpsiNext(psi))) { char *msg = rpmProblemString(p); fprintf(f, "\t%s\n", msg); free(msg); } rpmpsFreeIterator(psi); }
/* * TODO: filter out duplicates while merging. Also horribly inefficient... */ int rpmpsMerge(rpmps dest, rpmps src) { int rc = 0; if (dest != NULL) { rpmProblem p; rpmpsi spi = rpmpsInitIterator(src); while ((p = rpmpsiNext(spi)) != NULL) { rpmpsAppendProblem(dest, p); rc++; } rpmpsFreeIterator(spi); } return rc; }
PyObject *rpmps_AsList(rpmps ps) { PyObject *problems = PyList_New(0); rpmpsi psi = rpmpsInitIterator(ps); rpmProblem prob; while ((prob = rpmpsiNext(psi))) { PyObject *pyprob = rpmprob_Wrap(&rpmProblem_Type, prob); PyList_Append(problems, pyprob); Py_DECREF(pyprob); } rpmpsFreeIterator(psi); return problems; }
int rpmpsNextIterator(rpmpsi psi) { return (rpmpsiNext(psi) != NULL) ? psi->ix : -1; }