summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2021-08-26 12:59:57 -0400
committerJune McEnroe <june@causal.agency>2021-08-26 12:59:57 -0400
commitbe9bffdf497594aa321b620093cef1f180764576 (patch)
tree034c4e50530c7ffafc76767ba39401eca13efff8
parentRemove trailing tab (diff)
downloadcatgirl-be9bffdf497594aa321b620093cef1f180764576.tar.gz
catgirl-be9bffdf497594aa321b620093cef1f180764576.zip
Match id names case-insensitively
This fixes the case where an IRCd does not normalize channel names,
e.g. PRIVMSG #TEST is relayed as-is, rather than as #test or whatever
the canonical casing of the channel name is. It also fixes the case
of opening a query window with incorrect case, e.g. /query nickserv.

However, this solution is only completely correct when
CASEMAPPING=ascii.[1] I do not think the extra mappings of
CASEMAPPING=rfc1459 are relevant enough to justify adding the code
to handle it.

[1]: https://modern.ircdocs.horse/#casemapping-parameter
-rw-r--r--chat.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/chat.h b/chat.h
index dd9c823..d9d9bdc 100644
--- a/chat.h
+++ b/chat.h
@@ -34,6 +34,7 @@
 #include <stdint.h>
 #include <stdio.h>
 #include <string.h>
+#include <strings.h>
 #include <sysexits.h>
 #include <time.h>
 #include <wchar.h>
@@ -119,7 +120,7 @@ extern uint idNext;
 
 static inline uint idFind(const char *name) {
 	for (uint id = 0; id < idNext; ++id) {
-		if (!strcmp(idNames[id], name)) return id;
+		if (!strcasecmp(idNames[id], name)) return id;
 	}
 	return None;
 }