summaryrefslogtreecommitdiff
path: root/list.c
diff options
context:
space:
mode:
authorLinus Nordberg <linus@nordberg.se>2013-08-28 13:48:49 +0200
committerLinus Nordberg <linus@nordberg.se>2013-09-05 15:26:11 +0200
commit506b4eea8641e69ccf1ad35c185346299019afda (patch)
tree67e16baca9188012049e829fe6ba8e74d721ad9b /list.c
parentb1a17ab16492b1ebb13e2d696b2f121a85fa71ba (diff)
Keep Proxy-State attributes in all replies to clients.
Closes RADSECPROXY-52.
Diffstat (limited to 'list.c')
-rw-r--r--list.c39
1 files changed, 28 insertions, 11 deletions
diff --git a/list.c b/list.c
index 58ab7aa..be59fff 100644
--- a/list.c
+++ b/list.c
@@ -10,29 +10,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;