diff options
author | Tim Peters <tim.peters@gmail.com> | 2001-02-17 22:02:34 +0000 |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2001-02-17 22:02:34 +0000 |
commit | 8b66b2d9b0eff9878d1dcf12a1c66a9a3acc7a5e (patch) | |
tree | c76b57b693f4b483474609b22c7adba15d0592cf /Python/pythonrun.c | |
parent | e526a9bc3e38630a32b36278f02d42fc5be59d57 (diff) | |
download | cpython-8b66b2d9b0eff9878d1dcf12a1c66a9a3acc7a5e.tar.gz |
Bug #132850 unix line terminator on windows.
Miserable hack to replace the previous miserable hack in maybe_pyc_file.
Diffstat (limited to 'Python/pythonrun.c')
-rw-r--r-- | Python/pythonrun.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c index a26781ec47..48b875e149 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -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; |