tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: curses: wmove(window, ...) doesn't set physical cursor
Brett Lymn <blymn%internode.on.net@localhost> wrote:
> On Mon, Nov 21, 2016 at 10:46:50PM +0100, Carsten Kunze wrote:
> >
> > I want to do further tests with new hints I got from Brett. If it doesn't
> work I'll try again to prepare a minimum example from scratch.
> >
>
> Just for the record, what I suggested was try a touchwin() or touch on
> the subwin lines in the parent window before doing the refresh on the
> parent. The subtlety with using subwin() is that the child window
> shares the data structures with the parent but updates on the subwin
> don't mark the parent lines for update. This sounds a bit
> counterintuitive but I think this was a deliberate ploy to push the
> logic of overlapping window refresh back to the application instead of
> building it into the library.
I did use subwin() to save some bytes of memory since I don't use
stdscr directly. If I now have to use additional touchwin() subwin()
has performance drawbacks for me. It is fine how it is implemented
on NetBSD, but for my use case newwin() is now better suited.
So I changed all subwin() to newwin(), now the situation is the other
way round: First tests don't show any curses issue, but now ncurses
is unusable if wide char text is displayed (but ncurses works fine on
OpenBSD and FreeBSD). This is OT here and would be a topic for the
pkgsrc list of course.
But there is still one general issue with curses:
When I use option -fsanitize=address with gcc (nb1 20160606) 5.4.0
a curses program crashes with heap-buffer-overflow.
This time I have a small test case:
Makefile:
LDADD= -lcurses
a.out: main.o
$(CC) -fsanitize=address main.o $(LDADD)
clean:
rm -f main.o a.out
.c.o:
$(CC) -c $(CFLAGS) -fsanitize=address $<
main.c:
#include <curses.h>
int
main()
{
initscr();
endwin();
return 0;
}
--Carsten
Home |
Main Index |
Thread Index |
Old Index