]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libframe/frstr.c
ndb/dns: lookup *all* entries in dblookup(), v4 and v6 queries in parallel, remove...
[plan9front.git] / sys / src / libframe / frstr.c
1 #include <u.h>
2 #include <libc.h>
3 #include <draw.h>
4 #include <thread.h>
5 #include <mouse.h>
6 #include <frame.h>
7
8 #define CHUNK   16
9 #define ROUNDUP(n)      ((n+CHUNK)&~(CHUNK-1))
10
11 uchar *
12 _frallocstr(Frame *f, unsigned n)
13 {
14         uchar *p;
15
16         p = malloc(ROUNDUP(n));
17         if(p == 0)
18                 drawerror(f->display, "out of memory");
19         return p;
20 }
21
22 void
23 _frinsure(Frame *f, int bn, unsigned n)
24 {
25         Frbox *b;
26         uchar *p;
27
28         b = &f->box[bn];
29         if(b->nrune < 0)
30                 drawerror(f->display, "_frinsure");
31         if(ROUNDUP(b->nrune) > n)       /* > guarantees room for terminal NUL */
32                 return;
33         p = _frallocstr(f, n);
34         b = &f->box[bn];
35         memmove(p, b->ptr, NBYTE(b)+1);
36         free(b->ptr);
37         b->ptr = p;
38 }