This helper resizes the array to a given length and zeroes out all new
elements.
Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
+#include "shl_misc.h"
struct shl_array {
size_t element_size;
free(arr);
}
+/* resize to length=size and zero out new array entries */
+static inline int shl_array_zresize(struct shl_array *arr, size_t size)
+{
+ void *tmp;
+ size_t newsize;
+
+ if (!arr)
+ return -EINVAL;
+
+ if (size > arr->size) {
+ newsize = shl_next_pow2(size);
+ tmp = realloc(arr->data, arr->element_size * newsize);
+ if (!tmp)
+ return -ENOMEM;
+
+ arr->data = tmp;
+ arr->size = newsize;
+
+ memset(((uint8_t*)arr->data) + arr->element_size * arr->length,
+ 0, arr->element_size * (size - arr->length));
+ }
+
+ arr->length = size;
+ return 0;
+}
+
static inline int shl_array_push(struct shl_array *arr, const void *data)
{
void *tmp;