isplit line reading function - 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 376d9cfc1451c3e416065b0fdd958c491b9b4a93 /scm/iomenu/commit/376d9cfc1451c3e416065b0fdd958c491b9b4a93.gph bitreich.org 70 1parent 223058fdf9e2427b8ec9ec01df7185c074b545a7 /scm/iomenu/commit/223058fdf9e2427b8ec9ec01df7185c074b545a7.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:mail@josuah.net bitreich.org 70 iDate: Sun, 15 Oct 2017 23:26:30 +0200 Err bitreich.org 70 i Err bitreich.org 70 isplit line reading function Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M iomenu.c | 41 ++++++++++++++++++++----------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 26 insertions(+), 15 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@@ -53,13 +53,31 @@ die(const char *s) Err bitreich.org 70 i exit(EXIT_FAILURE); Err bitreich.org 70 i } 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 void Err bitreich.org 70 i-read_lines(void) Err bitreich.org 70 i+read_stdin(void) Err bitreich.org 70 i { Err bitreich.org 70 i int size = 0; Err bitreich.org 70 i- size_t len; Err bitreich.org 70 i Err bitreich.org 70 i- do { 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@@ -67,18 +85,11 @@ read_lines(void) 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] = malloc(LINE_MAX + 1); Err bitreich.org 70 i- if (!(fgets(linev[linec], LINE_MAX, stdin))) { Err bitreich.org 70 i- free(linev[linec]); Err bitreich.org 70 i+ if ((linev[linec] = read_line(stdin)) == NULL) Err bitreich.org 70 i break; Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- len = strlen(linev[linec]); Err bitreich.org 70 i- if (len > 0 && linec[linev][len - 1] == '\n') Err bitreich.org 70 i- linev[linec][len - 1] = '\0'; Err bitreich.org 70 i- Err bitreich.org 70 i- } while (++linec, ++matchc); Err bitreich.org 70 i+ linec++; Err bitreich.org 70 i+ matchc++; Err bitreich.org 70 i+ } Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i@@ -537,7 +548,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i Err bitreich.org 70 i parse_opt(argc, argv); Err bitreich.org 70 i Err bitreich.org 70 i- read_lines(); Err bitreich.org 70 i+ read_stdin(); Err bitreich.org 70 i filter(); Err bitreich.org 70 i Err bitreich.org 70 i if (!freopen("/dev/tty", "r", stdin)) die("freopen /dev/tty"); Err bitreich.org 70 .