From 369513a6091c09dc10f20db508f79a3999ae30e2 Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Mon, 27 May 2013 16:25:38 +0200 Subject: [PATCH] add pool_lookup_idarray for completeness --- src/libsolv.ver | 1 + src/pool.c | 10 ++++++++++ src/pool.h | 1 + src/repo.c | 14 ++++++++++++++ 4 files changed, 26 insertions(+) diff --git a/src/libsolv.ver b/src/libsolv.ver index f1fcbc8d..7982dbbe 100644 --- a/src/libsolv.ver +++ b/src/libsolv.ver @@ -80,6 +80,7 @@ SOLV_1.0 { pool_lookup_checksum; pool_lookup_deltalocation; pool_lookup_id; + pool_lookup_idarray; pool_lookup_num; pool_lookup_str; pool_lookup_void; diff --git a/src/pool.c b/src/pool.c index 5d3e61ad..eef7344f 100644 --- a/src/pool.c +++ b/src/pool.c @@ -2137,6 +2137,16 @@ pool_lookup_checksum(Pool *pool, Id entry, Id keyname, Id *typep) return solvable_lookup_checksum(pool->solvables + entry, keyname, typep); } +int +pool_lookup_idarray(Pool *pool, Id entry, Id keyname, Queue *q) +{ + if (entry == SOLVID_POS && pool->pos.repo) + return repo_lookup_idarray(pool->pos.repo, pool->pos.repodataid ? entry : pool->pos.solvid, keyname, q); + if (entry <= 0) + return 0; + return solvable_lookup_idarray(pool->solvables + entry, keyname, q); +} + const char * pool_lookup_deltalocation(Pool *pool, Id entry, unsigned int *medianrp) { diff --git a/src/pool.h b/src/pool.h index 7dcf9168..6ac552a3 100644 --- a/src/pool.h +++ b/src/pool.h @@ -343,6 +343,7 @@ Id pool_lookup_id(Pool *pool, Id entry, Id keyname); unsigned long long pool_lookup_num(Pool *pool, Id entry, Id keyname, unsigned long long notfound); int pool_lookup_void(Pool *pool, Id entry, Id keyname); const unsigned char *pool_lookup_bin_checksum(Pool *pool, Id entry, Id keyname, Id *typep); +int pool_lookup_idarray(Pool *pool, Id entry, Id keyname, Queue *q); const char *pool_lookup_checksum(Pool *pool, Id entry, Id keyname, Id *typep); const char *pool_lookup_deltalocation(Pool *pool, Id entry, unsigned int *medianrp); diff --git a/src/repo.c b/src/repo.c index abb2b3b3..3b8ef627 100644 --- a/src/repo.c +++ b/src/repo.c @@ -1249,6 +1249,7 @@ lookup_idarray_solvable(Repo *repo, Offset off, Queue *q) int repo_lookup_idarray(Repo *repo, Id entry, Id keyname, Queue *q) { + Pool *pool = repo->pool; Repodata *data; int i; if (entry >= 0) @@ -1273,6 +1274,19 @@ repo_lookup_idarray(Repo *repo, Id entry, Id keyname, Queue *q) return lookup_idarray_solvable(repo, repo->pool->solvables[entry].enhances, q); } } + else if (entry == SOLVID_POS && pool->pos.repo == repo && pool->pos.repodataid) + { + Repodata *data = pool->pos.repo->repodata + pool->pos.repodataid; + if (repodata_lookup_idarray(data, entry, keyname, q)) + { + if (data->localpool) + { + for (i = 0; i < q->count; i++) + q->elements[i] = repodata_globalize_id(data, q->elements[i], 1); + } + return 1; + } + } FOR_REPODATAS(repo, i, data) { if (entry != SOLVID_META && (entry < data->start || entry >= data->end)) -- 2.47.2