Support NUL-containing lines in cols(1)

This required an architectural change in getlines() by also storing
the line length.
This commit is contained in:
FRIGN
2016-02-29 00:45:53 +01:00
committed by sin
parent 2d7d2261a0
commit e4810f1cdb
4 changed files with 24 additions and 14 deletions

View File

@@ -19,12 +19,13 @@ getlines(FILE *fp, struct linebuf *b)
b->lines = erealloc(b->lines, b->capacity * sizeof(*b->lines));
}
linelen = len;
b->lines[b->nlines - 1] = memcpy(emalloc(linelen + 1), line, linelen + 1);
b->lines[b->nlines - 1].data = memcpy(emalloc(linelen + 1), line, linelen + 1);
b->lines[b->nlines - 1].len = linelen;
}
free(line);
if (b->lines && b->nlines && linelen && b->lines[b->nlines - 1][linelen - 1] != '\n') {
b->lines[b->nlines - 1] = erealloc(b->lines[b->nlines - 1], linelen + 2);
b->lines[b->nlines - 1][linelen] = '\n';
b->lines[b->nlines - 1][linelen + 1] = '\0';
if (b->lines && b->nlines && linelen && b->lines[b->nlines - 1].data[linelen - 1] != '\n') {
b->lines[b->nlines - 1].data = erealloc(b->lines[b->nlines - 1].data, linelen + 2);
b->lines[b->nlines - 1].data[linelen] = '\n';
b->lines[b->nlines - 1].data[linelen + 1] = '\0';
}
}