commit 20794b570eeb5a9d55a4869a20888d46a1c9d4fd Author: Roberto E. Vargas Caballero <k...@shike2.com> AuthorDate: Sun Mar 4 13:59:48 2018 +0100 Commit: sin <s...@2f30.org> CommitDate: Tue Jul 3 09:31:46 2018 +0100
Define new String type Current handling of strings is a bit messy. This type is copied from the sed implementation. Addchar_ is added to be able to live with String and old style chars based in 3 different variables. diff --git a/ed.c b/ed.c index 5511a9e..97fa5e8 100644 --- a/ed.c +++ b/ed.c @@ -20,6 +20,12 @@ #define NUMLINES 32 #define CACHESIZ 4096 +typedef struct { + char *str; + size_t cap; + size_t siz; +} String; + struct hline { off_t seek; char global; @@ -111,6 +117,23 @@ prevln(int line) return (line < 0) ? lastln : line; } +static char * +addchar_(char c, String *s) +{ + size_t cap = s->cap, siz = s->siz; + char *t = s->str; + + if (siz >= cap && + (cap > SIZE_MAX - LINESIZE || + (t = realloc(t, cap += LINESIZE)) == NULL)) + error("out of memory"); + t[siz++] = c; + s->siz = siz; + s->cap = cap; + s->str = t; + return t; +} + static char * addchar(char c, char *t, size_t *capacity, size_t *size) {