On 2017-07-14 16:13 +0200, Sven Joachim wrote: > Package: libtinfo5 > Version: 6.0+20170701-1 > Severity: serious > > The symbol _nc_read_entry got inadvertently dropped in favor of > _nc_read_entry2, and this breaks reverse dependencies (ncurses-bin > before 6.0+20170701-1 and tack):
This happened because _nc_read_entry is only compiled in if NCURSES_EXT_NUMBERS is #defined and not 0. There's probably a good reason for this, since when I take out this condition infocmp from stretch segfaults. Bringing back the previous implementation of _nc_read_entry instead seems to work, as in the attached patch. While this might to be good enough for Debian, upstream likely want a better solution that works with other configure flags as well. Sven
--- ncurses/tinfo/read_entry.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) --- a/ncurses/tinfo/read_entry.c +++ b/ncurses/tinfo/read_entry.c @@ -766,4 +766,44 @@ _nc_read_entry(const char *const name, c _nc_export_termtype2(tp, &dummy); return rc; } +#else +NCURSES_EXPORT(int) +_nc_read_entry(const char *const name, char *const filename, TERMTYPE *const tp) +{ + int code = TGETENT_NO; + + _nc_SPRINTF(filename, _nc_SLIMIT(PATH_MAX) + "%.*s", PATH_MAX - 1, name); + + if (strlen(name) == 0 + || strcmp(name, ".") == 0 + || strcmp(name, "..") == 0 + || _nc_pathlast(name) != 0 + || strchr(name, NCURSES_PATHSEP) != 0) { + TR(TRACE_DATABASE, ("illegal or missing entry name '%s'", name)); + } else { +#if NCURSES_USE_DATABASE + DBDIRS state; + int offset; + const char *path; + + _nc_first_db(&state, &offset); + code = TGETENT_ERR; + while ((path = _nc_next_db(&state, &offset)) != 0) { + code = _nc_read_tic_entry(filename, PATH_MAX, path, name, tp); + if (code == TGETENT_YES) { + _nc_last_db(); + break; + } + } +#elif NCURSES_USE_TERMCAP + if (code != TGETENT_YES) { + code = _nc_read_termcap_entry(name, tp); + _nc_SPRINTF(filename, _nc_SLIMIT(PATH_MAX) + "%.*s", PATH_MAX - 1, _nc_get_source()); + } +#endif + } + return code; +} #endif