X-Git-Url: http://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=ncurses%2Fbase%2Flib_freeall.c;h=75bbe77e34093be4c4efa70b4a40f18da2abaac1;hb=214f159cd8c0ea4fba47beb249379d0da2dfb8ca;hp=9c9317508eb6c1ac217c1d40df5fa04540433c77;hpb=a20e6eb464be80b9cd8cae7ce925d27fe9c209ed;p=ncurses.git diff --git a/ncurses/base/lib_freeall.c b/ncurses/base/lib_freeall.c index 9c931750..75bbe77e 100644 --- a/ncurses/base/lib_freeall.c +++ b/ncurses/base/lib_freeall.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 1998-2016,2017 Free Software Foundation, Inc. * + * Copyright 2018-2020,2021 Thomas E. Dickey * + * Copyright 1998-2016,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 * @@ -39,7 +40,7 @@ extern int malloc_errfd; /* FIXME */ #endif -MODULE_ID("$Id: lib_freeall.c,v 1.68 2017/08/04 09:01:46 tom Exp $") +MODULE_ID("$Id: lib_freeall.c,v 1.76 2021/11/06 21:52:49 tom Exp $") /* * Free all ncurses data. This is used for testing only (there's no practical @@ -60,7 +61,7 @@ NCURSES_SP_NAME(_nc_freeall) (NCURSES_SP_DCL0) if (SP_PARM->_panelHook.destroy != 0) { SP_PARM->_panelHook.destroy(SP_PARM->_panelHook.stdscr_pseudo_panel); } -#if USE_NEW_PAIR +#if NCURSES_EXT_COLORS _nc_new_pair_leaks(SP_PARM); #endif } @@ -77,6 +78,9 @@ NCURSES_SP_NAME(_nc_freeall) (NCURSES_SP_DCL0) WINDOW *p_win = &(p->win); bool found = FALSE; + if (IS_PAD(p_win)) + continue; + #ifndef USE_SP_WINDOWLIST if (p->screen != SP_PARM) continue; @@ -91,7 +95,7 @@ NCURSES_SP_NAME(_nc_freeall) (NCURSES_SP_DCL0) #endif if ((p != q) - && (q_win->_flags & _SUBWIN) + && IS_SUBWIN(q_win) && (p_win == q_win->_parent)) { found = TRUE; break; @@ -150,7 +154,7 @@ NCURSES_SP_NAME(_nc_free_and_exit) (NCURSES_SP_DCLx int code) NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG); NCURSES_SP_NAME(_nc_freeall) (NCURSES_SP_ARG); #ifdef TRACE - trace(0); /* close trace file, freeing its setbuf */ + curses_trace(0); /* close trace file, freeing its setbuf */ { static va_list fake; free(_nc_varargs("?", fake)); @@ -159,7 +163,7 @@ NCURSES_SP_NAME(_nc_free_and_exit) (NCURSES_SP_DCLx int code) exit(code); } -#else +#else /* !HAVE_NC_FREEALL */ NCURSES_EXPORT(void) _nc_freeall(void) { @@ -170,12 +174,10 @@ NCURSES_SP_NAME(_nc_free_and_exit) (NCURSES_SP_DCLx int code) { if (SP_PARM) { delscreen(SP_PARM); - if (SP_PARM->_term) - NCURSES_SP_NAME(del_curterm) (NCURSES_SP_ARGx SP_PARM->_term); } exit(code); } -#endif +#endif /* HAVE_NC_FREEALL */ #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) @@ -184,3 +186,16 @@ _nc_free_and_exit(int code) NCURSES_SP_NAME(_nc_free_and_exit) (CURRENT_SCREEN, code); } #endif + +NCURSES_EXPORT(void) +exit_curses(int code) +{ +#if NO_LEAKS +#if NCURSES_SP_FUNCS + NCURSES_SP_NAME(_nc_free_and_exit) (CURRENT_SCREEN, code); +#else + _nc_free_and_exit(code); /* deprecated... */ +#endif +#endif + exit(code); +}