|
@@ -572,21 +572,31 @@ bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg,const string &Name
|
|
|
if (APT::Configuration::checkArchitecture(Pkg.Arch()) == true)
|
|
if (APT::Configuration::checkArchitecture(Pkg.Arch()) == true)
|
|
|
{
|
|
{
|
|
|
pkgCache::PkgIterator const M = Grp.FindPreferredPkg(false); // native or any foreign pkg will do
|
|
pkgCache::PkgIterator const M = Grp.FindPreferredPkg(false); // native or any foreign pkg will do
|
|
|
- if (M.end() == false)
|
|
|
|
|
- for (pkgCache::PrvIterator Prv = M.ProvidesList(); Prv.end() == false; ++Prv)
|
|
|
|
|
|
|
+ if (M.end() == false) {
|
|
|
|
|
+ pkgCache::PrvIterator Prv;
|
|
|
|
|
+ Dynamic<pkgCache::PrvIterator> DynPrv(Prv);
|
|
|
|
|
+ for (Prv = M.ProvidesList(); Prv.end() == false; ++Prv)
|
|
|
{
|
|
{
|
|
|
if ((Prv->Flags & pkgCache::Flag::ArchSpecific) != 0)
|
|
if ((Prv->Flags & pkgCache::Flag::ArchSpecific) != 0)
|
|
|
continue;
|
|
continue;
|
|
|
pkgCache::VerIterator Ver = Prv.OwnerVer();
|
|
pkgCache::VerIterator Ver = Prv.OwnerVer();
|
|
|
|
|
+ Dynamic<pkgCache::VerIterator> DynVer(Ver);
|
|
|
if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed ||
|
|
if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed ||
|
|
|
((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign &&
|
|
((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign &&
|
|
|
(Prv->Flags & pkgCache::Flag::MultiArchImplicit) == 0))
|
|
(Prv->Flags & pkgCache::Flag::MultiArchImplicit) == 0))
|
|
|
if (NewProvides(Ver, Pkg, Prv->ProvideVersion, Prv->Flags) == false)
|
|
if (NewProvides(Ver, Pkg, Prv->ProvideVersion, Prv->Flags) == false)
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ pkgCache::PkgIterator P;
|
|
|
|
|
+ pkgCache::VerIterator Ver;
|
|
|
|
|
+ Dynamic<pkgCache::PkgIterator> DynP(P);
|
|
|
|
|
+ Dynamic<pkgCache::VerIterator> DynVer(Ver);
|
|
|
|
|
|
|
|
- for (pkgCache::PkgIterator P = Grp.PackageList(); P.end() == false; P = Grp.NextPkg(P))
|
|
|
|
|
- for (pkgCache::VerIterator Ver = P.VersionList(); Ver.end() == false; ++Ver)
|
|
|
|
|
|
|
+ for (P = Grp.PackageList(); P.end() == false; P = Grp.NextPkg(P))
|
|
|
|
|
+ for (Ver = P.VersionList(); Ver.end() == false; ++Ver)
|
|
|
if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign)
|
|
if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign)
|
|
|
if (NewProvides(Ver, Pkg, Ver->VerStr, pkgCache::Flag::MultiArchImplicit) == false)
|
|
if (NewProvides(Ver, Pkg, Ver->VerStr, pkgCache::Flag::MultiArchImplicit) == false)
|
|
|
return false;
|
|
return false;
|
|
@@ -1075,7 +1085,9 @@ bool pkgCacheGenerator::NewProvides(pkgCache::VerIterator &Ver,
|
|
|
bool pkgCacheListParser::NewProvidesAllArch(pkgCache::VerIterator &Ver, string const &Package,
|
|
bool pkgCacheListParser::NewProvidesAllArch(pkgCache::VerIterator &Ver, string const &Package,
|
|
|
string const &Version, uint8_t const Flags) {
|
|
string const &Version, uint8_t const Flags) {
|
|
|
pkgCache &Cache = Owner->Cache;
|
|
pkgCache &Cache = Owner->Cache;
|
|
|
- pkgCache::GrpIterator const Grp = Cache.FindGrp(Package);
|
|
|
|
|
|
|
+ pkgCache::GrpIterator Grp = Cache.FindGrp(Package);
|
|
|
|
|
+ Dynamic<pkgCache::GrpIterator> DynGrp(Grp);
|
|
|
|
|
+
|
|
|
if (Grp.end() == true)
|
|
if (Grp.end() == true)
|
|
|
return NewProvides(Ver, Package, Cache.NativeArch(), Version, Flags);
|
|
return NewProvides(Ver, Package, Cache.NativeArch(), Version, Flags);
|
|
|
else
|
|
else
|
|
@@ -1089,8 +1101,11 @@ bool pkgCacheListParser::NewProvidesAllArch(pkgCache::VerIterator &Ver, string c
|
|
|
|
|
|
|
|
bool const isImplicit = (Flags & pkgCache::Flag::MultiArchImplicit) == pkgCache::Flag::MultiArchImplicit;
|
|
bool const isImplicit = (Flags & pkgCache::Flag::MultiArchImplicit) == pkgCache::Flag::MultiArchImplicit;
|
|
|
bool const isArchSpecific = (Flags & pkgCache::Flag::ArchSpecific) == pkgCache::Flag::ArchSpecific;
|
|
bool const isArchSpecific = (Flags & pkgCache::Flag::ArchSpecific) == pkgCache::Flag::ArchSpecific;
|
|
|
- pkgCache::PkgIterator const OwnerPkg = Ver.ParentPkg();
|
|
|
|
|
- for (pkgCache::PkgIterator Pkg = Grp.PackageList(); Pkg.end() == false; Pkg = Grp.NextPkg(Pkg))
|
|
|
|
|
|
|
+ pkgCache::PkgIterator OwnerPkg = Ver.ParentPkg();
|
|
|
|
|
+ Dynamic<pkgCache::PkgIterator> DynOwnerPkg(OwnerPkg);
|
|
|
|
|
+ pkgCache::PkgIterator Pkg;
|
|
|
|
|
+ Dynamic<pkgCache::PkgIterator> DynPkg(Pkg);
|
|
|
|
|
+ for (Pkg = Grp.PackageList(); Pkg.end() == false; Pkg = Grp.NextPkg(Pkg))
|
|
|
{
|
|
{
|
|
|
if (isImplicit && OwnerPkg == Pkg)
|
|
if (isImplicit && OwnerPkg == Pkg)
|
|
|
continue;
|
|
continue;
|