jfp@practic.com (John F. Peters) (11/26/89)
Description:
gdb3.4 on Vax 4.3bsd-Tahoe:
When terminal parity is set to anything other than EVENP+ODDP,
local modes are all zero after running gdb.
Repeat-By:
* Find a terminal that generates parity in the eighth bit.
* stty even -odd crt decctlq (or odd -even)
* run gdb
* stty everything
(local modes e.g. decctlq, crtbs, crterase, etc. are all gone)
Fix:
In readline/readline.c, rl_prep_terminal and rl_deprep_terminal
aren't symmetric. Incoming local modes are saved only when parity
is set to EVENP+ODDP, but later they're restored unconditionally.
Thus when parity is set to anything but EVENP+ODDP, local modes
get restored from a word that's all zero.
This fix applies the same EVENP+ODDP test at restoration time.
-----
jfp@practic.com
*** readline.c.orig Thu Oct 19 14:26:49 1989
--- readline.c Sat Nov 25 10:14:40 1989
***************
*** 2078,2084 ****
int tty = fileno (rl_instream);
#if defined (TIOCLGET) && defined (LPASS8)
! ioctl (tty, TIOCLSET, &local_mode_flags);
#endif
#ifdef TIOCSLTC
--- 2078,2085 ----
int tty = fileno (rl_instream);
#if defined (TIOCLGET) && defined (LPASS8)
! if ((the_ttybuff.sg_flags & (ODDP | EVENP)) == (ODDP | EVENP))
! ioctl (tty, TIOCLSET, &local_mode_flags);
#endif
#ifdef TIOCSLTC