summaryrefslogtreecommitdiffstats
path: root/Python/pythonrun.c
diff options
context:
space:
mode:
authorNick Coghlan <ncoghlan@gmail.com>2013-10-18 13:11:47 (GMT)
committerNick Coghlan <ncoghlan@gmail.com>2013-10-18 13:11:47 (GMT)
commit1805a62f1fe551b73b80d87a429ef496c1701b07 (patch)
tree3925c6426a13a6c46550befcc2c1f7ba253493f5 /Python/pythonrun.c
parentac1a2489681d16ecc92985aefbd944e3b70fd26f (diff)
downloadcpython-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.c13
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;