Bug #132850 unix line terminator on windows.

Miserable hack to replace the previous miserable hack in maybe_pyc_file.
This commit is contained in:
Tim Peters 2001-02-17 22:02:34 +00:00
parent 657ba27dde
commit 6f5a4efc0a
1 changed files with 14 additions and 10 deletions

View 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;