bpo-39406: Implement os.putenv() with setenv() if available#18095
bpo-39406: Implement os.putenv() with setenv() if available#18095vstinner wants to merge 2 commits into
Conversation
If setenv() C function is available, os.putenv() is now implemented with setenv() instead of putenv(), so Python doesn't have to handle the environment variable memory. Renane posix_putenv_garbage to posix_putenv_dict in posixmodule.c. On Windows or if setenv() is available, posix_putenv_dict is no longer needed.
|
I updated the PR to use SetEnvironmentVariable() on Windows. @serhiy-storchaka: Would you mind to review the updated PR? |
Sorry, something went wrong.
|
On Windows, I removed the explicit check on _MAX_ENV: On my Windows 10 VM, _MAX_ENV is equal to 32767, but SetEnvironmentVariableW() seems to accept way longer values! But I got ERROR_NO_SYSTEM_RESOURCES (error 1450: "Insufficient system resources exist to complete the requested service") for a value of 1 GB: The limit seems to be the memory rather than an hardcoded limit. A "shorter" value (64 MB) is fine: |
Sorry, something went wrong.
|
Oh, a test fail on Windows: |
Sorry, something went wrong.
|
I made other changes in the meanwhile which introduced conflicts. So I wrote a new PR instead: PR #18128. |
Sorry, something went wrong.
If setenv() C function is available, os.putenv() is now implemented
with setenv() instead of putenv(), so Python doesn't have to handle
the environment variable memory.
If setenv() is available, posix_putenv_garbage state is not needed.
https://bugs.python.org/issue39406