diff options
Diffstat (limited to 'Objects/unicodeobject.c')
-rw-r--r-- | Objects/unicodeobject.c | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 64905e84b1..86cac96cd6 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -3439,8 +3439,9 @@ locale_error_handler(const char *errors, int *surrogateescape) } } -PyObject * -PyUnicode_EncodeLocale(PyObject *unicode, const char *errors) +static PyObject * +unicode_encode_locale(PyObject *unicode, const char *errors, + int current_locale) { Py_ssize_t wlen, wlen2; wchar_t *wstr; @@ -3469,7 +3470,7 @@ PyUnicode_EncodeLocale(PyObject *unicode, const char *errors) /* "surrogateescape" error handler */ char *str; - str = Py_EncodeLocale(wstr, &error_pos); + str = _Py_EncodeLocaleEx(wstr, &error_pos, current_locale); if (str == NULL) { if (error_pos == (size_t)-1) { PyErr_NoMemory(); @@ -3550,6 +3551,12 @@ encode_error: } PyObject * +PyUnicode_EncodeLocale(PyObject *unicode, const char *errors) +{ + return unicode_encode_locale(unicode, errors, 1); +} + +PyObject * PyUnicode_EncodeFSDefault(PyObject *unicode) { #if defined(__APPLE__) @@ -3571,7 +3578,8 @@ PyUnicode_EncodeFSDefault(PyObject *unicode) Py_FileSystemDefaultEncodeErrors); } else { - return PyUnicode_EncodeLocale(unicode, Py_FileSystemDefaultEncodeErrors); + return unicode_encode_locale(unicode, + Py_FileSystemDefaultEncodeErrors, 0); } #endif } @@ -3741,9 +3749,9 @@ mbstowcs_errorpos(const char *str, size_t len) return 0; } -PyObject* -PyUnicode_DecodeLocaleAndSize(const char *str, Py_ssize_t len, - const char *errors) +static PyObject* +unicode_decode_locale(const char *str, Py_ssize_t len, + const char *errors, int current_locale) { wchar_t smallbuf[256]; size_t smallbuf_len = Py_ARRAY_LENGTH(smallbuf); @@ -3766,7 +3774,7 @@ PyUnicode_DecodeLocaleAndSize(const char *str, Py_ssize_t len, if (surrogateescape) { /* "surrogateescape" error handler */ - wstr = Py_DecodeLocale(str, &wlen); + wstr = _Py_DecodeLocaleEx(str, &wlen, current_locale); if (wstr == NULL) { if (wlen == (size_t)-1) PyErr_NoMemory(); @@ -3845,10 +3853,17 @@ decode_error: } PyObject* +PyUnicode_DecodeLocaleAndSize(const char *str, Py_ssize_t size, + const char *errors) +{ + return unicode_decode_locale(str, size, errors, 1); +} + +PyObject* PyUnicode_DecodeLocale(const char *str, const char *errors) { Py_ssize_t size = (Py_ssize_t)strlen(str); - return PyUnicode_DecodeLocaleAndSize(str, size, errors); + return unicode_decode_locale(str, size, errors, 1); } @@ -3880,7 +3895,8 @@ PyUnicode_DecodeFSDefaultAndSize(const char *s, Py_ssize_t size) Py_FileSystemDefaultEncodeErrors); } else { - return PyUnicode_DecodeLocaleAndSize(s, size, Py_FileSystemDefaultEncodeErrors); + return unicode_decode_locale(s, size, + Py_FileSystemDefaultEncodeErrors, 0); } #endif } |