mirror of https://github.com/python/cpython.git
Bug #132850 unix line terminator on windows.
Miserable hack to replace the previous miserable hack in maybe_pyc_file.
This commit is contained in:
parent
657ba27dde
commit
6f5a4efc0a
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue