changeset 1071:e9b35306f376

misc: remove usage of BSD sys/queue.h (rule)
author David Demelier <markand@malikania.fr>
date Mon, 12 Jul 2021 21:28:17 +0200
parents beb61243cf6d
children a5eaf207ecc2
files irccd/jsapi-rule.c irccd/peer.c lib/irccd/irccd.c lib/irccd/irccd.h lib/irccd/rule.c lib/irccd/rule.h tests/test-rule.c
diffstat 7 files changed, 68 insertions(+), 66 deletions(-) [+]
line wrap: on
line diff
--- a/irccd/jsapi-rule.c	Mon Jul 12 21:20:31 2021 +0200
+++ b/irccd/jsapi-rule.c	Mon Jul 12 21:28:17 2021 +0200
@@ -19,6 +19,8 @@
 #include <assert.h>
 #include <string.h>
 
+#include <utlist.h>
+
 #include <irccd/irccd.h>
 #include <irccd/rule.h>
 
@@ -107,7 +109,7 @@
 
 	duk_push_array(ctx);
 
-	TAILQ_FOREACH(rule, &irc.rules, link) {
+	DL_FOREACH(irc.rules, rule) {
 		duk_push_object(ctx);
 		duk_push_int(ctx, rule->action);
 		duk_put_prop_string(ctx, -2, "action");
--- a/irccd/peer.c	Mon Jul 12 21:20:31 2021 +0200
+++ b/irccd/peer.c	Mon Jul 12 21:28:17 2021 +0200
@@ -553,12 +553,12 @@
 	if (!(fp = fmemopen(out, sizeof (out), "w")))
 		return error(p, "%s", strerror(errno));
 
-	TAILQ_FOREACH(rule, &irc.rules, link)
+	DL_FOREACH(irc.rules, rule)
 		rulesz++;
 
 	fprintf(fp, "OK %zu\n", rulesz);
 
-	TAILQ_FOREACH(rule, &irc.rules, link) {
+	DL_FOREACH(irc.rules, rule) {
 		/* Convert : to spaces. */
 		fprintf(fp, "%s\n", rule->action == IRC_RULE_ACCEPT ? "accept" : "drop");
 		fprintf(fp, "%s\n", rule_list_to_spaces(rule->servers));
--- a/lib/irccd/irccd.c	Mon Jul 12 21:20:31 2021 +0200
+++ b/lib/irccd/irccd.c	Mon Jul 12 21:28:17 2021 +0200
@@ -86,50 +86,50 @@
 {
 	switch (ev->type) {
 	case IRC_EVENT_COMMAND:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    ev->message.channel, ev->message.origin, p->name, "onCommand");
 	case IRC_EVENT_CONNECT:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    NULL, NULL, p->name, "onConnect");
 	case IRC_EVENT_DISCONNECT:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    NULL, NULL, p->name, "onDisconnect");
 	case IRC_EVENT_INVITE:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    ev->invite.channel, ev->invite.origin, p->name, "onInvite");
 	case IRC_EVENT_JOIN:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    ev->join.channel, ev->join.origin, p->name, "onJoin");
 	case IRC_EVENT_KICK:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    ev->kick.channel, ev->kick.origin, p->name, "onKick");
 		break;
 	case IRC_EVENT_ME:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    ev->message.channel, ev->message.origin, p->name, "onMe");
 	case IRC_EVENT_MESSAGE:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    ev->message.channel, ev->message.origin, p->name, "onMessage");
 	case IRC_EVENT_MODE:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    ev->mode.channel, ev->mode.origin, p->name, "onMode");
 	case IRC_EVENT_NAMES:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    ev->names.channel, NULL, p->name, "onNames");
 	case IRC_EVENT_NICK:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    NULL, ev->nick.origin, p->name, "onNick");
 	case IRC_EVENT_NOTICE:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    ev->notice.channel, ev->notice.origin, p->name, "onNotice");
 	case IRC_EVENT_PART:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    ev->part.channel, ev->part.origin, p->name, "onPart");
 	case IRC_EVENT_TOPIC:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    ev->topic.channel, ev->topic.origin, p->name, "onTopic");
 	case IRC_EVENT_WHOIS:
