diff --git a/src/include/66/parse.h b/src/include/66/parse.h index 5022e928d4d954e339f1517496214beeed4f09bd..4a780c58dc2f51068195e516b01506194571ea00 100644 --- a/src/include/66/parse.h +++ b/src/include/66/parse.h @@ -89,5 +89,6 @@ extern uint32_t compute_status(resolve_wrapper_t_ref wres, ssexec_t *info) ; extern uint32_t compute_scan_dir(resolve_wrapper_t_ref wres, ssexec_t *info) ; extern uint32_t compute_state_dir(resolve_wrapper_t_ref wres, ssexec_t *info, char const *folder) ; extern uint32_t compute_pipe_service(resolve_wrapper_t_ref wres, ssexec_t *info, char const *name) ; +extern uint32_t compute_log_dir(resolve_wrapper_t_ref wres, resolve_service_t *res) ; #endif diff --git a/src/lib66/parse/parse_append_logger.c b/src/lib66/parse/parse_append_logger.c index c44e34d5106d53cb03bab2b08dccb8d2ea24c531..78f2ed80fa30373da780873f61fd0d9855c55ccf 100644 --- a/src/lib66/parse/parse_append_logger.c +++ b/src/lib66/parse/parse_append_logger.c @@ -32,7 +32,7 @@ #define FAKELEN strlen(run) #endif -static uint32_t compute_log_dir(resolve_wrapper_t_ref wres, resolve_service_t *res) +uint32_t compute_log_dir(resolve_wrapper_t_ref wres, resolve_service_t *res) { log_flow() ; @@ -249,20 +249,10 @@ void parse_append_logger(struct resolve_hash_s **hres, resolve_service_t *res, s { log_flow() ; - char *name = res->sa.s + res->name ; + char *logname = res->sa.s + res->logger.name ; struct resolve_hash_s *hash ; resolve_service_t lres = RESOLVE_SERVICE_ZERO ; resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, res) ; - size_t namelen = strlen(name) ; - char logname[namelen + SS_LOG_SUFFIX_LEN + 1] ; - - auto_strings(logname, name, SS_LOG_SUFFIX) ; - - res->logger.name = resolve_add_string(wres, logname) ; - - res->logger.destination = compute_log_dir(wres, res) ; - - res->logger.execute.run.runas = res->logger.execute.run.runas ? resolve_add_string(wres, res->sa.s + res->logger.execute.run.runas) : resolve_add_string(wres, SS_LOGGER_RUNNER) ; hash = hash_search(hres, logname) ; if (hash == NULL && res->type == TYPE_CLASSIC) { @@ -270,14 +260,14 @@ void parse_append_logger(struct resolve_hash_s **hres, resolve_service_t *res, s if (res->dependencies.ndepends) { - char buf[strlen(res->sa.s + res->dependencies.depends) + 1 + strlen(res->sa.s + res->logger.name) + 1] ; - auto_strings(buf, res->sa.s + res->dependencies.depends, " ", res->sa.s + res->logger.name) ; + char buf[strlen(res->sa.s + res->dependencies.depends) + 1 + strlen(logname) + 1] ; + auto_strings(buf, res->sa.s + res->dependencies.depends, " ", logname) ; res->dependencies.depends = resolve_add_string(wres, buf) ; } else { - res->dependencies.depends = resolve_add_string(wres, res->sa.s + res->logger.name) ; + res->dependencies.depends = resolve_add_string(wres, logname) ; } res->dependencies.ndepends++ ; @@ -297,4 +287,4 @@ void parse_append_logger(struct resolve_hash_s **hres, resolve_service_t *res, s } free(wres) ; -} \ No newline at end of file +} diff --git a/src/lib66/parse/parse_compute_resolve.c b/src/lib66/parse/parse_compute_resolve.c index df7d1ee23c765888746dfe9b000b2ccd955f4597..054be2b416acb74b584da66daf12d41d20583c44 100644 --- a/src/lib66/parse/parse_compute_resolve.c +++ b/src/lib66/parse/parse_compute_resolve.c @@ -258,6 +258,21 @@ void parse_compute_resolve(resolve_service_t *res, ssexec_t *info) /* oneshotd */ res->live.oneshotddir = compute_pipe_service(wres, info, SS_ONESHOTD) ; + if (res->logger.want && res->type != TYPE_MODULE && !res->inns) { + + char *name = res->sa.s + res->name ; + size_t namelen = strlen(name) ; + char logname[namelen + SS_LOG_SUFFIX_LEN + 1] ; + + auto_strings(logname, name, SS_LOG_SUFFIX) ; + + res->logger.name = resolve_add_string(wres, logname) ; + + res->logger.destination = compute_log_dir(wres, res) ; + + res->logger.execute.run.runas = res->logger.execute.run.runas ? resolve_add_string(wres, res->sa.s + res->logger.execute.run.runas) : resolve_add_string(wres, SS_LOGGER_RUNNER) ; + } + if (res->type == TYPE_ONESHOT || res->type == TYPE_CLASSIC) { // {run,up}/{run,up}.user script diff --git a/src/lib66/parse/parse_rename_interdependences.c b/src/lib66/parse/parse_rename_interdependences.c index 56a09dc601167fe1f026efc479c75020c4da4809..f334a0bee5dd5fc99bae5410f5f98362e0ce998f 100644 --- a/src/lib66/parse/parse_rename_interdependences.c +++ b/src/lib66/parse/parse_rename_interdependences.c @@ -116,7 +116,7 @@ void parse_rename_interdependences(resolve_service_t *res, char const *prefix, s struct resolve_hash_s *c, *tmp ; stralloc sa = STRALLOC_ZERO ; - resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, res) ; + resolve_wrapper_t_ref wres = 0 ; HASH_ITER(hh, *hres, c, tmp) { @@ -129,9 +129,16 @@ void parse_rename_interdependences(resolve_service_t *res, char const *prefix, s size_t namelen = strlen(c->res.sa.s + c->res.name) ; char logname[namelen + SS_LOG_SUFFIX_LEN + 1] ; + wres = resolve_set_struct(DATA_SERVICE, &c->res) ; auto_strings(logname, c->res.sa.s + c->res.name, SS_LOG_SUFFIX) ; + c->res.logger.name = resolve_add_string(wres, logname) ; + + c->res.logger.destination = compute_log_dir(wres, res) ; + + c->res.logger.execute.run.runas = c->res.logger.execute.run.runas ? resolve_add_string(wres, c->res.sa.s + c->res.logger.execute.run.runas) : resolve_add_string(wres, SS_LOGGER_RUNNER) ; + parse_append_logger(hres, &c->res, info) ; if (c->res.type == TYPE_CLASSIC) { @@ -145,8 +152,11 @@ void parse_rename_interdependences(resolve_service_t *res, char const *prefix, s if (!sastr_add_string(&sa, c->res.sa.s + c->res.name)) log_die_nomem("stralloc") ; } + free(wres) ; } + wres = resolve_set_struct(DATA_SERVICE, res) ; + res->dependencies.contents = parse_compute_list(wres, &sa, &res->dependencies.ncontents, 0) ; stralloc_free(&sa) ;