summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorJason Tishler <jason@tishler.net>2005-05-20 00:56:54 (GMT)
committerJason Tishler <jason@tishler.net>2005-05-20 00:56:54 (GMT)
commit7961aa6135e5a26c1cc14bbcaa2668d2ec98b0b9 (patch)
tree1f8b701a995fa4fee5ba89b4deb07f9be0af47d1 /Python
parentfffc4b7b3ac1f190bd256181b771e495495e296e (diff)
downloadcpython-7961aa6135e5a26c1cc14bbcaa2668d2ec98b0b9.zip
cpython-7961aa6135e5a26c1cc14bbcaa2668d2ec98b0b9.tar.gz
cpython-7961aa6135e5a26c1cc14bbcaa2668d2ec98b0b9.tar.bz2
Patch #1197318: Cygwin case-sensitive import patch
A problem regarding importing symlinked modules was recently reported on the Cygwin mailing list: http://cygwin.com/ml/cygwin/2005-04/msg00257.html The following test case demonstrates the problem: $ ls -l total 1 lrwxrwxrwx 1 jt None 6 Apr 23 13:32 bar.py -> foo.py -rw-r--r-- 1 jt None 24 Apr 18 20:13 foo.py $ python -c 'import bar' Traceback (most recent call last): File "<string>", line 1, in ? ImportError: No module named bar Since Cygwin's case_ok() uses a modified version of the Windows's version, the symlinked bar module actually resolves to file foo.py instead of bar.py. This obviously causes the matching code to fail (regardless of case). The patch fixes this problem by making Cygwin use the Mac OS X case_ok() instead of a modified Window's version.
Diffstat (limited to 'Python')
-rw-r--r--Python/import.c23
1 files changed, 6 insertions, 17 deletions
diff --git a/Python/import.c b/Python/import.c
index 75c6d3e..0362dbd 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -1377,16 +1377,13 @@ PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
/* First we may need a pile of platform-specific header files; the sequence
* of #if's here should match the sequence in the body of case_ok().
*/
-#if defined(MS_WINDOWS) || defined(__CYGWIN__)
+#if defined(MS_WINDOWS)
#include <windows.h>
-#ifdef __CYGWIN__
-#include <sys/cygwin.h>
-#endif
#elif defined(DJGPP)
#include <dir.h>
-#elif defined(__MACH__) && defined(__APPLE__) && defined(HAVE_DIRENT_H)
+#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
#include <sys/types.h>
#include <dirent.h>
@@ -1407,23 +1404,15 @@ case_ok(char *buf, int len, int namelen, char *name)
* match the sequence just above.
*/
-/* MS_WINDOWS || __CYGWIN__ */
-#if defined(MS_WINDOWS) || defined(__CYGWIN__)
+/* MS_WINDOWS */
+#if defined(MS_WINDOWS)
WIN32_FIND_DATA data;
HANDLE h;
-#ifdef __CYGWIN__
- char tempbuf[MAX_PATH];
-#endif
if (Py_GETENV("PYTHONCASEOK") != NULL)
return 1;
-#ifdef __CYGWIN__
- cygwin32_conv_to_win32_path(buf, tempbuf);
- h = FindFirstFile(tempbuf, &data);
-#else
h = FindFirstFile(buf, &data);
-#endif
if (h == INVALID_HANDLE_VALUE) {
PyErr_Format(PyExc_NameError,
"Can't find file for module %.100s\n(filename %.300s)",
@@ -1450,8 +1439,8 @@ case_ok(char *buf, int len, int namelen, char *name)
}
return strncmp(ffblk.ff_name, name, namelen) == 0;
-/* new-fangled macintosh (macosx) */
-#elif defined(__MACH__) && defined(__APPLE__) && defined(HAVE_DIRENT_H)
+/* new-fangled macintosh (macosx) or Cygwin */
+#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
DIR *dirp;
struct dirent *dp;
char dirname[MAXPATHLEN + 1];