From a2ce3efab253d2401bec487fd51f62a6db559f22 Mon Sep 17 00:00:00 2001 From: obarun <eric@obarun.org> Date: Sat, 11 Mar 2023 02:31:21 +1100 Subject: [PATCH] make it flexible to switch between dependencies and requiredby service --- src/lib66/parse/parse_dependencies.c | 44 ++++++++++------------------ 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/src/lib66/parse/parse_dependencies.c b/src/lib66/parse/parse_dependencies.c index 7fb5cbf1..a2424cf8 100644 --- a/src/lib66/parse/parse_dependencies.c +++ b/src/lib66/parse/parse_dependencies.c @@ -27,20 +27,22 @@ #include <66/ssexec.h> #include <66/utils.h> #include <66/constants.h> +#include <66/instance.h> -int parse_dependencies(resolve_service_t *res, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint8_t force, uint8_t conf, char const *forced_directory, char const *main) +int parse_dependencies(resolve_service_t *res, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint8_t force, uint8_t conf, char const *forced_directory, char const *main, uint8_t requiredby) { log_flow() ; + uint32_t deps = !requiredby ? res->dependencies.ndepends : res->dependencies.nrequiredby ; + uint32_t data = !requiredby ? res->dependencies.depends : res->dependencies.requiredby ; size_t pos = 0, len = 0 ; int r, e = 0 ; unsigned int residx = 0 ; stralloc sa = STRALLOC_ZERO ; - char *current = res->sa.s + res->name ; - if (res->dependencies.ndepends) { + if (deps) { - if (!sastr_clean_string(&sa, res->sa.s + res->dependencies.depends)) { + if (!sastr_clean_string(&sa, res->sa.s + data)) { log_warnu("clean the string") ; goto freed ; } @@ -54,49 +56,33 @@ int parse_dependencies(resolve_service_t *res, resolve_service_t *ares, unsigned for (; pos < len ; pos += strlen(t + pos) + 1) { sa.len = 0 ; - char name[strlen(t + pos) + 1] ; - char ainsta[strlen(t + pos) + 1] ; + char const *name = t + pos ; + char ainsta[strlen(name) + 1] ; int insta = -1 ; - log_trace("parse dependencies: ", t + pos, " of service: ", res->sa.s + res->name) ; + log_trace("parse ", !requiredby ? "dependencies " : "requiredby ", name, " of service: ", res->sa.s + res->name) ; - insta = instance_check(t + pos) ; + insta = instance_check(name) ; if (insta > 0) { - if (!instance_splitname(&sa, t + pos, insta, SS_INSTANCE_TEMPLATE)) - log_die(LOG_EXIT_SYS, "split instance service of: ", t + pos) ; - - auto_strings(name, sa.s) ; - sa.len = 0 ; - - if (!instance_splitname(&sa, t + pos, insta, SS_INSTANCE_NAME)) - log_die(LOG_EXIT_SYS, "split instance service of: ", t + pos) ; + if (!instance_splitname(&sa, name, insta, SS_INSTANCE_NAME)) + log_die(LOG_EXIT_SYS, "split instance service of: ", name) ; auto_strings(ainsta, sa.s) ; sa.len = 0 ; - - } else { - - auto_strings(name, t + pos) ; } if (!strcmp(main, name)) - log_die(LOG_EXIT_USER, "direct cyclic dependencies detected -- ", main, " depends on: ", current, " which depends on: ", main) ; + log_die(LOG_EXIT_USER, "direct cyclic dependencies detected -- ", main, " depends on: ", res->sa.s + res->name, " which depends on: ", main) ; r = service_frontend_path(&sa, name, getuid(), forced_directory) ; if (r < 1) { - log_warnu( "get frontend service file of: ", t + pos) ; + log_warnu( "get frontend service file of: ", name) ; goto freed ; } - if (insta > 0) { - sa.len-- ; - if (!stralloc_catb(&sa, ainsta, strlen(ainsta))) - log_die_nomem("stralloc") ; - } - if (!stralloc_0(&sa)) log_die_nomem("stralloc") ; @@ -105,7 +91,7 @@ int parse_dependencies(resolve_service_t *res, resolve_service_t *ares, unsigned } } else - log_trace("no dependencies found for: ", res->sa.s + res->name) ; + log_trace("no ", !requiredby ? "dependencies" : "requiredby", " found for: ", res->sa.s + res->name) ; e = 1 ; -- GitLab