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.
This commit is contained in:
Roberto E. Vargas Caballero 2018-03-04 13:59:48 +01:00 committed by sin
parent 651e2b0ee2
commit 20794b570e
1 changed files with 23 additions and 0 deletions

23
ed.c
View File

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