changeset 1072:a5eaf207ecc2

misc: remove usage of BSD sys/queue.h (server)
author David Demelier <markand@malikania.fr>
date Tue, 13 Jul 2021 20:35:32 +0200
parents e9b35306f376
children f18988efb96b
files GNUmakefile irccd/conf.y irccd/jsapi-server.c irccd/jsapi-util.c irccd/peer.c lib/irccd/irccd.c lib/irccd/irccd.h lib/irccd/server.h tests/test-bot.c
diffstat 9 files changed, 89 insertions(+), 107 deletions(-) [+]
line wrap: on
line diff
--- a/GNUmakefile	Mon Jul 12 21:28:17 2021 +0200
+++ b/GNUmakefile	Tue Jul 13 20:35:32 2021 +0200
@@ -334,7 +334,7 @@
 	${CMD.cchost}
 
 tests: ${TESTS_OBJS}
-	for t in ${TESTS_OBJS}; do ./$$t -v; done
+	for t in ${TESTS_OBJS}; do echo "==> $$t <=="; ./$$t -v || exit 1; done
 
 clean:
 	rm -f lib/irccd/config.h ${LIB_OBJS} ${LIB_DEPS}
--- a/irccd/conf.y	Mon Jul 12 21:28:17 2021 +0200
+++ b/irccd/conf.y	Tue Jul 13 20:35:32 2021 +0200
@@ -26,6 +26,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <utlist.h>
+
 #include <irccd/irccd.h>
 #include <irccd/log.h>
 #include <irccd/rule.h>
@@ -38,26 +40,22 @@
 extern int yylineno;
 
 struct pair {
+	struct pair *next;
 	char *key;
 	char *value;
-	SLIST_ENTRY(pair) link;
 };
 
-SLIST_HEAD(pair_list, pair);
-
 struct string {
+	struct string *next;
 	char *value;
-	SLIST_ENTRY(string) link;
 };
 
-SLIST_HEAD(string_list, string);
-
 struct rule_params {
-	struct string_list *servers;
-	struct string_list *channels;
-	struct string_list *origins;
-	struct string_list *plugins;
-	struct string_list *events;
+	struct string *servers;
+	struct string *channels;
+	struct string *origins;
+	struct string *plugins;
+	struct string *events;
 };
 
 struct transport_params {
@@ -74,47 +72,43 @@
 	char *username;
 	char *realname;
 	char *prefix;
-	struct string_list *channels;
+	struct string *channels;
 };
 
 struct plugin_params {
 	char *location;
-	struct pair_list *config;
-	struct pair_list *paths;
-	struct pair_list *templates;
+	struct pair *config;
+	struct pair *paths;
+	struct pair *templates;
 };
 
 static void
