mirror of
https://github.com/python/cpython.git
synced 2025-08-01 15:43:13 +00:00
bpo-32030: Don't call _PyPathConfig_Fini() in Py_FinalizeEx() (#4667)
Changes: * _PyPathConfig_Fini() cannot be called in Py_FinalizeEx(). Py_Initialize() and Py_Finalize() can be called multiple times, but it must not "forget" parameters set by Py_SetProgramName(), Py_SetPath() or Py_SetPythonHome(), whereas _PyPathConfig_Fini() clear all these parameters. * config_get_program_name() and calculate_program_full_path() now also decode paths using Py_DecodeLocale() to use the surrogateescape error handler, rather than decoding using mbstowcs() which is strict. * Change _Py_CheckPython3() prototype: () => (void) * Truncate a few lines which were too long
This commit is contained in:
parent
9ac3d88827
commit
ebac19dad6
5 changed files with 38 additions and 25 deletions
|
@ -721,12 +721,16 @@ static int
|
|||
get_pth_filename(wchar_t *spbuffer, _PyPathConfig *config)
|
||||
{
|
||||
if (config->dll_path[0]) {
|
||||
if (!change_ext(spbuffer, config->dll_path, L"._pth") && exists(spbuffer)) {
|
||||
if (!change_ext(spbuffer, config->dll_path, L"._pth") &&
|
||||
exists(spbuffer))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (config->program_full_path[0]) {
|
||||
if (!change_ext(spbuffer, config->program_full_path, L"._pth") && exists(spbuffer)) {
|
||||
if (!change_ext(spbuffer, config->program_full_path, L"._pth") &&
|
||||
exists(spbuffer))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
@ -823,8 +827,10 @@ calculate_module_search_path(const _PyMainInterpreterConfig *main_config,
|
|||
#endif
|
||||
/* We only use the default relative PYTHONPATH if we haven't
|
||||
anything better to use! */
|
||||
int skipdefault = (main_config->module_search_path_env!=NULL || calculate->home!=NULL || \
|
||||
calculate->machine_path!=NULL || calculate->user_path!=NULL);
|
||||
int skipdefault = (main_config->module_search_path_env != NULL ||
|
||||
calculate->home != NULL ||
|
||||
calculate->machine_path != NULL ||
|
||||
calculate->user_path != NULL);
|
||||
|
||||
/* We need to construct a path from the following parts.
|
||||
(1) the PYTHONPATH environment variable, if set;
|
||||
|
@ -882,7 +888,8 @@ calculate_module_search_path(const _PyMainInterpreterConfig *main_config,
|
|||
start_buf = buf;
|
||||
|
||||
if (main_config->module_search_path_env) {
|
||||
if (wcscpy_s(buf, bufsz - (buf - start_buf), main_config->module_search_path_env)) {
|
||||
if (wcscpy_s(buf, bufsz - (buf - start_buf),
|
||||
main_config->module_search_path_env)) {
|
||||
return INIT_ERR_BUFFER_OVERFLOW();
|
||||
}
|
||||
buf = wcschr(buf, L'\0');
|
||||
|
@ -1214,7 +1221,7 @@ Py_GetProgramFullPath(void)
|
|||
static int python3_checked = 0;
|
||||
static HANDLE hPython3;
|
||||
int
|
||||
_Py_CheckPython3()
|
||||
_Py_CheckPython3(void)
|
||||
{
|
||||
wchar_t py3path[MAXPATHLEN+1];
|
||||
wchar_t *s;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue