| tsbuf: extend the buffer more eagerly - neatvi - [fork] simple vi-type editor w… | |
| git clone git://src.adamsgaard.dk/neatvi | |
| Log | |
| Files | |
| Refs | |
| README | |
| --- | |
| commit d45220ca72fc434031d68ec33a553de6ebf0262e | |
| parent 5266f5c8be4e977eaac06ea4a978d13c9b378d28 | |
| Author: Ali Gholami Rudi <[email protected]> | |
| Date: Thu, 11 Jun 2015 15:41:18 +0430 | |
| sbuf: extend the buffer more eagerly | |
| Diffstat: | |
| M sbuf.c | 5 +++-- | |
| 1 file changed, 3 insertions(+), 2 deletions(-) | |
| --- | |
| diff --git a/sbuf.c b/sbuf.c | |
| t@@ -7,6 +7,7 @@ | |
| #define SBUFSZ 128 | |
| #define ALIGN(n, a) (((n) + (a) - 1) & ~((a) - 1)) | |
| +#define NEXTSZ(o, r) ALIGN(MAX((o) * 2, (o) + (r)), SBUFSZ) | |
| struct sbuf { | |
| char *s; /* allocated buffer */ | |
| t@@ -55,14 +56,14 @@ void sbuf_free(struct sbuf *sb) | |
| void sbuf_chr(struct sbuf *sbuf, int c) | |
| { | |
| if (sbuf->s_n + 2 >= sbuf->s_sz) | |
| - sbuf_extend(sbuf, sbuf->s_sz + SBUFSZ); | |
| + sbuf_extend(sbuf, NEXTSZ(sbuf->s_sz, 1)); | |
| sbuf->s[sbuf->s_n++] = c; | |
| } | |
| void sbuf_mem(struct sbuf *sbuf, char *s, int len) | |
| { | |
| if (sbuf->s_n + len + 1 >= sbuf->s_sz) | |
| - sbuf_extend(sbuf, ALIGN(sbuf->s_n + len + 1, SBUFSZ)); | |
| + sbuf_extend(sbuf, NEXTSZ(sbuf->s_sz, len + 1)); | |
| memcpy(sbuf->s + sbuf->s_n, s, len); | |
| sbuf->s_n += len; | |
| } |