iFix a memory leak on TUI window resize - sacc - sacc(omys), simple console gopher client Err bitreich.org 70 hgit clone git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sacc/ URL:git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sacc/ bitreich.org 70 1Log /scm/sacc/log.gph bitreich.org 70 1Files /scm/sacc/files.gph bitreich.org 70 1Refs /scm/sacc/refs.gph bitreich.org 70 1Tags /scm/sacc/tag bitreich.org 70 1LICENSE /scm/sacc/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 6582965f7a534eb82339208980582fcb661fe7c3 /scm/sacc/commit/6582965f7a534eb82339208980582fcb661fe7c3.gph bitreich.org 70 1parent 17674fcc4257afa53e81fdeab49b21f0f57528c7 /scm/sacc/commit/17674fcc4257afa53e81fdeab49b21f0f57528c7.gph bitreich.org 70 hAuthor: Quentin Rameau URL:mailto:quinq@fifth.space bitreich.org 70 iDate: Sun, 21 Mar 2021 16:15:55 +0100 Err bitreich.org 70 i Err bitreich.org 70 iFix a memory leak on TUI window resize Err bitreich.org 70 i Err bitreich.org 70 iMemory is allocated by setupterm, Err bitreich.org 70 iwhich is called on window resizing Err bitreich.org 70 ifor setting new values for lines and cols. Err bitreich.org 70 i Err bitreich.org 70 iThanks to Hiltjo for spotting that! Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M ui_ti.c | 20 ++++++++++++++++++-- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 18 insertions(+), 2 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/ui_ti.c b/ui_ti.c /scm/sacc/file/ui_ti.c.gph bitreich.org 70 i@@ -13,10 +13,19 @@ Err bitreich.org 70 i #define C(c) #c Err bitreich.org 70 i #define S(c) C(c) Err bitreich.org 70 i Err bitreich.org 70 i+/* ncurses doesn't define those in term.h, where they're used */ Err bitreich.org 70 i+#ifndef OK Err bitreich.org 70 i+#define OK (0) Err bitreich.org 70 i+#endif Err bitreich.org 70 i+#ifndef ERR Err bitreich.org 70 i+#define ERR (-1) Err bitreich.org 70 i+#endif Err bitreich.org 70 i+ Err bitreich.org 70 i static char bufout[256]; Err bitreich.org 70 i static struct termios tsave; Err bitreich.org 70 i static struct termios tsacc; Err bitreich.org 70 i static Item *curentry; Err bitreich.org 70 i+static int termset = ERR; Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i uisetup(void) Err bitreich.org 70 i@@ -28,7 +37,9 @@ uisetup(void) Err bitreich.org 70 i tsacc.c_cc[VTIME] = 0; Err bitreich.org 70 i tcsetattr(0, TCSANOW, &tsacc); Err bitreich.org 70 i Err bitreich.org 70 i- setupterm(NULL, 1, NULL); Err bitreich.org 70 i+ if (termset != OK) Err bitreich.org 70 i+ /* setupterm call exits on error */ Err bitreich.org 70 i+ termset = setupterm(NULL, 1, NULL); Err bitreich.org 70 i putp(tparm(clear_screen, 0, 0, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i putp(tparm(save_cursor, 0, 0, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i putp(tparm(change_scroll_region, 0, lines-2, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i@@ -39,6 +50,9 @@ uisetup(void) Err bitreich.org 70 i void Err bitreich.org 70 i uicleanup(void) Err bitreich.org 70 i { Err bitreich.org 70 i+ if (termset != OK) Err bitreich.org 70 i+ return; Err bitreich.org 70 i+ Err bitreich.org 70 i putp(tparm(change_scroll_region, 0, lines-1, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i putp(tparm(clear_screen, 0, 0, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i tcsetattr(0, TCSANOW, &tsave); Err bitreich.org 70 i@@ -565,7 +579,9 @@ uisigwinch(int signal) Err bitreich.org 70 i { Err bitreich.org 70 i Dir *dir; Err bitreich.org 70 i Err bitreich.org 70 i- setupterm(NULL, 1, NULL); Err bitreich.org 70 i+ if (termset == OK) Err bitreich.org 70 i+ del_curterm(cur_term); Err bitreich.org 70 i+ termset = setupterm(NULL, 1, NULL); Err bitreich.org 70 i putp(tparm(change_scroll_region, 0, lines-2, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i Err bitreich.org 70 i if (!curentry || !(dir = curentry->dat)) Err bitreich.org 70 .