]> granicus.if.org Git - python/commitdiff
Patch by Just van Rossum that changes how we search for submodules of
authorGuido van Rossum <guido@python.org>
Tue, 11 Aug 1998 15:07:39 +0000 (15:07 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 11 Aug 1998 15:07:39 +0000 (15:07 +0000)
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.)

Python/import.c

index 80e2b8f1eed02d4de9710eebc0ca1f81216ba9b0..33d266a36c502e09aeb4526efd6e9d464d749bac 100644 (file)
@@ -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");