*
*/
-Id *
+Id
pool_addrelproviders(Pool *pool, Id d)
{
Reldep *rd = GETRELDEP(pool, d);
Id evr = rd->evr;
int flags = rd->flags;
Id pid, *pidp;
- Id p, *pp, *pp2, *pp3;
+ Id p, wp, *pp, *pp2, *pp3;
d = GETRELID(d);
queue_init_buffer(&plist, buf, sizeof(buf)/sizeof(*buf));
{
case REL_AND:
case REL_WITH:
- pp = pool_whatprovides(pool, name);
- pp2 = pool_whatprovides(pool, evr);
+ pp = pool->whatprovidesdata + pool_whatprovides(pool, name);
+ pp2 = pool->whatprovidesdata + pool_whatprovides(pool, evr);
while ((p = *pp++) != 0)
{
for (pp3 = pp2; *pp3;)
}
break;
case REL_OR:
- pp = pool_whatprovides(pool, name);
+ pp = pool->whatprovidesdata + pool_whatprovides(pool, name);
while ((p = *pp++) != 0)
queue_push(&plist, p);
- pp = pool_whatprovides(pool, evr);
+ pp = pool->whatprovidesdata + pool_whatprovides(pool, evr);
while ((p = *pp++) != 0)
queue_pushunique(&plist, p);
break;
case REL_NAMESPACE:
if (name == NAMESPACE_OTHERPROVIDERS)
{
- pp = pool_whatprovides(pool, evr);
- pool->whatprovides_rel[d] = pp - pool->whatprovidesdata;
- return pp;
+ wp = pool_whatprovides(pool, evr);
+ pool->whatprovides_rel[d] = wp;
+ return wp;
}
if (pool->nscallback)
{
{
queue_free(&plist);
pool->whatprovides_rel[d] = p;
- return pool->whatprovidesdata + p;
+ return p;
}
if (p == 1)
queue_push(&plist, SYSTEMSOLVABLE);
}
break;
}
- pp = pp2 = pool_whatprovides(pool, name);
+ wp = pool_whatprovides(pool, name);
+ pp = pool->whatprovidesdata + wp;
while ((p = *pp++) != 0)
{
Solvable *s = pool->solvables + p;
if (s->arch == evr)
queue_push(&plist, p);
else
- pp2 = 0;
+ wp = 0;
+ }
+ if (wp)
+ {
+ pool->whatprovides_rel[d] = wp;
+ return wp;
}
- if (pp2)
- return pp2;
break;
default:
break;
#endif
if (flags && flags < 8)
{
- pp = pool_whatprovides(pool, name);
+ pp = pool->whatprovidesdata + pool_whatprovides(pool, name);
while (ISRELDEP(name))
{
rd = GETRELDEP(pool, name);
pool->whatprovides_rel[d] = pool_queuetowhatprovides(pool, &plist);
queue_free(&plist);
- return pool->whatprovidesdata + pool->whatprovides_rel[d];
+ return pool->whatprovides_rel[d];
}
/*************************************************************************/
repo_search(s->repo, sp, SOLVABLE_DISKUSAGE, 0, 0, solver_fill_DU_cb, &cbd);
if (!cbd.hasdu && oldinstalled)
{
- Id op, *opp;
+ Id op, opp;
/* no du data available, ignore data of all installed solvables we obsolete */
if (!ignoredu.map)
map_init(&ignoredu, oldinstalled->end - oldinstalled->start);
static inline int providedbyinstalled(Pool *pool, unsigned char *map, Id dep)
{
- Id p, *pp;
+ Id p, pp;
int r = 0;
FOR_PROVIDES(p, pp, dep)
{
conp = s->repo->idarraydata + s->conflicts;
while ((con = *conp++) != 0)
{
- dp = pool_whatprovides(pool, con);
+ dp = pool->whatprovidesdata + pool_whatprovides(pool, con);
for (; *dp; dp++)
map[p] |= 2; /* XXX: self conflict ? */
}