commit:     4fd296d65c76ceb98f69ff392c2ae0f31bd18d54
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Tue Jun  1 19:38:52 2021 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Tue Jun  1 19:38:52 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=4fd296d6

libq/tree: fix empty cat_ctx and path when using binpkgs

- ensure cat_ctx is set for each pkg coming from Packages file
- set path in each tree match

Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>

 libq/tree.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/libq/tree.c b/libq/tree.c
index c00f251..358b1f2 100644
--- a/libq/tree.c
+++ b/libq/tree.c
@@ -1380,7 +1380,6 @@ tree_foreach_packages(tree_ctx *ctx, tree_pkg_cb 
callback, void *priv)
                                                 * generate a dummy cat */
                                                cat = tree_open_cat(ctx, ".");
                                        }
-                                       pkg.cat_ctx = cat;
                                        cat->pkg_ctxs = (tree_pkg_ctx **)atom;  
/* for name */
                                }
                                pkgnamelen = snprintf(pkgname, sizeof(pkgname),
@@ -1390,6 +1389,7 @@ tree_foreach_packages(tree_ctx *ctx, tree_pkg_cb 
callback, void *priv)
                                pkg.slot = meta.Q_SLOT == NULL ? (char *)"0" : 
meta.Q_SLOT;
                                pkg.repo = ctx->repo;
                                pkg.atom = atom;
+                               pkg.cat_ctx = cat;
                                pkg.fd = 0;  /* intentional, meta has already 
been read */
 
                                /* do call callback with pkg_atom (populate cat 
and pkg) */
@@ -1650,6 +1650,8 @@ tree_match_atom_packages_cb(tree_pkg_ctx *ctx, void *priv)
        n = xzalloc(sizeof(tree_match_ctx));
        n->free_atom = true;
        n->atom = atom_clone(a);
+       snprintf(n->path, sizeof(n->path), "%s/%s/%s.tbz2",
+                       (char *)ctx->cat_ctx->ctx->path, ctx->cat_ctx->name, 
ctx->name);
        if (rctx->flags & TREE_MATCH_METADATA) {
                n->meta = xmalloc(sizeof(*n->meta));
                /* for Packages, all pointers to meta here are to the in memory
@@ -1686,6 +1688,8 @@ tree_match_atom_binpkg_cb(tree_pkg_ctx *ctx, void *priv)
        n = xzalloc(sizeof(tree_match_ctx));
        n->free_atom = true;
        n->atom = atom_clone(a);
+       snprintf(n->path, sizeof(n->path), "%s/%s/%s.tbz2",
+                       (char *)ctx->cat_ctx->ctx->path, ctx->cat_ctx->name, 
ctx->name);
        if (rctx->flags & TREE_MATCH_METADATA)
                n->meta = tree_pkg_read(ctx);
 

Reply via email to