static rpmRC sepolAddTE(rpmte te) { sepol *pol; sepol *polTail; if (!rpmteHasCollection(te, name)) { return RPMRC_OK; } pol = sepolNew(te); if (!pol) { /* something's wrong with the policy information, either missing or * corrupt. abort */ rpmlog(RPMLOG_ERR, _("Failed to extract policy from %s\n"), rpmteNEVRA(te)); return RPMRC_FAIL; } /* find the tail of pol */ polTail = pol; while (polTail->next) { polTail = polTail->next; } /* add the new policy to the list */ if (!policiesHead) { policiesHead = pol; policiesTail = polTail; } else { if (rpmteType(te) == TR_ADDED) { /* add to the end of the list */ policiesTail->next = pol; policiesTail = polTail; } else { /* add to the beginning of the list */ polTail->next = policiesHead; policiesHead = pol; } } return RPMRC_OK; }
rpmte * rpmalAllInCollection(const rpmal al, const char *collname) { rpmte *ret = NULL; int found = 0; rpmalNum pkgNum; if (!al || !al->list || !collname) return NULL; for (pkgNum = 0; pkgNum < al->size; pkgNum++) { rpmte p = al->list[pkgNum].p; if (rpmteHasCollection(p, collname)) { ret = xrealloc(ret, sizeof(*ret) * (found + 1 + 1)); ret[found] = p; found++; } } if (ret) { ret[found] = NULL; } return ret; }