-		return irc_rule_matchlist(&irc.rules, ev->server->name,
+		return irc_rule_matchlist(irc.rules, ev->server->name,
 		    NULL, NULL, p->name, "onWhois");
 	default:
 		return 1;
@@ -442,16 +442,16 @@
 	assert(rule);
 
 	if (index == 0)
-		TAILQ_INSERT_HEAD(&irc.rules, rule, link);
+		DL_PREPEND(irc.rules, rule);
 	else if (index >= irc_bot_rule_size())
-		TAILQ_INSERT_TAIL(&irc.rules, rule, link);
+		DL_APPEND(irc.rules, rule);
 	else {
 		struct irc_rule *pos;
 
-		for (pos = TAILQ_FIRST(&irc.rules); --index; )
-			pos = TAILQ_NEXT(pos, link);
+		for (pos = irc.rules; --index; )
+			pos = pos->next;
 
-		TAILQ_INSERT_AFTER(&irc.rules, pos, rule, link);
+		DL_APPEND_ELEM(irc.rules, pos, rule);
 	}
 }
 
@@ -462,8 +462,8 @@
 
 	struct irc_rule *rule;
 
-	for (rule = TAILQ_FIRST(&irc.rules); index-- != 0; )
-		rule = TAILQ_NEXT(rule, link);
+	for (rule = irc.rules; index-- != 0; )
+		rule = rule->next;
 
 	return rule;
 }
@@ -478,20 +478,20 @@
 	if (from == to)
 		return;
 
-	f = t = TAILQ_FIRST(&irc.rules);
+	f = t = irc.rules;
 
 	while (from--)
-		f = TAILQ_NEXT(f, link);
+		f = f->next;
 
-	TAILQ_REMOVE(&irc.rules, f, link);
+	DL_DELETE(irc.rules, f);
 
 	if (to == 0)
-		TAILQ_INSERT_HEAD(&irc.rules, f, link);
+		DL_PREPEND(irc.rules, f);
 	else {
-		while (TAILQ_NEXT(t, link) && to--)
-			t = TAILQ_NEXT(t, link);
+		while (t && to--)
+			t = t->next;
 
-		TAILQ_INSERT_AFTER(&irc.rules, t, f, link);
+		DL_APPEND_ELEM(irc.rules, t, f);
 	}
 }
 
@@ -500,12 +500,12 @@
 {
 	assert(index < irc_bot_rule_size());
 
-	struct irc_rule *pos = TAILQ_FIRST(&irc.rules);
+	struct irc_rule *pos = irc.rules;
 
 	for (size_t i = 0; i < index; ++i)
-		pos = TAILQ_NEXT(pos, link);
+		pos = pos->next;
 
-	TAILQ_REMOVE(&irc.rules, pos, link);
+	DL_DELETE(irc.rules, pos);
 }
 
 size_t
@@ -514,7 +514,7 @@
 	const struct irc_rule *r;
 	size_t total = 0;
 
-	TAILQ_FOREACH(r, &irc.rules, link)
+	DL_FOREACH(irc.rules, r)
 		total++;
 
 	return total;
@@ -525,9 +525,10 @@
 {
 	struct irc_rule *r, *tmp;
 
-	TAILQ_FOREACH_SAFE(r, &irc.rules, link, tmp)
+	DL_FOREACH_SAFE(irc.rules, r, tmp)
 		irc_rule_finish(r);
-	TAILQ_INIT(&irc.rules);
+
+	irc.rules = NULL;
 }
 
 void
--- a/lib/irccd/irccd.h	Mon Jul 12 21:20:31 2021 +0200
+++ b/lib/irccd/irccd.h	Mon Jul 12 21:28:17 2021 +0200
@@ -34,7 +34,7 @@
 	struct irc_server_list servers;
 	struct irc_plugin *plugins;
 	struct irc_plugin_loader *plugin_loaders;
