aboutsummaryrefslogtreecommitdiff
path: root/src/base/string/fit.c
blob: 56ab04132b6c61ad78e7ceb1e6fc6b4dd508252a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
}