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

respect tree and handle logger at enable time

parent 39255381
No related branches found
No related tags found
No related merge requests found
......@@ -25,6 +25,7 @@
#include <66/state.h>
#include <66/graph.h>
#include <66/config.h>
#include <66/enum.h>
static void parse_it(char const *name, ssexec_t *info)
{
......@@ -43,11 +44,26 @@ static void parse_it(char const *name, ssexec_t *info)
PROG = prog ;
}
static void service_resolve_array_write(char const *base, resolve_service_t *ares, uint32_t *indexes, uint32_t lindex)
{
log_flow() ;
uint32_t pos = 0 ;
for (; pos < lindex ; ++pos) {
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &ares[indexes[pos]]) ;
if (!resolve_write_g(wres, base, ares[indexes[pos]].sa.s + ares[indexes[pos]].name))
log_dieu(LOG_EXIT_SYS, "write resolve file of: ", ares[indexes[pos]].sa.s + ares[indexes[pos]].name) ;
}
}
int ssexec_enable(int argc, char const *const *argv, ssexec_t *info)
{
log_flow() ;
uint32_t flag = 0 ;
uint32_t flag = 0, *indexes = { 0 }, lindex = 0 ;
uint8_t start = 0, propagate = 1 ;
int n = 0, e = 1 ;
size_t pos = 0 ;
......@@ -117,13 +133,31 @@ int ssexec_enable(int argc, char const *const *argv, ssexec_t *info)
service_enable_disable(&graph, aresid, ares, areslen, 1, visit, propagate) ;
if (info->opt_tree)
if (info->opt_tree) {
service_switch_tree(&ares[aresid], info->base.s, info->treename.s) ;
indexes[lindex++] = aresid ;
if (ares[aresid].logger.want && ares[aresid].type == TYPE_CLASSIC) {
int logid = service_resolve_array_search(ares, areslen, ares[aresid].sa.s + ares[aresid].logger.name) ;
if (logid < 0)
log_die(LOG_EXIT_USER, "service: ", ares[aresid].sa.s + ares[aresid].logger.name, " not available -- please make a bug report") ;
service_switch_tree(&ares[logid], info->base.s, info->treename.s) ;
indexes[lindex++] = logid ;
}
}
if (!stack_add_g(&stk, argv[n]))
log_dieu(LOG_EXIT_SYS, "add string") ;
log_info("Enabled successfully service: ", ares[aresid].sa.s + ares[aresid].name) ;
}
service_resolve_array_write(info->base.s, ares, indexes, lindex) ;
service_resolve_array_free(ares, areslen) ;
graph_free_all(&graph) ;
......@@ -156,7 +190,5 @@ int ssexec_enable(int argc, char const *const *argv, ssexec_t *info)
info->usage = usage ;
}
return e ;
}
......@@ -126,7 +126,5 @@ void service_enable_disable(graph_t *g, unsigned int idx, resolve_service_t *are
}
visit[idx] = VISIT_GRAY ;
log_info(!action ? "Disabled" : "Enabled"," successfully service: ", res->sa.s + res->name) ;
}
}
......@@ -33,8 +33,5 @@ void service_switch_tree(resolve_service_t *res, char const *base, char const *t
if (!service_resolve_modify_field(res, E_RESOLVE_SERVICE_TREENAME, totreename))
log_dieu(LOG_EXIT_SYS, "modify resolve file of: ", res->sa.s + res->name) ;
if (!resolve_write_g(wres, base, res->sa.s + res->name))
log_dieu(LOG_EXIT_SYS, "write resolve file of: ", res->sa.s + res->name) ;
free(wres) ;
}
\ No newline at end of file
}
......@@ -22,11 +22,9 @@ void tree_service_add(char const *base, char const *treename, char const *servic
{
log_flow() ;
int r ;
size_t len = strlen(service) ;
resolve_tree_t tres = RESOLVE_TREE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ;
stack_ref pstk = 0 ;
_init_stack_(stk, SS_MAX_SERVICE * SS_MAX_SERVICE_NAME + 1 + len + 1) ;
......@@ -38,14 +36,10 @@ void tree_service_add(char const *base, char const *treename, char const *servic
if (!stack_convert_string(&stk, tres.sa.s + tres.contents, strlen(tres.sa.s + tres.contents)))
log_dieusys(LOG_EXIT_SYS, "convert string to stack") ;
if (stack_retrieve_element(&stk, service) < 0) {
if (stack_retrieve_element(&stk, service) < 0)
if (!stack_add_g(&stk, service))
log_dieusys(LOG_EXIT_SYS, "add service: ", service, " to tree: ", treename) ;
tres.ncontents++ ;
}
if (!stack_close(&stk))
log_dieusys(LOG_EXIT_SYS, "close stack") ;
......@@ -54,21 +48,18 @@ void tree_service_add(char const *base, char const *treename, char const *servic
if (!stack_add_g(&stk, service))
log_dieu(LOG_EXIT_SYS, "add string to stack") ;
tres.ncontents++ ;
if (!stack_close(&stk))
log_dieusys(LOG_EXIT_SYS, "close stack") ;
}
tres.ncontents = stack_count_element(&stk) ;
if (!stack_convert_tostring(&stk))
log_dieu(LOG_EXIT_SYS, "convert stack to string") ;
if (!resolve_modify_field(wres, E_RESOLVE_TREE_CONTENTS, stk.s))
log_dieusys(LOG_EXIT_SYS, "modify resolve file of: ", treename) ;
if (!resolve_write_g(wres, base, treename))
log_dieusys(LOG_EXIT_SYS, "write resolve file of tree: ", treename) ;
resolve_free(wres) ;
}
......@@ -26,8 +26,6 @@ void tree_service_remove(char const *base, char const *treename, char const *ser
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ;
char *str = 0 ;
log_trace("modify field contents of resolve tree file: ", treename) ;
if (resolve_read_g(wres, base, treename) <= 0)
log_dieusys(LOG_EXIT_SYS, "read resolve file of tree: ", treename) ;
......@@ -49,15 +47,17 @@ void tree_service_remove(char const *base, char const *treename, char const *ser
str = stk.s ;
} else str = "" ;
tres.ncontents = stack_count_element(&stk) ;
} else {
tres.ncontents = 0 ;
str = "" ;
}
if (!resolve_modify_field(wres, E_RESOLVE_TREE_CONTENTS, str))
log_dieusys(LOG_EXIT_SYS, "modify resolve file of: ", treename) ;
tres.ncontents-- ;
if (!resolve_write_g(wres, base, treename))
log_dieusys(LOG_EXIT_SYS, "write resolve file of tree: ", treename) ;
}
resolve_free(wres) ;
......
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