From 9a88f7da453eadc72d8f333700dbd80777feecd1 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Sun, 25 Feb 2018 14:33:19 +0100 Subject: Initial commit Signed-off-by: David Oberhollenzer --- initd/svclist.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 initd/svclist.c (limited to 'initd/svclist.c') diff --git a/initd/svclist.c b/initd/svclist.c new file mode 100644 index 0000000..590091e --- /dev/null +++ b/initd/svclist.c @@ -0,0 +1,43 @@ +#include "init.h" + +static service_t *running = NULL; /* currently supervised services */ +static int singleshot = 0; /* active singleshot services */ + +bool svclist_have_singleshot(void) +{ + return singleshot > 0; +} + +void svclist_add(service_t *svc) +{ + svc->next = running; + running = svc; + + if (svc->type == SVC_ONCE) + singleshot += 1; +} + +service_t *svclist_remove(pid_t pid) +{ + service_t *prev = NULL, *svc = running; + + while (svc != NULL) { + if (svc->pid == pid) { + if (prev != NULL) { + prev->next = svc->next; + } else { + running = svc->next; + } + svc->next = NULL; + + if (svc->type == SVC_ONCE) + singleshot -= 1; + break; + } + + prev = svc; + svc = svc->next; + } + + return svc; +} -- cgit v1.2.3