frstr.c - sam - An updated version of the sam text editor.
 (HTM) git clone git://vernunftzentrum.de/sam.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
       frstr.c (771B)
       ---
            1 /* Copyright (c) 1998 Lucent Technologies - All rights reserved. */
            2 #include <u.h>
            3 #include <libg.h>
            4 #include <frame.h>
            5 
            6 /*
            7  * The code here and elsewhere requires that strings not be gcalloc()ed
            8  */
            9 
           10 #define CHUNK   16
           11 #define ROUNDUP(n)  ((n+CHUNK)&~(CHUNK-1))
           12 
           13 uint8_t *
           14 _frallocstr(unsigned n)
           15 {
           16     uint8_t *p;
           17 
           18     p = malloc(ROUNDUP(n));
           19     if(p == 0)
           20         berror("out of memory");
           21     return p;
           22 }
           23 
           24 void
           25 _frinsure(Frame *f, int bn, unsigned n)
           26 {
           27     Frbox *b;
           28     uint8_t *p;
           29 
           30     b = &f->box[bn];
           31     if(b->nrune < 0)
           32         berror("_frinsure");
           33     if(ROUNDUP(b->nrune) > n)   /* > guarantees room for terminal NUL */
           34         return;
           35     p = _frallocstr(n);
           36     b = &f->box[bn];
           37     memmove(p, b->a.ptr, NBYTE(b)+1);
           38     free(b->a.ptr);
           39     b->a.ptr = p;
           40 }