X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Fentries.c;h=1c55bfec0b78d6988b5749267635683653135750;hp=9cf2cdee1ee8925fc75d32de3288e8b8fce8ee47;hb=c976a90788f3e50afc773670ff74c5270ecb48df;hpb=6f8ad7d77b390ee433a283e1c5175bcb67317674;ds=sidebyside diff --git a/ncurses/tinfo/entries.c b/ncurses/tinfo/entries.c index 9cf2cdee..1c55bfec 100644 --- a/ncurses/tinfo/entries.c +++ b/ncurses/tinfo/entries.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 2006 Free Software Foundation, Inc. * + * Copyright 2019,2020 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 * @@ -28,6 +29,7 @@ /**************************************************************************** * Author: Thomas E. Dickey * + * and: Juergen Pfeifer * ****************************************************************************/ #include @@ -35,9 +37,8 @@ #include #include -#include -MODULE_ID("$Id: entries.c,v 1.2 2006/12/24 00:58:33 tom Exp $") +MODULE_ID("$Id: entries.c,v 1.30 2020/02/02 23:34:34 tom Exp $") /**************************************************************************** * @@ -63,8 +64,34 @@ MODULE_ID("$Id: entries.c,v 1.2 2006/12/24 00:58:33 tom Exp $") NCURSES_EXPORT_VAR(ENTRY *) _nc_head = 0; NCURSES_EXPORT_VAR(ENTRY *) _nc_tail = 0; +static ENTRY * +_nc_delink_entry(ENTRY * headp, TERMTYPE2 *tterm) +/* delink the allocated storage for the given list entry */ +{ + ENTRY *ep, *last; + + for (last = 0, ep = headp; ep != 0; last = ep, ep = ep->next) { + if (&(ep->tterm) == tterm) { + if (last != 0) { + last->next = ep->next; + } + if (ep->next != 0) { + ep->next->last = last; + } + if (ep == _nc_head) { + _nc_head = ep->next; + } + if (ep == _nc_tail) { + _nc_tail = last; + } + break; + } + } + return ep; +} + NCURSES_EXPORT(void) -_nc_free_entry(ENTRY * headp, TERMTYPE *tterm) +_nc_free_entry(ENTRY * headp, TERMTYPE2 *tterm) /* free the allocated storage consumed by the given list entry */ { ENTRY *ep; @@ -81,29 +108,69 @@ _nc_free_entries(ENTRY * headp) (void) headp; /* unused - _nc_head is altered here! */ while (_nc_head != 0) { - _nc_free_termtype(&(_nc_head->tterm)); + _nc_free_termtype2(&(_nc_head->tterm)); } } -NCURSES_EXPORT(ENTRY *) -_nc_delink_entry(ENTRY * headp, TERMTYPE *tterm) -/* delink the allocated storage for the given list entry */ +NCURSES_EXPORT(void) +_nc_leaks_tinfo(void) { - ENTRY *ep, *last; +#if NO_LEAKS + char *s; +#endif - for (last = 0, ep = headp; ep != 0; last = ep, ep = ep->next) { - if (&(ep->tterm) == tterm) { - if (last != 0) { - last->next = ep->next; - } - if (ep == _nc_head) { - _nc_head = ep->next; - } - if (ep == _nc_tail) { - _nc_tail = last; - } - break; - } + T((T_CALLED("_nc_free_tinfo()"))); +#if NO_LEAKS + _nc_globals.leak_checking = TRUE; + _nc_free_tparm(); + _nc_tgetent_leaks(); + + if (TerminalOf(CURRENT_SCREEN) != 0) { + del_curterm(TerminalOf(CURRENT_SCREEN)); } - return ep; + _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; +} + +#if NO_LEAKS +NCURSES_EXPORT(void) +_nc_free_tinfo(int code) +{ + _nc_leaks_tinfo(); + exit(code); +} +#endif + +NCURSES_EXPORT(void) +exit_terminfo(int code) +{ +#if NO_LEAKS + _nc_leaks_tinfo(); +#endif + exit(code); }