diff Objects/fileobject.c @ 43605:a2bb76d11d66

Patch 1267 by Christian Heimes. Move the initialization of sys.std{in,out,err} and __builtin__.open to C code. This solves the problem that "python -S" wouldn't work.
author Guido van Rossum <guido@python.org>
date Fri, 19 Oct 2007 23:16:50 +0000
parents 340e6fd5d75f
children 0067a6ab4854
line wrap: on
line diff
--- a/Objects/fileobject.c	Fri Oct 19 22:06:24 2007 +0000
+++ b/Objects/fileobject.c	Fri Oct 19 23:16:50 2007 +0000
@@ -28,22 +28,32 @@
 PyObject *
 PyFile_FromFile(FILE *fp, char *name, char *mode, int (*close)(FILE *))
 {
-	PyObject *io, *stream, *nameobj;
+	return PyFile_FromFileEx(fp, name, mode, close, -1, NULL, NULL);
+}
+
+PyObject *
+PyFile_FromFileEx(FILE *fp, char *name, char *mode, int (*close)(FILE *),
+	       int buffering, char *encoding, char *newline)
+{
+	PyObject *io, *stream, *nameobj=NULL;
 
 	io = PyImport_ImportModule("io");
 	if (io == NULL)
 		return NULL;
-	stream = PyObject_CallMethod(io, "open", "is", fileno(fp), mode);
-        Py_DECREF(io);
+	stream = PyObject_CallMethod(io, "open", "isiss", fileno(fp), mode,
+				    buffering, encoding, newline);
+	Py_DECREF(io);
 	if (stream == NULL)
 		return NULL;
-        nameobj = PyUnicode_FromString(name);
-        if (nameobj == NULL)
-		PyErr_Clear();
-	else {
-		if (PyObject_SetAttrString(stream, "name", nameobj) < 0)
+	if (name != NULL) {
+		nameobj = PyUnicode_FromString(name);
+		if (nameobj == NULL)
 			PyErr_Clear();
-		Py_DECREF(nameobj);
+		else {
+			if (PyObject_SetAttrString(stream, "name", nameobj) < 0)
+				PyErr_Clear();
+			Py_DECREF(nameobj);
+		}
 	}
 	return stream;
 }