From: Michael Schroeder Date: Wed, 25 Jul 2018 10:03:34 +0000 (+0200) Subject: Make the arch score unsigned int X-Git-Tag: 0.6.35~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e02692e25e105660cbbf0c2c78e29a41bb14e31b;p=thirdparty%2Flibsolv.git Make the arch score unsigned int --- diff --git a/src/cleandeps.c b/src/cleandeps.c index 52f3f498..1da28f6e 100644 --- a/src/cleandeps.c +++ b/src/cleandeps.c @@ -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 diff --git a/src/policy.c b/src/policy.c index e10c4c43..a38dea05 100644 --- a/src/policy.c +++ b/src/policy.c @@ -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 */ diff --git a/src/poolarch.h b/src/poolarch.h index 13d236d3..787883b0 100644 --- a/src/poolarch.h +++ b/src/poolarch.h @@ -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 diff --git a/src/rules.c b/src/rules.c index bae91150..22a61763 100644 --- a/src/rules.c +++ b/src/rules.c @@ -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)