summary refs log tree commit diff
path: root/chat.c
diff options
context:
space:
mode:
Diffstat (limited to 'chat.c')
-rw-r--r--chat.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/chat.c b/chat.c
index 16ecb8a..fa1240a 100644
--- a/chat.c
+++ b/chat.c
@@ -17,6 +17,7 @@
 #include <err.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <limits.h>
 #include <locale.h>
 #include <poll.h>
 #include <signal.h>
@@ -39,7 +40,7 @@
 static void genCert(const char *path) {
 	const char *name = strrchr(path, '/');
 	name = (name ? &name[1] : path);
-	char subj[256];
+	char subj[4 + NAME_MAX];
 	snprintf(subj, sizeof(subj), "/CN=%.*s", (int)strcspn(name, "."), name);
 	umask(0066);
 	execlp(
@@ -56,13 +57,11 @@ char *idNames[IDCap] = {
 	[Debug] = "<debug>",
 	[Network] = "<network>",
 };
-
 enum Color idColors[IDCap] = {
 	[None] = Black,
 	[Debug] = Green,
 	[Network] = Gray,
 };
-
 uint idNext = Network + 1;
 
 struct Network network;
@@ -79,32 +78,33 @@ static void exitSave(void) {
 
 uint32_t hashInit;
 
-int utilPipe[2] = { -1, -1 };
+uint execID;
 int execPipe[2] = { -1, -1 };
+int utilPipe[2] = { -1, -1 };
 
-static void utilRead(void) {
+static void execRead(void) {
 	char buf[1024];
-	ssize_t len = read(utilPipe[0], buf, sizeof(buf) - 1);
+	ssize_t len = read(execPipe[0], buf, sizeof(buf) - 1);
 	if (len < 0) err(EX_IOERR, "read");
 	if (!len) return;
 	buf[len] = '\0';
 	char *ptr = buf;
 	while (ptr) {
 		char *line = strsep(&ptr, "\n");
-		if (line[0]) uiFormat(Network, Warm, NULL, "%s", line);
+		if (line[0]) command(execID, line);
 	}
 }
 
-static void execRead(void) {
+static void utilRead(void) {
 	char buf[1024];
-	ssize_t len = read(execPipe[0], buf, sizeof(buf) - 1);
+	ssize_t len = read(utilPipe[0], buf, sizeof(buf) - 1);
 	if (len < 0) err(EX_IOERR, "read");
 	if (!len) return;
 	buf[len] = '\0';
 	char *ptr = buf;
 	while (ptr) {
 		char *line = strsep(&ptr, "\n");
-		if (line[0]) command(execID, line);
+		if (line[0]) uiFormat(Network, Warm, NULL, "%s", line);
 	}
 }
 
@@ -188,7 +188,7 @@ int main(int argc, char *argv[]) {
 	if (!user) user = nick;
 	if (!real) real = nick;
 
-	set(&network.name, host);
+	// Modes defined in RFC 1459:
 	set(&network.chanTypes, "#&");
 	set(&network.prefixes, "@+");
 	set(&network.prefixModes, "ov");
@@ -196,6 +196,8 @@ int main(int argc, char *argv[]) {
 	set(&network.paramModes, "k");
 	set(&network.setParamModes, "l");
 	set(&network.channelModes, "imnpst");
+
+	set(&network.name, host);
 	set(&self.nick, "*");
 	commandComplete();