diff --git a/src/libstrongswan/utils/linked_list.c b/src/libstrongswan/utils/linked_list.c index 6b5f5f81a..1ff80999b 100644 --- a/src/libstrongswan/utils/linked_list.c +++ b/src/libstrongswan/utils/linked_list.c @@ -16,6 +16,7 @@ */ #include +#include #include "linked_list.h" @@ -591,3 +592,24 @@ linked_list_t *linked_list_create_from_enumerator(enumerator_t *enumerator) return list; } + +/* + * See header. + */ +linked_list_t *linked_list_create_with_items(void *item, ...) +{ + linked_list_t *list; + va_list args; + + list = linked_list_create(); + + va_start(args, item); + while (item) + { + list->insert_last(list, item); + item = va_arg(args, void*); + } + va_end(args); + + return list; +} diff --git a/src/libstrongswan/utils/linked_list.h b/src/libstrongswan/utils/linked_list.h index b5b29e4c3..1b5518480 100644 --- a/src/libstrongswan/utils/linked_list.h +++ b/src/libstrongswan/utils/linked_list.h @@ -302,9 +302,18 @@ 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 + * @param 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); +/** + * Creates a linked list from a NULL terminated vararg list of items. + * + * @param first first item + * @param ... subsequent items, terminated by NULL + * @return linked_list_t object, containing passed items + */ +linked_list_t *linked_list_create_with_items(void *first, ...); + #endif /** LINKED_LIST_H_ @}*/