From 3eea7a245a7ed49127a222628543f9509a6ff2b6 Mon Sep 17 00:00:00 2001 From: Louis Burda Date: Thu, 16 Dec 2021 17:11:12 +0100 Subject: Switched most buffers to wide chars, added general ref class, now clear mpd errors, added track and command completion --- ref.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 ref.c (limited to 'ref.c') diff --git a/ref.c b/ref.c new file mode 100644 index 0000000..c961dd7 --- /dev/null +++ b/ref.c @@ -0,0 +1,68 @@ +#include "ref.h" +#include "util.h" + +struct ref * +ref_init(void *data) +{ + struct ref *ref; + + ref = malloc(sizeof(struct ref)); + ASSERT(ref != NULL); + ref->link = LINK_EMPTY; + ref->data = data; + return ref; +} + +void +ref_free(struct ref *ref) +{ + free(ref); +} + +void +refs_free(struct link *head) +{ + struct link *cur; + + while (head->next) { + cur = link_pop(head->next); + ref_free(UPCAST(cur, struct ref)); + } +} + +static struct link * +refs_ffind(struct link *head, void *data) +{ + struct link *iter; + + for (iter = head->next; iter; iter = iter->next) { + if (UPCAST(iter, struct ref)->data == data) + return iter; + } + + return NULL; +} + +int +refs_incl(struct link *head, void *data) +{ + struct link *ref; + + ref = refs_ffind(head, data); + return ref != NULL; +} + +void +refs_rm(struct link *head, void *data) +{ + struct link *ref; + struct ref *dataref; + + ref = refs_ffind(head, data); + if (!ref) return; + + dataref = UPCAST(ref, struct ref); + link_pop(ref); + free(dataref); +} + -- cgit v1.2.3-71-gd317