Author: Matti Picus <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit