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 often
18 */
19 size = s->end-s->base;
20 if(size/2 < incr)
21 size += incr;
22 else
23 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 }