diff --git a/src/lib66/exec/ssexec_env.c b/src/lib66/exec/ssexec_env.c index cc9372966b0220f174c7f32262640706adb3566c..0c4a525f8feafd13098e562d906861db435ab480 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 238f7cec72f977fd7c384850c6b6efdca5621742..12a935dc85ba78d570d4a1475c100a29857bd861 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 54f666feb8ceabc798b55fe3f02fcdd0ac9815e6..e7ad94fe6cd6def7ee8eb0dc10f534f1e963d19f 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 e31855f0ebde8038f7171539ee0859e3490f188c..9611b16cc4e16be56e870669c447e09c7578538b 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 604b3b555e5c5110a3da7f80610b610182233d0f..b353bab2a4d6b288dad734f60ce893d676f14621 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 81d240d6a83132e23935a2d31b3980b611c55b70..d07f07e6ab5f3b8c6c6c71b89a090be72f7c764b 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 072f8a9065a8ffff8b1cd8947cb4aef832757979..9b778cbbe76a0927c929164fb7f6da6477b52662 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 6122322e9d6f991e1aebe52e6dd20cbbb39d8652..881fafaa8241a1c68578fa5d0df74599151b831d 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 30576889f3511ab678b3b9fc47617423fa457ff3..f0bf2243a825237dda5adbe74052dc8a9f58d348 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 4d2b1aa8b14b9dbf392932603d86882fac9ca739..18536647b5a2391f890b9cf7e49280187794d35c 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 6a5fce7c64487c7c2b00d78d4d7fe9a270b770a8..c593c6e2bc66c7b171a55ecc6b6e668b29f42eae 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 cf36bd692e59d05a88b97f3508034934b3178330..9995570ea0363e418ea8a5b0ed64a434528594a2 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 c429ce2ff9d2c8e6f5559dde52c92481ca58a5a3..3cb16c721fd9e1a9dc48946b3e944ac8272428ce 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] ;