summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/util.c17
-rw-r--r--src/shared/util.h2
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);