bpo-31845: Fix reading flags from environment (GH-4105) · python/cpython@d7ac061
@@ -522,39 +522,33 @@ read_command_line(int argc, wchar_t **argv, _Py_CommandLineDetails *cmdline)
522522return 0;
523523}
524524525-static int
526-apply_command_line_and_environment(_Py_CommandLineDetails *cmdline)
525+static void
526+maybe_set_flag(int *flag, int value)
527527{
528-char *p;
529-Py_BytesWarningFlag = cmdline->bytes_warning;
530-Py_DebugFlag = cmdline->debug;
531-Py_InspectFlag = cmdline->inspect;
532-Py_InteractiveFlag = cmdline->interactive;
533-Py_IsolatedFlag = cmdline->isolated;
534-Py_OptimizeFlag = cmdline->optimization_level;
535-Py_DontWriteBytecodeFlag = cmdline->dont_write_bytecode;
536-Py_NoUserSiteDirectory = cmdline->no_user_site_directory;
537-Py_NoSiteFlag = cmdline->no_site_import;
538-Py_UnbufferedStdioFlag = cmdline->use_unbuffered_io;
539-Py_VerboseFlag = cmdline->verbosity;
540-Py_QuietFlag = cmdline->quiet_flag;
541-542-if (!Py_InspectFlag &&
543- (p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') {
544-Py_InspectFlag = 1;
545-cmdline->inspect = 1;
546- }
547-if (!cmdline->use_unbuffered_io &&
548- (p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0') {
549-Py_UnbufferedStdioFlag = 1;
550-cmdline->use_unbuffered_io = 1;
528+/* Helper to set flag variables from command line options
529+ * - uses the higher of the two values if they're both set
530+ * - otherwise leaves the flag unset
531+ */
532+if (*flag < value) {
533+*flag = value;
551534 }
535+}
552536553-if (!Py_NoUserSiteDirectory &&
554- (p = Py_GETENV("PYTHONNOUSERSITE")) && *p != '\0') {
555-Py_NoUserSiteDirectory = 1;
556-cmdline->no_user_site_directory = 1;
557- }
537+static int
538+apply_command_line_and_environment(_Py_CommandLineDetails *cmdline)
539+{
540+maybe_set_flag(&Py_BytesWarningFlag, cmdline->bytes_warning);
541+maybe_set_flag(&Py_DebugFlag, cmdline->debug);
542+maybe_set_flag(&Py_InspectFlag, cmdline->inspect);
543+maybe_set_flag(&Py_InteractiveFlag, cmdline->interactive);
544+maybe_set_flag(&Py_IsolatedFlag, cmdline->isolated);
545+maybe_set_flag(&Py_OptimizeFlag, cmdline->optimization_level);
546+maybe_set_flag(&Py_DontWriteBytecodeFlag, cmdline->dont_write_bytecode);
547+maybe_set_flag(&Py_NoUserSiteDirectory, cmdline->no_user_site_directory);
548+maybe_set_flag(&Py_NoSiteFlag, cmdline->no_site_import);
549+maybe_set_flag(&Py_UnbufferedStdioFlag, cmdline->use_unbuffered_io);
550+maybe_set_flag(&Py_VerboseFlag, cmdline->verbosity);
551+maybe_set_flag(&Py_QuietFlag, cmdline->quiet_flag);
558552559553/* TODO: Apply PYTHONWARNINGS & -W options to sys module here */
560554/* TODO: Apply -X options to sys module here */