mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
bpo-34523: Add _PyCoreConfig.filesystem_encoding (GH-8963)
_PyCoreConfig_Read() is now responsible to choose the filesystem encoding and error handler. Using Py_Main(), the encoding is now chosen even before calling Py_Initialize(). _PyCoreConfig.filesystem_encoding is now the reference, instead of Py_FileSystemDefaultEncoding, for the Python filesystem encoding. Changes: * Add filesystem_encoding and filesystem_errors to _PyCoreConfig * _PyCoreConfig_Read() now reads the locale encoding for the file system encoding. * PyUnicode_EncodeFSDefault() and PyUnicode_DecodeFSDefaultAndSize() now use the interpreter configuration rather than Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors global configuration variables. * Add _Py_SetFileSystemEncoding() and _Py_ClearFileSystemEncoding() private functions to only modify Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors in coreconfig.c. * _Py_CoerceLegacyLocale() now takes an int rather than _PyCoreConfig for the warning.
This commit is contained in:
parent
dfe0dc7453
commit
b2457efc78
12 changed files with 301 additions and 105 deletions
|
@ -81,8 +81,15 @@ main(int argc, char *argv[])
|
|||
config.program_name = L"./_freeze_importlib";
|
||||
/* Don't install importlib, since it could execute outdated bytecode. */
|
||||
config._install_importlib = 0;
|
||||
config.install_signal_handlers = 1;
|
||||
config._frozen = 1;
|
||||
#ifdef MS_WINDOWS
|
||||
/* bpo-34523: initfsencoding() is not called if _install_importlib=0,
|
||||
so interp->fscodec_initialized value remains 0.
|
||||
PyUnicode_EncodeFSDefault() doesn't support the "surrogatepass" error
|
||||
handler in such case, whereas it's the default error handler on Windows.
|
||||
Force the "strict" error handler to work around this bootstrap issue. */
|
||||
config.filesystem_errors = "strict";
|
||||
#endif
|
||||
|
||||
_PyInitError err = _Py_InitializeFromConfig(&config);
|
||||
/* No need to call _PyCoreConfig_Clear() since we didn't allocate any
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue