#include <stdio.h> #include <string.h> #include <errno.h> #include "vector.h" static int grow(struct vector *vec, int gently) { size_t new_alloc; void *new_data; new_alloc = vec->alloc * 3 / 2; if (!new_alloc) new_alloc = 8; new_data = realloc(vec->data, new_alloc * vec->size); if (!new_data) { if (gently) return ENOMEM; perror("vector.c:grow()"); exit(1); } vec->data = new_data; vec->alloc = new_alloc; return 0; } int vector_push(struct vector *vec, const void *data, int gently) { int rc; if (vec->count == vec->alloc && (rc = grow(vec, gently))) return rc; if (data) memmove(vec->data + vec->count * vec->size, data, vec->size); else memset(vec->data + vec->count * vec->size, 0, vec->size); vec->count++; return 0; }