aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-09-11 10:40:10 +0200
committerMartin Willi <martin@revosec.ch>2012-09-11 16:18:28 +0200
commitdc7b79d8a5c8104001bba4c52a8b3716a0cf6d88 (patch)
tree526e7d8168dc4c08163f4f37fb204efa4235b848 /src
parentf942588f951b7a2e519cdbf5f4da07143a24ae4f (diff)
downloadstrongswan-dc7b79d8a5c8104001bba4c52a8b3716a0cf6d88.tar.bz2
strongswan-dc7b79d8a5c8104001bba4c52a8b3716a0cf6d88.tar.xz
Add a linked list constructor initializing from an enumerator
Diffstat (limited to 'src')
-rw-r--r--src/libstrongswan/utils/linked_list.c19
-rw-r--r--src/libstrongswan/utils/linked_list.h8
2 files changed, 27 insertions, 0 deletions
diff --git a/src/libstrongswan/utils/linked_list.c b/src/libstrongswan/utils/linked_list.c
index 59d416f2f..6b5f5f81a 100644
--- a/src/libstrongswan/utils/linked_list.c
+++ b/src/libstrongswan/utils/linked_list.c
@@ -572,3 +572,22 @@ linked_list_t *linked_list_create()
return &this->public;
}
+
+/*
+ * See header.
+ */
+linked_list_t *linked_list_create_from_enumerator(enumerator_t *enumerator)
+{
+ linked_list_t *list;
+ void *item;
+
+ list = linked_list_create();
+
+ while (enumerator->enumerate(enumerator, &item))
+ {
+ list->insert_last(list, item);
+ }
+ enumerator->destroy(enumerator);
+
+ return list;
+}
diff --git a/src/libstrongswan/utils/linked_list.h b/src/libstrongswan/utils/linked_list.h
index 293ca8661..b5b29e4c3 100644
--- a/src/libstrongswan/utils/linked_list.h
+++ b/src/libstrongswan/utils/linked_list.h
@@ -299,4 +299,12 @@ struct linked_list_t {
*/
linked_list_t *linked_list_create(void);
+/**
+ * Creates a linked list from an enumerator.
+ *
+ * @enumerator enumerator over void*, gets destroyed
+ * @return linked_list_t object, containing enumerated values
+ */
+linked_list_t *linked_list_create_from_enumerator(enumerator_t *enumerator);
+
#endif /** LINKED_LIST_H_ @}*/