diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | include/arg.h | 2 | ||||
-rw-r--r-- | src/lib/file.c | 1 | ||||
-rw-r--r-- | src/lib/process.c | 11 | ||||
-rw-r--r-- | src/main.c | 8 |
6 files changed, 19 insertions, 10 deletions
@@ -131,3 +131,4 @@ $RECYCLE.BIN/ # End of https://www.toptal.com/developers/gitignore/api/c,macos,windows,linux,c +build/ @@ -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"); @@ -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); |