aboutsummaryrefslogtreecommitdiff
path: root/src/lib/process.c
diff options
context:
space:
mode:
authorShav Kinderlehrer <[email protected]>2023-05-01 18:07:53 -0400
committerShav Kinderlehrer <[email protected]>2023-05-01 18:07:53 -0400
commit1c90bf55b1874a2dec07eb6f2cacd623700859bd (patch)
treeb9dc3a65d016d62f61198056d10c8f1ec26edac1 /src/lib/process.c
parent36af47eab84fb9ec1f60331fbd0d8c7a85698954 (diff)
downloadlat-1c90bf55b1874a2dec07eb6f2cacd623700859bd.tar.gz
lat-1c90bf55b1874a2dec07eb6f2cacd623700859bd.zip
Fix memory leak and NULL-check error
Diffstat (limited to 'src/lib/process.c')
-rw-r--r--src/lib/process.c11
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");