about summary refs log tree commit diff
path: root/vector.c
blob: 086390893775686a7ea21fc24da8b8ae7eb049e1 (plain) (blame)
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
31
32
33
34
35
36
37
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;
}
ogheader'>2019-05-27Break nicks with ZWNJJune McEnroe This should prevent bad wrapping. 2019-05-26Add DawnJune McEnroe 2019-05-20Declare vasprintf(3) for GNUJune McEnroe who the fuck is scraeming "#define _GNU_SOURCE" at my house. show yourself, coward. i will never #define _GNU_SOURCE 2019-05-20Fix comparison warning in ttpreJune McEnroe 2019-05-20Add AuthorityJune McEnroe 2019-05-19Specify precedence of unary versions of operatorsJune McEnroe 2019-05-18Add compound assignment operators to orderJune McEnroe 2019-05-15Support simple assignment in orderJune McEnroe 2019-05-15Implement sizeof in orderJune McEnroe 2019-05-15Add orderJune McEnroe 2019-05-12Add T suffix in bitJune McEnroe 2019-05-10Highlight yacc and lex files as CJune McEnroe Their %-prefixed directives should probably be highlighted Macro. 2019-05-10Use val instead of suboptargJune McEnroe suboptarg doesn't exist in GNU. Hopefully BSD getsubopt also sets val on failure? 2019-05-09Add Parable of the SowerJune McEnroe 2019-05-07Add bit without buildJune McEnroe Need to do some stuff in the Makefile for lex and yacc and generating HTML pages for it. 2019-05-04Fix MANDIR typoJune McEnroe 2019-05-04Move relay to binJune McEnroe