summaryrefslogtreecommitdiffstats
path: root/Python/import.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2001-10-24 20:42:55 (GMT)
committerGuido van Rossum <guido@python.org>2001-10-24 20:42:55 (GMT)
commite2ae77b8b8a62e648bb1864a9b36ef3280984404 (patch)
treee03ad6f126a16529b2fb43671903e357bcb05835 /Python/import.c
parentc6ac8a78f668123ec5c2c3d5a824e7886e9a1c60 (diff)
downloadcpython-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.c38
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;