]> granicus.if.org Git - python/commitdiff
Bug #132850 unix line terminator on windows.
authorTim Peters <tim.peters@gmail.com>
Sat, 17 Feb 2001 22:02:34 +0000 (22:02 +0000)
committerTim Peters <tim.peters@gmail.com>
Sat, 17 Feb 2001 22:02:34 +0000 (22:02 +0000)
Miserable hack to replace the previous miserable hack in maybe_pyc_file.

Python/pythonrun.c

index a26781ec47115c0518481975753405d1b762e59d..48b875e149b73d1f5fa2d9e96c0aaa90a5a8b78d 100644 (file)
@@ -580,18 +580,22 @@ maybe_pyc_file(FILE *fp, char* filename, char* ext, int closeit)
                unsigned char buf[2];
                /* Mess:  In case of -x, the stream is NOT at its start now,
                   and ungetc() was used to push back the first newline,
-                  which makes the current stream position formally undefined
-                  until that newline is read back.  So first we getc(), so
-                  that ftell() is well-defined.
+                  which makes the current stream position formally undefined,
+                  and a x-platform nightmare.
+                  Unfortunately, we have no direct way to know whether -x
+                  was specified.  So we use a terrible hack:  if the current
+                  stream position is not 0, we assume -x was specified, and
+                  give up.  Bug 132850 on SourceForge spells out the
+                  hopelessness of trying anything else (fseek and ftell
+                  don't work predictably x-platform for text-mode files).
                */
-               const int maybepushedback = getc(fp);
-               const long currentpos = ftell(fp);
                int ispyc = 0;
-               rewind(fp);
-               ispyc = fread(buf, 1, 2, fp) == 2 &&
-                       ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic;
-               fseek(fp, currentpos, SEEK_SET);
-               ungetc(maybepushedback, fp);
+               if (ftell(fp) == 0) {
+                       if (fread(buf, 1, 2, fp) == 2 &&
+                           ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic) 
+                               ispyc = 1;
+                       rewind(fp);
+               }
                return ispyc;
        }
        return 0;