On Sat, Dec 16, 2023 at 10:48:33AM +0100, Sven Joachim wrote: > On 2023-12-11 15:12 -0500, Thomas Dickey wrote: > > > On Mon, Dec 11, 2023 at 05:47:23PM +0100, Sven Joachim wrote: > >> > >> I am not familiar with Mercurial, but most likely this has been > >> triggered by the following change in the 2023111 patchlevel: > >> > >> ,---- > >> | 20231111 > >> | + modify endwin() to return an error if it is called again without an > >> | intervening screen update (report by Rajeev Pillai, NetBSD #57592). > >> `---- > >> > >> NetBSD #57592 is > >> https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=57592 . > > > > sounds plausible. fwiw, handling error returns (other than throwing an > > exception) is something that developers should do. > > I may be something that developers should do, but in the case of > endwin() hardly anybody does it. In C/C++ programs, nobody seems to > check the return value of endwin() in the first place, so this change is > not really going to make a difference. > > In Python the situation is different, because a curses.error exception > occurs. The wrapper does not handle it, FWIW. > > > I suspect that making ncurses not return error-codes is a step in the wrong > > direction. The example in the NetBSD bug report was clearly a defect in > > the application using ncurses. > > The question is how many such defects are there, and how do we find > them? Based on the current report I looked on codesearch.debian.net for > more instances where programs make the same mistake as mercurial (using > both curses.wrapper and calling curses.endwin() explicitly). I could
which does this:
finally:
# Set everything back to normal
if 'stdscr' in locals():
stdscr.keypad(0)
curses.echo()
curses.nocbreak()
curses.endwin()
(and appears to have its own problems with copy/paste: the settings changes
are redundant).
> not find something as broken as the current case, but there seem to be a
> few instances where programs call curses.endwin() in a signal handler,
> and that may cause issues like #1058626 in pulsemixer.
>
> > In this case, I chose to make it behave like SVr4 curses. Explaining this
> > nicely in a portability section of the manpage is still on my to-do list,
> > but it's clear in the note that I made. NetBSD curses returns no error,
> > but it's based on some code to handle SIGTSTP.
>
> I think it is too late to change behavior in ncurses. This change is
> going to cause problems for end users which outweigh any benefits from
> forcing changes in non-conforming applications, IMHO.
If I weren't spending about a quarter of my time repairing configure scripts
broken by "improvements" to compiler warnings, I'd be more agreeable.
--
Thomas E. Dickey <[email protected]>
https://invisible-island.net
signature.asc
Description: PGP signature

