Use encoded byte strings with python-2.x, since the python ebuilds are
authorZac Medico <zmedico@gentoo.org>
Wed, 13 Jan 2010 04:12:56 +0000 (04:12 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 13 Jan 2010 04:12:56 +0000 (04:12 -0000)
known to remove the encodings module when USE=build is enabled (thus
disabling unicode decoding/encoding).

svn path=/main/trunk/; revision=15197

bin/check-implicit-pointer-usage.py

index 1f6417b58732deb0a3f8aee1613e7c9ed0cea8f0..8822c4504eac43d74eb884143a214881dc674603 100755 (executable)
@@ -34,29 +34,33 @@ pointer_pattern = (
     + "cast to pointer from integer of different size)")
 
 if sys.hexversion < 0x3000000:
-    pointer_pattern = unicode(pointer_pattern, encoding='utf_8')
-    unicode_quote_open = unicode('\xE2\x80\x98', encoding='utf_8')
-    unicode_quote_close = unicode('\xE2\x80\x99', encoding='utf_8')
-    out = sys.stdout
+    # Use encoded byte strings in python-2.x, since the python ebuilds are
+    # known to remove the encodings module when USE=build is enabled (thus
+    # disabling unicode decoding/encoding). The portage module has a
+    # workaround for this, but currently we don't import that here since we
+    # don't want to trigger potential sandbox violations due to stale pyc
+    # files for the portage module.
+    unicode_quote_open = '\xE2\x80\x98'
+    unicode_quote_close = '\xE2\x80\x99'
+    def write(msg):
+        sys.stdout.write(msg)
 else:
     unicode_quote_open = '\u2018'
     unicode_quote_close = '\u2019'
-    out = sys.stdout.buffer
+    def write(msg):
+        sys.stdout.buffer.write(msg.encode('utf_8', 'backslashreplace'))
+
 pointer_pattern = re.compile(pointer_pattern)
 
 last_implicit_filename = ""
 last_implicit_linenum = -1
 last_implicit_func = ""
 
-def write(msg):
-    out.write(msg.encode('utf_8', 'backslashreplace'))
-
 while True:
     if sys.hexversion >= 0x3000000:
         line = sys.stdin.buffer.readline().decode('utf_8', 'replace')
     else:
-        line = unicode(sys.stdin.readline(),
-            encoding='utf_8', errors='replace')
+        line = sys.stdin.readline()
     if not line:
         break
     # translate unicode open/close quotes to ascii ones