[Python-checkins] cpython: Issue #3080: find_module() initialize buf and *p_fp

victor.stinner python-checkins at python.org
Sun Mar 20 04:13:37 CET 2011


http://hg.python.org/cpython/rev/d52f471fbbeb
changeset: 68717:d52f471fbbeb
user: Victor Stinner <victor.stinner at haypocalc.com>
date: Sat Mar 12 08:45:02 2011 -0500
summary:
 Issue #3080: find_module() initialize buf and *p_fp
Document also the find_module() function
files:
 Python/import.c
diff --git a/Python/import.c b/Python/import.c
--- a/Python/import.c
+++ b/Python/import.c
@@ -1443,7 +1443,7 @@
 PyObject *path = NULL;
 int err;
 char buf[MAXPATHLEN+1];
- FILE *fp = NULL;
+ FILE *fp;
 struct filedescr *fdp;
 
 m = PyImport_AddModule(name);
@@ -1464,7 +1464,6 @@
 err = PyDict_SetItemString(d, "__path__", path);
 if (err != 0)
 goto error;
- buf[0] = '0円';
 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
 if (fdp == NULL) {
 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
@@ -1599,6 +1598,31 @@
 static int find_init_module(char *); /* Forward */
 static struct filedescr importhookdescr = {"", "", IMP_HOOK};
 
+/* Find a module:
+
+ - try find_module() of each sys.meta_path hook
+ - try find_frozen()
+ - try is_builtin()
+ - try _PyWin_FindRegisteredModule() (Windows only)
+ - otherwise, call find_module_path_list() with search_path_list (if not
+ NULL) or sys.path
+
+ Return:
+
+ - &fd_builtin (C_BUILTIN) if it is a builtin
+ - &fd_frozen (PY_FROZEN) if it is frozen
+ - &fd_package (PKG_DIRECTORY) and write the filename into *buf
+ if it is a package
+ - &importhookdescr (IMP_HOOK) and write the loader into *p_loader if a
+ importer loader was found
+ - a file descriptor (PY_SOURCE, PY_COMPILED, C_EXTENSION, PY_RESOURCE or
+ PY_CODERESOURCE: see _PyImport_Filetab), write the filename into
+ *buf and the pointer to the open file into *p_fp
+ - NULL on error
+
+ By default, write an empty string into *buf, and *p_fp and *p_loader (if
+ set) are set to NULL. Eg. *buf is an empty string for a builtin package. */
+
 static struct filedescr *
 find_module(char *fullname, char *subname, PyObject *path, char *buf,
 size_t buflen, FILE **p_fp, PyObject **p_loader)
@@ -1621,6 +1645,8 @@
 #endif
 PyObject *fullname_obj, *nameobj;
 
+ *buf = '0円';
+ *p_fp = NULL;
 if (p_loader != NULL)
 *p_loader = NULL;
 
@@ -2962,10 +2988,10 @@
 Py_INCREF(m);
 }
 else {
- PyObject *path, *loader = NULL;
+ PyObject *path, *loader;
 char buf[MAXPATHLEN+1];
 struct filedescr *fdp;
- FILE *fp = NULL;
+ FILE *fp;
 
 if (mod == Py_None)
 path = NULL;
@@ -2978,7 +3004,6 @@
 }
 }
 
- buf[0] = '0円';
 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
 &fp, &loader);
 Py_XDECREF(path);
@@ -3012,11 +3037,11 @@
 PyInterpreterState *interp = PyThreadState_Get()->interp;
 PyObject *modules_reloading = interp->modules_reloading;
 PyObject *modules = PyImport_GetModuleDict();
- PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
+ PyObject *path = NULL, *loader, *existing_m = NULL;
 char *name, *subname;
 char buf[MAXPATHLEN+1];
 struct filedescr *fdp;
- FILE *fp = NULL;
+ FILE *fp;
 PyObject *newm;
 
 if (modules_reloading == NULL) {
@@ -3074,7 +3099,6 @@
 if (path == NULL)
 PyErr_Clear();
 }
- buf[0] = '0円';
 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
 Py_XDECREF(path);
 
@@ -3252,7 +3276,7 @@
 PyObject *pathobj;
 struct filedescr *fdp;
 char pathname[MAXPATHLEN+1];
- FILE *fp = NULL;
+ FILE *fp;
 int fd = -1;
 char *found_encoding = NULL;
 char *encoding = NULL;
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /