diff options
Diffstat (limited to 'src/lib/process.c')
-rw-r--r-- | src/lib/process.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/lib/process.c b/src/lib/process.c index e927bd3..4eb5908 100644 --- a/src/lib/process.c +++ b/src/lib/process.c @@ -1,11 +1,15 @@ #include <stdlib.h> #include <string.h> +#include <stdio.h> + #include "types.h" #include "util.h" void appendline(struct filedata *f, char *data, size_t len) { f->lines = realloc(f->lines, sizeof(struct line) * (f->lc + 1)); + if (f->lines == NULL) + die("realloc"); size_t loc = f->lc; @@ -19,7 +23,7 @@ void loadlines(struct filedata *f) { f->lc = 0; size_t offset = 0; - size_t linelen = 4096; + size_t linelen = 1024; char *line = malloc(linelen); if (line == NULL) die("malloc"); @@ -27,10 +31,11 @@ void loadlines(struct filedata *f) { for (size_t i = 0; i < f->buflen; i++) { char c = f->buf[i]; if (c == '\n') { - if (offset < linelen) { // shrink + if (offset >= 1 && offset < linelen) { // shrink to fit char *new_line = realloc(line, offset); if (new_line == NULL) die("realloc"); + line = new_line; } @@ -58,7 +63,7 @@ void loadlines(struct filedata *f) { } // capture last line - if (offset < linelen) { // shrink + if (offset >= 1 && offset < linelen) { // shrink char *new_line = realloc(line, offset); if (new_line == NULL) die("realloc"); |