From 20794b570eeb5a9d55a4869a20888d46a1c9d4fd Mon Sep 17 00:00:00 2001 From: "Roberto E. Vargas Caballero" Date: Sun, 4 Mar 2018 13:59:48 +0100 Subject: [PATCH] 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. --- ed.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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) {