diff options
author | venaas <venaas> | 2007-06-20 14:59:20 +0000 |
---|---|---|
committer | venaas <venaas@e88ac4ed-0b26-0410-9574-a7f39faa03bf> | 2007-06-20 14:59:20 +0000 |
commit | a30235ad2c9992fba307dedfdb5cdc5e3feaa226 (patch) | |
tree | 643ce6b662f9516a0e781b20c1cf5def4d1a5282 /list.c | |
parent | 9114cdf0d4a0fdd385f7798d0a6686b0551d3a6a (diff) |
using linked lists instead of arrays
git-svn-id: https://svn.testnett.uninett.no/radsecproxy/trunk@147 e88ac4ed-0b26-0410-9574-a7f39faa03bf
Diffstat (limited to 'list.c')
-rw-r--r-- | list.c | 53 |
1 files changed, 53 insertions, 0 deletions
@@ -0,0 +1,53 @@ +#include <stdlib.h> +#include <string.h> +#include "list.h" + +/* allocates and initialises list structure; returns NULL if malloc fails */ +struct list *list_create() { + struct list *list = malloc(sizeof(struct list)); + if (list) + memset(list, 0, sizeof(struct list)); + return list; +} + +/* frees all memory associated with the list */ +void list_destroy(struct list *list) { + struct list_node *node, *next; + + for (node = list->first; node; node = next) { + free(node->data); + next = node->next; + free(node); + } + free(list); +} + +/* appends entry to list; returns 1 if ok, 0 if malloc fails */ +int list_add(struct list *list, void *data) { + struct list_node *node; + + node = malloc(sizeof(struct list_node)); + if (!node) + return 0; + + node->next = NULL; + node->data = data; + + if (list->first) + list->last->next = node; + else + list->first = node; + list->last = node; + + return 1; +} + +/* returns first node */ +struct list_node *list_first(struct list *list) { + return list->first; +} + +/* returns the next node after the argument */ +struct list_node *list_next(struct list_node *node) { + return node->next; +} |