X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/b07aeb1a6e24825e534167a737043441e871de9f..6586d1dbdbbd19b53ce6f348ea3643f42da354eb:/apt-pkg/versionmatch.cc diff --git a/apt-pkg/versionmatch.cc b/apt-pkg/versionmatch.cc index 86c1b7d4a..2376ca8fd 100644 --- a/apt-pkg/versionmatch.cc +++ b/apt-pkg/versionmatch.cc @@ -164,25 +164,37 @@ pkgCache::VerIterator pkgVersionMatch::Find(pkgCache::PkgIterator Pkg) pkgCache::VerIterator Ver = Pkg.VersionList(); for (; Ver.end() == false; ++Ver) { - if (Type == Version) - { - if (MatchVer(Ver.VerStr(),VerStr,VerPrefixMatch) == true) - return Ver; - if (ExpressionMatches(VerStr, Ver.VerStr()) == true) - return Ver; - continue; - } - - for (pkgCache::VerFileIterator VF = Ver.FileList(); VF.end() == false; ++VF) - if (FileMatch(VF.File()) == true) - return Ver; + if (VersionMatches(Ver)) + return Ver; } - + // This will be Ended by now. return Ver; } /*}}}*/ +// VersionMatch::Find - Locate the best match for the select type /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool pkgVersionMatch::VersionMatches(pkgCache::VerIterator Ver) +{ + if (Type == Version) + { + if (MatchVer(Ver.VerStr(),VerStr,VerPrefixMatch) == true) + return true; + if (ExpressionMatches(VerStr, Ver.VerStr()) == true) + return true; + return false; + } + + for (pkgCache::VerFileIterator VF = Ver.FileList(); VF.end() == false; ++VF) + if (FileMatch(VF.File()) == true) + return true; + + return false; +} + /*}}}*/ + #ifndef FNM_CASEFOLD #define FNM_CASEFOLD 0 #endif @@ -269,12 +281,9 @@ bool pkgVersionMatch::FileMatch(pkgCache::PkgFileIterator File) if (OrSite.empty() == false) { if (File.Site() == NULL) return false; - } else // so we are talking about file:// or status file - { - pkgCache::RlsFileIterator const RlsFile = File.ReleaseFile(); - if (strcmp(File.Site(),"") == 0 && RlsFile->Archive != 0 && strcmp(RlsFile.Archive(),"now") == 0) // skip the status file - return false; } + else if (File->Release == 0)// only 'bad' files like dpkg.status file has no release file + return false; return (ExpressionMatches(OrSite, File.Site())); /* both strings match */ }