diff options
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/util.c | 17 | ||||
-rw-r--r-- | src/shared/util.h | 2 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/shared/util.c b/src/shared/util.c index 873c95820a..760013c1fb 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -5855,3 +5855,20 @@ char *strrep(const char *s, unsigned n) { *p = 0; return r; } + +void* greedy_realloc(void **p, size_t *allocated, size_t need) { + size_t a; + void *q; + + if (*allocated >= need) + return *p; + + a = MAX(64, need * 2); + q = realloc(*p, a); + if (!q) + return NULL; + + *p = q; + *allocated = a; + return q; +} diff --git a/src/shared/util.h b/src/shared/util.h index 0d05cd6653..d1cdd901a0 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -613,3 +613,5 @@ void *unhexmem(const char *p, size_t l); char *strextend(char **x, ...); char *strrep(const char *s, unsigned n); + +void* greedy_realloc(void **p, size_t *allocated, size_t need); |