diff -r 462ae85f7689 sic.c
--- a/sic.c	Fri Aug 07 08:37:09 2009 +0100
+++ b/sic.c	Wed Sep 23 00:24:16 2009 +0200
@@ -18,11 +18,11 @@
 #endif
 
 static void die(const char *errstr, ...);
-static void printl(char *channel, char *msg);
-static void privmsg(char *channel, char *msg);
+static void printl(const char *channel, const char *msg);
+static void privmsg(const char *channel, const char *msg);
 static void parsein(char *msg);
 static void parsesrv(char *msg);
-static int readl(int fd, unsigned int len, char *buf);
+static int readl(int fd, size_t len, char *buf);
 
 static char *host = "irc6.oftc.net";
 static char *port = "6667";
@@ -33,6 +33,8 @@
 static int srv;
 static time_t trespond;
 
+#define startswith(d, s) 0 == strncmp(d, s, sizeof d - 1)
+
 void
 die(const char *errstr, ...) {
 	va_list ap;
@@ -43,7 +45,7 @@
 }
 
 void
-printl(char *channel, char *msg) {
+printl(const char *channel, const char *msg) {
 	static char timestr[18];
 	time_t t = time(0);
 	(void) strftime(timestr, sizeof timestr, "%D %R", localtime(&t));
@@ -51,7 +53,7 @@
 }
 
 void
-privmsg(char *channel, char *msg) {
+privmsg(const char *channel, const char *msg) {
 	if(channel[0] == '\0')
 		return;
 	(void) snprintf(bufout, sizeof bufout, "<%s> %s", nick, msg);
@@ -69,18 +71,18 @@
 		privmsg(channel, msg);
 		return;
 	}
-	if(strncmp(msg + 1, "j ", 2) == 0 && (msg[3] == '#'))
+	if(startswith("j ", msg + 1) && (msg[3] == '#'))
 		(void) snprintf(bufout, sizeof bufout, "JOIN %s\r\n", msg + 3);
-	else if(strncmp(msg + 1, "l ", 2) == 0)
+	else if(startswith("l ", msg + 1))
 		(void) snprintf(bufout, sizeof bufout, "PART %s :sic - 250 LOC are too much!\r\n", msg + 3);
-	else if(strncmp(msg + 1, "m ", 2) == 0) {
+	else if(startswith("m ", msg + 1)) {
 		if((p = strchr(msg + 3, ' ')))
 			*(p++) = '\0';
 		privmsg(msg + 3, p);
 		return;
 	}
-	else if(strncmp(msg + 1, "s ", 2) == 0) {
-		strncpy(channel, msg + 3, sizeof channel);
+	else if(startswith("s ", msg + 1)) {
+		strncpy(channel, msg + 3, sizeof channel - 1);
 		return;
 	}
 	else
@@ -114,9 +116,9 @@
 		*p = '\0';
 		txt = ++p;
 	}
-	if(strncmp("PONG", cmd, 4) == 0)
+	if(startswith("PONG", cmd))
 		return;
-	if(strncmp("PRIVMSG", cmd, 7) == 0 && txt != NULL) {
+	if(startswith("PRIVMSG", cmd) && txt != NULL) {
 		if(!(p = strchr(cmd, ' ')))
 			return;
 		*p = '\0';
@@ -126,7 +128,7 @@
 		(void) snprintf(bufout, sizeof bufout, "<%s> %s", usr, txt);
 		printl(chan, bufout);
 	}
-	else if(strncmp("PING", cmd, 4) == 0 && txt != NULL) {
+	else if(startswith("PING", cmd) && txt != NULL) {
 		(void) snprintf(bufout, sizeof bufout, "PONG %s\r\n", txt);
 		(void) write(srv, bufout, strlen(bufout));
 	}
@@ -136,15 +138,15 @@
 		else
 			(void) snprintf(bufout, sizeof bufout, ">< %s: ", cmd);
 		printl(usr, bufout);
-		if(strncmp("NICK", cmd, 4) == 0 && strncmp(usr, nick, sizeof nick) == 0 &&
+		if(startswith("NICK", cmd) && strcmp(usr, nick) == 0 &&
 				txt != NULL)
-			(void) strncpy(nick, txt, sizeof nick);
+			(void) strncpy(nick, txt, sizeof nick - 1);
 	}
 }
 
 int
-readl(int fd, unsigned int len, char *buf) {
-	unsigned int i = 0;
+readl(int fd, size_t len, char *buf) {
+	size_t i = 0;
 	char c = '\0';
 
 	do {
@@ -167,21 +169,21 @@
 	fd_set rd;
 	char *password = NULL;
 
-	strncpy(nick, getenv("USER"), sizeof nick);
+	strncpy(nick, getenv("USER"), sizeof nick - 1);
 	for(i = 1; i < argc; i++)
-		if(strncmp(argv[i], "-h", 3) == 0) {
+		if(strcmp(argv[i], "-h") == 0) {
 			if(++i < argc) host = argv[i];
 		}
-		else if(strncmp(argv[i], "-p", 3) == 0) {
+		else if(strcmp(argv[i], "-p") == 0) {
 			if(++i < argc) port = argv[i];
 		}
-		else if(strncmp(argv[i], "-n", 3) == 0) {
-			if(++i < argc) strncpy(nick, argv[i], sizeof nick);
+		else if(strcmp(argv[i], "-n") == 0) {
+			if(++i < argc) strncpy(nick, argv[i], sizeof nick - 1);
 		}
-		else if(strncmp(argv[i], "-k", 3) == 0) {
+		else if(strcmp(argv[i], "-k") == 0) {
 			if(++i < argc) password = argv[i];
 		}
-		else if(strncmp(argv[i], "-v", 3) == 0)
+		else if(strcmp(argv[i], "-v") == 0)
 			die("sic-%s, © 2005-2009 sic engineers\n", VERSION);
 		else
 			die("usage: sic [-h host] [-p port] [-n nick] [-k keyword] [-v]\n");
@@ -241,7 +243,7 @@
 			trespond = time(NULL);
 		}
 		if(FD_ISSET(0, &rd) != 0) {
-			if(readl(0, (unsigned int) sizeof bufin, bufin) == -1)
+			if(readl(0, sizeof bufin, bufin) == -1)
 				die("error: broken pipe\n");
 			parsein(bufin);
 		}
