static const char*
config_get_env_var(const _PyCoreConfig *config, const char *name)
{
- assert(config->ignore_environment >= 0);
+ assert(config->use_environment >= 0);
- if (config->ignore_environment) {
+ if (!config->use_environment) {
return NULL;
}
static int
config_get_env_var_dup(const _PyCoreConfig *config, wchar_t **dest, wchar_t *wname, char *name)
{
- assert(config->ignore_environment >= 0);
+ assert(config->use_environment >= 0);
- if (config->ignore_environment) {
+ if (!config->use_environment) {
*dest = NULL;
return 0;
}
config->ATTR = !(VALUE); \
}
- COPY_FLAG(ignore_environment, Py_IgnoreEnvironmentFlag);
COPY_FLAG(utf8_mode, Py_UTF8Mode);
COPY_FLAG(isolated, Py_IsolatedFlag);
COPY_FLAG(bytes_warning, Py_BytesWarningFlag);
COPY_FLAG(legacy_windows_stdio, Py_LegacyWindowsStdioFlag);
#endif
+ COPY_NOT_FLAG(use_environment, Py_IgnoreEnvironmentFlag);
COPY_NOT_FLAG(site_import, Py_NoSiteFlag);
COPY_NOT_FLAG(write_bytecode, Py_DontWriteBytecodeFlag);
COPY_NOT_FLAG(user_site_directory, Py_NoUserSiteDirectory);
VAR = !config->ATTR; \
}
- COPY_FLAG(ignore_environment, Py_IgnoreEnvironmentFlag);
COPY_FLAG(utf8_mode, Py_UTF8Mode);
COPY_FLAG(isolated, Py_IsolatedFlag);
COPY_FLAG(bytes_warning, Py_BytesWarningFlag);
COPY_FLAG(legacy_windows_stdio, Py_LegacyWindowsStdioFlag);
#endif
+ COPY_NOT_FLAG(use_environment, Py_IgnoreEnvironmentFlag);
COPY_NOT_FLAG(site_import, Py_NoSiteFlag);
COPY_NOT_FLAG(write_bytecode, Py_DontWriteBytecodeFlag);
COPY_NOT_FLAG(user_site_directory, Py_NoUserSiteDirectory);
} while (0)
COPY_ATTR(install_signal_handlers);
- COPY_ATTR(ignore_environment);
+ COPY_ATTR(use_environment);
COPY_ATTR(use_hash_seed);
COPY_ATTR(hash_seed);
COPY_ATTR(_install_importlib);
static void
-pymain_free_raw(_PyMain *pymain)
+pymain_free(_PyMain *pymain)
{
_PyImport_Fini2();
orig_argv = NULL;
PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
-}
-
-
-static void
-pymain_free(_PyMain *pymain)
-{
- pymain_free_raw(pymain);
#ifdef __INSURE__
/* Insure++ is a memory analysis tool that aids in discovering
break;
case 'I':
- config->ignore_environment++;
config->isolated++;
- config->user_site_directory = 0;
break;
/* case 'J': reserved for Jython */
break;
case 'E':
- config->ignore_environment++;
+ config->use_environment = 0;
break;
case 't':
Return 0 on success.
Set pymain->err and return -1 on error. */
static _PyInitError
-cmdline_init_env_warnoptions(_PyMain *pymain, _PyCoreConfig *config, _PyCmdline *cmdline)
+cmdline_init_env_warnoptions(_PyMain *pymain, const _PyCoreConfig *config,
+ _PyCmdline *cmdline)
{
- assert(!config->ignore_environment);
-
wchar_t *env;
int res = config_get_env_var_dup(config, &env,
L"PYTHONWARNINGS", "PYTHONWARNINGS");
int nframe;
int valid;
- if (config->tracemalloc >= 0) {
- return _Py_INIT_OK();
- }
-
const char *env = config_get_env_var(config, "PYTHONTRACEMALLOC");
if (env) {
if (!pymain_str_to_int(env, &nframe)) {
static _PyInitError
config_init_utf8_mode(_PyCoreConfig *config)
{
- /* The option was already set in config.Py_UTF8Mode,
- by Py_LegacyWindowsFSEncodingFlag or PYTHONLEGACYWINDOWSFSENCODING. */
- if (config->utf8_mode >= 0) {
- return _Py_INIT_OK();
- }
-
const wchar_t *xopt = config_get_xoption(config, L"utf8");
if (xopt) {
wchar_t *sep = wcschr(xopt, L'=');
static _PyInitError
config_read_env_vars(_PyCoreConfig *config)
{
- assert(!config->ignore_environment);
+ assert(config->use_environment > 0);
/* Get environment variables */
get_env_flag(config, &config->debug, "PYTHONDEBUG");
config_read_complex_options(_PyCoreConfig *config)
{
/* More complex options configured by env var and -X option */
- if (config_get_env_var(config, "PYTHONFAULTHANDLER")
- || config_get_xoption(config, L"faulthandler")) {
- config->faulthandler = 1;
+ if (config->faulthandler < 0) {
+ if (config_get_env_var(config, "PYTHONFAULTHANDLER")
+ || config_get_xoption(config, L"faulthandler")) {
+ config->faulthandler = 1;
+ }
}
if (config_get_env_var(config, "PYTHONPROFILEIMPORTTIME")
|| config_get_xoption(config, L"importtime")) {
config->dev_mode = 1;
}
- _PyInitError err = pymain_init_tracemalloc(config);
- if (_Py_INIT_FAILED(err)) {
- return err;
+ _PyInitError err;
+ if (config->tracemalloc < 0) {
+ err = pymain_init_tracemalloc(config);
+ if (_Py_INIT_FAILED(err)) {
+ return err;
+ }
}
- err = pymain_init_pycache_prefix(config);
- if (_Py_INIT_FAILED(err)) {
- return err;
+ if (config->pycache_prefix == NULL) {
+ err = pymain_init_pycache_prefix(config);
+ if (_Py_INIT_FAILED(err)) {
+ return err;
+ }
}
-
return _Py_INIT_OK();
}
return -1;
}
- assert(config->ignore_environment >= 0);
- if (!config->ignore_environment) {
+ err = _PyCoreConfig_Read(config);
+ if (_Py_INIT_FAILED(err)) {
+ pymain->err = err;
+ return -1;
+ }
+
+ assert(config->use_environment >= 0);
+ if (config->use_environment) {
err = cmdline_init_env_warnoptions(pymain, config, cmdline);
if (_Py_INIT_FAILED(err)) {
pymain->err = err;
}
}
- err = _PyCoreConfig_Read(config);
+ err = config_init_warnoptions(config, cmdline);
if (_Py_INIT_FAILED(err)) {
pymain->err = err;
return -1;
break;
}
- /* Reset the configuration before reading the configuration,
- except UTF-8 Mode. */
+ /* Reset the configuration before reading again the configuration,
+ just keep UTF-8 Mode value. */
int new_utf8_mode = config->utf8_mode;
if (_PyCoreConfig_Copy(config, &save_config) < 0) {
pymain->err = _Py_INIT_NO_MEMORY();
setlocale(LC_ALL, oldloc);
PyMem_RawFree(oldloc);
}
-
return res;
}
_PyCoreConfig_GetGlobalConfig(config);
- assert(config->ignore_environment >= 0);
- if (!config->ignore_environment) {
+ if (config->isolated > 0) {
+ config->use_environment = 0;
+ config->user_site_directory = 0;
+ }
+
+#ifdef MS_WINDOWS
+ if (config->legacy_windows_fs_encoding) {
+ config->utf8_mode = 0;
+ }
+#endif
+
+ assert(config->use_environment >= 0);
+ if (config->use_environment) {
err = config_read_env_vars(config);
if (_Py_INIT_FAILED(err)) {
return err;
return err;
}
- err = config_init_utf8_mode(config);
- if (_Py_INIT_FAILED(err)) {
- return err;
+ if (config->utf8_mode < 0) {
+ err = config_init_utf8_mode(config);
+ if (_Py_INIT_FAILED(err)) {
+ return err;
+ }
}
- err = config_init_home(config);
- if (_Py_INIT_FAILED(err)) {
- return err;
+ if (config->home == NULL) {
+ err = config_init_home(config);
+ if (_Py_INIT_FAILED(err)) {
+ return err;
+ }
}
if (config->program_name == NULL) {
}
}
- /* options side effects */
+ /* default values */
if (config->dev_mode) {
if (config->faulthandler < 0) {
config->faulthandler = 1;
config->allocator = "debug";
}
}
-
-#ifdef MS_WINDOWS
- if (config->legacy_windows_fs_encoding) {
- config->utf8_mode = 0;
- }
-#endif
-
- /* default values */
if (config->use_hash_seed < 0) {
config->use_hash_seed = 0;
config->hash_seed = 0;
return -1;
}
orig_argc = pymain->argc;
-
- _PyInitError err = config_init_warnoptions(config, cmdline);
- if (_Py_INIT_FAILED(err)) {
- pymain->err = err;
- return -1;
- }
return 0;
}