diff --git a/ncurses/tinfo/db_iterator.c b/ncurses/tinfo/db_iterator.c index 94a4082047..0549dae224 100644 --- a/ncurses/tinfo/db_iterator.c +++ b/ncurses/tinfo/db_iterator.c @@ -92,33 +92,33 @@ check_existence(const char *name, struct stat *sb) * Store the latest value of an environment variable in my_vars[] so we can * detect if one changes, invalidating the cached search-list. */ static bool update_getenv(const char *name, DBDIRS which) { bool result = FALSE; if (which < dbdLAST) { char *value; + char *cached_value = my_vars[which].value; + bool same_value; - if ((value = getenv(name)) == 0 || (value = strdup(value)) == 0) { - ; - } else if (my_vars[which].name == 0 || strcmp(my_vars[which].name, name)) { - FreeIfNeeded(my_vars[which].value); - my_vars[which].name = name; - my_vars[which].value = value; - result = TRUE; - } else if ((my_vars[which].value != 0) ^ (value != 0)) { - FreeIfNeeded(my_vars[which].value); - my_vars[which].value = value; - result = TRUE; - } else if (value != 0 && strcmp(value, my_vars[which].value)) { + if ((value = getenv(name)) != 0) { + value = strdup(value); + } + same_value = (value == 0 && cached_value == 0) + || (value != 0 && cached_value != 0 && strcmp(value, cached_value) == 0); + + // Update var name for later checks + my_vars[which].name = name; + + if (!same_value) { FreeIfNeeded(my_vars[which].value); my_vars[which].value = value; result = TRUE; } else { free(value); } } return result; }