fix a memory leak when resizing the window - sfeed_curses - sfeed curses UI (now part of sfeed, development is in sfeed)
 (HTM) git clone git://git.codemadness.org/sfeed_curses
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit ddf5df16b38ffae681dea75408146b51c0daeda0
 (DIR) parent d59a1ec6aa2733c24906e37a0cf18170ceb14f5f
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Fri, 19 Mar 2021 22:19:19 +0100
       
       fix a memory leak when resizing the window
       
       This happened because setupterm() was called on each resize. ncurses internally
       then allocates a new structure every time on calling setupterm(). It also
       rereads the terminfo file and entries which is wasteful.
       
       Now it is setup once and only rereads the terminal dimensions using the ioctl
       directly.  The global curses variables `columns` and `lines` are not used
       anymore.
       
       Note: the contents of the rows and columns are checked, because the ioctl can
       succeed, but return zero values, for example on serial consoles.
       
       Diffstat:
         M sfeed_curses.c                      |      10 +++++++---
       
       1 file changed, 7 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/sfeed_curses.c b/sfeed_curses.c
       @@ -1,3 +1,4 @@
       +#include <sys/ioctl.h>
        #include <sys/select.h>
        #include <sys/time.h>
        #include <sys/types.h>
       @@ -622,9 +623,11 @@ win_update(struct win *w, int width, int height)
        void
        resizewin(void)
        {
       -        setupterm(NULL, 1, NULL);
       -        /* termios globals are changed: `lines` and `columns` */
       -        win_update(&win, columns, lines);
       +        struct winsize winsz;
       +
       +        if (ioctl(1, TIOCGWINSZ, &winsz) != -1 &&
       +            winsz.ws_col > 0 && winsz.ws_row > 0)
       +                win_update(&win, winsz.ws_col, winsz.ws_row);
                if (win.dirty)
                        alldirty();
        }
       @@ -641,6 +644,7 @@ init(void)
                tcur.c_cc[VTIME] = 0;
                tcsetattr(0, TCSANOW, &tcur);
        
       +        setupterm(NULL, 1, NULL);
                resizewin();
        
                appmode(1);