diff --git a/conf.c b/conf.c index 9b2a3101..547a672f 100644 --- a/conf.c +++ b/conf.c @@ -145,6 +145,7 @@ void conf_parse_events(svc_t *svc, char *events) return; } + svc->state = SVC_CONDHALT_STATE; strlcpy(svc->events, ptr, sizeof(svc->events)); } diff --git a/service.c b/service.c index 74d77b74..c6507710 100644 --- a/service.c +++ b/service.c @@ -804,6 +804,7 @@ int service_register(int type, char *line, time_t mtime, char *username) if (svc_is_inetd(svc)) { char *iface, *name = service; + svc->state = SVC_WAITING_STATE; if (svc->inetd.cmd && plugin) name = plugin->name; diff --git a/svc.c b/svc.c index 5b4ae777..5c0130d8 100644 --- a/svc.c +++ b/svc.c @@ -379,16 +379,36 @@ int svc_clean_bootstrap(svc_t *svc) char *svc_status(svc_t *svc) { - if (svc->pid) - return "running"; - if (!svc_in_runlevel(svc, runlevel)) - return "halted"; + return "stopped"; - if (svc_is_inetd(svc)) + switch (svc->state) { + case SVC_WAITING_STATE: return "waiting"; - return "stopped"; + case SVC_PAUSED_STATE: + return "paused"; + + case SVC_CONDHALT_STATE: + return "nocond"; + + case SVC_RESTART_STATE: + return "restart"; + + case SVC_RELOAD_STATE: + return "reload"; + + case SVC_RUNNING_STATE: + if (svc->pid) + return "running"; + /* Fall through */ + + case SVC_HALTED_STATE: + default: + break; + } + + return "halted"; } /* Same base service, return unique ID */