diff options
| author | Guido van Rossum <guido@python.org> | 1997-09-06 19:41:09 (GMT) | 
|---|---|---|
| committer | Guido van Rossum <guido@python.org> | 1997-09-06 19:41:09 (GMT) | 
| commit | 222ef56bbf30cd1435dffb61f3c41b3a93cda9d3 (patch) | |
| tree | a83449b89addaf950faf4d6c3816bdb71dbb1141 /Python | |
| parent | 17fc85f2f581cd5fcbd139aeb1b5078e0e509cc1 (diff) | |
| download | cpython-222ef56bbf30cd1435dffb61f3c41b3a93cda9d3.zip cpython-222ef56bbf30cd1435dffb61f3c41b3a93cda9d3.tar.gz cpython-222ef56bbf30cd1435dffb61f3c41b3a93cda9d3.tar.bz2 | |
Fix reload() for package submodules.
Diffstat (limited to 'Python')
| -rw-r--r-- | Python/import.c | 26 | 
1 files changed, 24 insertions, 2 deletions
| diff --git a/Python/import.c b/Python/import.c index a581c4f..d62815e 100644 --- a/Python/import.c +++ b/Python/import.c @@ -1306,7 +1306,8 @@ PyImport_ReloadModule(m)  	PyObject *m;  {  	PyObject *modules = PyImport_GetModuleDict(); -	char *name; +	PyObject *path = NULL; +	char *name, *subname;  	char buf[MAXPATHLEN+1];  	struct filedescr *fdp;  	FILE *fp = NULL; @@ -1325,8 +1326,29 @@ PyImport_ReloadModule(m)  			     name);  		return NULL;  	} +	subname = strrchr(name, '.'); +	if (subname == NULL) +		subname = name; +	else { +		PyObject *parentname, *parent; +		parentname = PyString_FromStringAndSize(name, (subname-name)); +		if (parentname == NULL) +			return NULL; +		parent = PyDict_GetItem(modules, parentname); +		if (parent == NULL) { +			PyErr_Format(PyExc_ImportError, +			    "reload(): parent %.200s not in sys.modules", +			    name); +			return NULL; +		} +		subname++; +		path = PyObject_GetAttrString(parent, "__path__"); +		if (path == NULL) +			PyErr_Clear(); +	}  	buf[0] = '\0'; -	fdp = find_module(name, (PyObject *)NULL, buf, MAXPATHLEN+1, &fp); +	fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp); +	Py_XDECREF(path);  	if (fdp == NULL)  		return NULL;  	m = load_module(name, fp, buf, fdp->type); | 
