]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
dg-extract-results.py: For Python 3, force sys.stdout to handle surrogate escape...
authorRichard Sandiford <rdsandiford@googlemail.com>
Sat, 14 Jun 2014 09:49:07 +0000 (09:49 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sat, 14 Jun 2014 09:49:07 +0000 (09:49 +0000)
contrib/
* dg-extract-results.py: For Python 3, force sys.stdout to handle
surrogate escape sequences.
(safe_open): New function.
(output_segment, main): Use it.

From-SVN: r211666

contrib/ChangeLog
contrib/dg-extract-results.py

index 90a154e69b2309b64488334b95f4d622f2a31d66..550a9ebb8e6eb748dc69cdaaff7181ab10b3d91e 100644 (file)
@@ -1,3 +1,10 @@
+2014-06-14  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * dg-extract-results.py: For Python 3, force sys.stdout to handle
+       surrogate escape sequences.
+       (safe_open): New function.
+       (output_segment, main): Use it.
+
 2014-05-25  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * dg-extract-results.py (Named): Remove __cmp__ method.
index a5dfc5d8e9270ce036803efdd30141ec5d1d52b6..cccbfd391dc7c8559585bd38ecd11a59960450dd 100644 (file)
@@ -10,6 +10,7 @@
 import sys
 import getopt
 import re
+import io
 from datetime import datetime
 from operator import attrgetter
 
@@ -21,6 +22,18 @@ strict = False
 # they should keep the original order.
 sort_logs = True
 
+# A version of open() that is safe against whatever binary output
+# might be added to the log.
+def safe_open (filename):
+    if sys.version_info >= (3, 0):
+        return open (filename, 'r', errors = 'surrogateescape')
+    return open (filename, 'r')
+
+# Force stdout to handle escape sequences from a safe_open file.
+if sys.version_info >= (3, 0):
+    sys.stdout = io.TextIOWrapper (sys.stdout.buffer,
+                                   errors = 'surrogateescape')
+
 class Named:
     def __init__ (self, name):
         self.name = name
@@ -457,7 +470,7 @@ class Prog:
 
     # Output a segment of text.
     def output_segment (self, segment):
-        with open (segment.filename, 'r') as file:
+        with safe_open (segment.filename) as file:
             file.seek (segment.start)
             for i in range (segment.lines):
                 sys.stdout.write (file.readline())
@@ -540,7 +553,7 @@ class Prog:
         try:
             # Parse the input files.
             for filename in self.files:
-                with open (filename, 'r') as file:
+                with safe_open (filename) as file:
                     self.parse_file (filename, file)
 
             # Decide what to output.