Decode all keys in dictionary containing environment passed to os.execve() in portage...
authorArfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>
Mon, 21 Sep 2009 18:02:08 +0000 (18:02 -0000)
committerArfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>
Mon, 21 Sep 2009 18:02:08 +0000 (18:02 -0000)
svn path=/main/trunk/; revision=14352

pym/portage/process.py

index 6ce304b4f58a9b66e53a5e0308b808f0cb0a735f..428c66f4cb51432f7702839426adc288c57f3664 100644 (file)
@@ -11,6 +11,7 @@ import traceback
 
 from portage import os
 from portage import _encodings
+from portage import _unicode_decode
 from portage import _unicode_encode
 import portage
 portage.proxy.lazyimport.lazyimport(globals(),
@@ -372,8 +373,13 @@ def _exec(binary, mycommand, opt_name, fd_pipes, env, gid, groups, uid, umask,
        if pre_exec:
                pre_exec()
 
+       # Decode all keys for compatibility with Python 3.
+       env_decoded = {}
+       for k, v in env.items():
+               env_decoded[_unicode_decode(k)] = v
+
        # And switch to the new process.
-       os.execve(binary, myargs, env)
+       os.execve(binary, myargs, env_decoded)
 
 def find_binary(binary):
        """