From 410759fba80aded5247b693c60745aa16906f3bb Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 18 May 2019 04:17:01 +0200 Subject: [PATCH] bpo-36763: Remove _PyCoreConfig.dll_path (GH-13402) --- Include/cpython/coreconfig.h | 3 --- Include/internal/pycore_pathconfig.h | 4 ++++ Lib/test/test_embed.py | 3 --- PC/getpathp.c | 18 ++++++++---------- Python/coreconfig.c | 12 ------------ Python/pathconfig.c | 16 +++------------- 6 files changed, 15 insertions(+), 41 deletions(-) diff --git a/Include/cpython/coreconfig.h b/Include/cpython/coreconfig.h index ca71c15b67d..a71f16171b7 100644 --- a/Include/cpython/coreconfig.h +++ b/Include/cpython/coreconfig.h @@ -353,9 +353,6 @@ typedef struct { wchar_t *base_prefix; /* sys.base_prefix */ wchar_t *exec_prefix; /* sys.exec_prefix */ wchar_t *base_exec_prefix; /* sys.base_exec_prefix */ -#ifdef MS_WINDOWS - wchar_t *dll_path; /* Windows DLL path */ -#endif /* --- Parameter only used by Py_Main() ---------- */ diff --git a/Include/internal/pycore_pathconfig.h b/Include/internal/pycore_pathconfig.h index 9eb8e88df76..bee391187cc 100644 --- a/Include/internal/pycore_pathconfig.h +++ b/Include/internal/pycore_pathconfig.h @@ -53,6 +53,10 @@ PyAPI_FUNC(int) _Py_FindEnvConfigValue( wchar_t *value, size_t value_size); +#ifdef MS_WINDOWS +extern wchar_t* _Py_GetDLLPath(void); +#endif + #ifdef __cplusplus } #endif diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py index 6b77a2d1fd8..5a5419dcfcf 100644 --- a/Lib/test/test_embed.py +++ b/Lib/test/test_embed.py @@ -369,7 +369,6 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase): 'legacy_windows_fs_encoding': 0, }) DEFAULT_CORE_CONFIG.update({ - 'dll_path': GET_DEFAULT_CONFIG, 'legacy_windows_stdio': 0, }) @@ -466,8 +465,6 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase): 'filesystem_errors': sys.getfilesystemencodeerrors(), 'module_search_paths': core_config['module_search_paths'], } - if sys.platform == 'win32': - data['dll_path'] = core_config['dll_path'] data = json.dumps(data) data = data.encode('utf-8') diff --git a/PC/getpathp.c b/PC/getpathp.c index 64aa1e0d141..62c42ecefe9 100644 --- a/PC/getpathp.c +++ b/PC/getpathp.c @@ -508,8 +508,8 @@ done: #endif /* Py_ENABLE_SHARED */ -static _PyInitError -get_dll_path(PyCalculatePath *calculate, _PyPathConfig *config) +wchar_t* +_Py_GetDLLPath(void) { wchar_t dll_path[MAXPATHLEN+1]; memset(dll_path, 0, sizeof(dll_path)); @@ -525,11 +525,7 @@ get_dll_path(PyCalculatePath *calculate, _PyPathConfig *config) dll_path[0] = 0; #endif - config->dll_path = _PyMem_RawWcsdup(dll_path); - if (config->dll_path == NULL) { - return _Py_INIT_NO_MEMORY(); - } - return _Py_INIT_OK(); + return _PyMem_RawWcsdup(dll_path); } @@ -956,9 +952,11 @@ calculate_path_impl(const _PyCoreConfig *core_config, { _PyInitError err; - err = get_dll_path(calculate, config); - if (_Py_INIT_FAILED(err)) { - return err; + assert(config->dll_path == NULL); + + config->dll_path = _Py_GetDLLPath(); + if (config->dll_path == NULL) { + return _Py_INIT_NO_MEMORY(); } err = get_program_full_path(core_config, calculate, config); diff --git a/Python/coreconfig.c b/Python/coreconfig.c index 3678d124067..470bda87028 100644 --- a/Python/coreconfig.c +++ b/Python/coreconfig.c @@ -531,9 +531,6 @@ _PyCoreConfig_Clear(_PyCoreConfig *config) CLEAR(config->prefix); CLEAR(config->base_prefix); CLEAR(config->exec_prefix); -#ifdef MS_WINDOWS - CLEAR(config->dll_path); -#endif CLEAR(config->base_exec_prefix); CLEAR(config->filesystem_encoding); @@ -761,9 +758,6 @@ _PyCoreConfig_Copy(_PyCoreConfig *config, const _PyCoreConfig *config2) COPY_WSTR_ATTR(prefix); COPY_WSTR_ATTR(base_prefix); COPY_WSTR_ATTR(exec_prefix); -#ifdef MS_WINDOWS - COPY_WSTR_ATTR(dll_path); -#endif COPY_WSTR_ATTR(base_exec_prefix); COPY_ATTR(site_import); @@ -864,9 +858,6 @@ _PyCoreConfig_AsDict(const _PyCoreConfig *config) SET_ITEM_WSTR(base_prefix); SET_ITEM_WSTR(exec_prefix); SET_ITEM_WSTR(base_exec_prefix); -#ifdef MS_WINDOWS - SET_ITEM_WSTR(dll_path); -#endif SET_ITEM_INT(site_import); SET_ITEM_INT(bytes_warning); SET_ITEM_INT(inspect); @@ -2355,9 +2346,6 @@ _PyCoreConfig_Read(_PyCoreConfig *config) assert(config->base_prefix != NULL); assert(config->exec_prefix != NULL); assert(config->base_exec_prefix != NULL); -#ifdef MS_WINDOWS - assert(config->dll_path != NULL); -#endif } assert(config->filesystem_encoding != NULL); assert(config->filesystem_errors != NULL); diff --git a/Python/pathconfig.c b/Python/pathconfig.c index c8c69ebad6a..3d9d3b1b205 100644 --- a/Python/pathconfig.c +++ b/Python/pathconfig.c @@ -214,7 +214,8 @@ _PyCoreConfig_SetPathConfig(const _PyCoreConfig *core_config) goto no_memory; } #ifdef MS_WINDOWS - if (copy_wstr(&path_config.dll_path, core_config->dll_path) < 0) { + path_config.dll_path = _Py_GetDLLPath(); + if (path_config.dll_path == NULL) { goto no_memory; } #endif @@ -322,14 +323,6 @@ _PyCoreConfig_CalculatePathConfig(_PyCoreConfig *config) } } -#ifdef MS_WINDOWS - if (config->dll_path == NULL) { - if (copy_wstr(&config->dll_path, path_config.dll_path) < 0) { - goto no_memory; - } - } -#endif - if (path_config.isolated != -1) { config->isolated = path_config.isolated; } @@ -356,9 +349,6 @@ _PyCoreConfig_InitPathConfig(_PyCoreConfig *config) if (!config->use_module_search_paths || (config->executable == NULL) || (config->prefix == NULL) -#ifdef MS_WINDOWS - || (config->dll_path == NULL) -#endif || (config->exec_prefix == NULL)) { _PyInitError err = _PyCoreConfig_CalculatePathConfig(config); @@ -435,7 +425,7 @@ Py_SetPath(const wchar_t *path) new_config.exec_prefix = _PyMem_RawWcsdup(L""); alloc_error |= (new_config.exec_prefix == NULL); #ifdef MS_WINDOWS - new_config.dll_path = _PyMem_RawWcsdup(L""); + new_config.dll_path = _Py_GetDLLPath(); alloc_error |= (new_config.dll_path == NULL); #endif new_config.module_search_path = _PyMem_RawWcsdup(path);