]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/policy.cc
TagFile: Fix off-by-one errors in comment stripping
[apt.git] / apt-pkg / policy.cc
index 2bdd96d8c85ec552e113f019116abebb811b5a81..3dd6ddac4798621e9194f86ca30fb771336284cb 100644 (file)
@@ -180,14 +180,13 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name,
       Name.erase(found);
    }
 
-   // Allow pinning by wildcards
-   // TODO: Maybe we should always prefer specific pins over non-
-   // specific ones.
-   if (Name[0] == '/' || Name.find_first_of("*[?") != string::npos)
+   // Allow pinning by wildcards - beware of package names looking like wildcards!
+   // TODO: Maybe we should always prefer specific pins over non-specific ones.
+   if ((Name[0] == '/' && Name[Name.length() - 1] == '/') || Name.find_first_of("*[?") != string::npos)
    {
       pkgVersionMatch match(Data, Type);
       for (pkgCache::GrpIterator G = Cache->GrpBegin(); G.end() != true; ++G)
-        if (match.ExpressionMatches(Name, G.Name()))
+        if (Name != G.Name() && match.ExpressionMatches(Name, G.Name()))
         {
            if (Arch.empty() == false)
               CreatePin(Type, string(G.Name()).append(":").append(Arch), Data, Priority);
@@ -307,11 +306,11 @@ APT_PURE signed short pkgPolicy::GetPriority(pkgCache::PkgFileIterator const &Fi
 bool ReadPinDir(pkgPolicy &Plcy,string Dir)
 {
    if (Dir.empty() == true)
-      Dir = _config->FindDir("Dir::Etc::PreferencesParts");
+      Dir = _config->FindDir("Dir::Etc::PreferencesParts", "/dev/null");
 
    if (DirectoryExists(Dir) == false)
    {
-      if (Dir != "/dev/null")
+      if (APT::String::Endswith(Dir, "/dev/null") == false)
         _error->WarningE("DirectoryExists",_("Unable to read %s"),Dir.c_str());
       return true;
    }