mirror of
https://github.com/python/cpython.git
synced 2024-11-23 18:04:37 +08:00
gh-110392: Fix tty functions (GH-110642)
* tty.setraw() and tty.setcbreak() previously returned partially modified list of the original tty attributes. Now they return the correct list of the original tty attributes * tty.cfmakeraw() and tty.cfmakecbreak() now make a copy of the list of special characters before modifying it.
This commit is contained in:
parent
7284e0ef84
commit
84e2096fbd
@ -58,7 +58,9 @@ class TestTty(unittest.TestCase):
|
||||
self.assertEqual(mode[5], self.mode[5])
|
||||
|
||||
def test_setraw(self):
|
||||
mode = tty.setraw(self.fd)
|
||||
mode0 = termios.tcgetattr(self.fd)
|
||||
mode1 = tty.setraw(self.fd)
|
||||
self.assertEqual(mode1, mode0)
|
||||
mode2 = termios.tcgetattr(self.fd)
|
||||
self.check_raw(mode2)
|
||||
mode3 = tty.setraw(self.fd, termios.TCSANOW)
|
||||
@ -67,7 +69,9 @@ class TestTty(unittest.TestCase):
|
||||
tty.setraw(fd=self.fd, when=termios.TCSANOW)
|
||||
|
||||
def test_setcbreak(self):
|
||||
mode = tty.setcbreak(self.fd)
|
||||
mode0 = termios.tcgetattr(self.fd)
|
||||
mode1 = tty.setcbreak(self.fd)
|
||||
self.assertEqual(mode1, mode0)
|
||||
mode2 = termios.tcgetattr(self.fd)
|
||||
self.check_cbreak(mode2)
|
||||
mode3 = tty.setcbreak(self.fd, termios.TCSANOW)
|
||||
|
@ -39,6 +39,7 @@ def cfmakeraw(mode):
|
||||
# Case B: MIN>0, TIME=0
|
||||
# A pending read shall block until MIN (here 1) bytes are received,
|
||||
# or a signal is received.
|
||||
mode[CC] = list(mode[CC])
|
||||
mode[CC][VMIN] = 1
|
||||
mode[CC][VTIME] = 0
|
||||
|
||||
@ -54,6 +55,7 @@ def cfmakecbreak(mode):
|
||||
# Case B: MIN>0, TIME=0
|
||||
# A pending read shall block until MIN (here 1) bytes are received,
|
||||
# or a signal is received.
|
||||
mode[CC] = list(mode[CC])
|
||||
mode[CC][VMIN] = 1
|
||||
mode[CC][VTIME] = 0
|
||||
|
||||
|
@ -0,0 +1,4 @@
|
||||
Fix :func:`tty.setraw` and :func:`tty.setcbreak`: previously they returned
|
||||
partially modified list of the original tty attributes.
|
||||
:func:`tty.cfmakeraw` and :func:`tty.cfmakecbreak` now make a copy of the
|
||||
list of special characters before modifying it.
|
Loading…
Reference in New Issue
Block a user