Commit 3484a18a authored by Martin v. Löwis's avatar Martin v. Löwis

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

parent c8bb9eba
...@@ -536,9 +536,6 @@ builtin_execfile(PyObject *self, PyObject *args) ...@@ -536,9 +536,6 @@ builtin_execfile(PyObject *self, PyObject *args)
FILE* fp = NULL; FILE* fp = NULL;
PyCompilerFlags cf; PyCompilerFlags cf;
int exists; int exists;
#ifndef RISCOS
struct stat s;
#endif
if (!PyArg_ParseTuple(args, "s|O!O!:execfile", if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
&filename, &filename,
...@@ -560,25 +557,40 @@ builtin_execfile(PyObject *self, PyObject *args) ...@@ -560,25 +557,40 @@ builtin_execfile(PyObject *self, PyObject *args)
exists = 0; exists = 0;
/* Test for existence or directory. */ /* Test for existence or directory. */
#ifndef RISCOS #if defined(PLAN9)
if (!stat(filename, &s)) { {
if (S_ISDIR(s.st_mode)) Dir *d;
#if defined(PYOS_OS2) && defined(PYCC_VACPP)
errno = EOS2ERR; if ((d = dirstat(filename))!=nil) {
#else if(d->mode & DMDIR)
errno = EISDIR; werrstr("is a directory");
#endif
else else
exists = 1; exists = 1;
free(d);
} }
#else }
#elif defined(RISCOS)
if (object_exists(filename)) { if (object_exists(filename)) {
if (isdir(filename)) if (isdir(filename))
errno = EISDIR; errno = EISDIR;
else else
exists = 1; 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) { if (exists) {
Py_BEGIN_ALLOW_THREADS Py_BEGIN_ALLOW_THREADS
......
...@@ -264,6 +264,9 @@ PyErr_SetFromErrnoWithFilename(PyObject *exc, char *filename) ...@@ -264,6 +264,9 @@ PyErr_SetFromErrnoWithFilename(PyObject *exc, char *filename)
PyObject *v; PyObject *v;
char *s; char *s;
int i = errno; int i = errno;
#ifdef PLAN9
char errbuf[ERRMAX];
#endif
#ifdef MS_WIN32 #ifdef MS_WIN32
char *s_buf = NULL; char *s_buf = NULL;
#endif #endif
...@@ -271,6 +274,10 @@ PyErr_SetFromErrnoWithFilename(PyObject *exc, char *filename) ...@@ -271,6 +274,10 @@ PyErr_SetFromErrnoWithFilename(PyObject *exc, char *filename)
if (i == EINTR && PyErr_CheckSignals()) if (i == EINTR && PyErr_CheckSignals())
return NULL; return NULL;
#endif #endif
#ifdef PLAN9
rerrstr(errbuf, sizeof errbuf);
s = errbuf;
#else
if (i == 0) if (i == 0)
s = "Error"; /* Sometimes errno didn't get set */ s = "Error"; /* Sometimes errno didn't get set */
else else
...@@ -305,7 +312,8 @@ PyErr_SetFromErrnoWithFilename(PyObject *exc, char *filename) ...@@ -305,7 +312,8 @@ PyErr_SetFromErrnoWithFilename(PyObject *exc, char *filename)
s[--len] = '\0'; s[--len] = '\0';
} }
} }
#endif #endif /* Unix/Windows */
#endif /* PLAN 9*/
if (filename != NULL) if (filename != NULL)
v = Py_BuildValue("(iss)", i, s, filename); v = Py_BuildValue("(iss)", i, s, filename);
else else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment