Author: Matti Picus <matti.pi...@gmail.com> Branch: unicode-utf8-py3 Changeset: r95007:45f1dd7255ba Date: 2018-08-14 20:14 -0700 http://bitbucket.org/pypy/pypy/changeset/45f1dd7255ba/
Log: error.strerr now returns utf8, uni_length; fitting for space.newtext diff --git a/pypy/interpreter/error.py b/pypy/interpreter/error.py --- a/pypy/interpreter/error.py +++ b/pypy/interpreter/error.py @@ -20,7 +20,8 @@ def strerror(errno): """Translate an error code to a unicode message string.""" from pypy.module._codecs.locale import str_decode_locale_surrogateescape - return str_decode_locale_surrogateescape(os.strerror(errno)) + uni = str_decode_locale_surrogateescape(os.strerror(errno)) + return uni.encode('utf8'), len(uni) class OperationError(Exception): """Interpreter-level exception that signals an exception that should be @@ -655,12 +656,13 @@ return None try: - msg = strerror(errno) + msg, lgt = strerror(errno) except ValueError: - msg = u'error %d' % errno + msg = 'error %d' % errno + lgt = len(msg) w_errno = space.newint(errno) w_winerror = space.w_None - w_msg = space.newtext(msg.encode('utf8'), len(msg)) + w_msg = space.newtext(msg, lgt) if w_filename is None: w_filename = space.w_None @@ -690,9 +692,9 @@ eintr_retry=eintr_retry) def exception_from_errno(space, w_type, errno): - msg = strerror(errno) + msg, lgt = strerror(errno) w_error = space.call_function(w_type, space.newint(errno), - space.newtext(msg)) + space.newtext(msg, lgt)) return OperationError(w_type, w_error) def exception_from_saved_errno(space, w_type): diff --git a/pypy/module/cpyext/pyerrors.py b/pypy/module/cpyext/pyerrors.py --- a/pypy/module/cpyext/pyerrors.py +++ b/pypy/module/cpyext/pyerrors.py @@ -211,16 +211,16 @@ Return value: always NULL.""" # XXX Doesn't actually do anything with PyErr_CheckSignals. errno = rffi.cast(lltype.Signed, rposix._get_errno()) - msg = _strerror(errno) + msg, lgt = _strerror(errno) if w_value: w_error = space.call_function(w_type, space.newint(errno), - space.newtext(msg), + space.newtext(msg, lgt), w_value) else: w_error = space.call_function(w_type, space.newint(errno), - space.newtext(msg)) + space.newtext(msg, lgt)) raise OperationError(w_type, w_error) @cpython_api([], rffi.INT_real, error=-1) diff --git a/pypy/module/posix/interp_posix.py b/pypy/module/posix/interp_posix.py --- a/pypy/module/posix/interp_posix.py +++ b/pypy/module/posix/interp_posix.py @@ -838,7 +838,8 @@ def strerror(space, code): """Translate an error code to a message string.""" try: - return space.newtext(_strerror(code)) + # _strerror returns utf8, lgt + return space.newtext(*_strerror(code)) except ValueError: raise oefmt(space.w_ValueError, "strerror() argument out of range") _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit