diff options
-rw-r--r-- | Python/import.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/Python/import.c b/Python/import.c index 4090118..e5ac2b7 100644 --- a/Python/import.c +++ b/Python/import.c @@ -984,6 +984,34 @@ find_module(name, path, buf, buflen, p_fp) #ifdef MS_WIN32 #include <windows.h> +#include <ctype.h> + +static int +allcaps8x3(s) + char *s; +{ + /* Return 1 if s is an 8.3 filename in ALLCAPS */ + char c; + char *dot = strchr(s, '.'); + char *end = strchr(s, '\0'); + if (dot != NULL) { + if (dot-s > 8) + return 1; /* More than 8 before '.' */ + if (end-dot > 4) + return 1; /* More than 3 after '.' */ + end = strchr(dot+1, '.'); + if (end != NULL) + return 1; /* More than one dot */ + } + else if (end-s > 8) + return 1; /* More than 8 and no dot */ + while ((c = *s++)) { + if (islower(c)) + return 0; + } + return 1; +} + static int check_case(char *buf, int len, int namelen, char *name) { @@ -999,6 +1027,14 @@ check_case(char *buf, int len, int namelen, char *name) return 0; } FindClose(h); + if (allcaps8x3(data.cFileName)) { + /* Skip the test if the filename is ALL.CAPS. This can + happen in certain circumstances beyond our control, + e.g. when software is installed under NT on a FAT + filesystem and then the same FAT filesystem is used + under Windows 95. */ + return 1; + } if (strncmp(data.cFileName, name, namelen) != 0) { strcpy(buf+len-namelen, data.cFileName); PyErr_Format(PyExc_NameError, @@ -2008,9 +2044,11 @@ imp_is_frozen(self, args) PyObject *args; { char *name; + struct _frozen *p; if (!PyArg_ParseTuple(args, "s", &name)) return NULL; - return PyInt_FromLong(find_frozen(name) != NULL); + p = find_frozen(name); + return PyInt_FromLong((long) (p == NULL ? 0 : p->size)); } static FILE * |