[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: second newterm with sp_funcs enabled returns NULL pointer
From: |
Thomas Dickey |
Subject: |
Re: second newterm with sp_funcs enabled returns NULL pointer |
Date: |
Sat, 26 Apr 2014 15:04:48 -0400 |
User-agent: |
Mutt/1.5.20 (2009-06-14) |
On Sat, Apr 26, 2014 at 08:42:15PM +0200, Thomas Beierlein wrote:
> Sorry, due to server problems I have to reply from an alternative
> account.
>
>
> On Sat, Apr26, Thomas Dickey wrote:
> > On Tue, Apr 22, 2014 at 07:02:46PM +0200, Thomas Beierlein wrote:
> > > Hi,
> > >
> > > I am maintaining an old ncurses program for some years (tlf) which
> > > uses two terminal screens. Last days I got a bug report that the
> > > second screen does not work in OpenSUSE environment. A quick check
> > > showed that libncurses (5.9) got build there with --enable-sp-funcs.
> > > Digging a little further only a first call to newterm() returns a
> > > valid SCREEN*, a second call to establish a second terminal screen
> > > always returns NULL.
> > >
> > > That can also be shown by the following simple program:
> > >
> > > --
> > > #include <ncurses.h>
> > > SCREEN *x;
> > > SCREEN *y;
> > >
> > > int main() {
> > > x = newterm(NULL, stdout, stdin);
> > > y = newterm(NULL, stdout, stdin);
> >
> > I can reproduce this, looks like a bug (am looking into that, now).
> >
> As far as I have understood the first newterm() calls new_prescr() and
> hands the allocated screen to newterm_sp. Newterm_sp() initializes the
> screen and hands it back as his result to the application. As an side
> effect the screen gets marked as no longer being a prescreen
> (_prescreen=FALSE).
>
> The second call to newterm() checks if the current screen IsPreScreen()
> which is no longer true (see above) and calls new_prescreen() again. But
> as the SCREEN *sp is made static no new screen gets allocated. A
> reference to the old screen - which is no longer marked as an
> prescreen - is again handed over to newterm_sp(). But newterm_sp()
> expects a screen which is marked as _prescreen and voila it fails.
yes... reading though that slice, I recalled that the apparent intent of the
prescreen code was to provide some of the SCREEN-properties before the first
SCREEN was allocated. That information is needed in initalizing soft-keys.
But in newterm, that seems to have just been an error - so I removed that chunk.
>
>
> > (as an aside, I would not expect to have two screens open for the same
> > I/O - perhaps tlf doesn't do _that_)
>
> Works normally like a charm. Both screens gets initialized with
> different sets of windows and content and gets switched back and forth
> at user command with an appropriate set_term() to work with one or the
> other terminal screen.
I see (I've always thought of this as separate devices)
--
Thomas E. Dickey <address@hidden>
http://invisible-island.net
ftp://invisible-island.net
signature.asc
Description: Digital signature