commit: 64628c5c37601544f85785a3b8bb343f495200d8
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Mon May 6 18:01:46 2019 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Mon May 6 18:01:46 2019 +0000
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=64628c5c
libq/vdb: add switch to vdb_get_atom to make it cheap/expensive
while at it, ensure repeated calls get the atom for "free"
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>
libq/vdb.c | 28 +++++++++++++++++++---------
libq/vdb.h | 2 +-
2 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/libq/vdb.c b/libq/vdb.c
index 5dc5e79..810a84c 100644
--- a/libq/vdb.c
+++ b/libq/vdb.c
@@ -414,17 +414,27 @@ next_entry:
}
depend_atom *
-vdb_get_atom(vdb_pkg_ctx *pkg_ctx)
+vdb_get_atom(vdb_pkg_ctx *pkg_ctx, bool complete)
{
- pkg_ctx->atom = atom_explode(pkg_ctx->name);
- if (pkg_ctx->atom == NULL)
- return NULL;
- pkg_ctx->atom->CATEGORY = (char *)pkg_ctx->cat_ctx->name;
+ if (pkg_ctx->atom == NULL) {
+ pkg_ctx->atom = atom_explode(pkg_ctx->name);
+ if (pkg_ctx->atom == NULL)
+ return NULL;
+ pkg_ctx->atom->CATEGORY = (char *)pkg_ctx->cat_ctx->name;
+ }
- vdb_pkg_eat(pkg_ctx, "SLOT", &pkg_ctx->slot, &pkg_ctx->slot_len);
- pkg_ctx->atom->SLOT = pkg_ctx->slot;
- vdb_pkg_eat(pkg_ctx, "repository", &pkg_ctx->repo, &pkg_ctx->repo_len);
- pkg_ctx->atom->REPO = pkg_ctx->repo;
+ if (complete) {
+ if (pkg_ctx->atom->SLOT == NULL) {
+ vdb_pkg_eat(pkg_ctx, "SLOT",
+ &pkg_ctx->slot, &pkg_ctx->slot_len);
+ pkg_ctx->atom->SLOT = pkg_ctx->slot;
+ }
+ if (pkg_ctx->atom->REPO == NULL) {
+ vdb_pkg_eat(pkg_ctx, "repository",
+ &pkg_ctx->repo, &pkg_ctx->repo_len);
+ pkg_ctx->atom->REPO = pkg_ctx->repo;
+ }
+ }
return pkg_ctx->atom;
}
diff --git a/libq/vdb.h b/libq/vdb.h
index 2954bef..28ca040 100644
--- a/libq/vdb.h
+++ b/libq/vdb.h
@@ -91,6 +91,6 @@ int vdb_foreach_pkg_sorted(const char *sroot, const char
*svdb,
vdb_pkg_cb callback, void *priv);
struct dirent *vdb_get_next_dir(DIR *dir);
set *get_vdb_atoms(const char *sroot, const char *svdb, int fullcpv);
-depend_atom *vdb_get_atom(vdb_pkg_ctx *pkg_ctx);
+depend_atom *vdb_get_atom(vdb_pkg_ctx *pkg_ctx, bool complete);
#endif