diff options
| author | Louis Burda <quent.burda@gmail.com> | 2021-12-16 17:11:12 +0100 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2021-12-20 15:31:31 +0100 |
| commit | 3eea7a245a7ed49127a222628543f9509a6ff2b6 (patch) | |
| tree | 345a923819b73bc88b551af5f708476239b6b7d9 /ref.c | |
| parent | 15a8fe2cf2b16af8739a7ec2b64b5c5f184161b8 (diff) | |
| download | tmus-3eea7a245a7ed49127a222628543f9509a6ff2b6.tar.gz tmus-3eea7a245a7ed49127a222628543f9509a6ff2b6.zip | |
Switched most buffers to wide chars, added general ref class, now clear mpd errors, added track and command completion
Diffstat (limited to 'ref.c')
| -rw-r--r-- | ref.c | 68 |
1 files changed, 68 insertions, 0 deletions
@@ -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); +} + |
