ref: a5db044fd3ccb8f021d4deb07b3dc732ed41d699
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; }