wchar_t *program_name;
/* Set by Py_SetPythonHome() or PYTHONHOME environment variable */
wchar_t *home;
+ /* isolated and no_site_import are used to set Py_IsolatedFlag and
+ Py_NoSiteFlag flags on Windows in read_pth_file(). These fields
+ are ignored when their value are equal to -1 (unset). */
+ int isolated;
+ int no_site_import;
} _PyPathConfig;
-#define _PyPathConfig_INIT {.module_search_path = NULL}
+#define _PyPathConfig_INIT \
+ {.module_search_path = NULL, \
+ .isolated = -1, \
+ .no_site_import = -1}
/* Note: _PyPathConfig_INIT sets other fields to 0/NULL */
PyAPI_DATA(_PyPathConfig) _Py_path_config;
PyAPI_FUNC(_PyInitError) _Py_InitializeCore(const _PyCoreConfig *);
PyAPI_FUNC(int) _Py_IsCoreInitialized(void);
-PyAPI_FUNC(_PyInitError) _PyCoreConfig_Read(_PyCoreConfig *);
+PyAPI_FUNC(_PyInitError) _PyCoreConfig_Read(
+ _PyCoreConfig *config,
+ int *isolated,
+ int *no_site_import);
PyAPI_FUNC(void) _PyCoreConfig_Clear(_PyCoreConfig *);
PyAPI_FUNC(int) _PyCoreConfig_Copy(
_PyCoreConfig *config,
const _PyCoreConfig *config2);
-PyAPI_FUNC(_PyInitError) _PyCoreConfig_InitPathConfig(_PyCoreConfig *config);
+PyAPI_FUNC(_PyInitError) _PyCoreConfig_InitPathConfig(
+ _PyCoreConfig *config,
+ int *isolated,
+ int *no_site_import);
PyAPI_FUNC(_PyInitError) _PyCoreConfig_SetPathConfig(
const _PyCoreConfig *config);
return -1;
}
- /* On Windows, _PyPathConfig_Init() modifies Py_IsolatedFlag and
- Py_NoSiteFlag variables if a "._pth" file is found. */
- int init_isolated = Py_IsolatedFlag;
- int init_no_site = Py_NoSiteFlag;
- Py_IsolatedFlag = cmdline->isolated;
- Py_NoSiteFlag = cmdline->no_site_import;
-
- err = _PyCoreConfig_Read(config);
-
- cmdline->isolated = Py_IsolatedFlag;
- cmdline->no_site_import = Py_NoSiteFlag;
- Py_IsolatedFlag = init_isolated;
- Py_NoSiteFlag = init_no_site;
+ err = _PyCoreConfig_Read(config,
+ &cmdline->isolated,
+ &cmdline->no_site_import);
if (_Py_INIT_FAILED(err)) {
pymain->err = err;
*/
_PyInitError
-_PyCoreConfig_Read(_PyCoreConfig *config)
+_PyCoreConfig_Read(_PyCoreConfig *config, int *isolated, int *no_site_import)
{
_PyInitError err;
}
if (!config->_disable_importlib) {
- err = _PyCoreConfig_InitPathConfig(config);
+ err = _PyCoreConfig_InitPathConfig(config, isolated, no_site_import);
if (_Py_INIT_FAILED(err)) {
return err;
}
static int
-read_pth_file(_PyPathConfig *config, wchar_t *prefix, const wchar_t *path,
- int *isolated, int *nosite)
+read_pth_file(_PyPathConfig *config, wchar_t *prefix, const wchar_t *path)
{
FILE *sp_file = _Py_wfopen(path, L"r");
if (sp_file == NULL) {
wcscpy_s(prefix, MAXPATHLEN+1, path);
reduce(prefix);
- *isolated = 1;
- *nosite = 1;
+ config->isolated = 1;
+ config->no_site_import = 1;
size_t bufsiz = MAXPATHLEN;
size_t prefixlen = wcslen(prefix);
}
if (strcmp(line, "import site") == 0) {
- *nosite = 0;
+ config->no_site_import = 0;
continue;
- } else if (strncmp(line, "import ", 7) == 0) {
+ }
+ else if (strncmp(line, "import ", 7) == 0) {
Py_FatalError("only 'import site' is supported in ._pth file");
}
return 0;
}
- /* FIXME, bpo-32030: Global configuration variables should not be modified
- here, _PyPathConfig_Init() is called early in Python initialization:
- see pymain_cmdline(). */
- return read_pth_file(config, prefix, spbuffer,
- &Py_IsolatedFlag, &Py_NoSiteFlag);
+ return read_pth_file(config, prefix, spbuffer);
}
_PyInitError
-_PyCoreConfig_InitPathConfig(_PyCoreConfig *config)
+_PyCoreConfig_InitPathConfig(_PyCoreConfig *config,
+ int *isolated, int *no_site_import)
{
_PyPathConfig path_config = _PyPathConfig_INIT;
_PyInitError err;
}
}
+ if (path_config.isolated != -1 && isolated != NULL) {
+ *isolated = path_config.isolated;
+ }
+ if (path_config.no_site_import != -1 && no_site_import != NULL) {
+ *no_site_import = path_config.no_site_import;
+ }
+
_PyPathConfig_Clear(&path_config);
return _Py_INIT_OK();
}
_PyInitError err;
- _PyPathConfig path_config = _PyPathConfig_INIT;
_PyCoreConfig config = _PyCoreConfig_INIT;
- err = _PyCoreConfig_Read(&config);
+ /* Py_IsolatedFlag and Py_NoSiteFlag are left unchanged: pass NULL.
+ _PyCoreConfig_InitPathConfig() will be called later and will set
+ these flags. */
+ err = _PyCoreConfig_Read(&config, NULL, NULL);
if (_Py_INIT_FAILED(err)) {
goto error;
}
- err = _PyPathConfig_Calculate(&path_config, &config);
+ err = _PyCoreConfig_SetPathConfig(&config);
if (_Py_INIT_FAILED(err)) {
goto error;
}
- err = _PyPathConfig_SetGlobal(&path_config);
- if (_Py_INIT_FAILED(err)) {
- goto error;
- }
-
- _PyPathConfig_Clear(&path_config);
_PyCoreConfig_Clear(&config);
return;
error:
- _PyPathConfig_Clear(&path_config);
_PyCoreConfig_Clear(&config);
_Py_FatalInitError(err);
}
config._disable_importlib = !install_importlib;
config.install_signal_handlers = install_sigs;
- err = _PyCoreConfig_Read(&config);
+ err = _PyCoreConfig_Read(&config, &Py_IsolatedFlag, &Py_NoSiteFlag);
if (_Py_INIT_FAILED(err)) {
goto done;
}