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; }