summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-04-29 22:21:25 (GMT)
committerTim Peters <tim.peters@gmail.com>2001-04-29 22:21:25 (GMT)
commitcab3f68f612a7f088bed4005b335078a913b7b0f (patch)
treea30fe45bbaf73b6a6465fda392f29d439f4e1170
parent748b8bbe020561cdb953b052f7f9d43be83d8081 (diff)
downloadcpython-cab3f68f612a7f088bed4005b335078a913b7b0f.zip
cpython-cab3f68f612a7f088bed4005b335078a913b7b0f.tar.gz
cpython-cab3f68f612a7f088bed4005b335078a913b7b0f.tar.bz2
SF bug #417093: Case sensitive import: dir and .py file w/ same name
Directory containing Spam.py spam/__init__.py Then "import Spam" caused a SystemError, because code checking for the existence of "Spam/__init__.py" finds it on a case-insensitive filesystem, but then bails because the directory it finds it in doesn't match case, and then old code assumed that was still an error even though it isn't anymore. Changed the code to just continue looking in this case (instead of calling it an error). So import Spam and import spam both work now.
-rw-r--r--Python/import.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/Python/import.c b/Python/import.c
index 2c15d10..ef3e0e6 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -958,14 +958,11 @@ find_module(char *realname, PyObject *path, char *buf, size_t buflen,
/* Check for package import (buf holds a directory name,
and there's an __init__ module in that directory */
#ifdef HAVE_STAT
- if (stat(buf, &statbuf) == 0 &&
- S_ISDIR(statbuf.st_mode) &&
- find_init_module(buf)) {
- if (case_ok(buf, len, namelen, name))
- return &fd_package;
- else
- return NULL;
- }
+ if (stat(buf, &statbuf) == 0 && /* it exists */
+ S_ISDIR(statbuf.st_mode) && /* it's a directory */
+ find_init_module(buf) && /* it has __init__.py */
+ case_ok(buf, len, namelen, name)) /* and case matches */
+ return &fd_package;
#else
/* XXX How are you going to test for directories? */
#ifdef RISCOS