38 lines · 762 B · C
RawDownload
#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;}