mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +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
|
@ -625,11 +625,13 @@ calculate_program_full_path(const _PyMainInterpreterConfig *main_config,
|
|||
else if(0 == _NSGetExecutablePath(execpath, &nsexeclength) &&
|
||||
execpath[0] == SEP)
|
||||
{
|
||||
size_t r = mbstowcs(program_full_path, execpath, MAXPATHLEN+1);
|
||||
if (r == (size_t)-1 || r > MAXPATHLEN) {
|
||||
/* Could not convert execpath, or it's too long. */
|
||||
program_full_path[0] = '\0';
|
||||
size_t len;
|
||||
wchar_t *path = Py_DecodeLocale(execpath, &len);
|
||||
if (path == NULL) {
|
||||
return DECODE_LOCALE_ERR("executable path", len);
|
||||
}
|
||||
wcsncpy(program_full_path, path, MAXPATHLEN);
|
||||
PyMem_RawFree(path);
|
||||
}
|
||||
#endif /* __APPLE__ */
|
||||
else if (calculate->path_env) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue