plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

frstr.c (626B)


      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 *
     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
     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 }