diff options
author | Linus Nordberg <linus@nordberg.se> | 2013-08-28 13:48:49 +0200 |
---|---|---|
committer | Linus Nordberg <linus@nordberg.se> | 2013-09-05 15:15:32 +0200 |
commit | 33a3b21fa6926e8cbe61725dd80d258951766e2f (patch) | |
tree | e96b714d24571395a9a93adcc958af933b878431 /list.c | |
parent | e0b805508ae91a82c1992bdf35db5efcd89cfd6d (diff) |
Keep Proxy-State attributes in all replies to clients.
Closes RADSECPROXY-52.
Diffstat (limited to 'list.c')
-rw-r--r-- | list.c | 39 |
1 files changed, 28 insertions, 11 deletions
@@ -5,29 +5,46 @@ #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) { +/* Private helper functions. */ +static void list_free_helper_(struct list *list, int free_data_flag) { struct list_node *node, *next; if (!list) return; for (node = list->first; node; node = next) { - free(node->data); + if (free_data_flag) + free(node->data); next = node->next; free(node); } free(list); } +/* Public functions. */ + +/* 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 + note that the data pointed at from each node is also freed + use list_free() to free only the memory used by the list itself */ +void list_destroy(struct list *list) { + list_free_helper_(list, 1); +} + +/* frees the meory used by the list itself + note that the data pointed at from each node is not freed + use list_destroy() to free all the data associated with the list */ +void list_free(struct list *list) { + list_free_helper_(list, 0); +} + /* appends entry to list; returns 1 if ok, 0 if malloc fails */ int list_push(struct list *list, void *data) { struct list_node *node; |