* lh/improve-range-search: html.c: use '+' to escape spaces in urls ui-log.c: improve handling of range-search argument Add vector utility functionsupstream
commit
e66a16cebc
@ -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; |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
#ifndef CGIT_VECTOR_H |
||||||
|
#define CGIT_VECTOR_H |
||||||
|
|
||||||
|
#include <stdlib.h> |
||||||
|
|
||||||
|
struct vector { |
||||||
|
size_t size; |
||||||
|
size_t count; |
||||||
|
size_t alloc; |
||||||
|
void *data; |
||||||
|
}; |
||||||
|
|
||||||
|
#define VECTOR_INIT(type) {sizeof(type), 0, 0, NULL} |
||||||
|
|
||||||
|
int vector_push(struct vector *vec, const void *data, int gently); |
||||||
|
|
||||||
|
#endif /* CGIT_VECTOR_H */ |
Loading…
Reference in new issue