iimprove different libc compatibility thanks to _anthk feedback - 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 0332f4dd490ea3fe6421a8f064142c3747938653 /scm/iomenu/commit/0332f4dd490ea3fe6421a8f064142c3747938653.gph bitreich.org 70 1parent 61d1c7b96e038a9af18330f8a2efa1b648441575 /scm/iomenu/commit/61d1c7b96e038a9af18330f8a2efa1b648441575.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:me@josuah.net bitreich.org 70 iDate: Fri, 29 Oct 2021 19:45:58 +0200 Err bitreich.org 70 i Err bitreich.org 70 iimprove different libc compatibility thanks to _anthk feedback Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 13 +++++++------ Err bitreich.org 70 i M iomenu.c | 20 ++++++++++---------- Err bitreich.org 70 i M term.c | 17 +++++++++-------- Err bitreich.org 70 i M term.h | 2 +- Err bitreich.org 70 i Err bitreich.org 70 i4 files changed, 27 insertions(+), 25 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,7 +1,8 @@ Err bitreich.org 70 i NAME = iomenu Err bitreich.org 70 i-VERSION = 0.1 Err bitreich.org 70 i+V = 0.1 Err bitreich.org 70 i Err bitreich.org 70 i-CFLAGS = -DVERSION='"${VERSION}"' -I./src -Wall -Wextra -std=c99 --pedantic -g Err bitreich.org 70 i+D = -DVERSION='"$V"' -D_POSIX_C_SOURCE=200809L -D_BSD_SOURCE Err bitreich.org 70 i+CFLAGS = $D -Wall -Wextra -std=c99 -pedantic -g Err bitreich.org 70 i LDFLAGS = -static Err bitreich.org 70 i PREFIX = /usr/local Err bitreich.org 70 i MANPREFIX = ${PREFIX}/man Err bitreich.org 70 i@@ -22,7 +23,7 @@ ${BIN}: ${OBJ} ${BIN:=.o} Err bitreich.org 70 i ${CC} ${LDFLAGS} -o $@ $@.o ${OBJ} ${LIB} Err bitreich.org 70 i Err bitreich.org 70 i clean: Err bitreich.org 70 i- rm -rf *.o ${BIN} ${NAME}-${VERSION} *.gz Err bitreich.org 70 i+ rm -rf *.o ${BIN} ${NAME}-$V *.gz Err bitreich.org 70 i Err bitreich.org 70 i install: Err bitreich.org 70 i mkdir -p ${DESTDIR}${PREFIX}/bin Err bitreich.org 70 i@@ -31,6 +32,6 @@ install: Err bitreich.org 70 i cp -rf ${MAN1} ${DESTDIR}${MANPREFIX}/man1 Err bitreich.org 70 i Err bitreich.org 70 i dist: clean Err bitreich.org 70 i- mkdir -p ${NAME}-${VERSION} Err bitreich.org 70 i- cp -r README Makefile bin ${MAN1} ${SRC} ${NAME}-${VERSION} Err bitreich.org 70 i- tar -cf - ${NAME}-${VERSION} | gzip -c >${NAME}-${VERSION}.tar.gz Err bitreich.org 70 i+ mkdir -p ${NAME}-$V Err bitreich.org 70 i+ cp -r README Makefile bin ${MAN1} ${SRC} ${NAME}-$V Err bitreich.org 70 i+ tar -cf - ${NAME}-$V | gzip -c >${NAME}-$V.tar.gz Err bitreich.org 70 1diff --git a/iomenu.c b/iomenu.c /scm/iomenu/file/iomenu.c.gph bitreich.org 70 i@@ -16,7 +16,7 @@ Err bitreich.org 70 i #include "utf8.h" Err bitreich.org 70 i Err bitreich.org 70 i struct { Err bitreich.org 70 i- char input[LINE_MAX]; Err bitreich.org 70 i+ char input[256]; Err bitreich.org 70 i size_t cur; Err bitreich.org 70 i Err bitreich.org 70 i char **lines_buf; Err bitreich.org 70 i@@ -26,7 +26,7 @@ struct { Err bitreich.org 70 i size_t match_count; Err bitreich.org 70 i } ctx; Err bitreich.org 70 i Err bitreich.org 70 i-int opt_comment; Err bitreich.org 70 i+int flag_comment; Err bitreich.org 70 i Err bitreich.org 70 i /* Err bitreich.org 70 i * Keep the line if it match every token (in no particular order, Err bitreich.org 70 i@@ -35,7 +35,7 @@ int opt_comment; Err bitreich.org 70 i static int Err bitreich.org 70 i match_line(char *line, char **tokv) Err bitreich.org 70 i { Err bitreich.org 70 i- if (opt_comment && line[0] == '#') Err bitreich.org 70 i+ if (flag_comment && line[0] == '#') Err bitreich.org 70 i return 2; Err bitreich.org 70 i for (; *tokv != NULL; tokv++) Err bitreich.org 70 i if (strcasestr(line, *tokv) == NULL) Err bitreich.org 70 i@@ -86,7 +86,7 @@ do_move(int sign) Err bitreich.org 70 i { Err bitreich.org 70 i /* integer overflow will do what we need */ Err bitreich.org 70 i for (size_t i = ctx.cur + sign; i < ctx.match_count; i += sign) { Err bitreich.org 70 i- if (opt_comment == 0 || ctx.match_buf[i][0] != '#') { Err bitreich.org 70 i+ if (flag_comment == 0 || ctx.match_buf[i][0] != '#') { Err bitreich.org 70 i ctx.cur = i; Err bitreich.org 70 i break; Err bitreich.org 70 i } Err bitreich.org 70 i@@ -114,7 +114,7 @@ do_filter(char **search_buf, size_t search_count) Err bitreich.org 70 i for (size_t n = 0; n < search_count; n++) Err bitreich.org 70 i if (match_line(search_buf[n], tokv)) Err bitreich.org 70 i ctx.match_buf[ctx.match_count++] = search_buf[n]; Err bitreich.org 70 i- if (opt_comment && ctx.match_buf[ctx.cur][0] == '#') Err bitreich.org 70 i+ if (flag_comment && ctx.match_buf[ctx.cur][0] == '#') Err bitreich.org 70 i do_move(+1); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -136,7 +136,7 @@ do_move_header(signed int sign) Err bitreich.org 70 i { Err bitreich.org 70 i do_move(sign); Err bitreich.org 70 i Err bitreich.org 70 i- if (opt_comment == 0) Err bitreich.org 70 i+ if (flag_comment == 0) Err bitreich.org 70 i return; Err bitreich.org 70 i for (ctx.cur += sign;; ctx.cur += sign) { Err bitreich.org 70 i char *cur = ctx.match_buf[ctx.cur]; Err bitreich.org 70 i@@ -184,7 +184,7 @@ do_add_char(char c) Err bitreich.org 70 i static void Err bitreich.org 70 i do_print_selection(void) Err bitreich.org 70 i { Err bitreich.org 70 i- if (opt_comment) { Err bitreich.org 70 i+ if (flag_comment) { Err bitreich.org 70 i char **match = ctx.match_buf + ctx.cur; Err bitreich.org 70 i Err bitreich.org 70 i while (--match >= ctx.match_buf) { Err bitreich.org 70 i@@ -197,7 +197,7 @@ do_print_selection(void) Err bitreich.org 70 i } Err bitreich.org 70 i term_raw_off(2); Err bitreich.org 70 i if (ctx.match_count == 0 Err bitreich.org 70 i- || (opt_comment && ctx.match_buf[ctx.cur][0] == '#')) Err bitreich.org 70 i+ || (flag_comment && ctx.match_buf[ctx.cur][0] == '#')) Err bitreich.org 70 i fprintf(stdout, "%s\n", ctx.input); Err bitreich.org 70 i else Err bitreich.org 70 i fprintf(stdout, "%s\n", ctx.match_buf[ctx.cur]); Err bitreich.org 70 i@@ -277,7 +277,7 @@ key_action(void) Err bitreich.org 70 i static void Err bitreich.org 70 i print_line(char *line, int highlight) Err bitreich.org 70 i { Err bitreich.org 70 i- if (opt_comment && line[0] == '#') { Err bitreich.org 70 i+ if (flag_comment && line[0] == '#') { Err bitreich.org 70 i fprintf(stderr, "\n\x1b[1m\r%.*s\x1b[m", Err bitreich.org 70 i term_at_width(line + 1, term.winsize.ws_col, 0), line + 1); Err bitreich.org 70 i } else if (highlight) { Err bitreich.org 70 i@@ -390,7 +390,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i fprintf(stdout, "%s\n", VERSION); Err bitreich.org 70 i exit(0); Err bitreich.org 70 i case '#': Err bitreich.org 70 i- opt_comment = 1; Err bitreich.org 70 i+ flag_comment = 1; Err bitreich.org 70 i break; Err bitreich.org 70 i default: Err bitreich.org 70 i usage(arg0); Err bitreich.org 70 1diff --git a/term.c b/term.c /scm/iomenu/file/term.c.gph bitreich.org 70 i@@ -36,19 +36,20 @@ term_at_width(char const *s, int width, int pos) Err bitreich.org 70 i int Err bitreich.org 70 i term_raw_on(int fd) Err bitreich.org 70 i { Err bitreich.org 70 i- struct termios new_termios = {0}; Err bitreich.org 70 i- char *seq = "\x1b[s\x1b[?1049h\x1b[H"; Err bitreich.org 70 i+ static char *seq = "\x1b[s\x1b[?1049h\x1b[H"; Err bitreich.org 70 i+ struct termios termios; Err bitreich.org 70 i ssize_t len = strlen(seq); Err bitreich.org 70 i Err bitreich.org 70 i if (write(fd, seq, len) < len) Err bitreich.org 70 i return -1; Err bitreich.org 70 i Err bitreich.org 70 i- if (tcgetattr(fd, &term.old_termios) < 0) Err bitreich.org 70 i+ memset(&termios, 0, sizeof termios); Err bitreich.org 70 i+ if (tcgetattr(fd, &term.termios) < 0) Err bitreich.org 70 i return -1; Err bitreich.org 70 i- memcpy(&new_termios, &term.old_termios, sizeof new_termios); Err bitreich.org 70 i+ memcpy(&termios, &term.termios, sizeof termios); Err bitreich.org 70 i Err bitreich.org 70 i- new_termios.c_lflag &= ~(ICANON | ECHO | IEXTEN | IGNBRK | ISIG); Err bitreich.org 70 i- if (tcsetattr(fd, TCSANOW, &new_termios) == -1) Err bitreich.org 70 i+ termios.c_lflag &= ~(ICANON | ECHO | IEXTEN | IGNBRK | ISIG); Err bitreich.org 70 i+ if (tcsetattr(fd, TCSANOW, &termios) == -1) Err bitreich.org 70 i return -1; Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 i@@ -56,10 +57,10 @@ term_raw_on(int fd) Err bitreich.org 70 i int Err bitreich.org 70 i term_raw_off(int fd) Err bitreich.org 70 i { Err bitreich.org 70 i- char *seq = "\x1b[2J\x1b[u\033[?1049l"; Err bitreich.org 70 i+ static char *seq = "\x1b[2J\x1b[u\033[?1049l"; Err bitreich.org 70 i ssize_t len = strlen(seq); Err bitreich.org 70 i Err bitreich.org 70 i- if (tcsetattr(fd, TCSANOW, &term.old_termios) < 0) Err bitreich.org 70 i+ if (tcsetattr(fd, TCSANOW, &term.termios) < 0) Err bitreich.org 70 i return -1; Err bitreich.org 70 i if (write(fd, seq, len) < len) Err bitreich.org 70 i return -1; Err bitreich.org 70 1diff --git a/term.h b/term.h /scm/iomenu/file/term.h.gph bitreich.org 70 i@@ -25,7 +25,7 @@ enum term_key { Err bitreich.org 70 i Err bitreich.org 70 i struct term { Err bitreich.org 70 i struct winsize winsize; Err bitreich.org 70 i- struct termios old_termios; Err bitreich.org 70 i+ struct termios termios; Err bitreich.org 70 i }; Err bitreich.org 70 i Err bitreich.org 70 i extern struct term term; Err bitreich.org 70 .