summaryrefslogtreecommitdiffstats
path: root/Modules/main.c
diff options
context:
space:
mode:
authorNick Coghlan <ncoghlan@gmail.com>2017-10-25 02:11:26 (GMT)
committerGitHub <noreply@github.com>2017-10-25 02:11:26 (GMT)
commitd7ac06126db86f76ba92cbca4cb702852a321f78 (patch)
tree0742294efd6ef24d4f7644099d421c97346fee93 /Modules/main.c
parent850a18e03e8f8309bc8c39adc6e7d51a4568cd9a (diff)
downloadcpython-d7ac06126db86f76ba92cbca4cb702852a321f78.zip
cpython-d7ac06126db86f76ba92cbca4cb702852a321f78.tar.gz
cpython-d7ac06126db86f76ba92cbca4cb702852a321f78.tar.bz2
bpo-31845: Fix reading flags from environment (GH-4105)
The startup refactoring means command line settings are now applied after settings are read from the environment. This updates the way command line settings are applied to account for that, ensures more settings are first read from the environment in _PyInitializeCore, and adds a simple test case covering the flags that are easy to check.
Diffstat (limited to 'Modules/main.c')
-rw-r--r--Modules/main.c54
1 files changed, 24 insertions, 30 deletions
diff --git a/Modules/main.c b/Modules/main.c
index e862113..846ecb6 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -522,39 +522,33 @@ read_command_line(int argc, wchar_t **argv, _Py_CommandLineDetails *cmdline)
return 0;
}
-static int
-apply_command_line_and_environment(_Py_CommandLineDetails *cmdline)
+static void
+maybe_set_flag(int *flag, int value)
{
- char *p;
- Py_BytesWarningFlag = cmdline->bytes_warning;
- Py_DebugFlag = cmdline->debug;
- Py_InspectFlag = cmdline->inspect;
- Py_InteractiveFlag = cmdline->interactive;
- Py_IsolatedFlag = cmdline->isolated;
- Py_OptimizeFlag = cmdline->optimization_level;
- Py_DontWriteBytecodeFlag = cmdline->dont_write_bytecode;
- Py_NoUserSiteDirectory = cmdline->no_user_site_directory;
- Py_NoSiteFlag = cmdline->no_site_import;
- Py_UnbufferedStdioFlag = cmdline->use_unbuffered_io;
- Py_VerboseFlag = cmdline->verbosity;
- Py_QuietFlag = cmdline->quiet_flag;
-
- if (!Py_InspectFlag &&
- (p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') {
- Py_InspectFlag = 1;
- cmdline->inspect = 1;
- }
- if (!cmdline->use_unbuffered_io &&
- (p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0') {
- Py_UnbufferedStdioFlag = 1;
- cmdline->use_unbuffered_io = 1;
+ /* Helper to set flag variables from command line options
+ * - uses the higher of the two values if they're both set
+ * - otherwise leaves the flag unset
+ */
+ if (*flag < value) {
+ *flag = value;
}
+}
- if (!Py_NoUserSiteDirectory &&
- (p = Py_GETENV("PYTHONNOUSERSITE")) && *p != '\0') {
- Py_NoUserSiteDirectory = 1;
- cmdline->no_user_site_directory = 1;
- }
+static int
+apply_command_line_and_environment(_Py_CommandLineDetails *cmdline)
+{
+ maybe_set_flag(&Py_BytesWarningFlag, cmdline->bytes_warning);
+ maybe_set_flag(&Py_DebugFlag, cmdline->debug);
+ maybe_set_flag(&Py_InspectFlag, cmdline->inspect);
+ maybe_set_flag(&Py_InteractiveFlag, cmdline->interactive);
+ maybe_set_flag(&Py_IsolatedFlag, cmdline->isolated);
+ maybe_set_flag(&Py_OptimizeFlag, cmdline->optimization_level);
+ maybe_set_flag(&Py_DontWriteBytecodeFlag, cmdline->dont_write_bytecode);
+ maybe_set_flag(&Py_NoUserSiteDirectory, cmdline->no_user_site_directory);
+ maybe_set_flag(&Py_NoSiteFlag, cmdline->no_site_import);
+ maybe_set_flag(&Py_UnbufferedStdioFlag, cmdline->use_unbuffered_io);
+ maybe_set_flag(&Py_VerboseFlag, cmdline->verbosity);
+ maybe_set_flag(&Py_QuietFlag, cmdline->quiet_flag);
/* TODO: Apply PYTHONWARNINGS & -W options to sys module here */
/* TODO: Apply -X options to sys module here */