Recognize pyc files even if they don't end in pyc.
Patch #103067 with modifications as discussed in email.
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index e29e719..45d21dd 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -546,6 +546,38 @@
 	return PyRun_SimpleFileEx(fp, filename, 0);
 }
 
+/* Check whether a file maybe a pyc file: Look at the extension,
+   the file type, and, if we may close it, at the first few bytes. */
+
+static int
+maybe_pyc_file(FILE *fp, char* filename, char* ext, int closeit)
+{
+	if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
+		return 1;
+
+#ifdef macintosh
+	/* On a mac, we also assume a pyc file for types 'PYC ' and 'APPL' */
+	if (PyMac_getfiletype(filename) == 'PYC '
+	    || PyMac_getfiletype(filename) == 'APPL')
+		return 1;
+#endif /* macintosh */
+
+	/* Only look into the file if we are allowed to close it, since
+	   it then should also be seekable. */
+	if (closeit) {
+		/* Read only two bytes of the magic. If the file was opened in
+		   text mode, the bytes 3 and 4 of the magic (\r\n) might not
+		   be read as they are on disk. */
+		unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
+		unsigned char buf[2];
+		if (fread(buf, 1, 2, fp) == 2 
+		    && (buf[1]<<8 | buf[0]) == halfmagic)
+			return 1;
+		fseek(fp, 0, SEEK_SET);
+	}
+	return 0;
+} 
+
 int
 PyRun_SimpleFileEx(FILE *fp, char *filename, int closeit)
 {
@@ -557,13 +589,7 @@
 		return -1;
 	d = PyModule_GetDict(m);
 	ext = filename + strlen(filename) - 4;
-	if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0
-#ifdef macintosh
-	/* On a mac, we also assume a pyc file for types 'PYC ' and 'APPL' */
-	    || PyMac_getfiletype(filename) == 'PYC '
-	    || PyMac_getfiletype(filename) == 'APPL'
-#endif /* macintosh */
-		) {
+	if (maybe_pyc_file(fp, filename, ext, closeit)) {
 		/* Try to run a pyc file. First, re-open in binary */
 		if (closeit)
 			fclose(fp);