xref: /lighttpd1.4/src/vector.c (revision c3ad18c4)
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