diff options
author | Tom Tromey <tromey@adacore.com> | 2022-08-15 12:45:43 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2022-08-30 11:49:48 -0600 |
commit | 2d83dd693901cb2588517d7296f1360d902c89f7 (patch) | |
tree | 32108cbc3abf6acf574a5b79fb0686aa446d8fe7 | |
parent | dd083c6524f1e90dae19ed895b3f5eaf6228de68 (diff) | |
download | fsf-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__.py | 19 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/python.exp | 4 |
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" |