Blame


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