1 #include <u.h>
2 #include <libc.h>
3 #include <draw.h>
4 #include <mouse.h>
5 #include <frame.h>
6 
7 #define	CHUNK	16
8 #define	ROUNDUP(n)	((n+CHUNK)&~(CHUNK-1))
9 
10 uchar *
_frallocstr(Frame * f,unsigned n)11 _frallocstr(Frame *f, unsigned n)
12 {
13 	uchar *p;
14 
15 	p = malloc(ROUNDUP(n));
16 	if(p == 0)
17 		drawerror(f->display, "out of memory");
18 	return p;
19 }
20 
21 void
_frinsure(Frame * f,int bn,unsigned n)22 _frinsure(Frame *f, int bn, unsigned n)
23 {
24 	Frbox *b;
25 	uchar *p;
26 
27 	b = &f->box[bn];
28 	if(b->nrune < 0)
29 		drawerror(f->display, "_frinsure");
30 	if(ROUNDUP(b->nrune) > n)	/* > guarantees room for terminal NUL */
31 		return;
32 	p = _frallocstr(f, n);
33 	b = &f->box[bn];
34 	memmove(p, b->ptr, NBYTE(b)+1);
35 	free(b->ptr);
36 	b->ptr = p;
37 }
38