commit: f2c8978599e4d0d42ec684d7263f53baf1db053b
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Thu Jan 29 16:47:22 2026 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Thu Jan 29 16:47:22 2026 +0000
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=f2c89785
libq/dep: fix some allocation/free stupidities
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>
libq/dep.c | 32 ++++++++++++--------------------
qdepends.c | 2 +-
2 files changed, 13 insertions(+), 21 deletions(-)
diff --git a/libq/dep.c b/libq/dep.c
index 2df3ec53..91cb4929 100644
--- a/libq/dep.c
+++ b/libq/dep.c
@@ -58,19 +58,6 @@ struct dep_node_ {
bool atom_resolved:1;
};
-static void dep_burn_node
-(
- dep_node_t *node
-)
-{
- if (node == NULL)
- return;
-
- if (node->atom)
- atom_implode(node->atom);
- free(node);
-}
-
dep_node_t *dep_grow_tree
(
const char *depend
@@ -208,7 +195,7 @@ dep_node_t *dep_grow_tree
if (ret->parent == NULL)
{
warnf("Internal error, missing node for level %d", level);
- dep_burn_node(ret);
+ dep_burn_tree(ret);
ret = NULL;
goto dep_grow_tree_fail;
}
@@ -251,7 +238,7 @@ dep_node_t *dep_grow_tree
if (ret->parent == NULL)
{
warnf("Internal error, missing node for level %d", level);
- dep_burn_node(ret);
+ dep_burn_tree(ret);
ret = NULL;
goto dep_grow_tree_fail;
}
@@ -318,7 +305,7 @@ dep_node_t *dep_grow_tree
if (ret->parent == NULL)
{
warnf("Internal error, missing node for level %d", level);
- dep_burn_node(ret);
+ dep_burn_tree(ret);
ret = NULL;
goto dep_grow_tree_fail;
}
@@ -344,7 +331,7 @@ dep_node_t *dep_grow_tree
if (ret->parent == NULL)
{
warnf("Internal error, missing node for level %d", level);
- dep_burn_node(ret);
+ dep_burn_tree(ret);
ret = NULL;
goto dep_grow_tree_fail;
}
@@ -370,13 +357,14 @@ dep_node_t *dep_grow_tree
}
#endif
- ret = array_get(res, 0); /* pseudo top-level again */
+ ret = array_remove(res, 0); /* pseudo top-level again */
dep_grow_tree_fail:
- array_deepfree(tokens, (array_free_cb *)dep_burn_node);
+ array_deepfree(tokens, (array_free_cb *)dep_burn_tree);
array_deepfree(res, (array_free_cb *)array_free);
if (ret != NULL &&
+ ret->members != NULL &&
array_cnt(ret->members) == 0)
ret->type = DEP_NULL;
@@ -524,7 +512,11 @@ void dep_burn_tree
if (root->members != NULL)
array_deepfree(root->members, (array_free_cb *)dep_burn_tree);
- dep_burn_node(root);
+
+ if (root->atom)
+ atom_implode(root->atom);
+
+ free(root);
}
/* eliminate all DEP_USE nodes in the dep tree that do not match the set
diff --git a/qdepends.c b/qdepends.c
index 64467dfd..c4a5387f 100644
--- a/qdepends.c
+++ b/qdepends.c
@@ -294,7 +294,7 @@ qdepends_results_cb(tree_pkg_ctx *pkg_ctx, void *priv)
}
}
- array_deepfree(deps, (array_free_cb *)atom_implode);
+ array_free(deps);
dep_burn_tree(dep_tree);
}
if (verbose && ret == 1)