aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile6
-rw-r--r--include/arg.h2
-rw-r--r--src/lib/file.c1
-rw-r--r--src/lib/process.c11
-rw-r--r--src/main.c8
6 files changed, 19 insertions, 10 deletions
diff --git a/.gitignore b/.gitignore
index e3dd7f6..cd68208 100644
--- a/.gitignore
+++ b/.gitignore
@@ -131,3 +131,4 @@ $RECYCLE.BIN/
# End of https://www.toptal.com/developers/gitignore/api/c,macos,windows,linux,c
+build/
diff --git a/Makefile b/Makefile
index 149c2ac..eaa3393 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,11 @@ ODIR:=obj
BINDIR:=build
CC:=cc
-CFLAGS:=-I$(IDIR) -Wall -Wextra -pedantic -Ofast
+# OMG SO FAST (see https://www.shlomifish.org/humour/by-others/funroll-loops/Gentoo-is-Rice.html)
+# CFLAGS:=-I$(IDIR) -Wall -Wextra -pedantic -Ofast -faggressive-loop-optimizations -funroll-all-loops -march=native
+# For a stable experience
+CFLAGS:=-I$(IDIR) -Wall -Wextra -pedantic -O2 -march=native
+
LIB:=
DEPS:=$($(IDIR)/%.h)
diff --git a/include/arg.h b/include/arg.h
index 0774ef2..0a0bc3f 100644
--- a/include/arg.h
+++ b/include/arg.h
@@ -2,7 +2,7 @@
#define ARG_H
#include <stdbool.h>
-#define LAT_VERSION "0.12.1"
+#define LAT_VERSION "0.12.2"
struct config {
bool stdin;
diff --git a/src/lib/file.c b/src/lib/file.c
index 1f2372a..6dba950 100644
--- a/src/lib/file.c
+++ b/src/lib/file.c
@@ -42,7 +42,6 @@ struct filedata readfile(FILE *fp, bool isstdin) {
while (fread(&c, 1, 1, fp) > 0) {
if (f.buflen == bufsize - 1) {
bufsize *= 2;
-
char *new_buf = realloc(f.buf, bufsize);
if (new_buf == NULL)
die("realloc");
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");
diff --git a/src/main.c b/src/main.c
index fffdce5..eb9a2aa 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,12 +1,11 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
#include "arg.h"
#include "file.h"
#include "process.h"
#include "types.h"
#include "util.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
#define INVERT_T "\x1b[7m"
#define UINVERT_T "\x1b[27m"
@@ -77,6 +76,7 @@ void run(FILE *fp, char *filename, bool tty) {
fwrite("\n", 1, 1, err);
}
free(f.buf);
+ free(f.lines);
fflush(st); // prevent timing inconsistencies between st and err
fflush(err);