From 6ae17bd0efb5b52d2f51b989e14d20291c806aad Mon Sep 17 00:00:00 2001 From: Ariadne Conill Date: Sun, 26 Jun 2022 06:05:40 +0000 Subject: [PATCH] pkg: split pkgconf_pkg_traverse into a serial-modifying version --- libpkgconf/pkg.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/libpkgconf/pkg.c b/libpkgconf/pkg.c index d7b6a63..443b59f 100644 --- a/libpkgconf/pkg.c +++ b/libpkgconf/pkg.c @@ -37,6 +37,14 @@ #define PKG_CONFIG_EXT ".pc" +static unsigned int +pkgconf_pkg_traverse_main(pkgconf_client_t *client, + pkgconf_pkg_t *root, + pkgconf_pkg_traverse_func_t func, + void *data, + int maxdepth, + unsigned int skip_flags); + static inline bool str_has_suffix(const char *str, const char *suffix) { @@ -1478,7 +1486,7 @@ pkgconf_pkg_walk_list(pkgconf_client_t *client, pkgconf_audit_log_dependency(client, pkgdep, depnode); pkgdep->serial = client->serial; - eflags |= pkgconf_pkg_traverse(client, pkgdep, func, data, depth - 1, skip_flags); + eflags |= pkgconf_pkg_traverse_main(client, pkgdep, func, data, depth - 1, skip_flags); pkgconf_pkg_unref(client, pkgdep); } @@ -1548,8 +1556,8 @@ pkgconf_pkg_walk_conflicts_list(pkgconf_client_t *client, * :return: ``PKGCONF_PKG_ERRF_OK`` on success, else an error code. * :rtype: unsigned int */ -unsigned int -pkgconf_pkg_traverse(pkgconf_client_t *client, +static unsigned int +pkgconf_pkg_traverse_main(pkgconf_client_t *client, pkgconf_pkg_t *root, pkgconf_pkg_traverse_func_t func, void *data, @@ -1561,9 +1569,7 @@ pkgconf_pkg_traverse(pkgconf_client_t *client, if (maxdepth == 0) return eflags; - ++client->serial; - - PKGCONF_TRACE(client, "%s: level %d", root->id, maxdepth); + PKGCONF_TRACE(client, "%s: level %d, serial %lu", root->id, maxdepth, client->serial); if ((root->flags & PKGCONF_PKG_PROPF_VIRTUAL) != PKGCONF_PKG_PROPF_VIRTUAL || (client->flags & PKGCONF_PKG_PKGF_SKIP_ROOT_VIRTUAL) != PKGCONF_PKG_PKGF_SKIP_ROOT_VIRTUAL) { @@ -1599,6 +1605,19 @@ pkgconf_pkg_traverse(pkgconf_client_t *client, return eflags; } +unsigned int +pkgconf_pkg_traverse(pkgconf_client_t *client, + pkgconf_pkg_t *root, + pkgconf_pkg_traverse_func_t func, + void *data, + int maxdepth, + unsigned int skip_flags) +{ + client->serial++; + + return pkgconf_pkg_traverse_main(client, root, func, data, maxdepth, skip_flags); +} + static void pkgconf_pkg_cflags_collect(pkgconf_client_t *client, pkgconf_pkg_t *pkg, void *data) {