diff options
-rw-r--r-- | chat.c | 2 | ||||
-rw-r--r-- | chat.h | 4 | ||||
-rw-r--r-- | command.c | 6 | ||||
-rw-r--r-- | handle.c | 16 | ||||
-rw-r--r-- | irc.c | 3 |
5 files changed, 15 insertions, 16 deletions
@@ -337,7 +337,7 @@ int main(int argc, char *argv[]) { .cmd = "QUIT", .params[0] = self.quit, }; - handle(msg); + handle(&msg); ircClose(); logClose(); @@ -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); @@ -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); } @@ -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); } } @@ -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; } |