diff options
Diffstat (limited to 'pym')
-rw-r--r-- | pym/portage/__init__.py | 4 | ||||
-rw-r--r-- | pym/portage/env/loaders.py | 2 | ||||
-rw-r--r-- | pym/portage/output.py | 3 | ||||
-rw-r--r-- | pym/portage/util.py | 14 |
4 files changed, 13 insertions, 10 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 3a969bbce..d897af0e8 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -1682,8 +1682,8 @@ class config(object): repo_conf_parser = SafeConfigParser() try: repo_conf_parser.readfp( - codecs.open(self._local_repo_conf_path, - mode='r', errors='replace')) + codecs.open(self._local_repo_conf_path, mode='r', + encoding='utf_8', errors='replace')) except EnvironmentError, e: if e.errno != errno.ENOENT: raise diff --git a/pym/portage/env/loaders.py b/pym/portage/env/loaders.py index 7cd2600ae..7b4d72721 100644 --- a/pym/portage/env/loaders.py +++ b/pym/portage/env/loaders.py @@ -139,7 +139,7 @@ class FileLoader(DataLoader): # once, which may be expensive due to digging in child classes. func = self.lineParser for fn in RecursiveFileLoader(self.fname): - f = codecs.open(fn, mode='r', errors='replace') + f = codecs.open(fn, mode='r', encoding='utf_8', errors='replace') for line_num, line in enumerate(f): func(line, line_num, data, errors) return (data, errors) diff --git a/pym/portage/output.py b/pym/portage/output.py index 4c533c427..eb0d247b7 100644 --- a/pym/portage/output.py +++ b/pym/portage/output.py @@ -165,7 +165,8 @@ def _parse_color_map(onerror=None): return token try: lineno=0 - for line in codecs.open( myfile, mode = 'r', errors = 'replace' ): + for line in codecs.open( myfile, mode='r', + encoding='utf_8', errors='replace' ): lineno += 1 commenter_pos = line.find("#") diff --git a/pym/portage/util.py b/pym/portage/util.py index 6d9a23cd1..63b504cf9 100644 --- a/pym/portage/util.py +++ b/pym/portage/util.py @@ -318,7 +318,7 @@ def grablines(myfilename,recursive=0): else: try: myfile = codecs.open(myfilename, mode='r', - encoding=sys.getdefaultencoding(), errors='replace') + encoding='utf_8', errors='replace') mylines = myfile.readlines() myfile.close() except IOError, e: @@ -368,10 +368,11 @@ def getconfig(mycfg, tolerant=0, allow_sourcing=False, expand=True): # Workaround for avoiding a silent error in shlex that # is triggered by a source statement at the end of the file without a # trailing newline after the source statement - content = codecs.open(mycfg, mode='r', errors='replace').read() - if content and content[-1] != u'\n': - content += u'\n' - f = StringIO(content) + # NOTE: shex doesn't seem to supported unicode objects + # (produces spurious \0 characters with python-2.6.2) + content = open(mycfg).read() + if content and content[-1] != '\n': + content += '\n' except IOError, e: if e.errno == PermissionDenied.errno: raise PermissionDenied(mycfg) @@ -387,7 +388,7 @@ def getconfig(mycfg, tolerant=0, allow_sourcing=False, expand=True): # The default shlex.sourcehook() implementation # only joins relative paths when the infile # attribute is properly set. - lex = shlex_class(f, infile=mycfg, posix=True) + lex = shlex_class(content, infile=mycfg, posix=True) lex.wordchars = string.digits + string.ascii_letters + \ "~!@#$%*_\:;?,./-+{}" lex.quotes="\"'" @@ -874,6 +875,7 @@ class atomic_ofstream(ObjectProxy): open_func = open else: open_func = codecs.open + kargs.setdefault('encoding', 'utf_8') kargs.setdefault('errors', 'replace') if follow_links: |