Subversion Repositories planix.SVN

Rev

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

#include <u.h>
#include <libc.h>
#include <draw.h>
#include <thread.h>
#include <mouse.h>
#include <frame.h>

#define CHUNK   16
#define ROUNDUP(n)      ((n+CHUNK)&~(CHUNK-1))

uchar *
_frallocstr(Frame *f, unsigned n)
{
        uchar *p;

        p = malloc(ROUNDUP(n));
        if(p == 0)
                drawerror(f->display, "out of memory");
        return p;
}

void
_frinsure(Frame *f, int bn, unsigned n)
{
        Frbox *b;
        uchar *p;

        b = &f->box[bn];
        if(b->nrune < 0)
                drawerror(f->display, "_frinsure");
        if(ROUNDUP(b->nrune) > n)       /* > guarantees room for terminal NUL */
                return;
        p = _frallocstr(f, n);
        b = &f->box[bn];
        memmove(p, b->ptr, NBYTE(b)+1);
        free(b->ptr);
        b->ptr = p;
}