-	struct irc_rule_list rules;
+	struct irc_rule *rules;
 	struct irc_hook *hooks;
 } irc;
 
--- a/lib/irccd/rule.c	Mon Jul 12 21:20:31 2021 +0200
+++ b/lib/irccd/rule.c	Mon Jul 12 21:28:17 2021 +0200
@@ -24,6 +24,8 @@
 #include <string.h>
 #include <strings.h>
 
+#include <utlist.h>
+
 #include "rule.h"
 #include "util.h"
 
@@ -139,7 +141,7 @@
 }
 
 int
-irc_rule_matchlist(const struct irc_rule_list *rules,
+irc_rule_matchlist(const struct irc_rule *rules,
                    const char *server,
                    const char *channel,
                    const char *origin,
@@ -147,9 +149,9 @@
                    const char *event)
 {
 	int result = 1;
-	struct irc_rule *r;
+	const struct irc_rule *r;
 
-	TAILQ_FOREACH(r, rules, link)
+	DL_FOREACH(rules, r)
 		if (irc_rule_match(r, server, channel, origin, plugin, event))
 			result = r->action == IRC_RULE_ACCEPT;
 
--- a/lib/irccd/rule.h	Mon Jul 12 21:20:31 2021 +0200
+++ b/lib/irccd/rule.h	Mon Jul 12 21:28:17 2021 +0200
@@ -19,8 +19,6 @@
 #ifndef IRCCD_RULE_H
 #define IRCCD_RULE_H
 
-#include <sys/queue.h>
-
 #include "limits.h"
 
 #if defined(__cplusplus)
@@ -39,11 +37,10 @@
 	char origins[IRC_RULE_LEN];
 	char plugins[IRC_RULE_LEN];
 	char events[IRC_RULE_LEN];
-	TAILQ_ENTRY(irc_rule) link;
+	struct irc_rule *next;
+	struct irc_rule *prev;
 };
 
-TAILQ_HEAD(irc_rule_list, irc_rule);
-
 struct irc_rule *
 irc_rule_new(enum irc_rule_action);
 
@@ -62,7 +59,7 @@
                const char *);
 
 int
