SMOLNET PORTAL home about changes
ifix segfault while reading buffer greater than 256 lines - 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 636bd34b151fd0f108e68c833d8013ffae94428d	/scm/iomenu/commit/636bd34b151fd0f108e68c833d8013ffae94428d.gph	bitreich.org	70
1parent db81899f43585604025d14656fd05eba47be9060	/scm/iomenu/commit/db81899f43585604025d14656fd05eba47be9060.gph	bitreich.org	70
hAuthor: Josuah Demangeon <mail@josuah.net>	URL:mailto:mail@josuah.net	bitreich.org	70
iDate:   Mon, 11 Dec 2017 23:37:43 +0100	Err	bitreich.org	70
i	Err	bitreich.org	70
ifix segfault while reading buffer greater than 256 lines	Err	bitreich.org	70
i	Err	bitreich.org	70
iAnd multiple coding style edits	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M iomenu.c                            |      77 ++++++++++++++-----------------	Err	bitreich.org	70
i	Err	bitreich.org	70
i1 file changed, 35 insertions(+), 42 deletions(-)	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@@ -26,7 +26,7 @@ static        struct        termios termios;	Err	bitreich.org	70
i static        int        ttyfd;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i struct winsize        ws;	Err	bitreich.org	70
i-int                linec = 0, matchc = 0, current = 0;	Err	bitreich.org	70
i+int                linec = 0, matchc = 0, cur = 0;	Err	bitreich.org	70
i char                **linev = NULL, **matchv = NULL;	Err	bitreich.org	70
i char                input[LINE_MAX], formatted[LINE_MAX * 8];	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -102,8 +102,8 @@ read_stdin(void)	Err	bitreich.org	70
i                 die("malloc");	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+                if (off == size) {	Err	bitreich.org	70
i+                        size *= 2;	Err	bitreich.org	70
i                         if ((buf = realloc(buf, size + 1)) == NULL)	Err	bitreich.org	70
i                                 die("realloc");	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i@@ -120,9 +120,9 @@ move(signed int sign)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         int        i;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        for (i = current + sign; 0 <= i && i < matchc; i += sign) {	Err	bitreich.org	70
i+        for (i = cur + sign; 0 <= i && i < matchc; i += sign) {	Err	bitreich.org	70
i                 if (!flag_hs || matchv[i][0] != '#') {	Err	bitreich.org	70
i-                        current = i;	Err	bitreich.org	70
i+                        cur = i;	Err	bitreich.org	70
i                         break;	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i@@ -136,13 +136,13 @@ static void	Err	bitreich.org	70
i filter(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         extern char        **linev, **matchv;	Err	bitreich.org	70
i-        extern int        linec, matchc, current;	Err	bitreich.org	70
i+        extern int        linec, matchc, cur;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         int        tokc, n;	Err	bitreich.org	70
i         char        **tokv, *s, buf[sizeof (input)];	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         tokv = NULL;	Err	bitreich.org	70
i-        current = 0;	Err	bitreich.org	70
i+        cur = 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
i@@ -162,7 +162,7 @@ filter(void)	Err	bitreich.org	70
i                 if (match_line(linev[n], tokv, tokc))	Err	bitreich.org	70
i                         matchv[matchc++] = linev[n];	Err	bitreich.org	70
i         free(tokv);	Err	bitreich.org	70
i-        if (flag_hs && matchv[current][0] == '#')	Err	bitreich.org	70
i+        if (flag_hs && matchv[cur][0] == '#')	Err	bitreich.org	70
i                 move(+1);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -172,14 +172,13 @@ move_page(signed int sign)	Err	bitreich.org	70
i         extern        struct        winsize ws;	Err	bitreich.org	70
i         extern        int        matchc;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        int        i;	Err	bitreich.org	70
i-        int        rows;	Err	bitreich.org	70
i+        int        i, rows;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         rows = ws.ws_row - 1;	Err	bitreich.org	70
i-        i = current - current % rows + rows * sign;	Err	bitreich.org	70
i+        i = cur - cur % rows + rows * sign;	Err	bitreich.org	70
i         if (!(0 <= i && i < matchc))	Err	bitreich.org	70
i                 return;	Err	bitreich.org	70
i-        current = i - 1;	Err	bitreich.org	70
i+        cur = i - 1;	Err	bitreich.org	70
i         move(+1);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -188,8 +187,7 @@ remove_word()	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         extern        char        input[LINE_MAX];	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        int len;	Err	bitreich.org	70
i-        int i;	Err	bitreich.org	70
i+        int        len, i;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         len = strlen(input) - 1;	Err	bitreich.org	70
i         for (i = len; i >= 0 && isspace(input[i]); i--)	Err	bitreich.org	70
i@@ -205,7 +203,7 @@ add_char(char c)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         extern        char        input[LINE_MAX];	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        int len;	Err	bitreich.org	70
i+        int        len;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         len = strlen(input);	Err	bitreich.org	70
i         if (isprint(c)) {	Err	bitreich.org	70
i@@ -218,14 +216,13 @@ add_char(char c)	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i print_selection(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        extern        char        **matchv;	Err	bitreich.org	70
i-        extern        char          input[LINE_MAX];	Err	bitreich.org	70
i+        extern        char        **matchv, input[LINE_MAX];	Err	bitreich.org	70
i         extern        int          matchc;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        char **match;	Err	bitreich.org	70
i+        char        **match;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         if (flag_hs) {	Err	bitreich.org	70
i-                match = matchv + current;	Err	bitreich.org	70
i+                match = matchv + cur;	Err	bitreich.org	70
i                 while (--match >= matchv) {	Err	bitreich.org	70
i                         if ((*match)[0] == '#') {	Err	bitreich.org	70
i                                 fputs(*match + 1, stdout);	Err	bitreich.org	70
i@@ -234,10 +231,10 @@ print_selection(void)	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i                 putchar('\t');	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i-        if (matchc == 0 || (flag_hs && matchv[current][0] == '#'))	Err	bitreich.org	70
i+        if (matchc == 0 || (flag_hs && matchv[cur][0] == '#'))	Err	bitreich.org	70
i                 puts(input);	Err	bitreich.org	70
i         else	Err	bitreich.org	70
i-                puts(matchv[current]);	Err	bitreich.org	70
i+                puts(matchv[cur]);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i /*	Err	bitreich.org	70
i@@ -247,8 +244,7 @@ print_selection(void)	Err	bitreich.org	70
i int	Err	bitreich.org	70
i key(int k)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        extern        char        **matchv;	Err	bitreich.org	70
i-        extern        char          input[LINE_MAX];	Err	bitreich.org	70
i+        extern        char        **matchv, input[LINE_MAX];	Err	bitreich.org	70
i         extern        int          linec;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i top:	Err	bitreich.org	70
i@@ -291,7 +287,7 @@ top:	Err	bitreich.org	70
i                 break;	Err	bitreich.org	70
i         case CTL('I'):  /* tab */	Err	bitreich.org	70
i                 if (linec > 0)	Err	bitreich.org	70
i-                        strcpy(input, matchv[current]);	Err	bitreich.org	70
i+                        strcpy(input, matchv[cur]);	Err	bitreich.org	70
i                 filter();	Err	bitreich.org	70
i                 break;	Err	bitreich.org	70
i         case CTL('J'):  /* enter */	Err	bitreich.org	70
i@@ -314,12 +310,14 @@ top:	Err	bitreich.org	70
i static char *	Err	bitreich.org	70
i format(char *str, int cols)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        extern        struct        winsize ws;	Err	bitreich.org	70
i+        extern struct winsize        ws;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        int   col = 0;	Err	bitreich.org	70
i-        long  rune = 0;	Err	bitreich.org	70
i-        char *fmt = formatted;	Err	bitreich.org	70
i+        int        col;	Err	bitreich.org	70
i+        long        rune;	Err	bitreich.org	70
i+        char        *fmt;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        col = rune = 0;	Err	bitreich.org	70
i+        fmt = formatted;	Err	bitreich.org	70
i         while (*str && col < cols) {	Err	bitreich.org	70
i                 if (*str == '\t') {	Err	bitreich.org	70
i                         int t = 8 - col % 8;	Err	bitreich.org	70
i@@ -345,14 +343,14 @@ format(char *str, int cols)	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i-print_line(char *line, int cur)	Err	bitreich.org	70
i+print_line(char *line, int highlight)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         extern        struct        winsize ws;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         if (flag_hs && line[0] == '#') {	Err	bitreich.org	70
i                 format(line + 1, ws.ws_col - 1);	Err	bitreich.org	70
i                 fprintf(stderr, "\n\x1b[1m %s\x1b[m", formatted);	Err	bitreich.org	70
i-        } else if (cur) {	Err	bitreich.org	70
i+        } else if (highlight) {	Err	bitreich.org	70
i                 format(line, ws.ws_col - 1);	Err	bitreich.org	70
i                 fprintf(stderr, "\n\x1b[47;30m\x1b[K %s\x1b[m", formatted);	Err	bitreich.org	70
i         } else {	Err	bitreich.org	70
i@@ -364,26 +362,21 @@ print_line(char *line, int cur)	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i print_screen(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        extern        struct        winsize ws;	Err	bitreich.org	70
i-        extern        char        **matchv;	Err	bitreich.org	70
i-        extern        char         *flag_p;	Err	bitreich.org	70
i-        extern        char          input[LINE_MAX];	Err	bitreich.org	70
i-        extern        int          matchc;	Err	bitreich.org	70
i+        extern struct winsize        ws;	Err	bitreich.org	70
i+        extern char                **matchv, *flag_p, input[LINE_MAX];	Err	bitreich.org	70
i+        extern int                matchc;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         char        **m;	Err	bitreich.org	70
i-        int          p;	Err	bitreich.org	70
i-        int          i;	Err	bitreich.org	70
i-        int          cols;	Err	bitreich.org	70
i-        int          rows;	Err	bitreich.org	70
i+        int          p, i, cols, rows;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         cols = ws.ws_col - 1;	Err	bitreich.org	70
i         rows = ws.ws_row - 1;	Err	bitreich.org	70
i         p = 0;	Err	bitreich.org	70
i-        i = current - current % rows;	Err	bitreich.org	70
i+        i = cur - cur % rows;	Err	bitreich.org	70
i         m = matchv + i;	Err	bitreich.org	70
i         fputs("\x1b[2J", stderr);	Err	bitreich.org	70
i         while (p < rows && i < matchc) {	Err	bitreich.org	70
i-                print_line(*m, i == current);	Err	bitreich.org	70
i+                print_line(*m, i == cur);	Err	bitreich.org	70
i                 p++, i++, m++;	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i         fputs("\x1b[H", stderr);	Err	bitreich.org	70
i@@ -403,7 +396,7 @@ print_screen(void)	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i set_terminal(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        struct        termios new;	Err	bitreich.org	70
i+        struct termios        new;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         fputs("\x1b[s\x1b[?1049h\x1b[H", stderr);	Err	bitreich.org	70
i         if (tcgetattr(ttyfd, &termios) < 0 || tcgetattr(ttyfd, &new) < 0) {	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/iomenu/commit/636bd34b151fd0f...
Content-Typetext/plain; charset=utf-8