diff options
author | Victor Stinner <vstinner@redhat.com> | 2019-03-25 17:54:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-25 17:54:58 +0100 |
commit | f72346c47537657a287a862305f65eb5d7594fbf (patch) | |
tree | d97a19e2a156c04623bcefd32a16b851798a53af /Python/pylifecycle.c | |
parent | 68d228f174ceed151200e7e0b44ffc5edd4e0ea2 (diff) | |
download | cpython-git-f72346c47537657a287a862305f65eb5d7594fbf.tar.gz |
bpo-36301: Cleanup preconfig code (GH-12535)
Prepare code to move some _PyPreConfig parameters into _PyPreCmdline.
Changes:
* _PyCoreConfig_ReadFromArgv(): remove preconfig parameter,
use _PyRuntime.preconfig.
* Add _PyPreCmdline_GetPreConfig() (called by _PyPreConfig_Read()).
* Rename _PyPreCmdline_Init() to _PyPreCmdline_SetArgv()
* Factorize _Py_PreInitializeFromPreConfig() code: add
pyinit_preinit().
* _PyPreConfig_Read() now sets coerce_c_locale to 2 if it must be
coerced.
* Remove _PyCoreConfig_ReadPreConfig().
* _PyCoreConfig_Write() now copies updated preconfig into _PyRuntime.
Diffstat (limited to 'Python/pylifecycle.c')
-rw-r--r-- | Python/pylifecycle.c | 61 |
1 files changed, 30 insertions, 31 deletions
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 994a94f140..ea1b731a56 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -714,23 +714,8 @@ _Py_InitializeCore_impl(PyInterpreterState **interp_p, } -_PyInitError -_Py_PreInitializeFromPreConfig(_PyPreConfig *config) -{ - if (config != NULL) { - _PyInitError err = _PyPreConfig_Write(config); - if (_Py_INIT_FAILED(err)) { - return err; - } - } - - _PyRuntime.pre_initialized = 1; - return _Py_INIT_OK(); -} - - static _PyInitError -pyinit_preconfig(_PyPreConfig *config, const _PyPreConfig *src_config) +pyinit_preinit(_PyPreConfig *config, const _PyPreConfig *src_config) { _PyInitError err; @@ -739,32 +724,46 @@ pyinit_preconfig(_PyPreConfig *config, const _PyPreConfig *src_config) return err; } - if (_PyPreConfig_Copy(config, src_config) < 0) { - return _Py_INIT_ERR("failed to copy pre config"); + if (_PyRuntime.pre_initialized) { + /* If it's already configured: ignored the new configuration */ + return _Py_INIT_OK(); + } + + if (src_config) { + if (_PyPreConfig_Copy(config, src_config) < 0) { + return _Py_INIT_ERR("failed to copy pre config"); + } + } + + err = _PyPreConfig_Read(config, NULL); + if (_Py_INIT_FAILED(err)) { + return err; } - err = _PyPreConfig_Read(config); + err = _PyPreConfig_Write(config); if (_Py_INIT_FAILED(err)) { return err; } - return _Py_PreInitializeFromPreConfig(config); + _PyRuntime.pre_initialized = 1; + return _Py_INIT_OK(); } _PyInitError -_Py_PreInitialize(void) +_Py_PreInitializeFromPreConfig(_PyPreConfig *config) { - _PyInitError err = _PyRuntime_Initialize(); - if (_Py_INIT_FAILED(err)) { - return err; - } + return pyinit_preinit(config, NULL); +} - if (_PyRuntime.pre_initialized) { - return _Py_INIT_OK(); - } - return _Py_PreInitializeFromPreConfig(NULL); +_PyInitError +_Py_PreInitialize(void) +{ + _PyPreConfig config = _PyPreConfig_INIT; + _PyInitError err = pyinit_preinit(&config, NULL); + _PyPreConfig_Clear(&config); + return err; } @@ -776,7 +775,7 @@ pyinit_coreconfig(_PyCoreConfig *config, const _PyCoreConfig *src_config, return _Py_INIT_ERR("failed to copy core config"); } - _PyInitError err = _PyCoreConfig_Read(config, NULL); + _PyInitError err = _PyCoreConfig_Read(config); if (_Py_INIT_FAILED(err)) { return err; } @@ -817,7 +816,7 @@ _Py_InitializeCore(PyInterpreterState **interp_p, _PyCoreConfig local_config = _PyCoreConfig_INIT; - err = pyinit_preconfig(&local_config.preconfig, &src_config->preconfig); + err = pyinit_preinit(&local_config.preconfig, &src_config->preconfig); if (_Py_INIT_FAILED(err)) { goto done; } |