aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2022-08-15 12:45:43 -0600
committerTom Tromey <tromey@adacore.com>2022-08-30 11:49:48 -0600
commit2d83dd693901cb2588517d7296f1360d902c89f7 (patch)
tree32108cbc3abf6acf574a5b79fb0686aa446d8fe7
parentdd083c6524f1e90dae19ed895b3f5eaf6228de68 (diff)
downloadfsf-binutils-gdb-2d83dd693901cb2588517d7296f1360d902c89f7.zip
fsf-binutils-gdb-2d83dd693901cb2588517d7296f1360d902c89f7.tar.gz
fsf-binutils-gdb-2d83dd693901cb2588517d7296f1360d902c89f7.tar.bz2
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.
-rw-r--r--gdb/python/lib/gdb/__init__.py19
-rw-r--r--gdb/testsuite/gdb.python/python.exp4
2 files changed, 9 insertions, 14 deletions
diff --git a/gdb/python/lib/gdb/__init__.py b/gdb/python/lib/gdb/__init__.py
index 5b10e3e..191915e 100644
--- a/gdb/python/lib/gdb/__init__.py
+++ b/gdb/python/lib/gdb/__init__.py
@@ -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()
-
-
-class _GdbOutputErrorFile(_GdbFile):
- def write(self, s):
- write(s, stream=STDERR)
+sys.stdout = _GdbFile(STDOUT)
-sys.stderr = _GdbOutputErrorFile()
+sys.stderr = _GdbFile(STDERR)
# Default prompt hook does nothing.
prompt_hook = None
diff --git a/gdb/testsuite/gdb.python/python.exp b/gdb/testsuite/gdb.python/python.exp
index 8c0da6d..48ff07e 100644
--- a/gdb/testsuite/gdb.python/python.exp
+++ b/gdb/testsuite/gdb.python/python.exp
@@ -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"