]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Make the arch score unsigned int
authorMichael Schroeder <mls@suse.de>
Wed, 25 Jul 2018 10:03:34 +0000 (12:03 +0200)
committerMichael Schroeder <mls@suse.de>
Wed, 25 Jul 2018 10:03:34 +0000 (12:03 +0200)
src/cleandeps.c
src/policy.c
src/poolarch.h
src/rules.c

index 52f3f4980d2deb74e500fc1d3e8c0b89c16b6774..1da28f6e1395520869314cfa146278b0cf38d5e8 100644 (file)
@@ -1122,22 +1122,22 @@ solver_createcleandepsmap(Solver *solv, Map *cleandepsmap, int unneeded)
 #endif
       if (s->repo == installed && pool->implicitobsoleteusescolors)
        {
-         Id a, bestarch = 0;
+         unsigned int a, bestscore = 0;
          FOR_PROVIDES(p, pp, s->name)
            {
              Solvable *ps = pool->solvables + p;
              if (ps->name != s->name || ps->repo == installed)
                continue;
              a = pool_arch2score(pool, ps->arch);
-             if (a && a != 1 && (!bestarch || a < bestarch))
-               bestarch = a;
+             if (a && a != 1 && (!bestscore || a < bestscore))
+               bestscore = a;
            }
-         if (bestarch && pool_arch2score(pool, s->arch) != bestarch)
+         if (bestscore && pool_arch2score(pool, s->arch) != bestscore)
            {
              FOR_PROVIDES(p, pp, s->name)
                {
                  Solvable *ps = pool->solvables + p;
-                 if (ps->repo == installed && ps->name == s->name && ps->evr == s->evr && ps->arch != s->arch && pool_arch2score(pool, ps->arch) == bestarch)
+                 if (ps->repo == installed && ps->name == s->name && ps->evr == s->evr && ps->arch != s->arch && pool_arch2score(pool, ps->arch) == bestscore)
                    if (!MAPTST(&im, p))
                      {
 #ifdef CLEANDEPSDEBUG
index e10c4c43cd760293a3959659c000574e3d870a94..a38dea05a0ff54656e3cd2a60ce22ab5391cbc23 100644 (file)
@@ -56,11 +56,11 @@ prune_to_best_version_sortcmp(const void *ap, const void *bp, void *dp)
     }
   if (sa->arch != sb->arch)
     {
-      int aa, ab;
+      unsigned int aa, ab;
       aa = pool_arch2score(pool, sa->arch);
       ab = pool_arch2score(pool, sb->arch);
       if (aa != ab && aa > 1 && ab > 1)
-       return aa - ab;         /* lowest score first */
+       return aa < ab ? -1 : 1;        /* lowest score first */
     }
 
   /* the same name, bring installed solvables to the front */
index 13d236d38eb4ae6f80a1024faf9ffc1221d1acdd..787883b05d3c53d45a165f69aedb7d4470c153e0 100644 (file)
@@ -40,8 +40,8 @@ static inline int pool_colormatch(Pool *pool, Solvable *s1, Solvable *s2)
   return 0;
 }
 
-static inline Id pool_arch2score(const Pool *pool, Id arch) {
-  return (unsigned int)arch < (unsigned int)pool->lastarch ? pool->id2arch[arch] : 0;
+static inline unsigned int pool_arch2score(const Pool *pool, Id arch) {
+  return (unsigned int)arch < (unsigned int)pool->lastarch ? (unsigned int)pool->id2arch[arch] : 0;
 }
 
 #ifdef __cplusplus
index bae91150dec72d2c77e97d773cb1e26714940010..22a61763941931d967575ac5afd3d9d41ae4030b 100644 (file)
@@ -1033,7 +1033,7 @@ solver_addpkgrulesforsolvable(Solver *solv, Solvable *s, Map *m)
 
       if (m && pool->implicitobsoleteusescolors && pool_arch2score(pool, s->arch) > 1)
        {
-         int pa, a = pool_arch2score(pool, s->arch);
+         unsigned int pa, a = pool_arch2score(pool, s->arch);
          /* check lock-step candidates */
          FOR_PROVIDES(p, pp, s->name)
            {
@@ -1532,7 +1532,8 @@ solver_addinfarchrules(Solver *solv, Map *addedmap)
   Pool *pool = solv->pool;
   Repo *installed = pool->installed;
   int first, i, j;
-  Id p, pp, a, aa, bestarch;
+  Id p, pp, aa;
+  unsigned int a, bestscore;
   Solvable *s, *ps, *bests;
   Queue badq, allowedarchs;
   Queue lsq;
@@ -1547,7 +1548,7 @@ solver_addinfarchrules(Solver *solv, Map *addedmap)
        continue;
       s = pool->solvables + i;
       first = i;
-      bestarch = 0;
+      bestscore = 0;
       bests = 0;
       queue_empty(&allowedarchs);
       FOR_PROVIDES(p, pp, s->name)
@@ -1567,9 +1568,9 @@ solver_addinfarchrules(Solver *solv, Map *addedmap)
              queue_pushunique(&allowedarchs, ps->arch);        /* also ok to keep this architecture */
              continue;         /* but ignore installed solvables when calculating the best arch */
            }
-         if (a && a != 1 && (!bestarch || a < bestarch))
+         if (a && a != 1 && (!bestscore || a < bestscore))
            {
-             bestarch = a;
+             bestscore = a;
              bests = ps;
            }
        }
@@ -1580,7 +1581,7 @@ solver_addinfarchrules(Solver *solv, Map *addedmap)
       if (allowedarchs.count == 1 && bests && allowedarchs.elements[0] == bests->arch)
        allowedarchs.count--;   /* installed arch is best */
 
-      if (allowedarchs.count && pool->implicitobsoleteusescolors && installed && bestarch)
+      if (allowedarchs.count && pool->implicitobsoleteusescolors && installed && bestscore)
        {
          /* need an extra pass for lockstep checking: we only allow to keep an inferior arch
           * if the corresponding installed package is not lock-stepped */
@@ -1599,17 +1600,17 @@ solver_addinfarchrules(Solver *solv, Map *addedmap)
                  queue_pushunique(&allowedarchs, ps->arch);    /* strange arch, allow */
                  continue;
                }
-             if (a == 1 || ((a ^ bestarch) & 0xffff0000) == 0)
+             if (a == 1 || ((a ^ bestscore) & 0xffff0000) == 0)
                continue;
              /* have installed package with inferior arch, check if lock-stepped */
              FOR_PROVIDES(p2, pp2, s->name)
                {
                  Solvable *s2 = pool->solvables + p2;
-                 Id a2;
+                 unsigned int a2;
                  if (p2 == p || s2->name != s->name || s2->evr != pool->solvables[p].evr || s2->arch == pool->solvables[p].arch)
                    continue;
                  a2 = pool_arch2score(pool, s2->arch);
-                 if (a2 && (a2 == 1 || ((a2 ^ bestarch) & 0xffff0000) == 0))
+                 if (a2 && (a2 == 1 || ((a2 ^ bestscore) & 0xffff0000) == 0))
                    break;
                }
              if (!p2)
@@ -1625,7 +1626,7 @@ solver_addinfarchrules(Solver *solv, Map *addedmap)
          if (ps->name != s->name || !MAPTST(addedmap, p))
            continue;
          a = pool_arch2score(pool, ps->arch);
-         if (a != 1 && bestarch && ((a ^ bestarch) & 0xffff0000) != 0)
+         if (a != 1 && bestscore && ((a ^ bestscore) & 0xffff0000) != 0)
            {
              if (installed && ps->repo == installed)
                {
@@ -1635,11 +1636,12 @@ solver_addinfarchrules(Solver *solv, Map *addedmap)
                }
              for (j = 0; j < allowedarchs.count; j++)
                {
+                 unsigned int aas;
                  aa = allowedarchs.elements[j];
                  if (ps->arch == aa)
                    break;
-                 aa = pool_arch2score(pool, aa);
-                 if (aa && ((a ^ aa) & 0xffff0000) == 0)
+                 aas = pool_arch2score(pool, aa);
+                 if (aas && ((a ^ aas) & 0xffff0000) == 0)
                    break;      /* compatible */
                }
              if (j == allowedarchs.count)
@@ -1651,7 +1653,7 @@ solver_addinfarchrules(Solver *solv, Map *addedmap)
       for (j = 0; j < badq.count; j++)
        {
          p = badq.elements[j];
-         /* lock-step */
+         /* special lock-step handling */
          if (pool->implicitobsoleteusescolors)
            {
              Id p2;
@@ -1663,7 +1665,7 @@ solver_addinfarchrules(Solver *solv, Map *addedmap)
                  if (p2 == p || s2->name != s->name || s2->evr != pool->solvables[p].evr || s2->arch == pool->solvables[p].arch)
                    continue;
                  a = pool_arch2score(pool, s2->arch);
-                 if (a && (a == 1 || ((a ^ bestarch) & 0xffff000) == 0))
+                 if (a && (a == 1 || ((a ^ bestscore) & 0xffff000) == 0))
                    {
                      queue_push(&lsq, p2);
                      if (installed && s2->repo == installed)