From 1f88e1ff8a81c926b001104ffef29b09b6b0e883 Mon Sep 17 00:00:00 2001 From: Joachim Nilsson Date: Thu, 26 Nov 2015 20:37:02 +0100 Subject: [PATCH] Refactor svc_status() used by 'initctl show' Leverage new svc_t states in initctl status/show output. Also, ensure different svc_t types have correct start state. Signed-off-by: Joachim Nilsson --- conf.c | 1 + service.c | 1 + svc.c | 32 ++++++++++++++++++++++++++------ 3 files changed, 28 insertions(+), 6 deletions(-) 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 */