[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