1 |
commit: 64628c5c37601544f85785a3b8bb343f495200d8 |
2 |
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org> |
3 |
AuthorDate: Mon May 6 18:01:46 2019 +0000 |
4 |
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon May 6 18:01:46 2019 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=64628c5c |
7 |
|
8 |
libq/vdb: add switch to vdb_get_atom to make it cheap/expensive |
9 |
|
10 |
while at it, ensure repeated calls get the atom for "free" |
11 |
|
12 |
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org> |
13 |
|
14 |
libq/vdb.c | 28 +++++++++++++++++++--------- |
15 |
libq/vdb.h | 2 +- |
16 |
2 files changed, 20 insertions(+), 10 deletions(-) |
17 |
|
18 |
diff --git a/libq/vdb.c b/libq/vdb.c |
19 |
index 5dc5e79..810a84c 100644 |
20 |
--- a/libq/vdb.c |
21 |
+++ b/libq/vdb.c |
22 |
@@ -414,17 +414,27 @@ next_entry: |
23 |
} |
24 |
|
25 |
depend_atom * |
26 |
-vdb_get_atom(vdb_pkg_ctx *pkg_ctx) |
27 |
+vdb_get_atom(vdb_pkg_ctx *pkg_ctx, bool complete) |
28 |
{ |
29 |
- pkg_ctx->atom = atom_explode(pkg_ctx->name); |
30 |
- if (pkg_ctx->atom == NULL) |
31 |
- return NULL; |
32 |
- pkg_ctx->atom->CATEGORY = (char *)pkg_ctx->cat_ctx->name; |
33 |
+ if (pkg_ctx->atom == NULL) { |
34 |
+ pkg_ctx->atom = atom_explode(pkg_ctx->name); |
35 |
+ if (pkg_ctx->atom == NULL) |
36 |
+ return NULL; |
37 |
+ pkg_ctx->atom->CATEGORY = (char *)pkg_ctx->cat_ctx->name; |
38 |
+ } |
39 |
|
40 |
- vdb_pkg_eat(pkg_ctx, "SLOT", &pkg_ctx->slot, &pkg_ctx->slot_len); |
41 |
- pkg_ctx->atom->SLOT = pkg_ctx->slot; |
42 |
- vdb_pkg_eat(pkg_ctx, "repository", &pkg_ctx->repo, &pkg_ctx->repo_len); |
43 |
- pkg_ctx->atom->REPO = pkg_ctx->repo; |
44 |
+ if (complete) { |
45 |
+ if (pkg_ctx->atom->SLOT == NULL) { |
46 |
+ vdb_pkg_eat(pkg_ctx, "SLOT", |
47 |
+ &pkg_ctx->slot, &pkg_ctx->slot_len); |
48 |
+ pkg_ctx->atom->SLOT = pkg_ctx->slot; |
49 |
+ } |
50 |
+ if (pkg_ctx->atom->REPO == NULL) { |
51 |
+ vdb_pkg_eat(pkg_ctx, "repository", |
52 |
+ &pkg_ctx->repo, &pkg_ctx->repo_len); |
53 |
+ pkg_ctx->atom->REPO = pkg_ctx->repo; |
54 |
+ } |
55 |
+ } |
56 |
|
57 |
return pkg_ctx->atom; |
58 |
} |
59 |
|
60 |
diff --git a/libq/vdb.h b/libq/vdb.h |
61 |
index 2954bef..28ca040 100644 |
62 |
--- a/libq/vdb.h |
63 |
+++ b/libq/vdb.h |
64 |
@@ -91,6 +91,6 @@ int vdb_foreach_pkg_sorted(const char *sroot, const char *svdb, |
65 |
vdb_pkg_cb callback, void *priv); |
66 |
struct dirent *vdb_get_next_dir(DIR *dir); |
67 |
set *get_vdb_atoms(const char *sroot, const char *svdb, int fullcpv); |
68 |
-depend_atom *vdb_get_atom(vdb_pkg_ctx *pkg_ctx); |
69 |
+depend_atom *vdb_get_atom(vdb_pkg_ctx *pkg_ctx, bool complete); |
70 |
|
71 |
#endif |