[Python-checkins] CVS: python/dist/src/Python import.c,2.177,2.178
Tim Peters
tim_one@users.sourceforge.net
Wed, 04 Jul 2001 20:47:55 -0700
Update of /cvsroot/python/python/dist/src/Python
In directory usw-pr-cvs1:/tmp/cvs-serv29177/Python
Modified Files:
import.c
Log Message:
SF bug #438295: [Windows] __init__.py cause strange behavior
Probable fix (the bug report doesn't have enough info to say for sure).
find_init_module(): Insist on a case-sensitive match for __init__ files.
Given __INIT__.PY instead, find_init_module() thought that was fine, but
the later attempt to do find_module("__INIT__.PY") didn't and its caller
silently suppressed the resulting ImportError. Now find_init_module()
refuses to accept __INIT__.PY to begin with.
Bugfix candidate; specific to platforms with case-insensitive filesystems.
Index: import.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/import.c,v
retrieving revision 2.177
retrieving revision 2.178
diff -C2 -r2.177 -r2.178
*** import.c 2001/04/29 22:21:25 2.177
--- import.c 2001/07/05 03:47:53 2.178
***************
*** 1195,1218 ****
find_init_module(char *buf)
{
! size_t save_len = strlen(buf);
size_t i = save_len;
struct stat statbuf;
if (save_len + 13 >= MAXPATHLEN)
return 0;
buf[i++] = SEP;
! strcpy(buf+i, "__init__.py");
if (stat(buf, &statbuf) == 0) {
! buf[save_len] = '\0';
! return 1;
}
! i += strlen(buf+i);
! if (Py_OptimizeFlag)
! strcpy(buf+i, "o");
! else
! strcpy(buf+i, "c");
if (stat(buf, &statbuf) == 0) {
! buf[save_len] = '\0';
! return 1;
}
buf[save_len] = '\0';
--- 1195,1235 ----
find_init_module(char *buf)
{
! const size_t save_len = strlen(buf);
size_t i = save_len;
+ char *pname; /* pointer to start of __init__ */
struct stat statbuf;
+ /* For calling case_ok(buf, len, namelen, name):
+ * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
+ * ^ ^ ^ ^
+ * |--------------------- buf ---------------------|
+ * |------------------- len ------------------|
+ * |------ name -------|
+ * |----- namelen -----|
+ */
if (save_len + 13 >= MAXPATHLEN)
return 0;
buf[i++] = SEP;
! pname = buf + i;
! strcpy(pname, "__init__.py");
if (stat(buf, &statbuf) == 0) {
! if (case_ok(buf,
! save_len + 9, /* len("/__init__") */
! 8, /* len("__init__") */
! pname)) {
! buf[save_len] = '\0';
! return 1;
! }
}
! i += strlen(pname);
! strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
if (stat(buf, &statbuf) == 0) {
! if (case_ok(buf,
! save_len + 9, /* len("/__init__") */
! 8, /* len("__init__") */
! pname)) {
! buf[save_len] = '\0';
! return 1;
! }
}
buf[save_len] = '\0';