From 6302579f2242830d2ab88930194d978707c174a9 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Sun, 16 Aug 2020 23:01:25 -0400 Subject: Add drop command --- daemon.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'daemon.c') diff --git a/daemon.c b/daemon.c index 0e15c12..969675f 100644 --- a/daemon.c +++ b/daemon.c @@ -126,6 +126,7 @@ static void parseControl(char *command) { return; } + bool drop = false; Action *fn = NULL; int signal = 0; if (!strcmp(action, "start")) { @@ -136,6 +137,8 @@ static void parseControl(char *command) { fn = serviceRestart; } else if (!strcmp(action, "status")) { fn = serviceStatus; + } else if (!strcmp(action, "drop")) { + drop = true; } else { for (int i = 1; i < NSIG; ++i) { if (strcasecmp(action, sys_signame[i])) continue; @@ -143,7 +146,7 @@ static void parseControl(char *command) { break; } } - if (!fn && !signal) { + if (!drop && !fn && !signal) { syslog(LOG_NOTICE, "unknown action or signal %s", action); return; } @@ -151,10 +154,12 @@ static void parseControl(char *command) { while (command) { bool found = false; char *pattern = strsep(&command, WS); - for (size_t i = 0; i < services.len; ++i) { + for (size_t i = services.len - 1; i < services.len; --i) { struct Service *service = &services.ptr[i]; if (fnmatch(pattern, service->name, 0)) continue; - if (signal) { + if (drop) { + serviceDrop(i); + } else if (signal) { serviceSignal(service, signal); } else { fn(service); -- cgit 1.4.1