diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2009-01-09 22:12:30 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2009-01-09 22:12:30 (GMT) |
commit | 9169641b8b2995abb651826887773eb12cbf6064 (patch) | |
tree | 8547b5278917e647d770c1c16cccd9603e1bf138 /Python | |
parent | 8043cf868c5fc045f513c02b51c89f313c738246 (diff) | |
download | cpython-9169641b8b2995abb651826887773eb12cbf6064.zip cpython-9169641b8b2995abb651826887773eb12cbf6064.tar.gz cpython-9169641b8b2995abb651826887773eb12cbf6064.tar.bz2 |
Fix bug introduced in r68451: stdio must always be opened in line-buffered mode
if isatty() is true.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/pythonrun.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 8a1af3b..6819be5 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -734,10 +734,10 @@ create_stdio(PyObject* io, int fd, int write_mode, char* name, char* encoding, char* errors) { - PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL; + PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res; const char* mode; - const PyObject *line_buffering; - int buffering; + PyObject *line_buffering; + int buffering, isatty; if (Py_UnbufferedStdioFlag) buffering = 0; @@ -766,13 +766,21 @@ create_stdio(PyObject* io, text = PyUnicode_FromString(name); if (text == NULL || PyObject_SetAttrString(raw, "_name", text) < 0) goto error; - Py_CLEAR(raw); - Py_CLEAR(text); - - if (Py_UnbufferedStdioFlag) + res = PyObject_CallMethod(raw, "isatty", ""); + if (res == NULL) + goto error; + isatty = PyObject_IsTrue(res); + Py_DECREF(res); + if (isatty == -1) + goto error; + if (isatty || Py_UnbufferedStdioFlag) line_buffering = Py_True; else line_buffering = Py_False; + + Py_CLEAR(raw); + Py_CLEAR(text); + stream = PyObject_CallMethod(io, "TextIOWrapper", "OsssO", buf, encoding, errors, "\n", line_buffering); |