File: util.c

package info (click to toggle)
vali 0.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 284 kB
  • sloc: ansic: 3,980; makefile: 3
file content (30 lines) | stat: -rw-r--r-- 538 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdlib.h>

#include "util.h"

void *array_add(struct array *arr, size_t size) {
	size_t new_cap = arr->cap;
	if (new_cap == 0) {
		new_cap = 64;
	}
	while (new_cap < arr->size + size) {
		new_cap *= 2;
	}
	if (arr->cap != new_cap) {
		void *new_data = realloc(arr->data, new_cap);
		if (new_data == NULL) {
			abort();
		}
		arr->data = new_data;
		arr->cap = new_cap;
	}

	char *data = arr->data;
	void *entry = &data[arr->size];
	arr->size += size;
	return entry;
}

void array_finish(struct array *arr) {
	free(arr->data);
}