summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pkg.c7
-rw-r--r--pkg.h1
2 files changed, 4 insertions, 4 deletions
diff --git a/pkg.c b/pkg.c
index aaa80f4..52fa9ab 100644
--- a/pkg.c
+++ b/pkg.c
@@ -606,7 +606,6 @@ static void
recursive_fill_list (Package *pkg, GetListFunc func, GList **listp)
{
GList *tmp;
- static GList *chain = NULL;
/*
* This function should only be called to resolve Requires or
@@ -618,7 +617,7 @@ recursive_fill_list (Package *pkg, GetListFunc func, GList **listp)
* If the package is one of the parents, we can skip it. This allows
* circular requires loops to be broken.
*/
- if (g_list_find (chain, pkg) != NULL)
+ if (pkg->in_requires_chain)
{
debug_spew ("Package %s already in requires chain, skipping\n",
pkg->key);
@@ -626,7 +625,7 @@ recursive_fill_list (Package *pkg, GetListFunc func, GList **listp)
}
/* record this package in the dependency chain */
- chain = g_list_prepend (chain, pkg);
+ pkg->in_requires_chain = TRUE;
/* Start from the end of the required package list to maintain order since
* the recursive list is built by prepending. */
@@ -637,7 +636,7 @@ recursive_fill_list (Package *pkg, GetListFunc func, GList **listp)
*listp = g_list_prepend (*listp, pkg);
/* remove this package from the dependency chain now that we've unwound */
- chain = g_list_remove (chain, pkg);
+ pkg->in_requires_chain = FALSE;
}
/* merge the flags from the individual packages */
diff --git a/pkg.h b/pkg.h
index e12aab2..5ead2a6 100644
--- a/pkg.h
+++ b/pkg.h
@@ -80,6 +80,7 @@ struct _Package
int path_position; /* used to order packages by position in path of their .pc file, lower number means earlier in path */
int libs_num; /* Number of times the "Libs" header has been seen */
int libs_private_num; /* Number of times the "Libs.private" header has been seen */
+ gboolean in_requires_chain; /* package is in current Requires chain */
};
Package *get_package (const char *name);