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 }