Blob
1 #include <u.h>2 #include <libc.h>3 #include "libString.h"5 /* grow a String's allocation by at least `incr' bytes */6 extern String*7 s_grow(String *s, int incr)8 {9 char *cp;10 int size;12 if(s->fixed)13 sysfatal("s_grow of constant string");14 s = s_unique(s);16 /*17 * take a larger increment to avoid mallocing too often18 */19 size = s->end-s->base;20 if(size/2 < incr)21 size += incr;22 else23 size += size/2;25 cp = realloc(s->base, size);26 if (cp == 0)27 sysfatal("s_grow: %r");28 s->ptr = (s->ptr - s->base) + cp;29 s->end = cp + size;30 s->base = cp;32 return s;33 }