ref: aa8af9c5a32b5f3afe0e612981fe4d9fada43d34
dir: /sys/src/libString/s_grow.c/
#include <u.h> #include <libc.h> #include "String.h" /* grow a String's allocation by at least `incr' bytes */ extern String* s_grow(String *s, int incr) { char *cp; int size; if(s->fixed) sysfatal("s_grow of constant string"); s = s_unique(s); /* * take a larger increment to avoid mallocing too often */ size = s->end-s->base; if(size/2 < incr) size += incr; else size += size/2; cp = realloc(s->base, size); if (cp == 0) sysfatal("s_grow: %r"); s->ptr = (s->ptr - s->base) + cp; s->end = cp + size; s->base = cp; return s; }