Introduction
Introduction Statistics Contact Development Disclaimer Help
fix a memory leak when resizing the window - sfeed_curses - sfeed curses UI (no…
git clone git://git.codemadness.org/sfeed_curses
Log
Files
Refs
README
LICENSE
---
commit ddf5df16b38ffae681dea75408146b51c0daeda0
parent d59a1ec6aa2733c24906e37a0cf18170ceb14f5f
Author: Hiltjo Posthuma <[email protected]>
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(-)
---
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);
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.