Mercurial > cpython-lru_cache-weakref
diff Python/pythonrun.c @ 16560:e8e636cc1a09 legacy-trunk
Ugly fix for SF bug 131239 (-x flag busted).
Bug was introduced by tricks played to make .pyc files executable
via cmdline arg. Then again, -x worked via a trick to begin with.
If anyone can think of a portable way to test -x, be my guest!
| author | Tim Peters <tim.peters@gmail.com> |
|---|---|
| date | Sun, 11 Feb 2001 04:35:39 +0000 |
| parents | aa844711463a |
| children | a51b9961f3bb |
line wrap: on
line diff
--- a/Python/pythonrun.c Sun Feb 11 01:26:28 2001 +0000 +++ b/Python/pythonrun.c Sun Feb 11 04:35:39 2001 +0000 @@ -578,10 +578,21 @@ be read as they are on disk. */ unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF; unsigned char buf[2]; - if (fread(buf, 1, 2, fp) == 2 - && ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic) - return 1; - fseek(fp, 0, SEEK_SET); + /* 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. + */ + 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); + return ispyc; } return 0; }
