summaryrefslogtreecommitdiffstats
path: root/Python/import.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1998-08-11 15:07:39 (GMT)
committerGuido van Rossum <guido@python.org>1998-08-11 15:07:39 (GMT)
commit0506a431d58b3ef4cebefad6ea246883ba41963c (patch)
treea686231d19e9c66de3a0dbee944bcf6250ac8dea /Python/import.c
parentbd3a527f93ef7a97b9eb828456955b84eda023d3 (diff)
downloadcpython-0506a431d58b3ef4cebefad6ea246883ba41963c.zip
cpython-0506a431d58b3ef4cebefad6ea246883ba41963c.tar.gz
cpython-0506a431d58b3ef4cebefad6ea246883ba41963c.tar.bz2
Patch by Just van Rossum that changes how we search for submodules of
frozen packages. (I *think* this means that we can now have a built-in module bar that's a submodule of a frozen package foo, by registering the built-in module with a name "foo.bar" in the table of builtin modules.)
Diffstat (limited to 'Python/import.c')
-rw-r--r--Python/import.c39
1 files changed, 20 insertions, 19 deletions
diff --git a/Python/import.c b/Python/import.c
index 80e2b8f..33d266a 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -819,8 +819,8 @@ static int check_case(char *, int, int, char *);
static int find_init_module Py_PROTO((char *)); /* Forward */
static struct filedescr *
-find_module(name, path, buf, buflen, p_fp)
- char *name;
+find_module(realname, path, buf, buflen, p_fp)
+ char *realname;
PyObject *path;
/* Output parameters: */
char *buf;
@@ -835,7 +835,25 @@ find_module(name, path, buf, buflen, p_fp)
static struct filedescr fd_frozen = {"", "", PY_FROZEN};
static struct filedescr fd_builtin = {"", "", C_BUILTIN};
static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
+ char name[MAXPATHLEN+1];
+
+ strcpy(name, realname);
+ if (path != NULL && PyString_Check(path)) {
+ /* Submodule of "frozen" package:
+ Set name to the fullname, path to NULL
+ and continue as "usual" */
+ if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
+ PyErr_SetString(PyExc_ImportError,
+ "full frozen module name too long");
+ return NULL;
+ }
+ strcpy(buf, PyString_AsString(path));
+ strcat(buf, ".");
+ strcat(buf, name);
+ strcpy(name, buf);
+ path = NULL;
+ }
if (path == NULL) {
if (is_builtin(name)) {
strcpy(buf, name);
@@ -855,23 +873,6 @@ find_module(name, path, buf, buflen, p_fp)
#endif
path = PySys_GetObject("path");
}
- else if (PyString_Check(path)) {
- /* Submodule of frozen package */
- if (PyString_Size(path) + 1 + strlen(name) >= (unsigned int)buflen) {
- PyErr_SetString(PyExc_ImportError,
- "full frozen module name too long");
- return NULL;
- }
- strcpy(buf, PyString_AsString(path));
- strcat(buf, ".");
- strcat(buf, name);
- if (find_frozen(buf) != NULL)
- return &fd_frozen;
- PyErr_Format(PyExc_ImportError,
- "frozen module %.200s not found", buf);
- return NULL;
- }
-
if (path == NULL || !PyList_Check(path)) {
PyErr_SetString(PyExc_ImportError,
"sys.path must be a list of directory names");