static int depnevrsTagFiltered(Header h, rpmtd td, headerGetFlags hgflags, rpmTagVal tag, int strong) { rpmds ds = rpmdsNew(h, tag, 0); int ndeps = rpmdsCount(ds); if (ndeps > 0) { char **deps = xmalloc(sizeof(*deps) * ndeps); ndeps = 0; while (rpmdsNext(ds) >= 0) { if ((rpmdsFlags(ds) & RPMSENSE_STRONG) == (strong ? RPMSENSE_STRONG : 0)) deps[ndeps++] = rpmdsNewDNEVR(NULL, ds); } if (ndeps) { td->data = deps; td->type = RPM_STRING_ARRAY_TYPE; td->count = ndeps; td->flags |= (RPMTD_ALLOCED | RPMTD_PTR_ALLOCED); } else { _free(deps); } } rpmdsFree(ds); return (ndeps > 0); }
const char * rpmdsDNEVR(const rpmds ds) { const char * DNEVR = NULL; if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) { if (ds->DNEVR == NULL) { char t[2] = { ds->Type[0], '\0' }; ds->DNEVR = rpmdsNewDNEVR(t, ds); } DNEVR = ds->DNEVR; } return DNEVR; }
static int depnevrsTag(Header h, rpmtd td, headerGetFlags hgflags, rpmTagVal tag) { rpmds ds = rpmdsNew(h, tag, 0); int ndeps = rpmdsCount(ds); if (ndeps > 0) { char **deps = xmalloc(sizeof(*deps) * ndeps); int i; while ((i = rpmdsNext(ds)) >= 0) { deps[i] = rpmdsNewDNEVR(NULL, ds); } td->data = deps; td->type = RPM_STRING_ARRAY_TYPE; td->count = ndeps; td->flags |= (RPMTD_ALLOCED | RPMTD_PTR_ALLOCED); } rpmdsFree(ds); return (ndeps > 0); }