diff options
author | Martin Willi <martin@revosec.ch> | 2012-09-11 10:40:10 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-09-11 16:18:28 +0200 |
commit | dc7b79d8a5c8104001bba4c52a8b3716a0cf6d88 (patch) | |
tree | 526e7d8168dc4c08163f4f37fb204efa4235b848 /src | |
parent | f942588f951b7a2e519cdbf5f4da07143a24ae4f (diff) | |
download | strongswan-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.c | 19 | ||||
-rw-r--r-- | src/libstrongswan/utils/linked_list.h | 8 |
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_ @}*/ |