From: Guido van Rossum Date: Fri, 31 Oct 1997 18:38:52 +0000 (+0000) Subject: New policy for package imports: only a directory containing X-Git-Tag: v1.5b1~139 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=197346fafe41332b896999b5bbdc7b1dabe57262;p=thirdparty%2FPython%2Fcpython.git 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! --- diff --git a/Python/import.c b/Python/import.c index 9f68c626cd2f..aef73537c55d 100644 --- a/Python/import.c +++ b/Python/import.c @@ -636,6 +636,8 @@ is_builtin(name) 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 @@ find_module(name, path, buf, buflen, p_fp) #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 @@ find_module(name, path, buf, buflen, p_fp) 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 */