More buffer functions.
[apps/madmutt.git] / lib-lib / mem.h
index ca9712b..8d904b3 100644 (file)
 #define p_dupstr(p, len)        xmemdupstr((p), (len))
 #define p_realloc(pp, count)    xrealloc((void*)(pp), sizeof(**(pp)) * (count))
 
+#define p_alloc_nr(x) (((x) + 16) * 3 / 2)
+
+#define p_allocgrow(pp, goalnb, allocnb)                  \
+  do {                                                    \
+      if ((goalnb) > *(allocnb)) {                        \
+          if (p_alloc_nr(*(allocnb)) < (goalnb)) {        \
+              *(allocnb) = (goalnb);                      \
+          } else {                                        \
+              *(allocnb) = p_alloc_nr(*(allocnb));        \
+          }                                               \
+          p_realloc(pp, *(allocnb));                      \
+      }                                                   \
+  } while (0)
+
 #ifdef __GNUC__
 
 #  define p_delete(mem_pp)                          \