libframe/frstr.c (raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include <u.h> #include <libc.h> #include <draw.h> #include <mouse.h> #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; } |