Imported Upstream version 0.6.35
[platform/upstream/libsolv.git] / src / poolarch.c
index f01cab5..4a1fa50 100644 (file)
 #include "util.h"
 
 static const char *archpolicies[] = {
+#if defined(FEDORA) || defined(MAGEIA)
+  "x86_64",    "x86_64:athlon:i686:i586:i486:i386",
+#else
   "x86_64",    "x86_64:i686:i586:i486:i386",
+#endif
   "i686",      "i686:i586:i486:i386",
   "i586",      "i586:i486:i386",
   "i486",      "i486:i386",
-  "i386",      "i386",
   "s390x",     "s390x:s390",
-  "s390",      "s390",
-  "ia64",      "ia64:i686:i586:i486:i386",
   "ppc64",     "ppc64:ppc",
-  "ppc",       "ppc",
   "ppc64p7",   "ppc64p7:ppc64:ppc",
-  "aarch64",   "aarch64",
-  "armv7tnhl", "arvm7tnhl:armv7thl:armv7nhl:armv7hl",
-  "armv7thl",  "armv7thl:armv7hl",
-  "armv7nhl",  "armv7nhl:armv7hl",
-  "armv6hl",   "armv6hl",
+  "ia64",      "ia64:i686:i586:i486:i386",
+  "armv7hnl",  "armv7hnl:armv7hl:armv6hl",
   "armv7hl",   "armv7hl:armv6hl",
-  "armv7l",    "armv7l:armv6l:armv5tejl:armv5tel:armv5l:armv4tl:armv4l:armv3l",
-  "armv6l",    "armv6l:armv5tejl:armv5tel:armv5l:armv4tl:armv4l:armv3l",
-  "armv5tejl", "armv5tejl:armv5tel:armv5l:armv4tl:armv4l:armv3l",
-  "armv5tel",  "armv5tel:armv5l:armv4tl:armv4l:armv3l",
+  "armv7l",    "armv7l:armv6l:armv5tejl:armv5tel:armv5tl:armv5l:armv4tl:armv4l:armv3l",
+  "armv6l",    "armv6l:armv5tejl:armv5tel:armv5tl:armv5l:armv4tl:armv4l:armv3l",
+  "armv5tejl", "armv5tejl:armv5tel:armv5tl:armv5l:armv4tl:armv4l:armv3l",
+  "armv5tel",  "armv5tel:armv5tl:armv5l:armv4tl:armv4l:armv3l",
+  "armv5tl",   "armv5tl:armv5l:armv4tl:armv4l:armv3l",
   "armv5l",    "armv5l:armv4tl:armv4l:armv3l",
   "armv4tl",   "armv4tl:armv4l:armv3l",
   "armv4l",    "armv4l:armv3l",
-  "armv3l",    "armv3l",
-  "sh3",       "sh3",
-  "sh4",       "sh4",
   "sh4a",      "sh4a:sh4",
   "sparc64v",  "sparc64v:sparc64:sparcv9v:sparcv9:sparcv8:sparc",
   "sparc64",   "sparc64:sparcv9:sparcv8:sparc",
   "sparcv9v",  "sparcv9v:sparcv9:sparcv8:sparc",
   "sparcv9",   "sparcv9:sparcv8:sparc",
   "sparcv8",   "sparcv8:sparc",
-  "sparc",     "sparc",
+#if defined(FEDORA) || defined(MAGEIA)
+  "ia32e",     "ia32e:x86_64:athlon:i686:i586:i486:i386",
+  "athlon",    "athlon:i686:i586:i486:i386",
+  "amd64",     "amd64:x86_64:athlon:i686:i586:i486:i386",
+  "geode",     "geode:i586:i486:i386",
+  "ppc64iseries", "ppc64iseries:ppc64:ppc",
+  "ppc64pseries", "ppc64pseries:ppc64:ppc",
+#endif
   0
 };
 
@@ -64,15 +66,13 @@ pool_setarch(Pool *pool, const char *arch)
   if (arch)
     {
       int i;
-
       /* convert arch to known policy */
       for (i = 0; archpolicies[i]; i += 2)
        if (!strcmp(archpolicies[i], arch))
-         break;
-      if (archpolicies[i])
-       arch = archpolicies[i + 1];
-      else
-       arch = "";
+         {
+           arch = archpolicies[i + 1];
+           break;
+         }
     }
   pool_setarchpolicy(pool, arch);
 }
@@ -104,6 +104,9 @@ pool_setarchpolicy(Pool *pool, const char *arch)
     }
   id = pool->noarchid;
   lastarch = id + 255;
+  /* note that we overallocate one element to be compatible with
+   * old versions that accessed id2arch[lastarch].
+   * id2arch[lastarch] will always be zero */
   id2arch = solv_calloc(lastarch + 1, sizeof(Id));
   id2arch[id] = 1;     /* the "noarch" class */
 
@@ -114,7 +117,7 @@ pool_setarchpolicy(Pool *pool, const char *arch)
       if (l)
        {
          id = pool_strn2id(pool, arch, l, 1);
-         if (id > lastarch)
+         if (id >= lastarch)
            {
              id2arch = solv_realloc2(id2arch, (id + 255 + 1), sizeof(Id));
              memset(id2arch + lastarch + 1, 0, (id + 255 - lastarch) * sizeof(Id));
@@ -143,7 +146,7 @@ pool_arch2color_slow(Pool *pool, Id arch)
   const char *s;
   unsigned char color;
 
-  if (arch > pool->lastarch)
+  if ((unsigned int)arch >= (unsigned int)pool->lastarch)
     return ARCHCOLOR_ALL;
   if (!pool->id2color)
     pool->id2color = solv_calloc(pool->lastarch + 1, 1);