iiomenu.c: simplified buffer management - 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 3d81e355d3a20771ccedf81e929a69fc65c3e638 /scm/iomenu/commit/3d81e355d3a20771ccedf81e929a69fc65c3e638.gph bitreich.org 70
1parent 787fef74f0f92d00f18cc2fc749606b3501a1039 /scm/iomenu/commit/787fef74f0f92d00f18cc2fc749606b3501a1039.gph bitreich.org 70
hAuthor: Josuah Demangeon <josuah.demangeon@gandi.net> URL:mailto:josuah.demangeon@gandi.net bitreich.org 70
iDate: Wed, 23 Aug 2017 19:42:07 +0200 Err bitreich.org 70
i Err bitreich.org 70
iiomenu.c: simplified buffer management Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M Makefile | 2 +- Err bitreich.org 70
i M iomenu.c | 52 ++++++++++++++----------------- Err bitreich.org 70
i Err bitreich.org 70
i2 files changed, 25 insertions(+), 29 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/Makefile b/Makefile /scm/iomenu/file/Makefile.gph bitreich.org 70
i@@ -1,6 +1,6 @@ Err bitreich.org 70
i CFLAGS = -std=c89 -Wpedantic -Wall -Wextra -g Err bitreich.org 70
i Err bitreich.org 70
i-all: clean iomenu Err bitreich.org 70
i+all: iomenu Err bitreich.org 70
i Err bitreich.org 70
i iomenu: iomenu.o utf8.o Err bitreich.org 70
i Err bitreich.org 70
1diff --git a/iomenu.c b/iomenu.c /scm/iomenu/file/iomenu.c.gph bitreich.org 70
i@@ -1,3 +1,4 @@ Err bitreich.org 70
i+#include <ctype.h> Err bitreich.org 70
i #include <fcntl.h> Err bitreich.org 70
i #include <locale.h> Err bitreich.org 70
i #include <signal.h> Err bitreich.org 70
i@@ -6,7 +7,6 @@ Err bitreich.org 70
i #include <string.h> Err bitreich.org 70
i #include <termios.h> Err bitreich.org 70
i #include <unistd.h> Err bitreich.org 70
i-#include <ctype.h> Err bitreich.org 70
i Err bitreich.org 70
i #include <sys/ioctl.h> Err bitreich.org 70
i Err bitreich.org 70
i@@ -89,37 +89,24 @@ resetterminal(void) Err bitreich.org 70
i static void Err bitreich.org 70
i readlines(void) Err bitreich.org 70
i { Err bitreich.org 70
i- char buffer[BUFSIZ]; Err bitreich.org 70
i- int size = 1 << 6; Err bitreich.org 70
i- Err bitreich.org 70
i- linev = malloc(sizeof (char **) * size); Err bitreich.org 70
i- matchv = malloc(sizeof (char **) * size); Err bitreich.org 70
i- if (linev == NULL || matchv == NULL) Err bitreich.org 70
i- die("malloc"); Err bitreich.org 70
i- Err bitreich.org 70
i- linev[0] = matchv[0] = NULL; Err bitreich.org 70
i- Err bitreich.org 70
i- /* read the file into an array of lines as the lines never change */ Err bitreich.org 70
i- for (; fgets(buffer, sizeof buffer, stdin); linec++, matchc++) { Err bitreich.org 70
i- int len = strlen(buffer); Err bitreich.org 70
i- Err bitreich.org 70
i- if (len > 0 && buffer[len - 1] == '\n') Err bitreich.org 70
i- buffer[len - 1] = '\0'; Err bitreich.org 70
i+ int size = 0; Err bitreich.org 70
i Err bitreich.org 70
i+ do { Err bitreich.org 70
i if (linec >= size) { Err bitreich.org 70
i- size *= 2; 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 == NULL || matchv == NULL) 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 Err bitreich.org 70
i- linev[linec] = matchv[matchc] = malloc(len + 1); Err bitreich.org 70
i+ linev[linec] = matchv[linec] = malloc(BUFSIZ); Err bitreich.org 70
i if (linev[linec] == NULL) Err bitreich.org 70
i die("malloc"); Err bitreich.org 70
i Err bitreich.org 70
i- strcpy(linev[linec], buffer); Err bitreich.org 70
i- } Err bitreich.org 70
i+ } while (fgets(linev[linec++], BUFSIZ, stdin)); Err bitreich.org 70
i+ Err bitreich.org 70
i+ matchc = linec; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static char * Err bitreich.org 70
i@@ -130,7 +117,10 @@ format(char *s, int cols) Err bitreich.org 70
i char *f = formatted; Err bitreich.org 70
i Err bitreich.org 70
i while (*s && i < cols) { Err bitreich.org 70
i- if (*s == '\t') { Err bitreich.org 70
i+ if (*s == '\n') { Err bitreich.org 70
i+ s++; Err bitreich.org 70
i+ Err bitreich.org 70
i+ } else if (*s == '\t') { Err bitreich.org 70
i int t = 8 - i % 8; Err bitreich.org 70
i while (t-- && i < cols) { Err bitreich.org 70
i *f++ = ' '; Err bitreich.org 70
i@@ -147,6 +137,7 @@ format(char *s, int cols) Err bitreich.org 70
i } else { Err bitreich.org 70
i *f++ = '?'; Err bitreich.org 70
i i++; Err bitreich.org 70
i+ s++; Err bitreich.org 70
i } Err bitreich.org 70
i } Err bitreich.org 70
i *f = '\0'; Err bitreich.org 70
i@@ -429,23 +420,28 @@ parseopt(int argc, char *argv[]) Err bitreich.org 70
i usage(); Err bitreich.org 70
i Err bitreich.org 70
i switch ((*argv)[1]) { Err bitreich.org 70
i+ Err bitreich.org 70
i case 'l': Err bitreich.org 70
i- argv++; argc--; Err bitreich.org 70
i- if (argc == 0 || sscanf(*argv, "%d", &opt['l']) <= 0) Err bitreich.org 70
i+ if (!--argc || sscanf(*++argv, "%d", &opt['l']) <= 0) Err bitreich.org 70
i usage(); Err bitreich.org 70
i break; Err bitreich.org 70
i Err bitreich.org 70
i case 'p': Err bitreich.org 70
i- argv++; argc--; Err bitreich.org 70
i- if (argc == 0) Err bitreich.org 70
i+ if (!--argc) Err bitreich.org 70
i usage(); Err bitreich.org 70
i- prompt = *argv; Err bitreich.org 70
i+ prompt = *++argv; Err bitreich.org 70
i break; Err bitreich.org 70
i Err bitreich.org 70
i case '#': Err bitreich.org 70
i opt['#'] = 1; Err bitreich.org 70
i break; Err bitreich.org 70
i Err bitreich.org 70
i+ case 's': Err bitreich.org 70
i+ if (!--argc) Err bitreich.org 70
i+ usage(); Err bitreich.org 70
i+ opt['s'] = (int) **++argv; Err bitreich.org 70
i+ break; Err bitreich.org 70
i+ Err bitreich.org 70
i default: Err bitreich.org 70
i usage(); Err bitreich.org 70
i } Err bitreich.org 70
.
Response:
text/plain