]> git.saurik.com Git - apt.git/commitdiff
apt-pkg/deb/deblistparser.cc: Fix bug in architecture wildcard support.
authorJulian Andres Klode <jak@debian.org>
Sat, 26 Jun 2010 21:01:49 +0000 (23:01 +0200)
committerJulian Andres Klode <jak@debian.org>
Sat, 26 Jun 2010 21:01:49 +0000 (23:01 +0200)
Previously, linux-any was always matched, because the code simply
appended linux- to the APT::Architecture value. Now, it does this
only if the APT::Architecture value does not contain "-".

apt-pkg/deb/deblistparser.cc

index ddbd0d31a61fc2c1504291c75015f36479096aa3..00016679aa4cc9423347b923552c5420b8acb58e 100644 (file)
@@ -473,6 +473,14 @@ const char *debListParser::ConvertRelation(const char *I,unsigned int &Op)
    return I;
 }
 
+/*
+ * CompleteArch:
+ *
+ * The complete architecture, consisting of <kernel>-<cpu>.
+ */
+static string CompleteArch(std::string& arch) {
+    return (arch.find("-") != string::npos) ? arch : "linux-" + arch;
+}
                                                                        /*}}}*/
 // ListParser::ParseDepends - Parse a dependency element               /*{{{*/
 // ---------------------------------------------------------------------
@@ -546,6 +554,7 @@ const char *debListParser::ParseDepends(const char *Start,const char *Stop,
    if (ParseArchFlags == true)
    {
       string arch = _config->Find("APT::Architecture");
+      string completeArch = CompleteArch(arch);
 
       // Parse an architecture
       if (I != Stop && *I == '[')
@@ -577,9 +586,7 @@ const char *debListParser::ParseDepends(const char *Start,const char *Stop,
               Found = true;
            } else {
               std::string wildcard = SubstVar(string(I, End), "any", "*");
-              if (fnmatch(wildcard.c_str(), arch.c_str(), 0) == 0)
-                 Found = true;
-              else if (fnmatch(wildcard.c_str(), ("linux-" + arch).c_str(), 0) == 0)
+              if (fnmatch(wildcard.c_str(), completeArch.c_str(), 0) == 0)
                  Found = true;
            }