diff options
author | Victor Stinner <vstinner@redhat.com> | 2019-09-23 12:45:47 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-23 12:45:47 (GMT) |
commit | fcdb027234566c4d506d6d753c7d5638490fb088 (patch) | |
tree | f2de660712a5fb27687ffbc804e63bc3c445d961 /Objects | |
parent | b4d0b39a9b4cd203bcc5b236dc96456e9658119a (diff) | |
download | cpython-fcdb027234566c4d506d6d753c7d5638490fb088.zip cpython-fcdb027234566c4d506d6d753c7d5638490fb088.tar.gz cpython-fcdb027234566c4d506d6d753c7d5638490fb088.tar.bz2 |
bpo-38236: Dump path config at first import error (GH-16300)
Python now dumps path configuration if it fails to import the Python
codecs of the filesystem and stdio encodings.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/unicodeobject.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 070f795..55b2519 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -15804,13 +15804,13 @@ error: static PyStatus -init_stdio_encoding(PyInterpreterState *interp) +init_stdio_encoding(PyThreadState *tstate) { /* Update the stdio encoding to the normalized Python codec name. */ - PyConfig *config = &interp->config; + PyConfig *config = &tstate->interp->config; if (config_get_codec_name(&config->stdio_encoding) < 0) { return _PyStatus_ERR("failed to get the Python codec name " - "of the stdio encoding"); + "of the stdio encoding"); } return _PyStatus_OK(); } @@ -15864,15 +15864,18 @@ init_fs_codec(PyInterpreterState *interp) static PyStatus -init_fs_encoding(PyInterpreterState *interp) +init_fs_encoding(PyThreadState *tstate) { + PyInterpreterState *interp = tstate->interp; + /* Update the filesystem encoding to the normalized Python codec name. For example, replace "ANSI_X3.4-1968" (locale encoding) with "ascii" (Python codec name). */ PyConfig *config = &interp->config; if (config_get_codec_name(&config->filesystem_encoding) < 0) { + _Py_DumpPathConfig(tstate); return _PyStatus_ERR("failed to get the Python codec " - "of the filesystem encoding"); + "of the filesystem encoding"); } if (init_fs_codec(interp) < 0) { @@ -15885,14 +15888,12 @@ init_fs_encoding(PyInterpreterState *interp) PyStatus _PyUnicode_InitEncodings(PyThreadState *tstate) { - PyInterpreterState *interp = tstate->interp; - - PyStatus status = init_fs_encoding(interp); + PyStatus status = init_fs_encoding(tstate); if (_PyStatus_EXCEPTION(status)) { return status; } - return init_stdio_encoding(interp); + return init_stdio_encoding(tstate); } |