diff options
Diffstat (limited to 'Modules/_io/textio.c')
-rw-r--r-- | Modules/_io/textio.c | 56 |
1 files changed, 6 insertions, 50 deletions
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index 6ba7393..f45a697 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -1060,7 +1060,6 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, PyObject *raw, *codec_info = NULL; PyObject *res; int r; - int use_locale_encoding = 0; // Use locale encoding even in UTF-8 mode. self->ok = 0; self->detached = 0; @@ -1074,10 +1073,6 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, } } } - else if (strcmp(encoding, "locale") == 0) { - encoding = NULL; - use_locale_encoding = 1; - } if (errors == Py_None) { errors = &_Py_ID(strict); @@ -1114,57 +1109,18 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, self->encodefunc = NULL; self->b2cratio = 0.0; -#ifdef MS_WINDOWS - // os.device_encoding() on Unix is the locale encoding or UTF-8 - // according to UTF-8 Mode. - // Since UTF-8 mode shouldn't affect `encoding="locale"`, we call - // os.device_encoding() only on Windows. - if (encoding == NULL) { - /* Try os.device_encoding(fileno) */ - PyObject *fileno; - _PyIO_State *state = IO_STATE(); - if (state == NULL) - goto error; - fileno = PyObject_CallMethodNoArgs(buffer, &_Py_ID(fileno)); - /* Ignore only AttributeError and UnsupportedOperation */ - if (fileno == NULL) { - if (PyErr_ExceptionMatches(PyExc_AttributeError) || - PyErr_ExceptionMatches(state->unsupported_operation)) { - PyErr_Clear(); - } - else { - goto error; - } - } - else { - int fd = _PyLong_AsInt(fileno); - Py_DECREF(fileno); - if (fd == -1 && PyErr_Occurred()) { - goto error; - } - - self->encoding = _Py_device_encoding(fd); - if (self->encoding == NULL) - goto error; - else if (!PyUnicode_Check(self->encoding)) - Py_CLEAR(self->encoding); - } + if (encoding == NULL && _PyRuntime.preconfig.utf8_mode) { + _Py_DECLARE_STR(utf_8, "utf-8"); + self->encoding = Py_NewRef(&_Py_STR(utf_8)); } -#endif - - if (encoding == NULL && self->encoding == NULL) { - if (_PyRuntime.preconfig.utf8_mode && !use_locale_encoding) { - _Py_DECLARE_STR(utf_8, "utf-8"); - self->encoding = Py_NewRef(&_Py_STR(utf_8)); - } - else { - self->encoding = _Py_GetLocaleEncodingObject(); - } + else if (encoding == NULL || (strcmp(encoding, "locale") == 0)) { + self->encoding = _Py_GetLocaleEncodingObject(); if (self->encoding == NULL) { goto error; } assert(PyUnicode_Check(self->encoding)); } + if (self->encoding != NULL) { encoding = PyUnicode_AsUTF8(self->encoding); if (encoding == NULL) |