Patch #494045: patches errno and stat to cope on plan9.

This commit is contained in:
Martin v. Löwis 2002-03-09 12:07:51 +00:00
parent c8bb9eba31
commit 3484a18af1
2 changed files with 36 additions and 16 deletions

View File

@ -536,9 +536,6 @@ builtin_execfile(PyObject *self, PyObject *args)
FILE* fp = NULL;
PyCompilerFlags cf;
int exists;
#ifndef RISCOS
struct stat s;
#endif
if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
&filename,
@ -560,25 +557,40 @@ builtin_execfile(PyObject *self, PyObject *args)
exists = 0;
/* Test for existence or directory. */
#ifndef RISCOS
if (!stat(filename, &s)) {
if (S_ISDIR(s.st_mode))
#if defined(PYOS_OS2) && defined(PYCC_VACPP)
errno = EOS2ERR;
#else
errno = EISDIR;
#endif
else
exists = 1;
#if defined(PLAN9)
{
Dir *d;
if ((d = dirstat(filename))!=nil) {
if(d->mode & DMDIR)
werrstr("is a directory");
else
exists = 1;
free(d);
}
}
#else
#elif defined(RISCOS)
if (object_exists(filename)) {
if (isdir(filename))
errno = EISDIR;
else
exists = 1;
}
#endif /* RISCOS */
#else /* standard Posix */
{
struct stat s;
if (stat(filename, &s) == 0) {
if (S_ISDIR(s.st_mode))
# if defined(PY_OS2) && defined(PYCC_VACPP)
errno = EOS2ERR;
# else
errno = EISDIR;
# endif
else
exists = 1;
}
}
#endif
if (exists) {
Py_BEGIN_ALLOW_THREADS

View File

@ -264,6 +264,9 @@ PyErr_SetFromErrnoWithFilename(PyObject *exc, char *filename)
PyObject *v;
char *s;
int i = errno;
#ifdef PLAN9
char errbuf[ERRMAX];
#endif
#ifdef MS_WIN32
char *s_buf = NULL;
#endif
@ -271,6 +274,10 @@ PyErr_SetFromErrnoWithFilename(PyObject *exc, char *filename)
if (i == EINTR && PyErr_CheckSignals())
return NULL;
#endif
#ifdef PLAN9
rerrstr(errbuf, sizeof errbuf);
s = errbuf;
#else
if (i == 0)
s = "Error"; /* Sometimes errno didn't get set */
else
@ -305,7 +312,8 @@ PyErr_SetFromErrnoWithFilename(PyObject *exc, char *filename)
s[--len] = '\0';
}
}
#endif
#endif /* Unix/Windows */
#endif /* PLAN 9*/
if (filename != NULL)
v = Py_BuildValue("(iss)", i, s, filename);
else