]> gitweb.ps.run Git - ps-cgit/blob - vector.c
cache.c: cache ls_cache output properly
[ps-cgit] / vector.c
1 #include <stdio.h>
2 #include <string.h>
3 #include <errno.h>
4 #include "vector.h"
5
6 static int grow(struct vector *vec, int gently)
7 {
8         size_t new_alloc;
9         void *new_data;
10
11         new_alloc = vec->alloc * 3 / 2;
12         if (!new_alloc)
13                 new_alloc = 8;
14         new_data = realloc(vec->data, new_alloc * vec->size);
15         if (!new_data) {
16                 if (gently)
17                         return ENOMEM;
18                 perror("vector.c:grow()");
19                 exit(1);
20         }
21         vec->data = new_data;
22         vec->alloc = new_alloc;
23         return 0;
24 }
25
26 int vector_push(struct vector *vec, const void *data, int gently)
27 {
28         int rc;
29
30         if (vec->count == vec->alloc && (rc = grow(vec, gently)))
31                 return rc;
32         if (data)
33                 memmove(vec->data + vec->count * vec->size, data, vec->size);
34         else
35                 memset(vec->data + vec->count * vec->size, 0, vec->size);
36         vec->count++;
37         return 0;
38 }