Mercurial > cpython-lru_cache-weakref
diff Python/import.c @ 6542:62bdb1cbe0f5 legacy-trunk
New policy for package imports: only a directory containing
__init__.py (or __init__.pyc/.pyo, whichever applies) is considered a
package. All other subdirectories are left alone. Should make Konrad
Hinsen happy!
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Fri, 31 Oct 1997 18:38:52 +0000 |
| parents | b2dfff06789c |
| children | 0a3c7402d395 |
line wrap: on
line diff
--- a/Python/import.c Fri Oct 31 18:37:24 1997 +0000 +++ b/Python/import.c Fri Oct 31 18:38:52 1997 +0000 @@ -636,6 +636,8 @@ extern FILE *PyWin_FindRegisteredModule(); #endif +static int find_init_module Py_PROTO((char *)); /* Forward */ + static struct filedescr * find_module(name, path, buf, buflen, p_fp) char *name; @@ -733,8 +735,10 @@ #ifdef HAVE_STAT if (stat(buf, &statbuf) == 0) { static struct filedescr fd = {"", "", PKG_DIRECTORY}; - if (S_ISDIR(statbuf.st_mode)) - return &fd; + if (S_ISDIR(statbuf.st_mode)) { + if (find_init_module(buf)) + return &fd; + } } #else /* XXX How are you going to test for directories? */ @@ -766,6 +770,38 @@ return fdp; } +#ifdef HAVE_STAT +/* Helper to look for __init__.py or __init__.py[co] in potential package */ +static int +find_init_module(buf) + char *buf; +{ + int save_len = strlen(buf); + int 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'; + return 0; +} +#endif /* HAVE_STAT */ + static int init_builtin Py_PROTO((char *)); /* Forward */
