URI: 
       split line reading function - iomenu - interactive terminal-based selection menu
  HTML git clone git://bitreich.org/iomenu git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/iomenu
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR README
   DIR LICENSE
       ---
   DIR commit 376d9cfc1451c3e416065b0fdd958c491b9b4a93
   DIR parent 223058fdf9e2427b8ec9ec01df7185c074b545a7
  HTML Author: Josuah Demangeon <mail@josuah.net>
       Date:   Sun, 15 Oct 2017 23:26:30 +0200
       
       split line reading function
       
       Diffstat:
         M iomenu.c                            |      41 ++++++++++++++++++++-----------
       
       1 file changed, 26 insertions(+), 15 deletions(-)
       ---
   DIR diff --git a/iomenu.c b/iomenu.c
       @@ -53,13 +53,31 @@ die(const char *s)
                exit(EXIT_FAILURE);
        }
        
       +static char *
       +read_line(FILE *fp)
       +{
       +        char *line;
       +        size_t len;
       +
       +        line = malloc(LINE_MAX + 1);
       +        if (!(fgets(line, LINE_MAX, fp))) {
       +                free(line);
       +                return NULL;
       +        }
       +
       +        len = strlen(line);
       +        if (len > 0 && line[len - 1] == '\n')
       +                line[len - 1] = '\0';
       +
       +        return (line);
       +}
       +
        static void
       -read_lines(void)
       +read_stdin(void)
        {
                int    size = 0;
       -        size_t len;
        
       -        do {
       +        while (1) {
                        if (linec >= size) {
                                size += BUFSIZ;
                                linev  = realloc(linev,  sizeof (char **) * size);
       @@ -67,18 +85,11 @@ read_lines(void)
                                if (!linev || !matchv)
                                        die("realloc");
                        }
       -
       -                linev[linec] = malloc(LINE_MAX + 1);
       -                if (!(fgets(linev[linec], LINE_MAX, stdin))) {
       -                        free(linev[linec]);
       +                if ((linev[linec] = read_line(stdin)) == NULL)
                                break;
       -                }
       -
       -                len = strlen(linev[linec]);
       -                if (len > 0 && linec[linev][len - 1] == '\n')
       -                        linev[linec][len - 1] = '\0';
       -
       -        } while (++linec, ++matchc);
       +                linec++;
       +                matchc++;
       +        }
        }
        
        static void
       @@ -537,7 +548,7 @@ main(int argc, char *argv[])
        
                parse_opt(argc, argv);
        
       -        read_lines();
       +        read_stdin();
                filter();
        
                if (!freopen("/dev/tty", "r", stdin))  die("freopen /dev/tty");