mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-17 16:05:56 +08:00
Fix flush for sys.stderr
GDB overwrites Python's sys.stdout and sys.stderr, but does not properly implement the 'flush' method -- it only ever will flush stdout. This patch fixes the bug. I couldn't find a straightforward way to write a test for this.
This commit is contained in:
@ -39,6 +39,9 @@ class _GdbFile(object):
|
||||
encoding = "UTF-8"
|
||||
errors = "strict"
|
||||
|
||||
def __init__(self, stream):
|
||||
self.stream = stream
|
||||
|
||||
def close(self):
|
||||
# Do nothing.
|
||||
return None
|
||||
@ -51,23 +54,15 @@ class _GdbFile(object):
|
||||
self.write(line)
|
||||
|
||||
def flush(self):
|
||||
flush()
|
||||
flush(stream=self.stream)
|
||||
|
||||
|
||||
class _GdbOutputFile(_GdbFile):
|
||||
def write(self, s):
|
||||
write(s, stream=STDOUT)
|
||||
write(s, stream=self.stream)
|
||||
|
||||
|
||||
sys.stdout = _GdbOutputFile()
|
||||
sys.stdout = _GdbFile(STDOUT)
|
||||
|
||||
|
||||
class _GdbOutputErrorFile(_GdbFile):
|
||||
def write(self, s):
|
||||
write(s, stream=STDERR)
|
||||
|
||||
|
||||
sys.stderr = _GdbOutputErrorFile()
|
||||
sys.stderr = _GdbFile(STDERR)
|
||||
|
||||
# Default prompt hook does nothing.
|
||||
prompt_hook = None
|
||||
|
@ -297,8 +297,8 @@ with_test_prefix "test decode_line" {
|
||||
}
|
||||
|
||||
# gdb.write
|
||||
gdb_test "python print (sys.stderr)" ".*gdb._GdbOutputErrorFile (instance|object) at.*" "test stderr location"
|
||||
gdb_test "python print (sys.stdout)" ".*gdb._GdbOutputFile (instance|object) at.*" "test stdout location"
|
||||
gdb_test "python print (sys.stderr)" ".*gdb._GdbFile (instance|object) at.*" "test stderr location"
|
||||
gdb_test "python print (sys.stdout)" ".*gdb._GdbFile (instance|object) at.*" "test stdout location"
|
||||
gdb_test "python gdb.write(\"Foo\\n\")" "Foo" "test default write"
|
||||
gdb_test "python gdb.write(\"Error stream\\n\", stream=gdb.STDERR)" "Error stream" "test stderr write"
|
||||
gdb_test "python gdb.write(\"Normal stream\\n\", stream=gdb.STDOUT)" "Normal stream" "test stdout write"
|
||||
|
Reference in New Issue
Block a user