Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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
}