NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: lib/56224: libcurses: adding character to last line of non-scrolling window wraps instead of



The following reply was made to PR lib/56224; it has been noted by GNATS.

From: Brett Lymn <blymn%internode.on.net@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: blymn%netbsd.org@localhost, gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost,
        mforney%mforney.org@localhost
Subject: Re: lib/56224: libcurses: adding character to last line of
 non-scrolling window wraps instead of
Date: Thu, 10 Jun 2021 16:01:14 +0930

 On Thu, Jun 10, 2021 at 03:55:02AM +0000, Michael Forney wrote:
 >  
 >  Thanks for the patch, I can confirm that this does solve the issue
 >  for the application in question (catgirl).
 >  
 
 Excellent, that is a good start.
 
 >  
 >  1. It seems that now the string is truncated by one extra character
 >  (the last column is empty). Since this last character doesn't extend
 >  beyond the end of the line, my expectation is that it should not
 >  be truncated. And indeed, this is how it behaves in ncurses.
 >  
 
 OK, I will fix that - my checks must be off by one.
 
 >  2. I was thinking that this needed to be fixed in _cursesi_addwchar,
 >  not _cursesi_addwbytes. Otherwise, addwstr and addch at the last
 >  column still wrap to column 0 (though, addwstr already truncates
 >  since it returns on the first ERR, whereas _curses_waddbytes ignores
 >  all errors except for the last character).
 >  
 
 No, _cursesi_addwchar is used by other routines that really should be
 inheriting the same behaviour, rather than fix each one individually I
 went for fixing it in the common routine so they all behaved the same.
 I think addwstr is the outlier in this instance.  I will look at fixing
 that.
 
 >  3. This seems incorrect to me:
 >  
 
 Yes, it is.  My bad.  I will rework that.  That probable explains why
 the wide char version of the slk test failed after my updates.
 
 >  
 >  Below is an alternative fix I've been testing that seems to solve
 >  these problems. The first thing it does is make _cursesi_waddbytes
 >  break from the loop and return ERR when any of the _cursesi_addwchar
 >  calls returns ERR (not just the last one). This is consistent with
 >  waddnwstr. The second thing it does is delay wrapping the cursor x
 >  position back to zero until after we return ERR if scrolling is not
 >  allowed.
 >  
 
 I may have read the SUSv2 section on the scrolling behaviour incorrectly
 but my interpretation is that trying to add a string at the bottom of
 the screen that would cause a scroll when scrollok is false should
 result in a silent truncation not ERR which is why I did what I did.
 The effect of my change is a slk routine that used to strangely return
 ERR no longer does so... I would like to keep that behaviour :)
 
 The patch you have proposed does not look right, with your fix you will
 have possibly not reset x to 0 but ISPASTEOL will be unset so the unset
 of the ISPASTEOL flag needs to be moved too which does make some sense
 to have that after a possible error return.  I will have a look at doing
 that.
 
 -- 
 Brett Lymn
 --
 Sent from my NetBSD device.
 
 "We are were wolves",
 "You mean werewolves?",
 "No we were wolves, now we are something else entirely",
 "Oh"
 


Home | Main Index | Thread Index | Old Index