--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/chain.c Thu Mar 12 18:07:47 2009 +0200
@@ -0,0 +1,39 @@
+#include "chain.h"
+
+#include <stdlib.h>
+
+err_t chain_add (struct chain_list *list, const void *chain, void *arg)
+{
+ struct chain_head *item;
+
+ // allocate the chain item
+ if ((item = calloc(1, sizeof(*item))) == NULL)
+ return ERR_CALLOC;
+
+ // store
+ item->chain = chain;
+ item->arg = arg;
+
+ // append
+ STAILQ_INSERT_TAIL(list, item, node);
+
+ // ok
+ return SUCCESS;
+}
+
+void chain_free (struct chain_list *list)
+{
+ // start from the first item
+ struct chain_head *next = STAILQ_FIRST(list);
+
+ // clean up any handler chains
+ while (next) {
+ struct chain_head *node = next;
+
+ // update next
+ next = STAILQ_NEXT(node, node);
+
+ // free
+ free(node);
+ }
+}