[Python-checkins] r68463 - python/branches/py3k/Python/pythonrun.c
antoine.pitrou
python-checkins at python.org
Fri Jan 9 23:12:30 CET 2009
Author: antoine.pitrou
Date: Fri Jan 9 23:12:30 2009
New Revision: 68463
Log:
Fix bug introduced in r68451: stdio must always be opened in line-buffered mode
if isatty() is true.
Modified:
python/branches/py3k/Python/pythonrun.c
Modified: python/branches/py3k/Python/pythonrun.c
==============================================================================
--- python/branches/py3k/Python/pythonrun.c (original)
+++ python/branches/py3k/Python/pythonrun.c Fri Jan 9 23:12:30 2009
@@ -734,10 +734,10 @@
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 @@
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);
More information about the Python-checkins
mailing list