X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Fentries.c;h=1c55bfec0b78d6988b5749267635683653135750;hp=05f45ef0484ccf1d6602e9103b7de28aa8a12442;hb=790a85dbd4a81d5f5d8dd02a44d84f01512ef443;hpb=ca276baf720e3a44721b9e18955d3f546955c6c8 diff --git a/ncurses/tinfo/entries.c b/ncurses/tinfo/entries.c index 05f45ef0..1c55bfec 100644 --- a/ncurses/tinfo/entries.c +++ b/ncurses/tinfo/entries.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 2006-2007,2008 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.6 2008/06/21 21:25:01 tom Exp $") +MODULE_ID("$Id: entries.c,v 1.30 2020/02/02 23:34:34 tom Exp $") /**************************************************************************** * @@ -63,30 +64,8 @@ MODULE_ID("$Id: entries.c,v 1.6 2008/06/21 21:25:01 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; @@ -96,6 +75,9 @@ _nc_delink_entry(ENTRY * headp, TERMTYPE *tterm) if (last != 0) { last->next = ep->next; } + if (ep->next != 0) { + ep->next->last = last; + } if (ep == _nc_head) { _nc_head = ep->next; } @@ -108,33 +90,70 @@ _nc_delink_entry(ENTRY * headp, TERMTYPE *tterm) 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) { +#if NO_LEAKS char *s; +#endif T((T_CALLED("_nc_free_tinfo()"))); #if NO_LEAKS + _nc_globals.leak_checking = TRUE; _nc_free_tparm(); _nc_tgetent_leaks(); -#endif + + 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); -#if NO_LEAKS + _nc_db_iterator_leaks(); _nc_keyname_leaks(); -#endif #if BROKEN_LINKER || USE_REENTRANT _nc_names_leaks(); _nc_codes_leaks(); FreeIfNeeded(_nc_prescreen.real_acs_map); #endif -#if USE_WIDEC_SUPPORT - FreeIfNeeded(_nc_wacs); -#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; } @@ -146,3 +165,12 @@ _nc_free_tinfo(int code) exit(code); } #endif + +NCURSES_EXPORT(void) +exit_terminfo(int code) +{ +#if NO_LEAKS + _nc_leaks_tinfo(); +#endif + exit(code); +}