summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2019-11-13 16:49:07 -0500
committerJune McEnroe <june@causal.agency>2019-11-13 16:49:07 -0500
commitdb3433432b4960da2c24a0a4be2336497c1c21fa (patch)
tree461d4f885c17b80b9801bd4b4cd16633ac7b6d72
parentFactor out wordcpy for filters (diff)
downloadpounce-db3433432b4960da2c24a0a4be2336497c1c21fa.tar.gz
pounce-db3433432b4960da2c24a0a4be2336497c1c21fa.zip
Refactor filterUserhostInNames
-rw-r--r--client.c49
1 files changed, 25 insertions, 24 deletions
diff --git a/client.c b/client.c
index 9ffa95f..0e94ad4 100644
--- a/client.c
+++ b/client.c
@@ -277,15 +277,30 @@ size_t clientDiff(const struct Client *client) {
 
 typedef const char *Filter(const char *line);
 
+static int strncmpn(const char *a, size_t alen, const char *b, size_t blen) {
+	return alen == blen
+		? memcmp(a, b, alen)
+		: alen - blen;
+}
+
+static size_t strlcpyn(char *dst, size_t cap, const char *src, size_t len) {
+	if (len < cap) {
+		memcpy(dst, src, len);
+		dst[len] = '\0';
+	} else {
+		memcpy(dst, src, cap - 1);
+		dst[cap - 1] = '\0';
+	}
+	return len;
+}
+
 static int wordcmp(const char *line, size_t i, const char *word) {
 	while (i--) {
 		line += strcspn(line, " ");
 		if (*line) line++;
 	}
 	size_t len = strcspn(line, " ");
-	return len == strlen(word)
-		? memcmp(line, word, len)
-		: len - strlen(word);
+	return strncmpn(line, len, word, strlen(word));
 }
 
 static size_t wordcpy(char *dst, size_t cap, const char *src, size_t count) {
@@ -294,14 +309,7 @@ static size_t wordcpy(char *dst, size_t cap, const char *src, size_t count) {
 		if (src[len] == ' ') len++;
 		len += strcspn(&src[len], " ");
 	}
-	if (len < cap) {
-		memcpy(dst, src, len);
-		dst[len] = '\0';
-	} else {
-		memcpy(dst, src, cap - 1);
-		dst[cap - 1] = '\0';
-	}
-	return len;
+	return strlcpyn(dst, cap, src, len);
 }
 
 static const char *filterAccountNotify(const char *line) {
@@ -331,23 +339,16 @@ static const char *filterInviteNotify(const char *line) {
 static const char *filterUserhostInNames(const char *line) {
 	if (wordcmp(line, 1, "353")) return line;
 	static char buf[512];
-	if (strlen(line) >= sizeof(buf)) return NULL;
-	size_t len = 0;
-	for (int i = 0; i < 5; ++i) {
-		len += strcspn(&line[len], " ");
-		if (line[len]) len++;
-	}
-	memcpy(buf, line, len);
+	size_t len = wordcpy(buf, sizeof(buf), line, 5);
+	if (len >= sizeof(buf)) return NULL;
 	line += len;
-	char *ptr = &buf[len];
 	while (*line) {
-		len = strcspn(line, "!");
-		memcpy(ptr, line, len);
-		ptr += len;
-		line += len;
+		size_t nick = strcspn(line, "!");
+		len += strlcpyn(&buf[len], sizeof(buf) - len, line, nick);
+		if (len >= sizeof(buf)) return NULL;
+		line += nick;
 		line += strcspn(line, " ");
 	}
-	*ptr = '\0';
 	return buf;
 }
 
pan='3' class='logmsg'> 2021-02-07Use class names for Foreground, Background, BorderColorJune McEnroe I'm not really sure what difference this makes, but it seems like the right thing to do to be generic? 2021-02-07Add simple battery status and clock to xsessionJune McEnroe I love how simple this is. 2021-02-07Set cursor theme and sizeJune McEnroe 2021-02-07Use scrot for up -s if no screencaptureJune McEnroe Still missing putting the URL in an X selection. 2021-02-07Enable mouse acceleration in XJune McEnroe 2021-02-07Set colours for Xt and cwmJune McEnroe And increase XTerm internalBorder. 2021-02-07Set urgency on bell in xtermJune McEnroe 2021-02-07Add bindings for brightness controlJune McEnroe Weirdly the Fn key doesn't change how the F row registers... I wonder if I can do something about that. 2021-02-07Set X key repeat rateJune McEnroe 2021-02-07Bump font size to 12June McEnroe 11 is what I use on macOS, but I feel like my eyes are working harder here. 2021-02-07Fully configure and rebind cwmJune McEnroe This is sort of a mix of trying to emulate macOS somewhat for my muscle memory and just rebinding some of the cwm defaults to use 4- rather than M-. 2021-02-07Add BintiJune McEnroe 2021-02-07Finish configuring xtermJune McEnroe 2021-02-06Enable tapping, reverse scroll, set scaling in wsconsctlJune McEnroe 2021-02-06Set root window to black on purple snowJune McEnroe 2021-02-06Add xmodmap configurationJune McEnroe 2021-02-06Add initial OpenBSD X configurationJune McEnroe cwm still needs a lot more rebinding, and I need to actually look at its other options. xterm definitely still needs some configuration, but I at least managed to get it to use a decent looking font. Very happy that OpenBSD includes Luxi Mono, which is what my usual font, Go Mono, is based on anyway. Still missing is xmodmap and such. 2021-02-06Add xterm output to schemeJune McEnroe