mirror of
https://github.com/qemu/qemu.git
synced 2024-11-30 07:13:38 +08:00
qapi: Open files with encoding='utf-8'
Python 2 happily reads UTF-8 files in text mode, but Python 3 requires
either UTF-8 locale or an explicit encoding passed to open(). Commit
d4e5ec877c
fixed this by setting the en_US.UTF-8 locale. Falls apart
when the locale isn't be available.
Matthias Maier and Arfrever Frehtes Taifersar Arahesis proposed to use
binary mode instead, with manual conversion from bytes to str. Works,
but opening with an explicit encoding is simpler, so do that.
Since Python 2's open() doesn't support the encoding parameter, we
need to suppress it with a version check.
Reported-by: Arfrever Frehtes Taifersar Arahesis <arfrever.fta@gmail.com>
Reported-by: Matthias Maier <tamiko@43-1.org>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20180618175958.29073-2-armbru@redhat.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
29cd0403f1
commit
de685ae5e9
@ -16,6 +16,7 @@ import errno
|
||||
import os
|
||||
import re
|
||||
import string
|
||||
import sys
|
||||
from collections import OrderedDict
|
||||
|
||||
builtin_types = {
|
||||
@ -340,7 +341,10 @@ class QAPISchemaParser(object):
|
||||
return None
|
||||
|
||||
try:
|
||||
fobj = open(incl_fname, 'r')
|
||||
if sys.version_info[0] >= 3:
|
||||
fobj = open(incl_fname, 'r', encoding='utf-8')
|
||||
else:
|
||||
fobj = open(incl_fname, 'r')
|
||||
except IOError as e:
|
||||
raise QAPISemError(info, '%s: %s' % (e.strerror, incl_fname))
|
||||
return QAPISchemaParser(fobj, previously_included, info)
|
||||
@ -1493,7 +1497,11 @@ class QAPISchemaEvent(QAPISchemaEntity):
|
||||
class QAPISchema(object):
|
||||
def __init__(self, fname):
|
||||
self._fname = fname
|
||||
parser = QAPISchemaParser(open(fname, 'r'))
|
||||
if sys.version_info[0] >= 3:
|
||||
f = open(fname, 'r', encoding='utf-8')
|
||||
else:
|
||||
f = open(fname, 'r')
|
||||
parser = QAPISchemaParser(f)
|
||||
exprs = check_exprs(parser.exprs)
|
||||
self.docs = parser.docs
|
||||
self._entity_list = []
|
||||
@ -2007,7 +2015,10 @@ class QAPIGen(object):
|
||||
if e.errno != errno.EEXIST:
|
||||
raise
|
||||
fd = os.open(pathname, os.O_RDWR | os.O_CREAT, 0o666)
|
||||
f = os.fdopen(fd, 'r+')
|
||||
if sys.version_info[0] >= 3:
|
||||
f = open(fd, 'r+', encoding='utf-8')
|
||||
else:
|
||||
f = os.fdopen(fd, 'r+')
|
||||
text = (self._top(fname) + self._preamble + self._body
|
||||
+ self._bottom(fname))
|
||||
oldtext = f.read(len(text) + 1)
|
||||
|
Loading…
Reference in New Issue
Block a user