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

In article <>,
Carsten Kunze  <> wrote:
>Brett Lymn <> 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:
>LDADD=          -lcurses
>a.out: main.o
>        $(CC) -fsanitize=address main.o $(LDADD)
>        rm -f main.o a.out
>        $(CC) -c $(CFLAGS) -fsanitize=address $<
>#include <curses.h>
>        initscr();
>        endwin();
>        return 0;

I used this as the Makefile, and I can't reproduce it (current/amd64)

$ cat Makefile 
CFLAGS=-g -fsanitize=address

all: main

        rm -f main

Home | Main Index | Thread Index | Old Index