#include #include #include #include #include "frame.h" #define CHUNK 16 #define ROUNDUP(n) ((n + CHUNK) & ~(CHUNK - 1)) uchar* _frallocstr(Frame* f, unsigned n) { uchar* p; p = malloc(ROUNDUP(n)); if (p == 0) drawerror(f->display, "out of memory"); return p; } void _frinsure(Frame* f, int bn, unsigned n) { Frbox* b; uchar* p; b = &f->box[bn]; if (b->nrune < 0) drawerror(f->display, "_frinsure"); if (ROUNDUP(b->nrune) > n) /* > guarantees room for terminal NUL */ return; p = _frallocstr(f, n); b = &f->box[bn]; memmove(p, b->ptr, NBYTE(b) + 1); free(b->ptr); b->ptr = p; }