X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Fdb_iterator.c;h=db3872e3f90d3e932ddd54bc35f5802026269f1a;hp=7fd791825c931ea897a92a080eb18013eba4c58c;hb=HEAD;hpb=b22573b1ba4b51da883fa5f805b52f153fa5fae9 diff --git a/ncurses/tinfo/db_iterator.c b/ncurses/tinfo/db_iterator.c index 7fd79182..db3872e3 100644 --- a/ncurses/tinfo/db_iterator.c +++ b/ncurses/tinfo/db_iterator.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 2006-2016,2017 Free Software Foundation, Inc. * + * Copyright 2018-2022,2023 Thomas E. Dickey * + * Copyright 2006-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 * @@ -43,7 +44,7 @@ #include #endif -MODULE_ID("$Id: db_iterator.c,v 1.46 2017/07/01 22:54:42 tom Exp $") +MODULE_ID("$Id: db_iterator.c,v 1.50 2023/06/24 21:52:32 tom Exp $") #define HaveTicDirectory _nc_globals.have_tic_directory #define KeepTicDirectory _nc_globals.keep_tic_directory @@ -148,6 +149,7 @@ update_getenv(const char *name, DBDIRS which) return result; } +#if NCURSES_USE_DATABASE || NCURSES_USE_TERMCAP static char * cache_getenv(const char *name, DBDIRS which) { @@ -159,6 +161,7 @@ cache_getenv(const char *name, DBDIRS which) } return result; } +#endif /* * The cache expires if at least a second has passed since the initial lookup, @@ -199,6 +202,13 @@ free_cache(void) FreeAndNull(my_list); } +static void +update_tic_dir(const char *update) +{ + free((char *) TicDirectory); + TicDirectory = update; +} + /* * Record the "official" location of the terminfo directory, according to * the place where we're writing to, or the normal default, if not. @@ -208,8 +218,9 @@ _nc_tic_dir(const char *path) { T(("_nc_tic_dir %s", NonNull(path))); if (!KeepTicDirectory) { - if (path != 0) { - TicDirectory = path; + if (path != NULL) { + if (path != TicDirectory) + update_tic_dir(strdup(path)); HaveTicDirectory = TRUE; } else if (HaveTicDirectory == 0) { if (use_terminfo_vars()) { @@ -372,8 +383,11 @@ _nc_first_db(DBDIRS * state, int *offset) */ for (j = 0; my_list[j] != 0; ++j) { #ifdef TERMINFO - if (*my_list[j] == '\0') - my_list[j] = strdup(TERMINFO); + if (*my_list[j] == '\0') { + char *my_copy = strdup(TERMINFO); + if (my_copy != 0) + my_list[j] = my_copy; + } #endif trim_formatting(my_list[j]); for (k = 0; k < j; ++k) { @@ -441,5 +455,6 @@ _nc_db_iterator_leaks(void) FreeIfNeeded(my_vars[which].value); my_vars[which].value = 0; } + update_tic_dir(NULL); } #endif