File modes in filedescr entries are also passed to Python, so we now put "U"

in there, and convert it to "rb" (or "r" for non-universal-newline builds)
before passing it to fopen().

Fixes #561326.
This commit is contained in:
Jack Jansen 2002-05-28 10:58:19 +00:00
parent 313a7513b0
commit c88da1faa5
1 changed files with 7 additions and 4 deletions

View File

@ -81,15 +81,15 @@ struct filedescr * _PyImport_Filetab = NULL;
#ifdef RISCOS #ifdef RISCOS
static const struct filedescr _PyImport_StandardFiletab[] = { static const struct filedescr _PyImport_StandardFiletab[] = {
{"/py", "r" PY_STDIOTEXTMODE, PY_SOURCE}, {"/py", "U", PY_SOURCE},
{"/pyc", "rb", PY_COMPILED}, {"/pyc", "rb", PY_COMPILED},
{0, 0} {0, 0}
}; };
#else #else
static const struct filedescr _PyImport_StandardFiletab[] = { static const struct filedescr _PyImport_StandardFiletab[] = {
{".py", "r" PY_STDIOTEXTMODE, PY_SOURCE}, {".py", "U", PY_SOURCE},
#ifdef MS_WIN32 #ifdef MS_WIN32
{".pyw", "r" PY_STDIOTEXTMODE, PY_SOURCE}, {".pyw", "U", PY_SOURCE},
#endif #endif
{".pyc", "rb", PY_COMPILED}, {".pyc", "rb", PY_COMPILED},
{0, 0} {0, 0}
@ -892,6 +892,7 @@ find_module(char *realname, PyObject *path, char *buf, size_t buflen,
int i, npath; int i, npath;
size_t len, namelen; size_t len, namelen;
struct filedescr *fdp = NULL; struct filedescr *fdp = NULL;
char *filemode;
FILE *fp = NULL; FILE *fp = NULL;
#ifndef RISCOS #ifndef RISCOS
struct stat statbuf; struct stat statbuf;
@ -1065,7 +1066,9 @@ find_module(char *realname, PyObject *path, char *buf, size_t buflen,
if (Py_VerboseFlag > 1) if (Py_VerboseFlag > 1)
PySys_WriteStderr("# trying %s\n", buf); PySys_WriteStderr("# trying %s\n", buf);
#endif /* !macintosh */ #endif /* !macintosh */
fp = fopen(buf, fdp->mode); filemode = fdp->mode;
if (filemode[0] == 'U') filemode = "r" PY_STDIOTEXTMODE;
fp = fopen(buf, filemode);
if (fp != NULL) { if (fp != NULL) {
if (case_ok(buf, len, namelen, name)) if (case_ok(buf, len, namelen, name))
break; break;