Author: Matti Picus <matti.pi...@gmail.com> Branch: unicode-utf8 Changeset: r93991:341ddb374260 Date: 2018-03-18 18:28 +0100 http://bitbucket.org/pypy/pypy/changeset/341ddb374260/
Log: fix winreg for utf8 on win32 diff --git a/pypy/interpreter/unicodehelper.py b/pypy/interpreter/unicodehelper.py --- a/pypy/interpreter/unicodehelper.py +++ b/pypy/interpreter/unicodehelper.py @@ -226,12 +226,12 @@ from rpython.rlib import runicode slen = len(s) res = runicode.unicode_encode_mbcs(s, slen, errors, errorhandler) - return res.decode('utf8') + return res - def str_decode_mbcs(s, errors, errorhandler): + def str_decode_mbcs(s, errors, final, errorhandler): from rpython.rlib import runicode slen = len(s) - res, size = runicode.str_decode_mbcs(s, slen, errors=errors, + res, size = runicode.str_decode_mbcs(s, slen, final=final, errors=errors, errorhandler=errorhandler) return res.encode('utf8'), size, len(res) diff --git a/pypy/module/_winreg/interp_winreg.py b/pypy/module/_winreg/interp_winreg.py --- a/pypy/module/_winreg/interp_winreg.py +++ b/pypy/module/_winreg/interp_winreg.py @@ -697,11 +697,12 @@ raiseWindowsError(space, ret, 'RegConnectRegistry') return W_HKEY(space, rethkey[0]) -@unwrap_spec(source=unicode) -def ExpandEnvironmentStrings(space, source): +def ExpandEnvironmentStrings(space, w_source): "string = ExpandEnvironmentStrings(string) - Expand environment vars." try: - return space.newunicode(rwinreg.ExpandEnvironmentStrings(source)) + source, source_ulen = space.utf8_len_w(w_source) + res, res_ulen = rwinreg.ExpandEnvironmentStrings(source, source_ulen) + return space.newutf8(res, res_ulen) except WindowsError as e: raise wrap_windowserror(space, e) diff --git a/rpython/rlib/rwinreg.py b/rpython/rlib/rwinreg.py --- a/rpython/rlib/rwinreg.py +++ b/rpython/rlib/rwinreg.py @@ -165,8 +165,8 @@ rwin32.DWORD, save_err=rffi.RFFI_SAVE_LASTERROR) -def ExpandEnvironmentStrings(source): - with rffi.scoped_unicode2wcharp(source) as src_buf: +def ExpandEnvironmentStrings(source, unicode_len): + with rffi.scoped_utf82wcharp(source, unicode_len) as src_buf: size = _ExpandEnvironmentStringsW(src_buf, lltype.nullptr(rffi.CWCHARP.TO), 0) if size == 0: @@ -176,4 +176,5 @@ if _ExpandEnvironmentStringsW(src_buf, dest_buf.raw, size) == 0: raise rwin32.lastSavedWindowsError("ExpandEnvironmentStrings") - return dest_buf.str(size - 1) # remove trailing \0 + res = dest_buf.str(size-1) # remove trailing \0 + return res.encode('utf8'), len(res) diff --git a/rpython/rtyper/lltypesystem/rffi.py b/rpython/rtyper/lltypesystem/rffi.py --- a/rpython/rtyper/lltypesystem/rffi.py +++ b/rpython/rtyper/lltypesystem/rffi.py @@ -1278,6 +1278,18 @@ if self.buf: free_wcharp(self.buf) +class scoped_utf82wcharp: + def __init__(self, value, unicode_len): + if value is not None: + self.buf = utf82wcharp(value, unicode_len) + else: + self.buf = lltype.nullptr(CWCHARP.TO) + def __enter__(self): + return self.buf + def __exit__(self, *args): + if self.buf: + free_wcharp(self.buf) + class scoped_nonmovingbuffer: @@ -1316,7 +1328,7 @@ def __init__(self, data): self.data = data def __enter__(self): - self.buf, self.flag = get_nonmoving_unicodebuffer(self.data) + self.buf, self.flag = get_nonmoving_unicodebuffer(self.data.decode('utf-8')) return self.buf def __exit__(self, *args): free_nonmoving_unicodebuffer(self.data, self.buf, self.flag) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit