From cab5d0741ee6adf2ae9ff5aaafe06b75b4b5bca3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 17 May 2019 19:01:14 +0200 Subject: bpo-36763: Add _PyCoreConfig_InitPythonConfig() (GH-13388) Add new functions to get the Python interpreter behavior: * _PyPreConfig_InitPythonConfig() * _PyCoreConfig_InitPythonConfig() Add new functions to get an isolated configuration: * _PyPreConfig_InitIsolatedConfig() * _PyCoreConfig_InitIsolatedConfig() Replace _PyPreConfig_INIT and _PyCoreConfig_INIT with new functions _PyPreConfig_Init() and _PyCoreConfig_Init(). _PyCoreConfig: set configure_c_stdio and parse_argv to 0 by default to behave as Python 3.6 in the default configuration. _PyCoreConfig_Read() no longer sets coerce_c_locale_warn to 1 if it's equal to 0. coerce_c_locale_warn must now be set to -1 (ex: using _PyCoreConfig_InitPythonConfig()) to enable C locale coercion warning. Add unit tests for _PyCoreConfig_InitPythonConfig() and _PyCoreConfig_InitIsolatedConfig(). Changes: * Rename _PyCoreConfig_GetCoreConfig() to _PyPreConfig_GetCoreConfig() * Fix core_read_precmdline(): handle parse_argv=0 * Fix _Py_PreInitializeFromCoreConfig(): pass coreconfig.argv to _Py_PreInitializeFromPyArgv(), except if parse_argv=0 --- Modules/main.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'Modules/main.c') diff --git a/Modules/main.c b/Modules/main.c index bb103c28a3..72546a21ca 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -52,23 +52,28 @@ pymain_init(const _PyArgv *args) fedisableexcept(FE_OVERFLOW); #endif - _PyPreConfig preconfig = _PyPreConfig_INIT; - /* Set to -1 to enable them depending on the LC_CTYPE locale and the - environment variables (PYTHONUTF8 and PYTHONCOERCECLOCALE) */ - preconfig.coerce_c_locale = -1; - preconfig.utf8_mode = -1; + _PyPreConfig preconfig; + _PyPreConfig_InitPythonConfig(&preconfig); err = _Py_PreInitializeFromPyArgv(&preconfig, args); if (_Py_INIT_FAILED(err)) { return err; } + _PyCoreConfig config; + err = _PyCoreConfig_InitPythonConfig(&config); + if (_Py_INIT_FAILED(err)) { + return err; + } + /* pass NULL as the config: config is read from command line arguments, environment variables, configuration files */ if (args->use_bytes_argv) { - return _Py_InitializeFromArgs(NULL, args->argc, args->bytes_argv); + return _Py_InitializeFromArgs(&config, + args->argc, args->bytes_argv); } else { - return _Py_InitializeFromWideArgs(NULL, args->argc, args->wchar_argv); + return _Py_InitializeFromWideArgs(&config, + args->argc, args->wchar_argv); } } -- cgit v1.2.1