diff options
Diffstat (limited to 'sys/base/string/fit.c')
-rw-r--r-- | sys/base/string/fit.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/sys/base/string/fit.c b/sys/base/string/fit.c new file mode 100644 index 0000000..56ab041 --- /dev/null +++ b/sys/base/string/fit.c @@ -0,0 +1,20 @@ +#include "internal.h" + +// fit reallocates the string such that the buffer is exactly sized for the +// buffer. if the capacity equals the length, then the function is a noop. the +// byte array is unchanged. +void +str·fit(string *s) +{ + Hdr* h; + vlong cap = str·cap(*s); + vlong len = str·len(*s); + + if (cap == len) return; + + h = (Hdr*)(s - sizeof(Hdr)); + h = realloc(h, sizeof(*h) + len + 1); + h->cap = len; + + *s = h->buf; +} |