From 958a95b37891098133369e835a2ab687e0dfa9dc Mon Sep 17 00:00:00 2001
From: Lars Hjemli
Date: Tue, 9 Nov 2010 19:57:18 +0100
Subject: Add vector utility functions

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
 vector.c | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)
 create mode 100644 vector.c

(limited to 'vector.c')

diff --git a/vector.c b/vector.c
new file mode 100644
index 0000000..0863908
--- /dev/null
+++ b/vector.c
@@ -0,0 +1,38 @@
+#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;
+}
-- 
cgit v1.2.3-54-g00ecf