/****************************************************************************
- * Copyright 2020 Thomas E. Dickey *
+ * Copyright 2020,2022 Thomas E. Dickey *
* Copyright 2015,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
/*
* Author: Thomas E. Dickey
*
- * $Id: test_setupterm.c,v 1.10 2020/02/02 23:34:34 tom Exp $
+ * $Id: test_setupterm.c,v 1.12 2022/05/15 16:36:00 tom Exp $
*
* A simple demo of setupterm/restartterm.
*/
static bool n_opt = FALSE;
static bool r_opt = FALSE;
+#if NO_LEAKS
+static TERMINAL **saved_terminals;
+static size_t num_saved;
+static size_t max_saved;
+
+static void
+finish(int code)
+{
+ size_t n;
+ for (n = 0; n < num_saved; ++n)
+ del_curterm(saved_terminals[n]);
+ free(saved_terminals);
+ ExitProgram(code);
+}
+
+static void
+save_curterm(void)
+{
+ size_t n;
+ bool found = FALSE;
+ for (n = 0; n < num_saved; ++n) {
+ if (saved_terminals[n] == cur_term) {
+ found = TRUE;
+ break;
+ }
+ }
+ if (!found) {
+ if (num_saved + 1 >= max_saved) {
+ max_saved += 100;
+ saved_terminals = typeRealloc(TERMINAL *, max_saved, saved_terminals);
+ }
+ saved_terminals[num_saved++] = cur_term;
+ }
+}
+
+#else
+#define finish(code) ExitProgram(code)
+#define save_curterm() /* nothing */
+#endif
+
static void
test_rc(NCURSES_CONST char *name, int actual_rc, int actual_err)
{
#endif
rc = setupterm(name, 0, f_opt ? NULL : &err);
test_rc(name, rc, err);
+ save_curterm();
}
static void
for (n = 0; n < SIZEOF(msg); ++n) {
fprintf(stderr, "%s\n", msg[n]);
}
- ExitProgram(EXIT_FAILURE);
+ finish(EXIT_FAILURE);
}
int
if (r_opt) {
newterm("ansi", stdout, stdin);
reset_shell_mode();
+ save_curterm();
}
if (a_opt) {
}
}
- ExitProgram(EXIT_SUCCESS);
+ finish(EXIT_SUCCESS);
}
#else /* !HAVE_TIGETSTR */