summaryrefslogtreecommitdiffstats
path: root/PC
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-12-02 09:11:32 (GMT)
committerGitHub <noreply@github.com>2017-12-02 09:11:32 (GMT)
commitaf5a895073c24637c094772b27526b94a12ec897 (patch)
tree2960347bdeb6d0ba50746d5d36630d13630f1bb9 /PC
parente23c06e2b03452c9aaf0dae52296c85e572f9bcd (diff)
downloadcpython-af5a895073c24637c094772b27526b94a12ec897.zip
cpython-af5a895073c24637c094772b27526b94a12ec897.tar.gz
cpython-af5a895073c24637c094772b27526b94a12ec897.tar.bz2
bpo-32030: _PyPathConfig_Init() sets home and program_name (#4673)
_PyPathConfig_Init() now also initialize home and program_name: * Rename existing _PyPathConfig_Init() to _PyPathConfig_Calculate(). Add a new _PyPathConfig_Init() function in pathconfig.c which handles the _Py_path_config variable and call _PyPathConfig_Calculate(). * Add home and program_name fields to _PyPathConfig.home * _PyPathConfig_Init() now initialize home and program_name from main_config * Py_SetProgramName(), Py_SetPythonHome() and Py_GetPythonHome() now calls Py_FatalError() on failure, instead of silently ignoring failures. * config_init_home() now gets directly _Py_path_config.home to only get the value set by Py_SetPythonHome(), or NULL if Py_SetPythonHome() was not called. * config_get_program_name() now gets directly _Py_path_config.program_name to only get the value set by Py_SetProgramName(), or NULL if Py_SetProgramName() was not called. * pymain_init_python() doesn't call Py_SetProgramName() anymore, _PyPathConfig_Init() now always sets the program name * Call _PyMainInterpreterConfig_Read() in pymain_parse_cmdline_envvars_impl() to control the memory allocator * C API documentation: it's no more safe to call Py_GetProgramName() before Py_Initialize().
Diffstat (limited to 'PC')
-rw-r--r--PC/getpathp.c21
1 files changed, 3 insertions, 18 deletions
diff --git a/PC/getpathp.c b/PC/getpathp.c
index 3a0ebc1..08ed8cc 100644
--- a/PC/getpathp.c
+++ b/PC/getpathp.c
@@ -1058,38 +1058,23 @@ calculate_free(PyCalculatePath *calculate)
}
-/* Initialize paths for Py_GetPath(), Py_GetPrefix(), Py_GetExecPrefix()
- and Py_GetProgramFullPath() */
_PyInitError
-_PyPathConfig_Init(const _PyMainInterpreterConfig *main_config)
+_PyPathConfig_Calculate(_PyPathConfig *config,
+ const _PyMainInterpreterConfig *main_config)
{
- if (_Py_path_config.module_search_path) {
- /* Already initialized */
- return _Py_INIT_OK();
- }
-
- _PyInitError err;
-
PyCalculatePath calculate;
memset(&calculate, 0, sizeof(calculate));
calculate_init(&calculate, main_config);
- _PyPathConfig new_path_config;
- memset(&new_path_config, 0, sizeof(new_path_config));
-
- err = calculate_path_impl(main_config, &calculate, &new_path_config);
+ _PyInitError err = calculate_path_impl(main_config, &calculate, config);
if (_Py_INIT_FAILED(err)) {
goto done;
}
- _Py_path_config = new_path_config;
err = _Py_INIT_OK();
done:
- if (_Py_INIT_FAILED(err)) {
- _PyPathConfig_Clear(&new_path_config);
- }
calculate_free(&calculate);
return err;
}