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