X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Ffree_ttype.c;h=08dac4ec203dd44b6edb02639a64f04aee17a11a;hp=b8b9c592037dae13ff9744a287391a72cc65e8a1;hb=a8987e73ec254703634802b4f7ee30d3a485524d;hpb=46722468f47c2b77b3987729b4bcf2321cccfd01 diff --git a/ncurses/tinfo/free_ttype.c b/ncurses/tinfo/free_ttype.c index b8b9c592..08dac4ec 100644 --- a/ncurses/tinfo/free_ttype.c +++ b/ncurses/tinfo/free_ttype.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1999-2000,2002 Free Software Foundation, Inc. * + * Copyright (c) 1999-2002,2003 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 * @@ -43,11 +43,43 @@ #include #include -MODULE_ID("$Id: free_ttype.c,v 1.8 2002/09/01 20:29:03 tom Exp $") +MODULE_ID("$Id: free_ttype.c,v 1.10 2003/08/09 21:22:03 tom Exp $") NCURSES_EXPORT(void) _nc_free_termtype(TERMTYPE * ptr) { + T(("_nc_free_termtype(%s)", ptr->term_names)); + + if (ptr->str_table == 0 + || (ptr->term_names < ptr->str_table + || ptr->term_names >= ptr->str_table + MAX_ENTRY_SIZE)) { + FreeIfNeeded(ptr->term_names); + } +#if NO_LEAKS + else { + if (ptr->str_table != 0 + && (ptr->term_names < ptr->str_table + MAX_ENTRY_SIZE)) { + int j; + char *last = ptr->str_table; + /* + * We should have saved the entry-size someplace. Too late, + * but this is useful for the memory-leak checking, though more + * work/time than should be in the normal library. + */ + for (j = 0; j < NUM_STRINGS(ptr); j++) { + char *s = ptr->Strings[j]; + if (VALID_STRING(s)) { + char *t = s + strlen(s) + 1; + if (t > last) + last = t; + } + } + if (last < ptr->term_names) { + FreeIfNeeded(ptr->term_names); + } + } + } +#endif FreeIfNeeded(ptr->str_table); FreeIfNeeded(ptr->Booleans); FreeIfNeeded(ptr->Numbers); @@ -66,7 +98,9 @@ NCURSES_EXPORT(int) use_extended_names(bool flag) { int oldflag = _nc_user_definable; + + T((T_CALLED("use_extended_names(%d)"), flag)); _nc_user_definable = flag; - return oldflag; + returnBool(oldflag); } #endif