diff options
author | Guido van Rossum <guido@python.org> | 2001-10-24 20:42:55 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2001-10-24 20:42:55 (GMT) |
commit | e2ae77b8b8a62e648bb1864a9b36ef3280984404 (patch) | |
tree | e03ad6f126a16529b2fb43671903e357bcb05835 /Python | |
parent | c6ac8a78f668123ec5c2c3d5a824e7886e9a1c60 (diff) | |
download | cpython-e2ae77b8b8a62e648bb1864a9b36ef3280984404.zip cpython-e2ae77b8b8a62e648bb1864a9b36ef3280984404.tar.gz cpython-e2ae77b8b8a62e648bb1864a9b36ef3280984404.tar.bz2 |
SF patch #474590 -- RISC OS support
Diffstat (limited to 'Python')
-rw-r--r-- | Python/bltinmodule.c | 15 | ||||
-rw-r--r-- | Python/import.c | 38 |
2 files changed, 46 insertions, 7 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 144a62f..ac2aa5a 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -13,6 +13,10 @@ #include <unistd.h> #endif +#ifdef RISCOS +#include "unixstuff.h" +#endif + /* The default encoding used by the platform file system APIs Can remain NULL for all platforms that don't have such a concept */ @@ -536,7 +540,9 @@ 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, @@ -558,12 +564,21 @@ 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)) errno = EISDIR; else exists = 1; } +#else + if (object_exists(filename)) { + if (isdir(filename)) + errno = EISDIR; + else + exists = 1; + } +#endif /* RISCOS */ if (exists) { Py_BEGIN_ALLOW_THREADS diff --git a/Python/import.c b/Python/import.c index 626695c..f00a563 100644 --- a/Python/import.c +++ b/Python/import.c @@ -983,13 +983,10 @@ find_module(char *realname, PyObject *path, char *buf, size_t buflen, #else /* XXX How are you going to test for directories? */ #ifdef RISCOS - { - static struct filedescr fd = {"", "", PKG_DIRECTORY}; - if (isdir(buf)) { - if (find_init_module(buf)) - return &fd; - } - } + if (isdir(buf) && + find_init_module(buf) && + case_ok(buf, len, namelen, name)) + return &fd_package; #endif #endif #ifdef macintosh @@ -1069,6 +1066,8 @@ find_module(char *realname, PyObject *path, char *buf, size_t buflen, #include <sys/types.h> #include <dirent.h> +#elif defined(RISCOS) +#include "oslib/osfscontrol.h" #endif static int @@ -1198,6 +1197,31 @@ case_ok(char *buf, int len, int namelen, char *name) } return 0 ; /* Not found */ +/* RISC OS */ +#elif defined(RISCOS) + char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */ + char buf2[MAXPATHLEN+2]; + char *nameWithExt = buf+len-namelen; + int canonlen; + os_error *e; + + if (Py_GETENV("PYTHONCASEOK") != NULL) + return 1; + + /* workaround: + append wildcard, otherwise case of filename wouldn't be touched */ + strcpy(buf2, buf); + strcat(buf2, "*"); + + e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen); + canonlen = MAXPATHLEN+1-canonlen; + if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) ) + return 0; + if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0) + return 1; /* match */ + + return 0; + /* assuming it's a case-sensitive filesystem, so there's nothing to do! */ #else return 1; |