From d58c932dc6348daa777701828827944722b47868 Mon Sep 17 00:00:00 2001 From: obarun <eric@obarun.org> Date: Sun, 21 May 2023 20:47:01 +1100 Subject: [PATCH] return the actual flag instead of the binary form --- src/lib66/exec/ssexec_env.c | 4 +-- src/lib66/exec/ssexec_init.c | 6 ++-- src/lib66/exec/ssexec_reload.c | 12 ++++---- src/lib66/exec/ssexec_resolve.c | 4 +-- src/lib66/exec/ssexec_restart.c | 34 ++++++--------------- src/lib66/exec/ssexec_signal.c | 6 ++-- src/lib66/exec/ssexec_tree_signal.c | 2 +- src/lib66/info/info_graph_display_service.c | 8 ++--- src/lib66/parse/parse_frontend.c | 9 ++++-- src/lib66/parse/parse_service.c | 16 ++++------ src/lib66/service/service_graph_build.c | 2 +- src/lib66/service/service_is_g.c | 30 +++++++++--------- src/lib66/svc/svc_compute_ns.c | 8 ++--- 13 files changed, 63 insertions(+), 78 deletions(-) diff --git a/src/lib66/exec/ssexec_env.c b/src/lib66/exec/ssexec_env.c index cc937296..0c4a525f 100644 --- a/src/lib66/exec/ssexec_env.c +++ b/src/lib66/exec/ssexec_env.c @@ -303,8 +303,8 @@ int ssexec_env(int argc, char const *const *argv, ssexec_t *info) r = service_is_g(atree, sv, STATE_FLAGS_ISPARSED) ; if (r == -1) log_dieusys(LOG_EXIT_SYS, "get information of service: ", sv, " -- please a bug report") ; - else if (!r) { - log_warn(sv, " is not parsed -- try to parse it first") ; + else if (!r || r == STATE_FLAGS_FALSE) { + log_warn("service: ", sv, " is not parsed -- try to parse it first using '66 parse ", sv, "'") ; goto freed ; } diff --git a/src/lib66/exec/ssexec_init.c b/src/lib66/exec/ssexec_init.c index 238f7cec..12a935dc 100644 --- a/src/lib66/exec/ssexec_init.c +++ b/src/lib66/exec/ssexec_init.c @@ -87,7 +87,7 @@ static void doit(stralloc *sa, ssexec_t *info, uint8_t earlier) if (!state_read(&ste, &ares[aresid])) log_dieusys(LOG_EXIT_SYS, "read state file of service: ", sa->s + n) ; - if (service_is(&ste, STATE_FLAGS_ISENABLED)) { + if (service_is(&ste, STATE_FLAGS_ISENABLED) == STATE_FLAGS_TRUE) { list[nservice++] = idx ; visit[idx] = 1 ; } @@ -122,7 +122,7 @@ static void doit(stralloc *sa, ssexec_t *info, uint8_t earlier) if (!state_read(&ste, &ares[aresid])) log_dieusys(LOG_EXIT_SYS, "read state file of service: ", name) ; - if (service_is(&ste, STATE_FLAGS_ISENABLED)) { + if (service_is(&ste, STATE_FLAGS_ISENABLED) == STATE_FLAGS_TRUE) { list[nservice++] = l[pos] ; visit[l[pos]] = 1 ; } @@ -131,7 +131,7 @@ static void doit(stralloc *sa, ssexec_t *info, uint8_t earlier) } } - sanitize_init(list, nservice, &graph, ares, areslen, earlier ? STATE_FLAGS_ISEARLIER : STATE_FLAGS_UNKNOWN) ; + sanitize_init(list, nservice, &graph, ares, areslen) ; service_resolve_array_free(ares, areslen) ; graph_free_all(&graph) ; diff --git a/src/lib66/exec/ssexec_reload.c b/src/lib66/exec/ssexec_reload.c index 54f666fe..e7ad94fe 100644 --- a/src/lib66/exec/ssexec_reload.c +++ b/src/lib66/exec/ssexec_reload.c @@ -86,21 +86,21 @@ int ssexec_reload(int argc, char const *const *argv, ssexec_t *info) r = service_is_g(atree, argv[n], STATE_FLAGS_ISPARSED) ; if (r < 0) - log_dieusys(LOG_EXIT_SYS, "get information of service: ", argv[n], " -- please a bug report") ; + log_dieusys(LOG_EXIT_SYS, "get information of service: ", argv[n], " -- please make a bug report") ; - if (!r) { + if (!r || r == STATE_FLAGS_FALSE) { /** nothing to do */ - log_warn(argv[n], " is not parsed -- try to start it first") ; + log_warn(argv[n], " is not parsed -- try to start it first using '66 start ", argv[n], "'") ; return 0 ; } r = service_is_g(atree, argv[n], STATE_FLAGS_ISSUPERVISED) ; if (r < 0) - log_dieusys(LOG_EXIT_SYS, "get information of service: ", argv[n], " -- please a bug report") ; + log_dieusys(LOG_EXIT_SYS, "get information of service: ", argv[n], " -- please make a bug report") ; - if (!r) { + if (!r || r == STATE_FLAGS_FALSE) { /** nothing to do */ - log_warn(argv[n], " is not running -- try to start it first") ; + log_warn(argv[n], " is not running -- try to start it first using '66 start ", argv[n], "'") ; return 0 ; } } diff --git a/src/lib66/exec/ssexec_resolve.c b/src/lib66/exec/ssexec_resolve.c index e31855f0..9611b16c 100644 --- a/src/lib66/exec/ssexec_resolve.c +++ b/src/lib66/exec/ssexec_resolve.c @@ -263,8 +263,8 @@ int ssexec_resolve(int argc, char const *const *argv, ssexec_t *info) r = service_is_g(atree, svname, STATE_FLAGS_ISPARSED) ; if (r == -1) log_dieu(LOG_EXIT_SYS, "get information of service: ", svname, " -- please a bug report") ; - else if (!r) - log_die(LOG_EXIT_USER, svname, " is not parsed -- try to parse it first") ; + else if (!r || r == STATE_FLAGS_FALSE) + log_die(LOG_EXIT_USER, "service: ", svname, " is not parsed -- try to parse it first using '66 parse ", svname, "'") ; if (!resolve_read_g(wres, info->base.s, svname)) log_dieusys(LOG_EXIT_SYS, "read resolve file") ; diff --git a/src/lib66/exec/ssexec_restart.c b/src/lib66/exec/ssexec_restart.c index 604b3b55..b353bab2 100644 --- a/src/lib66/exec/ssexec_restart.c +++ b/src/lib66/exec/ssexec_restart.c @@ -40,7 +40,7 @@ int ssexec_restart(int argc, char const *const *argv, ssexec_t *info) unsigned int areslen = 0, m = 0 ; resolve_service_t ares[SS_MAX_SERVICE] ; - char atree[SS_MAX_TREENAME + 1] ; + ss_state_t sta = STATE_ZERO ; FLAGS_SET(flag, STATE_FLAGS_TOPROPAGATE|STATE_FLAGS_TORESTART|STATE_FLAGS_WANTUP) ; @@ -81,29 +81,6 @@ int ssexec_restart(int argc, char const *const *argv, ssexec_t *info) char const *nargv[argc] ; - for (; n < argc ; n++) { - - r = service_is_g(atree, argv[n], STATE_FLAGS_ISPARSED) ; - if (r < 0) - log_dieusys(LOG_EXIT_SYS, "get information of service: ", argv[n], " -- please a bug report") ; - - if (!r) { - /** nothing to do */ - log_warn(argv[n], " is not parsed -- try to start it first") ; - return 0 ; - } - - r = service_is_g(atree, argv[n], STATE_FLAGS_ISSUPERVISED) ; - if (r < 0) - log_dieusys(LOG_EXIT_SYS, "get information of service: ", argv[n], " -- please a bug report") ; - - if (!r) { - /** nothing to do */ - log_warn(argv[n], " is not running -- try to start it first") ; - return 0 ; - } - } - /** build the graph of the entire system */ graph_build_service(&graph, ares, &areslen, info, flag) ; @@ -116,6 +93,13 @@ int ssexec_restart(int argc, char const *const *argv, ssexec_t *info) if (aresid < 0) log_die(LOG_EXIT_USER, "service: ", *argv, " not available -- did you parsed it?") ; + if (!state_read(&sta, &ares[aresid])) + log_dieu(LOG_EXIT_SYS, "read state file of: ", argv[n]) ; + + if (service_is(&sta, STATE_FLAGS_ISSUPERVISED) == STATE_FLAGS_FALSE) + /** nothing to do */ + log_warn_return(LOG_EXIT_ZERO, "service: ", argv[n], " is not supervised -- try to start it first using '66 start ", argv[n], "'") ; + if (ares[aresid].type == TYPE_ONESHOT) { nargc++ ; nargv[m++] = ares[aresid].sa.s + ares[aresid].name ; @@ -143,11 +127,11 @@ int ssexec_restart(int argc, char const *const *argv, ssexec_t *info) r = svc_send_wait(argv, argc, sig, siglen, info) ; if (r) goto err ; + /** s6-supervise do not deal with oneshot service: * The previous send command will bring it down but * s6-supervise will not bring it up automatically. * Well, do it manually */ - if (nargc) { int verbo = VERBOSITY ; diff --git a/src/lib66/exec/ssexec_signal.c b/src/lib66/exec/ssexec_signal.c index 81d240d6..d07f07e6 100644 --- a/src/lib66/exec/ssexec_signal.c +++ b/src/lib66/exec/ssexec_signal.c @@ -84,12 +84,12 @@ static void pidservice_init_array(unsigned int *list, unsigned int listlen, pids if (ares[pids.aresid].type != TYPE_CLASSIC) { - ss_state_t ste = STATE_ZERO ; + ss_state_t sta = STATE_ZERO ; - if (!state_read(&ste, &ares[pids.aresid])) + if (!state_read(&sta, &ares[pids.aresid])) log_dieusys(LOG_EXIT_SYS, "read state file of: ", name) ; - if (ste.isup == STATE_FLAGS_TRUE) + if (service_is(&sta, STATE_FLAGS_ISUP) == STATE_FLAGS_TRUE) FLAGS_SET(pids.state, SVC_FLAGS_UP) ; else FLAGS_SET(pids.state, SVC_FLAGS_DOWN) ; diff --git a/src/lib66/exec/ssexec_tree_signal.c b/src/lib66/exec/ssexec_tree_signal.c index 072f8a90..9b778cbb 100644 --- a/src/lib66/exec/ssexec_tree_signal.c +++ b/src/lib66/exec/ssexec_tree_signal.c @@ -457,7 +457,7 @@ static int ssexec_callback(stralloc *sa, ssexec_t *info, unsigned int what) if (r < 0) log_dieusys(LOG_EXIT_SYS, "get information of service: ", name, " -- please a bug report") ; - if (r > 0) + if (r == STATE_FLAGS_TRUE) if (!sastr_add_string(sa, name)) log_dieu(LOG_EXIT_SYS, "add string") ; } diff --git a/src/lib66/info/info_graph_display_service.c b/src/lib66/info/info_graph_display_service.c index 6122322e..881fafaa 100644 --- a/src/lib66/info/info_graph_display_service.c +++ b/src/lib66/info/info_graph_display_service.c @@ -69,12 +69,12 @@ int info_graph_display_service(char const *name) } else { - if (!service_is(&sta, STATE_FLAGS_ISSUPERVISED)) { + if (service_is(&sta, STATE_FLAGS_ISSUPERVISED) == STATE_FLAGS_FALSE) { ppid = "unitialized" ; goto dis ; - } else if (!service_is(&sta, STATE_FLAGS_ISUP)) { + } else if (service_is(&sta, STATE_FLAGS_ISUP) == STATE_FLAGS_FALSE) { ppid = "down" ; pid_color = 1 ; @@ -97,8 +97,8 @@ int info_graph_display_service(char const *name) ppid, \ log_color->off, \ - "state=", service_is(&sta, STATE_FLAGS_ISENABLED) ? log_color->valid : log_color->warning, \ - service_is(&sta, STATE_FLAGS_ISENABLED) ? "Enabled" : "Disabled", \ + "state=", service_is(&sta, STATE_FLAGS_ISENABLED) == STATE_FLAGS_TRUE ? log_color->valid : log_color->warning, \ + service_is(&sta, STATE_FLAGS_ISENABLED) == STATE_FLAGS_TRUE ? "Enabled" : "Disabled", \ log_color->off, \ "type=", log_color->blue, get_key_by_enum(ENUM_TYPE,res.type), log_color->off, \ diff --git a/src/lib66/parse/parse_frontend.c b/src/lib66/parse/parse_frontend.c index 30576889..f0bf2243 100644 --- a/src/lib66/parse/parse_frontend.c +++ b/src/lib66/parse/parse_frontend.c @@ -141,8 +141,11 @@ int parse_frontend(char const *sv, resolve_service_t *ares, unsigned int *aresle if (isparsed == -1) log_dieusys(LOG_EXIT_SYS, "get information of service: ", svname, " -- please make a bug report") ; - if (isparsed && !force) - log_warn_return(2, "ignoring service: ", svname, " -- already parsed") ; + if (isparsed == STATE_FLAGS_TRUE) { + + if (!force) + log_warn_return(2, "ignoring service: ", svname, " -- already parsed") ; + } if (info->opt_tree) { @@ -237,7 +240,7 @@ int parse_frontend(char const *sv, resolve_service_t *ares, unsigned int *aresle } /** parse interdependences if the service was never parsed */ - if (!isparsed) { + if (isparsed == STATE_FLAGS_FALSE) { if (!parse_interdependences(svname, res.sa.s + res.dependencies.depends, res.dependencies.ndepends, ares, areslen, info, force, conf, forced_directory, main, inmodule)) log_dieu(LOG_EXIT_SYS, "parse dependencies of service: ", svname) ; diff --git a/src/lib66/parse/parse_service.c b/src/lib66/parse/parse_service.c index 4d2b1aa8..18536647 100644 --- a/src/lib66/parse/parse_service.c +++ b/src/lib66/parse/parse_service.c @@ -65,6 +65,7 @@ void parse_service(char const *sv, ssexec_t *info, uint8_t force, uint8_t conf) int r ; unsigned int areslen = 0, count = 0, pos = 0 ; resolve_service_t ares[SS_MAX_SERVICE] ; + ss_state_t sta = STATE_ZERO ; char main[strlen(sv) + 1] ; if (!ob_basename(main, sv)) @@ -85,24 +86,19 @@ void parse_service(char const *sv, ssexec_t *info, uint8_t force, uint8_t conf) sanitize_write(&ares[pos], force) ; - if (!service_resolve_write(&ares[pos])) - log_dieu(LOG_EXIT_SYS, "write resolve file of service: ", ares[pos].sa.s + ares[pos].name) ; - write_services(&ares[pos], ares[pos].sa.s + ares[pos].path.servicedir) ; - ss_state_t sta = STATE_ZERO ; - if (state_check(&ares[pos])) { if (!state_read(&sta, &ares[pos])) log_dieu(LOG_EXIT_SYS, "read state file of: ", ares[pos].sa.s + ares[pos].name) ; - } - FLAGS_SET(sta.toinit, STATE_FLAGS_TRUE) ; - FLAGS_SET(sta.isparsed, STATE_FLAGS_TRUE) ; - FLAGS_SET(sta.isearlier, ares[pos].earlier ? STATE_FLAGS_TRUE : STATE_FLAGS_FALSE) ; - FLAGS_SET(sta.isdownfile, ares[pos].execute.down ? STATE_FLAGS_TRUE : STATE_FLAGS_FALSE) ; + state_set_flag(&sta, STATE_FLAGS_TOINIT, STATE_FLAGS_TRUE) ; + state_set_flag(&sta, STATE_FLAGS_TOPARSE, STATE_FLAGS_FALSE) ; + state_set_flag(&sta, STATE_FLAGS_ISPARSED, STATE_FLAGS_TRUE) ; + state_set_flag(&sta, STATE_FLAGS_ISEARLIER, ares[pos].earlier ? STATE_FLAGS_TRUE : STATE_FLAGS_FALSE) ; + state_set_flag(&sta, STATE_FLAGS_ISDOWNFILE, ares[pos].execute.down ? STATE_FLAGS_TRUE : STATE_FLAGS_FALSE) ; if (!state_write(&sta, &ares[pos])) log_dieu(LOG_EXIT_SYS, "write state file of: ", ares[pos].sa.s + ares[pos].name) ; diff --git a/src/lib66/service/service_graph_build.c b/src/lib66/service/service_graph_build.c index 6a5fce7c..c593c6e2 100644 --- a/src/lib66/service/service_graph_build.c +++ b/src/lib66/service/service_graph_build.c @@ -51,7 +51,7 @@ static void issupervised(char *store, resolve_service_t *ares, unsigned int ares if (!state_read(&ste, &ares[aresid])) continue ; - if (service_is(&ste, STATE_FLAGS_ISSUPERVISED)) + if (service_is(&ste, STATE_FLAGS_ISSUPERVISED) == STATE_FLAGS_TRUE) auto_strings(store + strlen(store), name, " ") ; else continue ; diff --git a/src/lib66/service/service_is_g.c b/src/lib66/service/service_is_g.c index cf36bd69..9995570e 100644 --- a/src/lib66/service/service_is_g.c +++ b/src/lib66/service/service_is_g.c @@ -35,40 +35,42 @@ int service_is(ss_state_t *ste, uint32_t flag) switch (flag) { - case STATE_FLAGS_TOINIT : return FLAGS_ISSET(ste->toinit, STATE_FLAGS_TRUE) ? 1 : 0 ; + case STATE_FLAGS_TOINIT : return ste->toinit ; - case STATE_FLAGS_TORELOAD: return FLAGS_ISSET(ste->toreload, STATE_FLAGS_TRUE) ? 1 : 0 ; + case STATE_FLAGS_TORELOAD: return ste->toreload ; - case STATE_FLAGS_TORESTART : return FLAGS_ISSET(ste->torestart, STATE_FLAGS_TRUE) ? 1 : 0 ; + case STATE_FLAGS_TORESTART : return ste->torestart ; - case STATE_FLAGS_TOUNSUPERVISE : return FLAGS_ISSET(ste->tounsupervise, STATE_FLAGS_TRUE) ? 1 : 0 ; + case STATE_FLAGS_TOUNSUPERVISE : return ste->tounsupervise ; - case STATE_FLAGS_TOPARSE : return FLAGS_ISSET(ste->toparse, STATE_FLAGS_TRUE) ? 1 : 0 ; + case STATE_FLAGS_TOPARSE : return ste->toparse ; - case STATE_FLAGS_ISDOWNFILE : return FLAGS_ISSET(ste->isdownfile, STATE_FLAGS_TRUE) ? 1 : 0 ; + case STATE_FLAGS_TOSWITCH : return ste->toswitch ; - case STATE_FLAGS_ISEARLIER : return FLAGS_ISSET(ste->isearlier, STATE_FLAGS_TRUE) ? 1 : 0 ; + case STATE_FLAGS_ISDOWNFILE : return ste->isdownfile ; - case STATE_FLAGS_ISENABLED : return FLAGS_ISSET(ste->isenabled, STATE_FLAGS_TRUE) ? 1 : 0 ; + case STATE_FLAGS_ISEARLIER : return ste->isearlier ; - case STATE_FLAGS_ISPARSED : return FLAGS_ISSET(ste->isparsed, STATE_FLAGS_TRUE) ? 1 : 0 ; //always true framboise + case STATE_FLAGS_ISENABLED : return ste->isenabled ; - case STATE_FLAGS_ISSUPERVISED : return FLAGS_ISSET(ste->issupervised, STATE_FLAGS_TRUE) ? 1 : 0 ; + case STATE_FLAGS_ISPARSED : return ste->isparsed ; //always true framboise - case STATE_FLAGS_ISUP : return FLAGS_ISSET(ste->isup, STATE_FLAGS_TRUE) ? 1 : 0 ; + case STATE_FLAGS_ISSUPERVISED : return ste->issupervised ; + + case STATE_FLAGS_ISUP : return ste->isup ; default: break ; } - return 0 ; + return STATE_FLAGS_FALSE ; } /*@Return : * -1 system error * 0 check fail - * 1 check success */ + * STATE_FLAGS_TRUE/STATE_FLAGS_FALSE check success */ int service_is_g(char *atree, char const *name, uint32_t flag) { @@ -106,7 +108,7 @@ int service_is_g(char *atree, char const *name, uint32_t flag) goto freed ; } - if (strlen(res.sa.s + res.treename) > SS_MAX_TREENAME) { + if (strlen(res.sa.s + res.treename) >= SS_MAX_TREENAME) { errno = ENAMETOOLONG ; goto freed ; } diff --git a/src/lib66/svc/svc_compute_ns.c b/src/lib66/svc/svc_compute_ns.c index c429ce2f..3cb16c72 100644 --- a/src/lib66/svc/svc_compute_ns.c +++ b/src/lib66/svc/svc_compute_ns.c @@ -85,12 +85,12 @@ static void pidservice_init_array(unsigned int *list, unsigned int listlen, pids if (ares[pids.aresid].type != TYPE_CLASSIC) { - ss_state_t ste = STATE_ZERO ; + ss_state_t sta = STATE_ZERO ; - if (!state_read(&ste, &ares[pids.aresid])) + if (!state_read(&sta, &ares[pids.aresid])) log_dieusys(LOG_EXIT_SYS, "read state file of: ", name) ; - if (ste.isup == STATE_FLAGS_TRUE) + if (service_is(&sta, STATE_FLAGS_ISUP) == STATE_FLAGS_TRUE) FLAGS_SET(pids.state, SVC_FLAGS_UP) ; else FLAGS_SET(pids.state, SVC_FLAGS_DOWN) ; @@ -172,7 +172,7 @@ int svc_compute_ns(resolve_service_t *res, uint8_t what, ssexec_t *info, char co } if (!what) - sanitize_init(list, napid, &graph, ares, areslen, STATE_FLAGS_UNKNOWN) ; + sanitize_init(list, napid, &graph, ares, areslen) ; pidservice_t apids[napid] ; -- GitLab