Skip to content
Snippets Groups Projects
Commit a2ce3efa authored by Eric Vidal's avatar Eric Vidal :speech_balloon:
Browse files

make it flexible to switch between dependencies and requiredby service

parent 4c858ed2
No related branches found
No related tags found
No related merge requests found
......@@ -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 ;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment