diff options
author | Inada Naoki <songofacandy@gmail.com> | 2023-06-30 04:02:03 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-30 04:02:03 (GMT) |
commit | f1034ba7f67400e7ed7e299dc8b22521c4e43246 (patch) | |
tree | a3cf0a4ca22516cdc41c6961714dd9d75487c5f7 /Python | |
parent | 77ddc9a7b1b28c8b8aee6cc97e483185a56819a6 (diff) | |
download | cpython-f1034ba7f67400e7ed7e299dc8b22521c4e43246.zip cpython-f1034ba7f67400e7ed7e299dc8b22521c4e43246.tar.gz cpython-f1034ba7f67400e7ed7e299dc8b22521c4e43246.tar.bz2 |
gh-106182: sys: Intern getfilesystemencoding() and getfilesystemencodeerrors() (#106183)
sys: Intern getfilesystemencoding() and getfilesystemencodeerrors()
Diffstat (limited to 'Python')
-rw-r--r-- | Python/sysmodule.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 6810240..8e3fbe3 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -863,6 +863,13 @@ sys_exit_impl(PyObject *module, PyObject *status) } +static PyObject * +get_utf8_unicode(void) +{ + _Py_DECLARE_STR(utf_8, "utf-8"); + PyObject *ret = &_Py_STR(utf_8); + return Py_NewRef(ret); +} /*[clinic input] sys.getdefaultencoding @@ -874,9 +881,7 @@ static PyObject * sys_getdefaultencoding_impl(PyObject *module) /*[clinic end generated code: output=256d19dfcc0711e6 input=d416856ddbef6909]*/ { - _Py_DECLARE_STR(utf_8, "utf-8"); - PyObject *ret = &_Py_STR(utf_8); - return Py_NewRef(ret); + return get_utf8_unicode(); } /*[clinic input] @@ -891,7 +896,17 @@ sys_getfilesystemencoding_impl(PyObject *module) { PyInterpreterState *interp = _PyInterpreterState_GET(); const PyConfig *config = _PyInterpreterState_GetConfig(interp); - return PyUnicode_FromWideChar(config->filesystem_encoding, -1); + + if (wcscmp(config->filesystem_encoding, L"utf-8") == 0) { + return get_utf8_unicode(); + } + + PyObject *u = PyUnicode_FromWideChar(config->filesystem_encoding, -1); + if (u == NULL) { + return NULL; + } + _PyUnicode_InternInPlace(interp, &u); + return u; } /*[clinic input] @@ -906,7 +921,12 @@ sys_getfilesystemencodeerrors_impl(PyObject *module) { PyInterpreterState *interp = _PyInterpreterState_GET(); const PyConfig *config = _PyInterpreterState_GetConfig(interp); - return PyUnicode_FromWideChar(config->filesystem_errors, -1); + PyObject *u = PyUnicode_FromWideChar(config->filesystem_errors, -1); + if (u == NULL) { + return NULL; + } + _PyUnicode_InternInPlace(interp, &u); + return u; } /*[clinic input] |