summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2009-01-09 22:12:30 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2009-01-09 22:12:30 (GMT)
commit9169641b8b2995abb651826887773eb12cbf6064 (patch)
tree8547b5278917e647d770c1c16cccd9603e1bf138 /Python
parent8043cf868c5fc045f513c02b51c89f313c738246 (diff)
downloadcpython-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.c22
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);