commit 20794b570eeb5a9d55a4869a20888d46a1c9d4fd
Author: Roberto E. Vargas Caballero <[email protected]>
AuthorDate: Sun Mar 4 13:59:48 2018 +0100
Commit: sin <[email protected]>
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)
{