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/import.c | |
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/import.c')
-rw-r--r-- | Python/import.c | 38 |
1 files changed, 31 insertions, 7 deletions
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; |