summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--litterbox.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/litterbox.c b/litterbox.c
index 3a54bf5..57d30cb 100644
--- a/litterbox.c
+++ b/litterbox.c
@@ -443,7 +443,7 @@ static void handleError(struct Message *msg) {
 	errx(EX_UNAVAILABLE, "%s", msg->params[0]);
 }
 
-static const struct {
+static const struct Handler {
 	const char *cmd;
 	bool transaction;
 	Handler *fn;
@@ -469,18 +469,23 @@ static const struct {
 	{ "TOPIC", true, handleTopic },
 };
 
+static int compar(const void *cmd, const void *_handler) {
+	const struct Handler *handler = _handler;
+	return strcmp(cmd, handler->cmd);
+}
+
 static void handle(struct Message msg) {
 	if (!msg.cmd) return;
-	for (size_t i = 0; i < ARRAY_LEN(Handlers); ++i) {
-		if (strcmp(msg.cmd, Handlers[i].cmd)) continue;
-		if (Handlers[i].transaction) {
-			dbExec(SQL(BEGIN TRANSACTION;));
-			Handlers[i].fn(&msg);
-			dbExec(SQL(COMMIT TRANSACTION;));
-		} else {
-			Handlers[i].fn(&msg);
-		}
-		break;
+	const struct Handler *handler = bsearch(
+		msg.cmd, Handlers, ARRAY_LEN(Handlers), sizeof(*handler), compar
+	);
+	if (!handler) return;
+	if (handler->transaction) {
+		dbExec(SQL(BEGIN TRANSACTION;));
+		handler->fn(&msg);
+		dbExec(SQL(COMMIT TRANSACTION;));
+	} else {
+		handler->fn(&msg);
 	}
 }
 
21-09-22 21:13:12 +0000'>2021-09-22Call sandbox in CGI modeJune McEnroe 2021-09-22Support HTTP PUT in upJune McEnroe 2021-09-22Remove default faviconJune McEnroe 2021-09-21Use Z_FILTERED strategyJune McEnroe 2021-09-21Recalculate various lengths only as neededJune McEnroe 2021-09-21Rewrite pngo, add explicit optionsJune McEnroe 2021-09-16Fix /* **/ comment matchingJune McEnroe 2021-09-15Remove typer, add downgrade to READMEJune McEnroe 2021-09-15Set bot mode on downgradeJune McEnroe 2021-09-15Enter capsicum in downgradeJune McEnroe 2021-09-15Factor out common parts of downgrade messagesJune McEnroe 2021-09-14Add downgrade IRC botJune McEnroe 2021-09-14Sort by title if authors matchJune McEnroe 2021-09-13Swap-remove tags as they're foundJune McEnroe 2021-09-12Replace htagml regex with strncmpJune McEnroe 2021-09-11Also defer printing comment for lone close-parensJune McEnroe 2021-09-10Publish "git-comment"June McEnroe 2021-09-10Add git comment --pretty optionJune McEnroe 2021-09-08Defer printing comment if line is blank or closing braceJune McEnroe 2021-09-08Up default min-repeat to 30 linesJune McEnroe 2021-09-08Handle dirty lines in git-commentJune McEnroe 2021-09-08Document and install git-commentJune McEnroe 2021-09-08Add repeat and all options to git-commentJune McEnroe 2021-09-08Add group threshold to git-commentJune McEnroe