aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstrongswan/utils')
-rw-r--r--src/libstrongswan/utils/iterator.h7
-rw-r--r--src/libstrongswan/utils/linked_list.c11
2 files changed, 17 insertions, 1 deletions
diff --git a/src/libstrongswan/utils/iterator.h b/src/libstrongswan/utils/iterator.h
index de81db8e9..7cc22c24b 100644
--- a/src/libstrongswan/utils/iterator.h
+++ b/src/libstrongswan/utils/iterator.h
@@ -44,6 +44,13 @@ typedef struct iterator_t iterator_t;
struct iterator_t {
/**
+ * @brief Return number of list items.
+ *
+ * @param this calling object
+ * @return number of list items
+ */
+ int (*get_count) (iterator_t *this);
+ /**
* @brief Iterate over all items.
*
* The easy way to iterate over items.
diff --git a/src/libstrongswan/utils/linked_list.c b/src/libstrongswan/utils/linked_list.c
index 64443434b..2d2917454 100644
--- a/src/libstrongswan/utils/linked_list.c
+++ b/src/libstrongswan/utils/linked_list.c
@@ -152,7 +152,15 @@ struct private_iterator_t {
};
/**
- * Implementation of iterator_t.has_next.
+ * Implementation of iterator_t.get_count.
+ */
+static int get_list_count(private_iterator_t *this)
+{
+ return this->list->count;
+}
+
+/**
+ * Implementation of iterator_t.iterate.
*/
static bool iterate(private_iterator_t *this, void** value)
{
@@ -665,6 +673,7 @@ static iterator_t *create_iterator (private_linked_list_t *linked_list,bool forw
{
private_iterator_t *this = malloc_thing(private_iterator_t);
+ this->public.get_count = (bool (*) (iterator_t *this)) get_list_count;
this->public.iterate = (bool (*) (iterator_t *this, void **value)) iterate;
this->public.has_next = (bool (*) (iterator_t *this)) iterator_has_next;
this->public.current = (status_t (*) (iterator_t *this, void **value)) iterator_current;