From: "Roberto E. Vargas Caballero" <k...@shike2.com>

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)
 {
-- 
2.14.2


Reply via email to