Index: rpm.c =================================================================== RCS file: /cvsroot/installer/poldek/Attic/rpm.c,v retrieving revision 1.41.4.6 diff -u -r1.41.4.6 rpm.c --- rpm.c 14 Aug 2004 20:40:46 -0000 1.41.4.6 +++ rpm.c 27 Aug 2004 19:15:44 -0000 @@ -446,20 +446,34 @@ return n; } - -int rpm_get_obsoletedby_cap(rpmdb db, tn_array *dbpkgs, struct capreq *cap, - unsigned ldflags) +static +int get_obsoletedby_cap(rpmdb db, int tag, tn_array *dbpkgs, struct capreq *cap, + unsigned ldflags) { struct rpmdb_it it; const struct dbrec *dbrec; int n = 0; - - rpmdb_it_init(db, &it, RPMITER_NAME, capreq_name(cap)); + + rpmdb_it_init(db, &it, tag, capreq_name(cap)); while ((dbrec = rpmdb_it_get(&it)) != NULL) { + int add = 0; if (dbpkg_array_has(dbpkgs, dbrec->recno)) - continue; - - if (header_evr_match_req(dbrec->h, cap)) { + continue; + + switch (tag) { + case RPMITER_NAME: + add = header_evr_match_req(dbrec->h, cap); + break; + + case RPMITER_CAP: + add = header_cap_match_req(dbrec->h, cap, 1); + break; + + default: + n_assert(0); + break; + } + if (add) { struct dbpkg *dbpkg = dbpkg_new(dbrec->recno, dbrec->h, ldflags); n_array_push(dbpkgs, dbpkg); n_array_sort(dbpkgs); @@ -470,6 +484,11 @@ return n; } +int rpm_get_obsoletedby_cap(rpmdb db, tn_array *dbpkgs, struct capreq *cap, + unsigned ldflags) +{ + return get_obsoletedby_cap(db, RPMITER_NAME, dbpkgs, cap, ldflags); +} int rpm_get_obsoletedby_pkg(rpmdb db, tn_array *dbpkgs, const struct pkg *pkg, unsigned ldflags) @@ -482,7 +501,7 @@ REL_EQ | REL_LT, 0); n = rpm_get_obsoletedby_cap(db, dbpkgs, self_cap, ldflags); capreq_free(self_cap); - + if (pkg->cnfls == NULL) return n; @@ -493,6 +512,9 @@ continue; n += rpm_get_obsoletedby_cap(db, dbpkgs, cnfl, ldflags); +#ifdef HAVE_RPM_4_1 + n += get_obsoletedby_cap(db, RPMITER_CAP, dbpkgs, cnfl, ldflags); +#endif } return n;