diff --git a/apt-pkg/rpm/rpmversion.cc b/apt-pkg/rpm/rpmversion.cc index 99ae0f5..67b65ce 100644 --- a/apt-pkg/rpm/rpmversion.cc +++ b/apt-pkg/rpm/rpmversion.cc @@ -191,19 +191,26 @@ int rpmVersioningSystem::DoCmpVersionArch(const char *A,const char *Aend, bool rpmVersioningSystem::CheckDep(const char *PkgVer, int Op,const char *DepVer) { - int PkgFlags = RPMSENSE_EQUAL; - int DepFlags = 0; + rpmsenseFlags PkgFlags = RPMSENSE_EQUAL; + rpmsenseFlags DepFlags; bool invert = false; int rc; + + if (DepVer == NULL) + return true; + if (PkgVer == NULL) + { + return false; + } switch (Op & 0x0F) { case pkgCache::Dep::LessEq: - DepFlags = RPMSENSE_LESS|RPMSENSE_EQUAL; + DepFlags = (rpmsenseFlags)(RPMSENSE_LESS|RPMSENSE_EQUAL); break; case pkgCache::Dep::GreaterEq: - DepFlags = RPMSENSE_GREATER|RPMSENSE_EQUAL; + DepFlags = (rpmsenseFlags)(RPMSENSE_GREATER|RPMSENSE_EQUAL); break; case pkgCache::Dep::Less: @@ -227,15 +234,17 @@ bool rpmVersioningSystem::CheckDep(const char *PkgVer, DepFlags = RPMSENSE_ANY; break; } + EVR_t lEVR = rpmEVRnew(PkgFlags, 0); + EVR_t rEVR = rpmEVRnew(DepFlags, 0); + int result; - rpmds pds = rpmdsSingle(RPMTAG_PROVIDENAME, "", PkgVer, (rpmsenseFlags) PkgFlags); - rpmds dds = rpmdsSingle(RPMTAG_REQUIRENAME, "", DepVer, (rpmsenseFlags) DepFlags); - rpmdsSetNoPromote(pds, _rpmds_nopromote); - rpmdsSetNoPromote(dds, _rpmds_nopromote); - rc = rpmdsCompare(pds, dds); - rpmdsFree(pds); - rpmdsFree(dds); - + rpmEVRparse(PkgVer, lEVR); + rpmEVRparse(DepVer, rEVR); + lEVR->Flags = PkgFlags; + rEVR->Flags = DepFlags; + rc = rpmEVRoverlap(lEVR, rEVR); + rpmEVRfree(lEVR); + rpmEVRfree(rEVR); return (!invert && rc) || (invert && !rc); }