aboutsummaryrefslogtreecommitdiff
path: root/src/lib/process.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/process.c')
-rw-r--r--src/lib/process.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/lib/process.c b/src/lib/process.c
index 61261d9..674fa59 100644
--- a/src/lib/process.c
+++ b/src/lib/process.c
@@ -28,7 +28,7 @@ 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) {
+ if (offset < linelen) { // shrink
char *new_line = realloc(line, offset);
if (new_line == NULL)
die("realloc");
@@ -43,7 +43,6 @@ void loadlines(struct filedata *f) {
line = malloc(linelen);
if (line == NULL)
die("malloc");
-
} else {
if (offset == linelen) {
linelen *= 2;
@@ -58,6 +57,19 @@ void loadlines(struct filedata *f) {
line[offset++] = c;
}
}
+
+ // capture last line
+ if (offset < linelen) { // shrink
+ char *new_line = realloc(line, offset);
+ if (new_line == NULL)
+ die("realloc");
+ line = new_line;
+ }
+
+ appendline(f, line, offset);
+ f->lc++;
+
+ free(line);
}
char *linepad(int lc, int total) {