1 #include "first.h" 2 3 #include "vector.h" 4 5 #include <stdlib.h> 6 #include <string.h> 7 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 13 void vector_free(void *data) { free(data); } 14 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 data = realloc(data, total_size); 22 ck_assert(NULL != data); 23 24 /* clear new memory */ 25 memset(((char*)data) + used_size, 0, total_size - used_size); 26 27 return data; 28 } 29