/****************************************************************************
- * Copyright (c) 2006-2008,2009 Free Software Foundation, Inc. *
+ * Copyright 2019-2020,2021 Thomas E. Dickey *
+ * Copyright 2006-2012,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
/****************************************************************************
* Author: Thomas E. Dickey *
+ * and: Juergen Pfeifer *
****************************************************************************/
#include <curses.priv.h>
#include <ctype.h>
#include <tic.h>
-#include <term_entry.h>
-MODULE_ID("$Id: entries.c,v 1.11 2009/03/14 15:22:37 tom Exp $")
+MODULE_ID("$Id: entries.c,v 1.32 2021/11/20 23:40:57 tom Exp $")
/****************************************************************************
*
NCURSES_EXPORT_VAR(ENTRY *) _nc_head = 0;
NCURSES_EXPORT_VAR(ENTRY *) _nc_tail = 0;
-NCURSES_EXPORT(void)
-_nc_free_entry(ENTRY * headp, TERMTYPE *tterm)
-/* free the allocated storage consumed by the given list entry */
-{
- ENTRY *ep;
-
- if ((ep = _nc_delink_entry(headp, tterm)) != 0) {
- free(ep);
- }
-}
-
-NCURSES_EXPORT(void)
-_nc_free_entries(ENTRY * headp)
-/* free the allocated storage consumed by list entries */
-{
- (void) headp; /* unused - _nc_head is altered here! */
-
- while (_nc_head != 0) {
- _nc_free_termtype(&(_nc_head->tterm));
- }
-}
-
-NCURSES_EXPORT(ENTRY *)
-_nc_delink_entry(ENTRY * headp, TERMTYPE *tterm)
+static ENTRY *
+_nc_delink_entry(ENTRY * headp, TERMTYPE2 *tterm)
/* delink the allocated storage for the given list entry */
{
ENTRY *ep, *last;
if (last != 0) {
last->next = ep->next;
}
+ if (ep->next != 0) {
+ ep->next->last = last;
+ }
if (ep == _nc_head) {
_nc_head = ep->next;
}
return ep;
}
+NCURSES_EXPORT(void)
+_nc_free_entry(ENTRY * headp, TERMTYPE2 *tterm)
+/* free the allocated storage consumed by the given list entry */
+{
+ ENTRY *ep;
+
+ if ((ep = _nc_delink_entry(headp, tterm)) != 0) {
+ free(ep);
+ }
+}
+
+NCURSES_EXPORT(void)
+_nc_free_entries(ENTRY * headp)
+/* free the allocated storage consumed by list entries */
+{
+ (void) headp; /* unused - _nc_head is altered here! */
+
+ while (_nc_head != 0) {
+ _nc_free_termtype2(&(_nc_head->tterm));
+ }
+}
+
NCURSES_EXPORT(void)
_nc_leaks_tinfo(void)
{
T((T_CALLED("_nc_free_tinfo()")));
#if NO_LEAKS
- _nc_free_tparm();
+ _nc_globals.leak_checking = TRUE;
+ _nc_free_tparm(cur_term);
_nc_tgetent_leaks();
- if (cur_term != 0)
- del_curterm(cur_term);
+ if (TerminalOf(CURRENT_SCREEN) != 0) {
+ del_curterm(TerminalOf(CURRENT_SCREEN));
+ }
+ _nc_forget_prescr();
+ _nc_comp_captab_leaks();
+ _nc_comp_userdefs_leaks();
_nc_free_entries(_nc_head);
_nc_get_type(0);
_nc_first_name(0);
+ _nc_db_iterator_leaks();
_nc_keyname_leaks();
#if BROKEN_LINKER || USE_REENTRANT
_nc_names_leaks();
_nc_codes_leaks();
FreeIfNeeded(_nc_prescreen.real_acs_map);
#endif
+ _nc_comp_error_leaks();
if ((s = _nc_home_terminfo()) != 0)
free(s);
+
+#ifdef TRACE
+ T((T_RETURN("")));
+ curses_trace(0);
+ _nc_trace_buf(-1, (size_t) 0);
+#endif
+
#endif /* NO_LEAKS */
returnVoid;
}
exit(code);
}
#endif
+
+NCURSES_EXPORT(void)
+exit_terminfo(int code)
+{
+#if NO_LEAKS
+ _nc_leaks_tinfo();
+#endif
+ exit(code);
+}