summary refs log tree commit diff
path: root/daemon.c
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-08-14 17:44:27 -0400
committerJune McEnroe <june@causal.agency>2020-08-14 17:44:27 -0400
commit04ca84acdabc55ce20cb03b5c4ca703ab0c14b4d (patch)
treed56a4f1a7e3881d2dcd6fe55a556a7237560b62d /daemon.c
parentImplement serviceStart (diff)
downloadcatsit-04ca84acdabc55ce20cb03b5c4ca703ab0c14b4d.tar.gz
catsit-04ca84acdabc55ce20cb03b5c4ca703ab0c14b4d.zip
Switch to timespec for timeouts
Can be passed to ppoll(2) directly.
Diffstat (limited to '')
-rw-r--r--daemon.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/daemon.c b/daemon.c
index d0a6579..3dc0640 100644
--- a/daemon.c
+++ b/daemon.c
@@ -27,6 +27,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
+#include <sys/timespec.h>
 #include <sysexits.h>
 #include <syslog.h>
 #include <unistd.h>
@@ -43,7 +44,7 @@
 
 #define WS " \t"
 
-int restartInterval = 1000;
+struct timespec restartInterval = { .tv_sec = 1 };
 struct Set256 stopExits;
 
 static void configerr(bool exit, const char *format, ...) {
@@ -119,6 +120,12 @@ static void parseExits(char *list) {
 	}
 }
 
+static void parseInterval(const char *millis) {
+	unsigned long ms = strtoul(millis, NULL, 10);
+	restartInterval.tv_sec = ms / 1000;
+	restartInterval.tv_nsec = 1000000 * (ms % 1000);
+}
+
 int main(int argc, char *argv[]) {
 	setprogname(argv[0]);
 
@@ -146,7 +153,7 @@ int main(int argc, char *argv[]) {
 			break; case 'g': groupName = optarg;
 			break; case 'p': pidPath = optarg;
 			break; case 's': parseExits(optarg);
-			break; case 't': restartInterval = strtoul(optarg, NULL, 10);
+			break; case 't': parseInterval(optarg);
 			break; case 'u': userName = optarg;
 			break; default:  return EX_USAGE;
 		}