diff options
author | Nick Coghlan <ncoghlan@gmail.com> | 2013-10-18 13:11:47 (GMT) |
---|---|---|
committer | Nick Coghlan <ncoghlan@gmail.com> | 2013-10-18 13:11:47 (GMT) |
commit | 1805a62f1fe551b73b80d87a429ef496c1701b07 (patch) | |
tree | 3925c6426a13a6c46550befcc2c1f7ba253493f5 /Python/pythonrun.c | |
parent | ac1a2489681d16ecc92985aefbd944e3b70fd26f (diff) | |
download | cpython-1805a62f1fe551b73b80d87a429ef496c1701b07.zip cpython-1805a62f1fe551b73b80d87a429ef496c1701b07.tar.gz cpython-1805a62f1fe551b73b80d87a429ef496c1701b07.tar.bz2 |
Issue #16129: Py_SetStandardStreamEncoding cleanups
- don't call PyErr_NoMemory with interpreter is not initialised
- note that it's OK to call _PyMem_RawStrDup here
- don't include this in the limited API
- capitalise "IO"
- be explicit that a non-zero return indicates an error
- include versionadded marker in docs
Diffstat (limited to 'Python/pythonrun.c')
-rw-r--r-- | Python/pythonrun.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 3bcc474..b963ce1 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -148,11 +148,17 @@ Py_SetStandardStreamEncoding(const char *encoding, const char *errors) /* This is too late to have any effect */ return -1; } + /* Can't call PyErr_NoMemory() on errors, as Python hasn't been + * initialised yet. + * + * However, the raw memory allocators are initialised appropriately + * as C static variables, so _PyMem_RawStrdup is OK even though + * Py_Initialize hasn't been called yet. + */ if (encoding) { _Py_StandardStreamEncoding = _PyMem_RawStrdup(encoding); if (!_Py_StandardStreamEncoding) { - PyErr_NoMemory(); - return -1; + return -2; } } if (errors) { @@ -161,8 +167,7 @@ Py_SetStandardStreamEncoding(const char *encoding, const char *errors) if (_Py_StandardStreamEncoding) { PyMem_RawFree(_Py_StandardStreamEncoding); } - PyErr_NoMemory(); - return -1; + return -3; } } return 0; |