diff Python/import.c @ 8934:20b83ca06ce8 legacy-trunk

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.)
author Guido van Rossum <guido@python.org>
date Tue, 11 Aug 1998 15:07:39 +0000
parents b933f584a26d
children f3ebdb2274e4
line wrap: on
line diff
--- a/Python/import.c	Tue Aug 11 15:04:47 1998 +0000
+++ b/Python/import.c	Tue Aug 11 15:07:39 1998 +0000
@@ -819,8 +819,8 @@
 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 @@
 	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 @@
 #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");