/*
+ * Copyright (c) 2007, Novell Inc.
+ *
+ * This program is licensed under the BSD license, read LICENSE.BSD
+ * for further information
+ */
+
+/*
* pool.c
*
* The pool contains information about solvables
"solvable:name",
"solvable:arch",
"solvable:evr",
+ "solvable:vendor",
"solvable:provides",
"solvable:obsoletes",
"solvable:conflicts",
// pre-alloc space for a Solvable
pool->solvables = (Solvable *)xcalloc(2, sizeof(Solvable));
pool->nsolvables = 2;
+ queue_init(&pool->vendormap);
s = pool->solvables + SYSTEMSOLVABLE;
s->name = SYSTEM_SYSTEM;
s->arch = ARCH_NOARCH;
pool_free(Pool *pool)
{
int i;
- Source *source;
pool_freewhatprovides(pool);
pool_freeidhashes(pool);
- for (i = 0; i < pool->nsources; i++)
- {
- source = pool->sources[i];
- xfree(source->idarraydata);
- xfree(source->rpmdbid);
- xfree(source);
- }
+ pool_freeallrepos(pool, 1);
+ xfree(pool->id2arch);
xfree(pool->solvables);
- xfree(pool->sources);
xfree(pool->stringspace);
xfree(pool->strings);
xfree(pool->rels);
+ queue_free(&pool->vendormap);
+ for (i = 0; i < DEP2STRBUF; i++)
+ xfree(pool->dep2strbuf[i]);
xfree(pool);
}
pool_prepare(Pool *pool)
{
int i, num, np, extra;
- unsigned int n;
Offset off;
Solvable *s;
Id id;
- Offset *idp;
+ Offset *idp, n;
Offset *whatprovides;
Id *whatprovidesdata, *d;
continue;
if (!pool_installable(pool, s))
continue;
- pp = s->source->idarraydata + s->provides;
+ pp = s->repo->idarraydata + s->provides;
while ((id = *pp++) != ID_NULL)
{
if (ISRELDEP(id))
continue;
/* for all provides of this solvable */
- pp = s->source->idarraydata + s->provides;
+ pp = s->repo->idarraydata + s->provides;
while ((id = *pp++) != 0)
{
if (ISRELDEP(id))
Id p, *pp, *pp2, *pp3;
d = GETRELID(pool, d);
- queueinit_buffer(&plist, buf, sizeof(buf)/sizeof(*buf));
+ queue_init_buffer(&plist, buf, sizeof(buf)/sizeof(*buf));
switch (flags)
{
case REL_AND:
for (pp3 = pp2; *pp3;)
if (*pp3++ == p)
{
- queuepush(&plist, p);
+ queue_push(&plist, p);
break;
}
}
case REL_OR:
pp = GET_PROVIDESP(name, p);
while ((p = *pp++) != 0)
- queuepush(&plist, p);
+ queue_push(&plist, p);
pp = GET_PROVIDESP(evr, p);
while ((p = *pp++) != 0)
- queuepushunique(&plist, p);
+ queue_pushunique(&plist, p);
break;
case REL_NAMESPACE:
if (pool->nscallback)
p = pool->nscallback(pool, pool->nscallbackdata, name, evr);
if (p > 1)
{
- queuefree(&plist);
+ queue_free(&plist);
pool->whatprovides[d] = p;
return pool->whatprovidesdata + p;
}
if (p == 1)
- queuepush(&plist, SYSTEMSOLVABLE);
+ queue_push(&plist, SYSTEMSOLVABLE);
}
break;
default:
printf("addrelproviders: checking package %s\n", id2str(pool, pool->p[p].name));
#endif
/* solvable p provides name in some rels */
- pidp = pool->solvables[p].source->idarraydata + pool->solvables[p].provides;
+ pidp = pool->solvables[p].repo->idarraydata + pool->solvables[p].provides;
while ((pid = *pidp++) != 0)
{
int pflags;
}
if (!pid)
continue; /* no rel match */
- queuepush(&plist, p);
+ queue_push(&plist, p);
}
/* make our system solvable provide all unknown rpmlib() stuff */
if (plist.count == 0 && !strncmp(id2str(pool, name), "rpmlib(", 7))
- queuepush(&plist, SYSTEMSOLVABLE);
+ queue_push(&plist, SYSTEMSOLVABLE);
}
/* add providers to whatprovides */
#if 0
if (pool->verbose) printf("addrelproviders: adding %d packages to %d\n", plist.count, d);
#endif
pool->whatprovides[d] = pool_queuetowhatprovides(pool, &plist);
- queuefree(&plist);
+ queue_free(&plist);
return pool->whatprovidesdata + pool->whatprovides[d];
}