about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--chat.c2
-rw-r--r--chat.h4
-rw-r--r--command.c6
-rw-r--r--handle.c16
-rw-r--r--irc.c3
5 files changed, 15 insertions, 16 deletions
diff --git a/chat.c b/chat.c
index 913ce78..962de28 100644
--- a/chat.c
+++ b/chat.c
@@ -337,7 +337,7 @@ int main(int argc, char *argv[]) {
 		.cmd = "QUIT",
 		.params[0] = self.quit,
 	};
-	handle(msg);
+	handle(&msg);
 
 	ircClose();
 	logClose();
diff --git a/chat.h b/chat.h
index 817c381..bb5bec8 100644
--- a/chat.h
+++ b/chat.h
@@ -155,7 +155,7 @@ enum Tag {
 	TagCap,
 };
 
-enum { ParamCap = 15 };
+enum { ParamCap = 254 };
 struct Message {
 	char *tags[TagCap];
 	char *nick;
@@ -204,7 +204,7 @@ extern struct Replies {
 	uint whois;
 } replies;
 
-void handle(struct Message msg);
+void handle(struct Message *msg);
 void command(uint id, char *input);
 const char *commandIsPrivmsg(uint id, const char *input);
 const char *commandIsNotice(uint id, const char *input);
diff --git a/command.c b/command.c
index 90732f3..ac83f3f 100644
--- a/command.c
+++ b/command.c
@@ -61,7 +61,7 @@ static void echoMessage(char *cmd, uint id, char *params) {
 		.params[0] = idNames[id],
 		.params[1] = params,
 	};
-	handle(msg);
+	handle(&msg);
 }
 
 static void splitMessage(char *cmd, uint id, char *params) {
@@ -213,9 +213,7 @@ static void channelListMode(uint id, char pm, char l, const char *params) {
 	for (const char *ch = params; *ch; ++ch) {
 		if (*ch == ' ') count++;
 	}
-	char modes[ParamCap - 2 + 1] = {
-		l, l, l, l, l, l, l, l, l, l, l, l, l, '\0'
-	};
+	char modes[13 + 1] = { l, l, l, l, l, l, l, l, l, l, l, l, l, '\0' };
 	ircFormat("MODE %s %c%.*s %s\r\n", idNames[id], pm, count, modes, params);
 }
 
diff --git a/handle.c b/handle.c
index 422cd76..4383cb0 100644
--- a/handle.c
+++ b/handle.c
@@ -1228,17 +1228,17 @@ static int compar(const void *cmd, const void *_handler) {
 	return strcmp(cmd, handler->cmd);
 }
 
-void handle(struct Message msg) {
-	if (!msg.cmd) return;
-	if (msg.tags[TagPos]) {
-		self.pos = strtoull(msg.tags[TagPos], NULL, 10);
+void handle(struct Message *msg) {
+	if (!msg->cmd) return;
+	if (msg->tags[TagPos]) {
+		self.pos = strtoull(msg->tags[TagPos], NULL, 10);
 	}
 	const struct Handler *handler = bsearch(
-		msg.cmd, Handlers, ARRAY_LEN(Handlers), sizeof(*handler), compar
+		msg->cmd, Handlers, ARRAY_LEN(Handlers), sizeof(*handler), compar
 	);
 	if (handler) {
-		handler->fn(&msg);
-	} else if (strcmp(msg.cmd, "400") >= 0 && strcmp(msg.cmd, "599") <= 0) {
-		handleErrorGeneric(&msg);
+		handler->fn(msg);
+	} else if (strcmp(msg->cmd, "400") >= 0 && strcmp(msg->cmd, "599") <= 0) {
+		handleErrorGeneric(msg);
 	}
 }
diff --git a/irc.c b/irc.c
index 5743d1e..dce1358 100644
--- a/irc.c
+++ b/irc.c
@@ -279,7 +279,8 @@ void ircRecv(void) {
 		if (!crlf) break;
 		*crlf = '\0';
 		debug(">>", line);
-		handle(parse(line));
+		struct Message msg = parse(line);
+		handle(&msg);
 		line = crlf + 2;
 	}