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)

522522

return 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 */