diff options
Diffstat (limited to 'Python/pylifecycle.c')
-rw-r--r-- | Python/pylifecycle.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index eecb439..231706d 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -701,7 +701,8 @@ _Py_PreInitializeFromPyArgv(const _PyPreConfig *src_config, const _PyArgv *args) return _Py_INIT_OK(); } - _PyPreConfig config = _PyPreConfig_INIT; + _PyPreConfig config; + _PyPreConfig_Init(&config); if (src_config) { if (_PyPreConfig_Copy(&config, src_config) < 0) { @@ -752,13 +753,22 @@ _PyInitError _Py_PreInitializeFromCoreConfig(const _PyCoreConfig *coreconfig, const _PyArgv *args) { - _PyPreConfig config = _PyPreConfig_INIT; + _PyPreConfig config; + _PyPreConfig_Init(&config); if (coreconfig != NULL) { - _PyCoreConfig_GetCoreConfig(&config, coreconfig); + _PyPreConfig_GetCoreConfig(&config, coreconfig); + } + + if (args == NULL && coreconfig != NULL && coreconfig->parse_argv) { + _PyArgv config_args = { + .use_bytes_argv = 0, + .argc = coreconfig->argv.length, + .wchar_argv = coreconfig->argv.items}; + return _Py_PreInitializeFromPyArgv(&config, &config_args); + } + else { + return _Py_PreInitializeFromPyArgv(&config, args); } - return _Py_PreInitializeFromPyArgv(&config, args); - /* No need to clear config: - _PyCoreConfig_GetCoreConfig() doesn't allocate memory */ } @@ -829,7 +839,8 @@ _Py_InitializeCore(_PyRuntimeState *runtime, return err; } - _PyCoreConfig local_config = _PyCoreConfig_INIT; + _PyCoreConfig local_config; + _PyCoreConfig_Init(&local_config); err = pyinit_coreconfig(runtime, &local_config, src_config, args, interp_p); _PyCoreConfig_Clear(&local_config); return err; @@ -1051,7 +1062,8 @@ Py_InitializeEx(int install_sigs) return; } - _PyCoreConfig config = _PyCoreConfig_INIT; + _PyCoreConfig config; + _PyCoreConfig_Init(&config); config.install_signal_handlers = install_sigs; err = _Py_InitializeFromConfig(&config); |