]> git.ipfire.org Git - people/ms/strongswan.git/blobdiff - src/libstrongswan/collections/array.c
array: Add an insert/create function for value based arrays
[people/ms/strongswan.git] / src / libstrongswan / collections / array.c
index 8d619116a7826d5a7c132998bc0c6faeafe6cab7..a45a68aafeb3a35659e070bbd69dd5cee3b498ab 100644 (file)
@@ -277,6 +277,16 @@ void array_insert_create(array_t **array, int idx, void *ptr)
        array_insert(*array, idx, ptr);
 }
 
+void array_insert_create_value(array_t **array, u_int esize,
+                                                          int idx, void *val)
+{
+       if (*array == NULL)
+       {
+               *array = array_create(esize, 0);
+       }
+       array_insert(*array, idx, val);
+}
+
 void array_insert_enumerator(array_t *array, int idx, enumerator_t *enumerator)
 {
        void *ptr;
@@ -361,16 +371,16 @@ bool array_remove(array_t *array, int idx, void *data)
        {
                return FALSE;
        }
+       if (idx < 0)
+       {
+               idx = array_count(array) - 1;
+       }
        if (idx > array_count(array) / 2)
        {
                remove_tail(array, idx);
        }
        else
        {
-               if (idx < 0)
-               {
-                       idx = array_count(array) - 1;
-               }
                remove_head(array, idx);
        }
        if (array->head + array->tail > ARRAY_MAX_UNUSED)