Issue 1267, continued.
Additional patch by Christian Heimes to deal more cleanly with the
FILE* vs file-descriptor issues.
I cleaned up his code a bit, and moved the lseek() call into import.c.
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index 18d0f57..db475cd 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -1214,7 +1214,7 @@
     Py_ssize_t len = PyBytes_GET_SIZE(self);
     const char* str;
     Py_buffer vsubstr;
-    int rv;
+    int rv = 0;
 
     str = PyBytes_AS_STRING(self);
 
@@ -1226,13 +1226,11 @@
     if (direction < 0) {
         /* startswith */
         if (start+vsubstr.len > len) {
-            rv = 0;
             goto done;
         }
     } else {
         /* endswith */
         if (end-start < vsubstr.len || start > len) {
-            rv = 0;
             goto done;
         }
 
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index b6d200d..b4abac5 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -26,22 +26,16 @@
 /* External C interface */
 
 PyObject *
-PyFile_FromFile(FILE *fp, char *name, char *mode, int (*close)(FILE *))
+PyFile_FromFd(int fd, char *name, char *mode, int buffering, char *encoding,
+	      char *newline)
 {
-	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;
+	PyObject *io, *stream, *nameobj = NULL;
 
 	io = PyImport_ImportModule("io");
 	if (io == NULL)
 		return NULL;
-	stream = PyObject_CallMethod(io, "open", "isiss", fileno(fp), mode,
-				    buffering, encoding, newline);
+	stream = PyObject_CallMethod(io, "open", "isiss", fd, mode,
+				     buffering, encoding, newline);
 	Py_DECREF(io);
 	if (stream == NULL)
 		return NULL;