-irc_rule_matchlist(const struct irc_rule_list *,
+irc_rule_matchlist(const struct irc_rule *,
                    const char *,
                    const char *,
                    const char *,
--- a/tests/test-rule.c	Mon Jul 12 21:20:31 2021 +0200
+++ b/tests/test-rule.c	Mon Jul 12 21:28:17 2021 +0200
@@ -44,9 +44,9 @@
 	irc_bot_rule_insert(r1, 0);
 	irc_bot_rule_insert(r2, 0);
 
-	r = TAILQ_FIRST(&irc.rules);
+	r = irc.rules;
 	GREATEST_ASSERT_EQ(r2, r);
-	r = TAILQ_NEXT(r, link);
+	r = r->next;
 	GREATEST_ASSERT_EQ(r1, r);
 
 	GREATEST_PASS();
@@ -70,17 +70,17 @@
 	irc_bot_rule_insert(r3, -1);
 	irc_bot_rule_remove(1);
 
-	r = TAILQ_FIRST(&irc.rules);
+	r = irc.rules;
 	GREATEST_ASSERT_EQ(r1, r);
-	r = TAILQ_NEXT(r, link);
+	r = r->next;
 	GREATEST_ASSERT_EQ(r3, r);
 
 	irc_bot_rule_remove(1);
-	r = TAILQ_FIRST(&irc.rules);
+	r = irc.rules;
 	GREATEST_ASSERT_EQ(r1, r);
 
 	irc_bot_rule_remove(0);
-	r = TAILQ_FIRST(&irc.rules);
+	r = irc.rules;
 	GREATEST_ASSERT(!r);
 
 	GREATEST_PASS();
@@ -249,19 +249,19 @@
 solve_match7(void)
 {
 	/* Allowed */
-	GREATEST_ASSERT(irc_rule_matchlist(&irc.rules, "malikania", "#staff", "", "a", "onMessage"));
+	GREATEST_ASSERT(irc_rule_matchlist(irc.rules, "malikania", "#staff", "", "a", "onMessage"));
 
 	/* Allowed */
-	GREATEST_ASSERT(irc_rule_matchlist(&irc.rules, "freenode", "#staff", "", "b", "onTopic"));
+	GREATEST_ASSERT(irc_rule_matchlist(irc.rules, "freenode", "#staff", "", "b", "onTopic"));
 
 	/* Not allowed */
-	GREATEST_ASSERT(!irc_rule_matchlist(&irc.rules, "malikania", "#staff", "", "", "onCommand"));
+	GREATEST_ASSERT(!irc_rule_matchlist(irc.rules, "malikania", "#staff", "", "", "onCommand"));
 
 	/* Not allowed */
-	GREATEST_ASSERT(!irc_rule_matchlist(&irc.rules, "freenode", "#staff", "", "c", "onCommand"));
+	GREATEST_ASSERT(!irc_rule_matchlist(irc.rules, "freenode", "#staff", "", "c", "onCommand"));
 
 	/* Allowed */
-	GREATEST_ASSERT(irc_rule_matchlist(&irc.rules, "unsafe", "#staff", "", "c", "onCommand"));
+	GREATEST_ASSERT(irc_rule_matchlist(irc.rules, "unsafe", "#staff", "", "c", "onCommand"));
 
 	GREATEST_PASS();
 }
@@ -270,29 +270,29 @@
 solve_match8(void)
 {
 	/* Allowed */
-	GREATEST_ASSERT(irc_rule_matchlist(&irc.rules, "malikania", "#games", "", "game", "onMessage"));
+	GREATEST_ASSERT(irc_rule_matchlist(irc.rules, "malikania", "#games", "", "game", "onMessage"));
 
 	/* Allowed */
-	GREATEST_ASSERT(irc_rule_matchlist(&irc.rules, "localhost", "#games", "", "game", "onMessage"));
+	GREATEST_ASSERT(irc_rule_matchlist(irc.rules, "localhost", "#games", "", "game", "onMessage"));
 
 	/* Allowed */
-	GREATEST_ASSERT(irc_rule_matchlist(&irc.rules, "malikania", "#games", "", "game", "onCommand"));
+	GREATEST_ASSERT(irc_rule_matchlist(irc.rules, "malikania", "#games", "", "game", "onCommand"));
 
 	/* Not allowed */
-	GREATEST_ASSERT(!irc_rule_matchlist(&irc.rules, "malikania", "#games", "", "game", "onQuery"));
+	GREATEST_ASSERT(!irc_rule_matchlist(irc.rules, "malikania", "#games", "", "game", "onQuery"));
 
 	/* Not allowed */
-	GREATEST_ASSERT(!irc_rule_matchlist(&irc.rules, "freenode", "#no", "", "game", "onMessage"));
+	GREATEST_ASSERT(!irc_rule_matchlist(irc.rules, "freenode", "#no", "", "game", "onMessage"));
 
 	/* Not allowed */
-	GREATEST_ASSERT(!irc_rule_matchlist(&irc.rules, "malikania", "#test", "", "game", "onMessage"));
+	GREATEST_ASSERT(!irc_rule_matchlist(irc.rules, "malikania", "#test", "", "game", "onMessage"));
 	GREATEST_PASS();
 }
 
 GREATEST_TEST
 solve_match9(void)
 {
-	GREATEST_ASSERT(!irc_rule_matchlist(&irc.rules, "MALIKANIA", "#STAFF", "", "SYSTEM", "onCommand"));
+	GREATEST_ASSERT(!irc_rule_matchlist(irc.rules, "MALIKANIA", "#STAFF", "", "SYSTEM", "onCommand"));
 	GREATEST_PASS();
 }