about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2021-09-26 18:11:38 -0400
committerJune McEnroe <june@causal.agency>2021-09-26 18:11:38 -0400
commitb5437a42f9950d7f56d7c199521929e7d93df287 (patch)
tree99ab4555e51735395f2bca91833e890a7c2ea242
parentUse reallocarray(3) (diff)
downloadcatsit-b5437a42f9950d7f56d7c199521929e7d93df287.tar.gz
catsit-b5437a42f9950d7f56d7c199521929e7d93df287.zip
Allocate pollfd array rather than using a VLA
-rw-r--r--daemon.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/daemon.c b/daemon.c
index efeaf22..e4c3145 100644
--- a/daemon.c
+++ b/daemon.c
@@ -312,6 +312,14 @@ int main(int argc, char *argv[]) {
 	}
 	setTitle();
 
+	struct pollfd *fds = calloc(1 + 2 * services.len, sizeof(*fds));
+	if (!fds) {
+		syslog(LOG_ERR, "calloc: %m");
+		goto shutdown;
+	}
+	fds[0].fd = fifo;
+	fds[0].events = POLLIN;
+
 	sigset_t mask;
 	sigemptyset(&mask);
 	for (;;) {
@@ -331,6 +339,11 @@ int main(int argc, char *argv[]) {
 		}
 		if (signals[SIGHUP]) {
 			parseConfig(configPath);
+			fds = reallocarray(fds, 1 + 2 * services.len, sizeof(*fds));
+			if (!fds) {
+				syslog(LOG_ERR, "reallocarray: %m");
+				goto shutdown;
+			}
 			setTitle();
 			signals[SIGHUP] = 0;
 		}
@@ -340,10 +353,6 @@ int main(int argc, char *argv[]) {
 			signals[SIGINFO] = 0;
 		}
 
-		struct pollfd fds[1 + 2 * services.len];
-		fds[0].fd = fifo;
-		fds[0].events = POLLIN;
-
 		struct timespec deadline = {0};
 		for (size_t i = 0; i < services.len; ++i) {
 			struct Service *service = &services.ptr[i];
@@ -414,6 +423,7 @@ int main(int argc, char *argv[]) {
 		}
 	}
 
+shutdown:
 	close(fifo);
 	unlink(fifoPath);