Mercurial > irccd
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(); }