-pair_list_finish(struct pair_list *list)
+pair_list_finish(struct pair *list)
 {
 	struct pair *pair, *tmp;
 
 	if (!list)
 		return;
 
-	SLIST_FOREACH_SAFE(pair, list, link, tmp) {
+	LL_FOREACH_SAFE(list, pair, tmp) {
 		free(pair->key);
 		free(pair->value);
 		free(pair);
 	}
-
-	free(list);
 }
 
 static void
-string_list_finish(struct string_list *list)
+string_list_finish(struct string *list)
 {
 	struct string *string, *tmp;
 
 	if (!list)
 		return;
 
-	SLIST_FOREACH_SAFE(string, list, link, tmp) {
+	LL_FOREACH_SAFE(list, string, tmp) {
 		free(string->value);
 		free(string);
 	}
-
-	free(list);
 }
 
 static char confpath[PATH_MAX];
@@ -134,10 +128,10 @@
 	gid_t gid;
 
 	struct pair *pair;
-	struct pair_list *pair_list;
+	struct pair *pair_list;
 
 	struct string *string;
-	struct string_list *string_list;
+	struct string *string_list;
 
 	struct server_params *server;
 	struct plugin_params *plugin;
@@ -221,14 +215,12 @@
 string_list
 	: string
 	{
-		$$ = irc_util_calloc(1, sizeof (*$$));
-		SLIST_INIT($$);
-		SLIST_INSERT_HEAD($$, $1, link);
+		$$ = $1;
 	}
 	| string T_COMMA string_list
 	{
+		LL_PREPEND($3, $1);
 		$$ = $3;
-		SLIST_INSERT_HEAD($$, $1, link);
 	}
 	;
 
@@ -244,14 +236,12 @@
 pair_list
 	: pair T_SEMICOLON
 	{
-		$$ = irc_util_calloc(1, sizeof (*$$));
-		SLIST_INIT($$);
-		SLIST_INSERT_HEAD($$, $1, link);
+		$$ = $1;
 	}
 	| pair T_SEMICOLON pair_list
 	{
+		LL_PREPEND($3, $1);
 		$$ = $3;
-		SLIST_INSERT_HEAD($$, $1, link);
 	}
 	;
 
@@ -420,21 +410,16 @@
 		rule = irc_rule_new($2);
 
 		if ($3) {
-			if ($3->servers)
-				SLIST_FOREACH(string, $3->servers, link)
-					irc_rule_add(rule->servers, string->value);
-			if ($3->channels)
-				SLIST_FOREACH(string, $3->channels, link)
-					irc_rule_add(rule->channels, string->value);
-			if ($3->origins)
-				SLIST_FOREACH(string, $3->origins, link)
-					irc_rule_add(rule->origins, string->value);
-			if ($3->plugins)
-				SLIST_FOREACH(string, $3->plugins, link)
-					irc_rule_add(rule->plugins, string->value);
-			if ($3->events)
-				SLIST_FOREACH(string, $3->events, link)
-					irc_rule_add(rule->events, string->value);
+			LL_FOREACH($3->servers, string)
+				irc_rule_add(rule->servers, string->value);
+			LL_FOREACH($3->channels, string)
+				irc_rule_add(rule->channels, string->value);
+			LL_FOREACH($3->origins, string)
+				irc_rule_add(rule->origins, string->value);
+			LL_FOREACH($3->plugins, string)
+				irc_rule_add(rule->plugins, string->value);
+			LL_FOREACH($3->events, string)
+				irc_rule_add(rule->events, string->value);
 
 			string_list_finish($3->servers);
 			string_list_finish($3->channels);
@@ -493,7 +478,7 @@
 
 		$$ = $4;
 
-		SLIST_FOREACH(s, $2, link) {
+		LL_FOREACH($2, s) {
 			if (strcmp(s->value, "AUTO-REJOIN") == 0)
 				$$->flags |= IRC_SERVER_FLAGS_AUTO_REJOIN;
 			else if (strcmp(s->value, "JOIN-INVITE") == 0)
@@ -534,7 +519,7 @@
 			$4->hostname, $4->port);
 
 		if ($4->channels) {
-			SLIST_FOREACH(str, $4->channels, link) {
+			LL_FOREACH($4->channels, str) {
 				if ((at = strchr(str->value, '@'))) {
 					*at = 0;
 					irc_server_join(s, at + 1, str->value);
@@ -643,13 +628,13 @@
 			goto cleanup;
 
 		if ($3 && $3->templates)
-			SLIST_FOREACH(kv, $3->templates, link)
+			LL_FOREACH($3->templates, kv)
 				irc_plugin_set_template(p, kv->key, kv->value);
 		if ($3 && $3->config)
-			SLIST_FOREACH(kv, $3->config, link)
+			LL_FOREACH($3->config, kv)
 				irc_plugin_set_option(p, kv->key, kv->value);
 		if ($3 && $3->paths)
-			SLIST_FOREACH(kv, $3->paths, link)
+			LL_FOREACH($3->paths, kv)
 				irc_plugin_set_path(p, kv->key, kv->value);
 
 		irc_bot_plugin_add(p);
--- a/irccd/jsapi-server.c	Mon Jul 12 21:28:17 2021 +0200
+++ b/irccd/jsapi-server.c	Tue Jul 13 20:35:32 2021 +0200
@@ -464,7 +464,7 @@
 
 	duk_push_object(ctx);
 
-	LIST_FOREACH(s, &irc.servers, link) {
+	DL_FOREACH(irc.servers, s) {
 		jsapi_server_push(ctx, s);
 		duk_put_prop_string(ctx, -2, s->name);
 	}
--- a/irccd/jsapi-util.c	Mon Jul 12 21:28:17 2021 +0200
+++ b/irccd/jsapi-util.c	Tue Jul 13 20:35:32 2021 +0200
@@ -18,6 +18,8 @@
 
 #include <string.h>
 
+#include <utlist.h>
+
 #include <irccd/server.h>
 #include <irccd/subst.h>
 #include <irccd/util.h>
@@ -30,12 +32,11 @@
 };
 
 struct string {
-	TAILQ_ENTRY(string) link;
+	struct string *next;
+	struct string *prev;
 	char value[];
 };
 
-TAILQ_HEAD(stringlist, string);
-
 static inline void
 subspack_finish(struct subspack *subst)
 {
@@ -112,37 +113,36 @@
 }
 
 static void
-stringlist_finish(struct stringlist *list)
+stringlist_finish(struct string *list)
 {
 	struct string *s, *tmp;
 
-	TAILQ_FOREACH_SAFE(s, list, link, tmp)
+	DL_FOREACH_SAFE(list, s, tmp)
 		free(s);
 }
 
 static void
-stringlist_concat(struct stringlist *list, const char *value)
+stringlist_concat(struct string **list, const char *value)
 {
 	struct string *s;
 	char *str = irc_util_strdup(value), *token, *p = str;
 
 	while ((token = strtok_r(p, " \t\n", &p))) {
-		/* TODO: trim and check if empty. */
 		s = string_new(token);
-		TAILQ_INSERT_TAIL(list, s, link);
+		DL_APPEND(*list, s);
 	}
 
 	free(str);
 }
 
 static void
-split_from_string(duk_context *ctx, struct stringlist *list)
+split_from_string(duk_context *ctx, struct string **list)
 {
 	stringlist_concat(list, duk_require_string(ctx, 0));
 }
 
 static void
-split_from_array(duk_context *ctx, struct stringlist *list)
+split_from_array(duk_context *ctx, struct string **list)
 {
 	duk_enum(ctx, 0, DUK_ENUM_ARRAY_INDICES_ONLY);
 
@@ -153,10 +153,9 @@
 }
 
 static void
-split(duk_context *ctx, duk_idx_t index, struct stringlist *list)
+split(duk_context *ctx, duk_idx_t index, struct string **list)
 {
 	duk_require_type_mask(ctx, index, DUK_TYPE_MASK_OBJECT | DUK_TYPE_MASK_STRING);
-	TAILQ_INIT(list);
 
 	if (duk_is_string(ctx, index))
 		split_from_string(ctx, list);
@@ -182,17 +181,17 @@
 }
 
 static char *
-join(duk_context *ctx, size_t maxc, size_t maxl, const struct stringlist *tokens)
+join(duk_context *ctx, size_t maxc, size_t maxl, const struct string *tokens)
 {
 	FILE *fp;
 	char *out = NULL;
 	size_t outsz = 0, linesz = 0, tokensz, lineavail = maxl;
-	struct string *token;
+	const struct string *token;
 
 	if (!(fp = open_memstream(&out, &outsz)))
 		return NULL;
 
-	TAILQ_FOREACH(token, tokens, link) {
+	DL_FOREACH(tokens, token) {
 		tokensz = strlen(token->value);
 
 		if (tokensz > maxc) {
@@ -237,7 +236,7 @@
 static int
 Util_cut(duk_context *ctx)
 {
-	struct stringlist tokens;
+	struct string *tokens = NULL;
 	size_t maxc, maxl, i = 0;
 	char *lines, *line, *p;
 
@@ -248,8 +247,8 @@
 	split(ctx, 0, &tokens);
 
 	/* Join as new lines with a limit of maximum columns and lines. */
-	if (!(lines = join(ctx, maxc, maxl, &tokens))) {
-		stringlist_finish(&tokens);
+	if (!(lines = join(ctx, maxc, maxl, tokens))) {
+		stringlist_finish(tokens);
 		return duk_throw(ctx);
 	}
 
@@ -260,7 +259,7 @@
 		duk_put_prop_index(ctx, -2, i++);
 	}
 
-	stringlist_finish(&tokens);
+	stringlist_finish(tokens);
 	free(lines);
 
 	return 1;
--- a/irccd/peer.c	Mon Jul 12 21:28:17 2021 +0200
+++ b/irccd/peer.c	Tue Jul 13 20:35:32 2021 +0200
@@ -868,10 +868,10 @@
 
 	fprintf(fp, "OK ");
 
-	LIST_FOREACH(s, &irc.servers, link) {
+	DL_FOREACH(irc.servers, s) {
 		fprintf(fp, "%s", s->name);
 
-		if (LIST_NEXT(s, link))
+		if (s->next)
 			fputc(' ', fp);
 	}
 
@@ -915,7 +915,7 @@
 
 		irc_server_reconnect(s);
 	} else
-		LIST_FOREACH(s, &irc.servers, link)
+		DL_FOREACH(irc.servers, s)
 			irc_server_reconnect(s);
 
 	return ok(p);
--- a/lib/irccd/irccd.c	Mon Jul 12 21:28:17 2021 +0200
+++ b/lib/irccd/irccd.c	Tue Jul 13 20:35:32 2021 +0200
@@ -280,7 +280,7 @@
 	irc_server_incref(s);
 	irc_server_connect(s);
 
-	LIST_INSERT_HEAD(&irc.servers, s, link);
+	LL_PREPEND(irc.servers, s);
 }
 
 struct irc_server *
@@ -288,7 +288,7 @@
 {
 	struct irc_server *s;
 
-	LIST_FOREACH(s, &irc.servers, link)
+	DL_FOREACH(irc.servers, s)
 		if (strcmp(s->name, name) == 0)
 			return s;
 
@@ -311,7 +311,7 @@
 		.server = s
 	});
 
-	LIST_REMOVE(s, link);
+	LL_DELETE(irc.servers, s);
 	irc_server_decref(s);
 }
 
@@ -320,9 +320,10 @@
 {
 	struct irc_server *s, *tmp;
 
-	LIST_FOREACH_SAFE(s, &irc.servers, link, tmp)
+	LL_FOREACH_SAFE(irc.servers, s, tmp)
 		irc_bot_server_remove(s->name);
-	LIST_INIT(&irc.servers);
+
+	irc.servers = NULL;
 }
 
 void
@@ -582,7 +583,7 @@
 	size_t i = 1;
 	struct irc_server *s;
 
-	LIST_FOREACH(s, &irc.servers, link)
+	LL_FOREACH(irc.servers, s)
 		++i;
 
 	return i;
@@ -599,7 +600,7 @@
 	fds[0].fd = pipes[0];
 	fds[0].events = POLLIN;
 
-	LIST_FOREACH(s, &irc.servers, link)
+	LL_FOREACH(irc.servers, s)
 		irc_server_prepare(s, &fds[i++]);
 }
 
@@ -613,7 +614,7 @@
 
 	pipe_flush(&fds[0]);
 
-	LIST_FOREACH(s, &irc.servers, link)
+	LL_FOREACH(irc.servers, s)
 		irc_server_flush(s, &fds[i++]);
 }
 
@@ -622,7 +623,7 @@
 {
 	struct irc_server *s;
 
-	LIST_FOREACH(s, &irc.servers, link) {
+	LL_FOREACH(irc.servers, s) {
 		if (irc_server_poll(s, ev)) {
 			invoke(ev);
 			return 1;
--- a/lib/irccd/irccd.h	Mon Jul 12 21:28:17 2021 +0200
+++ b/lib/irccd/irccd.h	Tue Jul 13 20:35:32 2021 +0200
@@ -31,7 +31,7 @@
 #endif
 
 extern struct irc {
-	struct irc_server_list servers;
+	struct irc_server *servers;
 	struct irc_plugin *plugins;
 	struct irc_plugin_loader *plugin_loaders;
 	struct irc_rule *rules;
--- a/lib/irccd/server.h	Mon Jul 12 21:28:17 2021 +0200
+++ b/lib/irccd/server.h	Tue Jul 13 20:35:32 2021 +0200
@@ -19,7 +19,6 @@
 #ifndef IRCCD_SERVER_H
 #define IRCCD_SERVER_H
 
-#include <sys/queue.h>
 #include <stddef.h>
 #include <time.h>
 
@@ -95,11 +94,9 @@
 	struct irc_conn *conn;
 	size_t refc;
 	time_t lost_tp, last_tp;
-	LIST_ENTRY(irc_server) link;
+	struct irc_server *next;
 };
 
-LIST_HEAD(irc_server_list, irc_server);
-
 struct irc_server *
 irc_server_new(const char *,
                const char *,
--- a/tests/test-bot.c	Mon Jul 12 21:28:17 2021 +0200
+++ b/tests/test-bot.c	Tue Jul 13 20:35:32 2021 +0200
@@ -44,32 +44,32 @@
 
 	/* irc.servers -> s1 */
 	irc_bot_server_add(s1);
-	s = LIST_FIRST(&irc.servers);
+	s = irc.servers;
 	GREATEST_ASSERT_EQ(1, s->refc);
 	GREATEST_ASSERT_EQ(s, s1);
-	s = LIST_NEXT(s, link);
+	s = s->next;
 	GREATEST_ASSERT(!s);
 
 	/* irc.servers -> s2 -> s1 */
 	irc_bot_server_add(s2);
-	s = LIST_FIRST(&irc.servers);
+	s = irc.servers;
 	GREATEST_ASSERT_EQ(1, s->refc);
 	GREATEST_ASSERT_EQ(s, s2);
-	s = LIST_NEXT(s, link);
+	s = s->next;
 	GREATEST_ASSERT_EQ(s, s1);
-	s = LIST_NEXT(s, link);
+	s = s->next;
 	GREATEST_ASSERT(!s);
 
 	/* irc.servers -> s3 -> s2 -> s1 */
 	irc_bot_server_add(s3);
-	s = LIST_FIRST(&irc.servers);
+	s = irc.servers;
 	GREATEST_ASSERT_EQ(1, s->refc);
 	GREATEST_ASSERT_EQ(s, s3);
-	s = LIST_NEXT(s, link);
+	s = s->next;
 	GREATEST_ASSERT_EQ(s, s2);
-	s = LIST_NEXT(s, link);
+	s = s->next;
 	GREATEST_ASSERT_EQ(s, s1);
-	s = LIST_NEXT(s, link);
+	s = s->next;
 	GREATEST_ASSERT(!s);
 
 	GREATEST_PASS();
@@ -100,11 +100,11 @@
 	GREATEST_ASSERT_EQ(2, s1->refc);
 	GREATEST_ASSERT_EQ(1, s2->refc);
 	GREATEST_ASSERT_EQ(2, s3->refc);
-	s = LIST_FIRST(&irc.servers);
+	s = irc.servers;
 	GREATEST_ASSERT_EQ(s, s3);
-	s = LIST_NEXT(s, link);
+	s = s->next;
 	GREATEST_ASSERT_EQ(s, s1);
-	s = LIST_NEXT(s, link);
+	s = s->next;
 	GREATEST_ASSERT(!s);
 
 	/* irc.servers -> s3 -> [s1] */
@@ -113,9 +113,9 @@
 	GREATEST_ASSERT_EQ(1, s1->refc);
 	GREATEST_ASSERT_EQ(1, s2->refc);
 	GREATEST_ASSERT_EQ(2, s3->refc);
-	s = LIST_FIRST(&irc.servers);
+	s = irc.servers;
 	GREATEST_ASSERT_EQ(s, s3);
-	s = LIST_NEXT(s, link);
+	s = s->next;
 	GREATEST_ASSERT(!s);
 
 	/* irc.servers -> [s3] */
@@ -124,7 +124,7 @@
 	GREATEST_ASSERT_EQ(1, s1->refc);
 	GREATEST_ASSERT_EQ(1, s2->refc);
 	GREATEST_ASSERT_EQ(1, s3->refc);
-	s = LIST_FIRST(&irc.servers);
+	s = irc.servers;
 	GREATEST_ASSERT(!s);
 
 	irc_server_decref(s1);
@@ -156,7 +156,7 @@
 	GREATEST_ASSERT_EQ(1, s1->refc);
 	GREATEST_ASSERT_EQ(1, s2->refc);
 	GREATEST_ASSERT_EQ(1, s3->refc);
-	GREATEST_ASSERT(!LIST_FIRST(&irc.servers));
+	GREATEST_ASSERT(!irc.servers);
 	GREATEST_PASS();
 }