src/chain.c
changeset 35 3715247e8f5a
child 69 6f298b6e0d5f
--- /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);
+    }
+}