ireading the buffer fast - iomenu - interactive terminal-based selection menu Err bitreich.org 70 hgit clone git://bitreich.org/iomenu git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/iomenu URL:git://bitreich.org/iomenu git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/iomenu bitreich.org 70 1Log /scm/iomenu/log.gph bitreich.org 70 1Files /scm/iomenu/files.gph bitreich.org 70 1Refs /scm/iomenu/refs.gph bitreich.org 70 1Tags /scm/iomenu/tag bitreich.org 70 1README /scm/iomenu/file/README.gph bitreich.org 70 1LICENSE /scm/iomenu/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 17183e9024bb8a1fa1e2152819ac29a3e82047b4 /scm/iomenu/commit/17183e9024bb8a1fa1e2152819ac29a3e82047b4.gph bitreich.org 70 1parent 277ca72956b6deb921cbe96f981214602624c6ac /scm/iomenu/commit/277ca72956b6deb921cbe96f981214602624c6ac.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:mail@josuah.net bitreich.org 70 iDate: Wed, 1 Nov 2017 14:42:53 +0100 Err bitreich.org 70 i Err bitreich.org 70 ireading the buffer fast Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M .gitignore | 1 + Err bitreich.org 70 i M Makefile | 2 +- Err bitreich.org 70 i M buffer.c | 78 +++++++++++++++++-------------- Err bitreich.org 70 i M iomenu.h | 2 -- Err bitreich.org 70 i M main.c | 2 -- Err bitreich.org 70 i Err bitreich.org 70 i5 files changed, 45 insertions(+), 40 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/.gitignore b/.gitignore /scm/iomenu/file/.gitignore.gph bitreich.org 70 i@@ -1,2 +1,3 @@ Err bitreich.org 70 i iomenu Err bitreich.org 70 i *.o Err bitreich.org 70 i+*core* Err bitreich.org 70 1diff --git a/Makefile b/Makefile /scm/iomenu/file/Makefile.gph bitreich.org 70 i@@ -11,7 +11,7 @@ iomenu: $(OBJ) Err bitreich.org 70 i $(OBJ): $(INC) Err bitreich.org 70 i Err bitreich.org 70 i clean: Err bitreich.org 70 i- rm -f *.o iomenu Err bitreich.org 70 i+ rm -f *.o *.core iomenu Err bitreich.org 70 i Err bitreich.org 70 i install: iomenu Err bitreich.org 70 i mkdir -p $(PREFIX)/share/man/man1 Err bitreich.org 70 1diff --git a/buffer.c b/buffer.c /scm/iomenu/file/buffer.c.gph bitreich.org 70 i@@ -4,31 +4,13 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i+#include Err bitreich.org 70 i Err bitreich.org 70 i #include "iomenu.h" Err bitreich.org 70 i #include "buffer.h" Err bitreich.org 70 i #include "main.h" Err bitreich.org 70 i #include "control.h" Err bitreich.org 70 i Err bitreich.org 70 i-static char * Err bitreich.org 70 i-read_line(FILE *fp) Err bitreich.org 70 i-{ Err bitreich.org 70 i- char *line; Err bitreich.org 70 i- size_t len; Err bitreich.org 70 i- Err bitreich.org 70 i- line = malloc(LINE_MAX + 1); Err bitreich.org 70 i- if (!(fgets(line, LINE_MAX, fp))) { Err bitreich.org 70 i- free(line); Err bitreich.org 70 i- return NULL; Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- len = strlen(line); Err bitreich.org 70 i- if (len > 0 && line[len - 1] == '\n') Err bitreich.org 70 i- line[len - 1] = '\0'; Err bitreich.org 70 i- Err bitreich.org 70 i- return (line); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i static int Err bitreich.org 70 i match_line(char *line, char **tokv, int tokc) Err bitreich.org 70 i { Err bitreich.org 70 i@@ -47,8 +29,7 @@ free_lines(void) Err bitreich.org 70 i extern char **linev; Err bitreich.org 70 i Err bitreich.org 70 i if (linev) { Err bitreich.org 70 i- for (; linec > 0; linec--) Err bitreich.org 70 i- free(linev[linec - 1]); Err bitreich.org 70 i+ free(linev[0]); Err bitreich.org 70 i free(linev); Err bitreich.org 70 i } Err bitreich.org 70 i if (matchv) Err bitreich.org 70 i@@ -56,24 +37,51 @@ free_lines(void) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i-read_stdin(void) Err bitreich.org 70 i+split_lines(char *buf) Err bitreich.org 70 i { Err bitreich.org 70 i- int size = 0; Err bitreich.org 70 i extern char **linev; Err bitreich.org 70 i+ extern int linec; Err bitreich.org 70 i+ char *b; Err bitreich.org 70 i+ char **lv; Err bitreich.org 70 i+ char **mv; Err bitreich.org 70 i Err bitreich.org 70 i- while (1) { Err bitreich.org 70 i- if (linec >= size) { Err bitreich.org 70 i- size += BUFSIZ; Err bitreich.org 70 i- linev = realloc(linev, sizeof (char **) * size); Err bitreich.org 70 i- matchv = realloc(matchv, sizeof (char **) * size); Err bitreich.org 70 i- if (!linev || !matchv) Err bitreich.org 70 i- die("realloc"); Err bitreich.org 70 i- } Err bitreich.org 70 i- if ((linev[linec] = read_line(stdin)) == NULL) Err bitreich.org 70 i- break; Err bitreich.org 70 i+ linec = 0; Err bitreich.org 70 i+ b = buf; Err bitreich.org 70 i+ while ((b = strchr(b + 1, '\n'))) Err bitreich.org 70 i linec++; Err bitreich.org 70 i- matchc++; Err bitreich.org 70 i+ if (!(lv = linev = calloc(linec, sizeof (char **)))) Err bitreich.org 70 i+ die("calloc"); Err bitreich.org 70 i+ if (!(mv = matchv = calloc(linec, sizeof (char **)))) { Err bitreich.org 70 i+ free(linev); Err bitreich.org 70 i+ die("calloc"); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ *mv = *lv = b = buf; Err bitreich.org 70 i+ while ((b = strchr(b, '\n'))) { Err bitreich.org 70 i+ *b++ = '\0'; Err bitreich.org 70 i+ mv++, lv++; Err bitreich.org 70 i+ *mv = *lv = b; Err bitreich.org 70 i+ } Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+void Err bitreich.org 70 i+read_stdin(void) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ size_t size = BUFSIZ; Err bitreich.org 70 i+ size_t len; Err bitreich.org 70 i+ size_t off; Err bitreich.org 70 i+ char *buf; Err bitreich.org 70 i+ Err bitreich.org 70 i+ off = 0; Err bitreich.org 70 i+ buf = malloc(size); Err bitreich.org 70 i+ while ((len = read(STDIN_FILENO, buf + off, size - off)) > 0) { Err bitreich.org 70 i+ off += len; Err bitreich.org 70 i+ if (off > size >> 1) { Err bitreich.org 70 i+ size <<= 1; Err bitreich.org 70 i+ buf = realloc(buf, size); Err bitreich.org 70 i+ } Err bitreich.org 70 i } Err bitreich.org 70 i+ buf[off] = '\0'; Err bitreich.org 70 i+ split_lines(buf); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i@@ -87,7 +95,7 @@ filter(void) Err bitreich.org 70 i char *s; Err bitreich.org 70 i char buf[sizeof (input)]; Err bitreich.org 70 i Err bitreich.org 70 i- current = offset = next = 0; Err bitreich.org 70 i+ current = 0; Err bitreich.org 70 i strcpy(buf, input); Err bitreich.org 70 i tokc = 0; Err bitreich.org 70 i n = 0; Err bitreich.org 70 1diff --git a/iomenu.h b/iomenu.h /scm/iomenu/file/iomenu.h.gph bitreich.org 70 i@@ -15,7 +15,5 @@ extern char *prompt; Err bitreich.org 70 i extern char input[LINE_MAX]; Err bitreich.org 70 i extern char formatted[LINE_MAX * 8]; Err bitreich.org 70 i extern int current; Err bitreich.org 70 i-extern int offset; Err bitreich.org 70 i-extern int next; Err bitreich.org 70 i extern int opt[128]; Err bitreich.org 70 i extern int rows; Err bitreich.org 70 1diff --git a/main.c b/main.c /scm/iomenu/file/main.c.gph bitreich.org 70 i@@ -27,9 +27,7 @@ char *prompt = ""; Err bitreich.org 70 i char input[LINE_MAX]; Err bitreich.org 70 i char formatted[LINE_MAX * 8]; Err bitreich.org 70 i int current = 0; Err bitreich.org 70 i-int offset = 0; Err bitreich.org 70 i int rows = 0; Err bitreich.org 70 i-int next = 0; Err bitreich.org 70 i int opt[128]; Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 .