SMOLNET PORTAL home about changes
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
Original URLgopher://bitreich.org/0/scm/iomenu/commit/3d81e355d3a2077...
Content-Typetext/plain; charset=utf-8