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 @@ ...@@ -25,6 +25,7 @@
#include <66/state.h> #include <66/state.h>
#include <66/graph.h> #include <66/graph.h>
#include <66/config.h> #include <66/config.h>
#include <66/enum.h>
static void parse_it(char const *name, ssexec_t *info) static void parse_it(char const *name, ssexec_t *info)
{ {
...@@ -43,11 +44,26 @@ 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 ; 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) int ssexec_enable(int argc, char const *const *argv, ssexec_t *info)
{ {
log_flow() ; log_flow() ;
uint32_t flag = 0 ; uint32_t flag = 0, *indexes = { 0 }, lindex = 0 ;
uint8_t start = 0, propagate = 1 ; uint8_t start = 0, propagate = 1 ;
int n = 0, e = 1 ; int n = 0, e = 1 ;
size_t pos = 0 ; size_t pos = 0 ;
...@@ -117,13 +133,31 @@ int ssexec_enable(int argc, char const *const *argv, ssexec_t *info) ...@@ -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) ; 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) ; 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])) if (!stack_add_g(&stk, argv[n]))
log_dieu(LOG_EXIT_SYS, "add string") ; 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) ; service_resolve_array_free(ares, areslen) ;
graph_free_all(&graph) ; graph_free_all(&graph) ;
...@@ -156,7 +190,5 @@ int ssexec_enable(int argc, char const *const *argv, ssexec_t *info) ...@@ -156,7 +190,5 @@ int ssexec_enable(int argc, char const *const *argv, ssexec_t *info)
info->usage = usage ; info->usage = usage ;
} }
return e ; return e ;
} }
...@@ -126,7 +126,5 @@ void service_enable_disable(graph_t *g, unsigned int idx, resolve_service_t *are ...@@ -126,7 +126,5 @@ void service_enable_disable(graph_t *g, unsigned int idx, resolve_service_t *are
} }
visit[idx] = VISIT_GRAY ; 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 ...@@ -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)) 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) ; 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) ; 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 ...@@ -22,11 +22,9 @@ void tree_service_add(char const *base, char const *treename, char const *servic
{ {
log_flow() ; log_flow() ;
int r ;
size_t len = strlen(service) ; size_t len = strlen(service) ;
resolve_tree_t tres = RESOLVE_TREE_ZERO ; resolve_tree_t tres = RESOLVE_TREE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ; 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) ; _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 ...@@ -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))) 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") ; 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)) if (!stack_add_g(&stk, service))
log_dieusys(LOG_EXIT_SYS, "add service: ", service, " to tree: ", treename) ; log_dieusys(LOG_EXIT_SYS, "add service: ", service, " to tree: ", treename) ;
tres.ncontents++ ;
}
if (!stack_close(&stk)) if (!stack_close(&stk))
log_dieusys(LOG_EXIT_SYS, "close stack") ; log_dieusys(LOG_EXIT_SYS, "close stack") ;
...@@ -54,21 +48,18 @@ void tree_service_add(char const *base, char const *treename, char const *servic ...@@ -54,21 +48,18 @@ void tree_service_add(char const *base, char const *treename, char const *servic
if (!stack_add_g(&stk, service)) if (!stack_add_g(&stk, service))
log_dieu(LOG_EXIT_SYS, "add string to stack") ; log_dieu(LOG_EXIT_SYS, "add string to stack") ;
tres.ncontents++ ;
if (!stack_close(&stk)) if (!stack_close(&stk))
log_dieusys(LOG_EXIT_SYS, "close stack") ; log_dieusys(LOG_EXIT_SYS, "close stack") ;
} }
tres.ncontents = stack_count_element(&stk) ;
if (!stack_convert_tostring(&stk)) if (!stack_convert_tostring(&stk))
log_dieu(LOG_EXIT_SYS, "convert stack to string") ; log_dieu(LOG_EXIT_SYS, "convert stack to string") ;
if (!resolve_modify_field(wres, E_RESOLVE_TREE_CONTENTS, stk.s)) if (!resolve_modify_field(wres, E_RESOLVE_TREE_CONTENTS, stk.s))
log_dieusys(LOG_EXIT_SYS, "modify resolve file of: ", treename) ; 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) ; resolve_free(wres) ;
} }
...@@ -26,8 +26,6 @@ void tree_service_remove(char const *base, char const *treename, char const *ser ...@@ -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) ; resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ;
char *str = 0 ; char *str = 0 ;
log_trace("modify field contents of resolve tree file: ", treename) ;
if (resolve_read_g(wres, base, treename) <= 0) if (resolve_read_g(wres, base, treename) <= 0)
log_dieusys(LOG_EXIT_SYS, "read resolve file of tree: ", treename) ; 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 ...@@ -49,15 +47,17 @@ void tree_service_remove(char const *base, char const *treename, char const *ser
str = stk.s ; 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)) if (!resolve_modify_field(wres, E_RESOLVE_TREE_CONTENTS, str))
log_dieusys(LOG_EXIT_SYS, "modify resolve file of: ", treename) ; 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) ; resolve_free(wres) ;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment