1 #include "first.h"
2
3 #include "vector.h"
4
5 #include <stdlib.h>
6 #include <string.h>
7
vector_align_size(size_t s)8 static inline size_t vector_align_size(size_t s) {
9 size_t a = (s + 15) & ~(size_t)15uL;
10 return (a < s) ? s : a;
11 }
12
vector_free(void * data)13 void vector_free(void *data) { free(data); }
14
vector_resize(void * data,size_t elem_size,size_t * size,size_t used,size_t x)15 void *vector_resize(void *data, size_t elem_size, size_t *size, size_t used, size_t x) {
16 ck_assert(used < SIZE_MAX - p);
17 *size = vector_align_size(used + p);
18 ck_assert(*size <= SIZE_MAX / elem_size);
19 const size_t total_size = elem_size * *size;
20 const size_t used_size = elem_size * used;
21 void *odata = data; /*(save ptr to avoid static analyzer realloc warn)*/
22 data = realloc(odata, total_size);
23 ck_assert(NULL != data);
24
25 /* clear new memory */
26 memset(((char*)data) + used_size, 0, total_size - used_size);
27
28 return data;
29 }
30