blob: ef64b21b38380e277ccec7d87e6e01f0fda40ceb [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Module definition and import implementation */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00005
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "Python-ast.h"
Neal Norwitzadb69fc2005-12-17 20:54:49 +00007#include "pyarena.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00008#include "pythonrun.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00009#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000010#include "marshal.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000011#include "code.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000012#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000013#include "eval.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000014#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000015#include "importdl.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000016
Guido van Rossum55a83382000-09-20 20:31:38 +000017#ifdef HAVE_FCNTL_H
18#include <fcntl.h>
19#endif
Anthony Baxterac6bd462006-04-13 02:06:09 +000020#ifdef __cplusplus
21extern "C" {
22#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000023
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000024extern time_t PyOS_GetLastModificationTime(char *, FILE *);
25 /* In getmtime.c */
Guido van Rossum21d335e1993-10-15 13:01:11 +000026
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000027/* Magic word to reject .pyc files generated by other Python versions.
28 It should change for each incompatible change to the bytecode.
29
30 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000031 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000032 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000033
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000034 The magic numbers must be spaced apart atleast 2 values, as the
35 -U interpeter flag will cause MAGIC+1 being used. They have been
36 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000037
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000038 There were a variety of old schemes for setting the magic number.
39 The current working scheme is to increment the previous value by
40 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000041
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000042 Known values:
43 Python 1.5: 20121
44 Python 1.5.1: 20121
45 Python 1.5.2: 20121
Skip Montanaro4ec3c262006-03-25 14:12:03 +000046 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000047 Python 2.0: 50823
48 Python 2.0.1: 50823
49 Python 2.1: 60202
50 Python 2.1.1: 60202
51 Python 2.1.2: 60202
52 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000053 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000054 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000055 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000056 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000057 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000058 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000059 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000060 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000061 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000062 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Neal Norwitzedef2be2006-07-12 05:26:17 +000063 Python 2.5c1: 62101 (fix wrong code: for x, in ...)
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000064.
Tim Peters36515e22001-11-18 04:06:29 +000065*/
Neal Norwitza1f10902006-07-12 07:28:29 +000066#define MAGIC (62101 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000067
Guido van Rossum96774c12000-05-01 20:19:08 +000068/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000069 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000070 compiler works which are enabled by command line switches. */
71static long pyc_magic = MAGIC;
72
Guido van Rossum25ce5661997-08-02 03:10:38 +000073/* See _PyImport_FixupExtension() below */
74static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000075
Guido van Rossum771c6c81997-10-31 18:37:24 +000076/* This table is defined in config.c: */
77extern struct _inittab _PyImport_Inittab[];
78
79struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000080
Guido van Rossumed1170e1999-12-20 21:23:41 +000081/* these tables define the module suffixes that Python recognizes */
82struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +000083
84#ifdef RISCOS
85static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +000086 {"/py", "U", PY_SOURCE},
Guido van Rossum48a680c2001-03-02 06:34:14 +000087 {"/pyc", "rb", PY_COMPILED},
88 {0, 0}
89};
90#else
Guido van Rossumed1170e1999-12-20 21:23:41 +000091static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +000092 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000093#ifdef MS_WINDOWS
Jack Jansenc88da1f2002-05-28 10:58:19 +000094 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +000095#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +000096 {".pyc", "rb", PY_COMPILED},
97 {0, 0}
98};
Guido van Rossum48a680c2001-03-02 06:34:14 +000099#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000100
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000101static PyTypeObject NullImporterType; /* Forward reference */
102
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000103/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000104
105void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000106_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000107{
Guido van Rossumed1170e1999-12-20 21:23:41 +0000108 const struct filedescr *scan;
109 struct filedescr *filetab;
110 int countD = 0;
111 int countS = 0;
112
113 /* prepare _PyImport_Filetab: copy entries from
114 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
115 */
116 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
117 ++countD;
118 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
119 ++countS;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000120 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
Neal Norwitze1fdb322006-07-21 05:32:28 +0000121 if (filetab == NULL)
Neal Norwitz33722ae2006-07-21 07:59:02 +0000122 Py_FatalError("Can't initialize import file table.");
Guido van Rossumed1170e1999-12-20 21:23:41 +0000123 memcpy(filetab, _PyImport_DynLoadFiletab,
124 countD * sizeof(struct filedescr));
125 memcpy(filetab + countD, _PyImport_StandardFiletab,
126 countS * sizeof(struct filedescr));
127 filetab[countD + countS].suffix = NULL;
128
129 _PyImport_Filetab = filetab;
130
Guido van Rossum0824f631997-03-11 18:37:35 +0000131 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000132 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
133 for (; filetab->suffix != NULL; filetab++) {
Guido van Rossum48a680c2001-03-02 06:34:14 +0000134#ifndef RISCOS
Guido van Rossumed1170e1999-12-20 21:23:41 +0000135 if (strcmp(filetab->suffix, ".pyc") == 0)
136 filetab->suffix = ".pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000137#else
138 if (strcmp(filetab->suffix, "/pyc") == 0)
139 filetab->suffix = "/pyo";
140#endif
Guido van Rossum0824f631997-03-11 18:37:35 +0000141 }
142 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000143
144 if (Py_UnicodeFlag) {
145 /* Fix the pyc_magic so that byte compiled code created
146 using the all-Unicode method doesn't interfere with
147 code created in normal operation mode. */
148 pyc_magic = MAGIC + 1;
149 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000150}
151
Guido van Rossum25ce5661997-08-02 03:10:38 +0000152void
Just van Rossum52e14d62002-12-30 22:08:05 +0000153_PyImportHooks_Init(void)
154{
155 PyObject *v, *path_hooks = NULL, *zimpimport;
156 int err = 0;
157
158 /* adding sys.path_hooks and sys.path_importer_cache, setting up
159 zipimport */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000160 if (PyType_Ready(&NullImporterType) < 0)
161 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000162
163 if (Py_VerboseFlag)
164 PySys_WriteStderr("# installing zipimport hook\n");
165
166 v = PyList_New(0);
167 if (v == NULL)
168 goto error;
169 err = PySys_SetObject("meta_path", v);
170 Py_DECREF(v);
171 if (err)
172 goto error;
173 v = PyDict_New();
174 if (v == NULL)
175 goto error;
176 err = PySys_SetObject("path_importer_cache", v);
177 Py_DECREF(v);
178 if (err)
179 goto error;
180 path_hooks = PyList_New(0);
181 if (path_hooks == NULL)
182 goto error;
183 err = PySys_SetObject("path_hooks", path_hooks);
184 if (err) {
185 error:
186 PyErr_Print();
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000187 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
188 "path_importer_cache, or NullImporter failed"
189 );
Just van Rossum52e14d62002-12-30 22:08:05 +0000190 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000191
Just van Rossum52e14d62002-12-30 22:08:05 +0000192 zimpimport = PyImport_ImportModule("zipimport");
193 if (zimpimport == NULL) {
194 PyErr_Clear(); /* No zip import module -- okay */
195 if (Py_VerboseFlag)
196 PySys_WriteStderr("# can't import zipimport\n");
197 }
198 else {
199 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
200 "zipimporter");
201 Py_DECREF(zimpimport);
202 if (zipimporter == NULL) {
203 PyErr_Clear(); /* No zipimporter object -- okay */
204 if (Py_VerboseFlag)
205 PySys_WriteStderr(
Fred Drake1e5fc552003-07-11 15:01:02 +0000206 "# can't import zipimport.zipimporter\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000207 }
208 else {
209 /* sys.path_hooks.append(zipimporter) */
210 err = PyList_Append(path_hooks, zipimporter);
211 Py_DECREF(zipimporter);
212 if (err)
213 goto error;
214 if (Py_VerboseFlag)
215 PySys_WriteStderr(
216 "# installed zipimport hook\n");
217 }
218 }
219 Py_DECREF(path_hooks);
220}
221
222void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000223_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000224{
225 Py_XDECREF(extensions);
226 extensions = NULL;
Barry Warsaw84294482000-10-03 16:02:05 +0000227 PyMem_DEL(_PyImport_Filetab);
228 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000229}
230
231
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000232/* Locking primitives to prevent parallel imports of the same module
233 in different threads to return with a partially loaded module.
234 These calls are serialized by the global interpreter lock. */
235
236#ifdef WITH_THREAD
237
Guido van Rossum49b56061998-10-01 20:42:43 +0000238#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000239
Guido van Rossum65d5b571998-12-21 19:32:43 +0000240static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000241static long import_lock_thread = -1;
242static int import_lock_level = 0;
243
244static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000245lock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000246{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000247 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000248 if (me == -1)
249 return; /* Too bad */
Neal Norwitze1fdb322006-07-21 05:32:28 +0000250 if (import_lock == NULL) {
Guido van Rossum65d5b571998-12-21 19:32:43 +0000251 import_lock = PyThread_allocate_lock();
Neal Norwitze1fdb322006-07-21 05:32:28 +0000252 if (import_lock == NULL)
253 return; /* Nothing much we can do. */
254 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000255 if (import_lock_thread == me) {
256 import_lock_level++;
257 return;
258 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000259 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
260 {
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000261 PyThreadState *tstate = PyEval_SaveThread();
Guido van Rossum65d5b571998-12-21 19:32:43 +0000262 PyThread_acquire_lock(import_lock, 1);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000263 PyEval_RestoreThread(tstate);
264 }
265 import_lock_thread = me;
266 import_lock_level = 1;
267}
268
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000269static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000270unlock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000271{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000272 long me = PyThread_get_thread_ident();
Neal Norwitze1fdb322006-07-21 05:32:28 +0000273 if (me == -1 || import_lock == NULL)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000274 return 0; /* Too bad */
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000275 if (import_lock_thread != me)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000276 return -1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000277 import_lock_level--;
278 if (import_lock_level == 0) {
279 import_lock_thread = -1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000280 PyThread_release_lock(import_lock);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000281 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000282 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000283}
284
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000285/* This function is called from PyOS_AfterFork to ensure that newly
286 created child processes do not share locks with the parent. */
287
288void
289_PyImport_ReInitLock(void)
290{
291#ifdef _AIX
292 if (import_lock != NULL)
293 import_lock = PyThread_allocate_lock();
294#endif
295}
296
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000297#else
298
299#define lock_import()
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000300#define unlock_import() 0
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000301
302#endif
303
Tim Peters69232342001-08-30 05:16:13 +0000304static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000305imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000306{
Tim Peters69232342001-08-30 05:16:13 +0000307#ifdef WITH_THREAD
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000308 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000309#else
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000310 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000311#endif
312}
313
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000314static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000315imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000316{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000317#ifdef WITH_THREAD
318 lock_import();
319#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000320 Py_INCREF(Py_None);
321 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000322}
323
324static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000325imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000326{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000327#ifdef WITH_THREAD
328 if (unlock_import() < 0) {
329 PyErr_SetString(PyExc_RuntimeError,
330 "not holding the import lock");
331 return NULL;
332 }
333#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000334 Py_INCREF(Py_None);
335 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000336}
337
Guido van Rossum25ce5661997-08-02 03:10:38 +0000338/* Helper for sys */
339
340PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000341PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000342{
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000343 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000344 if (interp->modules == NULL)
345 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
346 return interp->modules;
347}
348
Guido van Rossum3f5da241990-12-20 15:06:42 +0000349
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000350/* List of names to clear in sys */
351static char* sys_deletes[] = {
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000352 "path", "argv", "ps1", "ps2", "exitfunc",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000353 "exc_type", "exc_value", "exc_traceback",
354 "last_type", "last_value", "last_traceback",
Just van Rossum52e14d62002-12-30 22:08:05 +0000355 "path_hooks", "path_importer_cache", "meta_path",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000356 NULL
357};
358
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000359static char* sys_files[] = {
360 "stdin", "__stdin__",
361 "stdout", "__stdout__",
362 "stderr", "__stderr__",
363 NULL
364};
365
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000366
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000367/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000368
Guido van Rossum3f5da241990-12-20 15:06:42 +0000369void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000370PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000371{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000372 Py_ssize_t pos, ndone;
Guido van Rossum758eec01998-01-19 21:58:26 +0000373 char *name;
374 PyObject *key, *value, *dict;
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000375 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000376 PyObject *modules = interp->modules;
377
378 if (modules == NULL)
379 return; /* Already done */
380
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000381 /* Delete some special variables first. These are common
382 places where user values hide and people complain when their
383 destructors fail. Since the modules containing them are
384 deleted *last* of all, they would come too late in the normal
385 destruction order. Sigh. */
386
387 value = PyDict_GetItemString(modules, "__builtin__");
388 if (value != NULL && PyModule_Check(value)) {
389 dict = PyModule_GetDict(value);
390 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000391 PySys_WriteStderr("# clear __builtin__._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000392 PyDict_SetItemString(dict, "_", Py_None);
393 }
394 value = PyDict_GetItemString(modules, "sys");
395 if (value != NULL && PyModule_Check(value)) {
396 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000397 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000398 dict = PyModule_GetDict(value);
399 for (p = sys_deletes; *p != NULL; p++) {
400 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000401 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000402 PyDict_SetItemString(dict, *p, Py_None);
403 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000404 for (p = sys_files; *p != NULL; p+=2) {
405 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000406 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000407 v = PyDict_GetItemString(dict, *(p+1));
408 if (v == NULL)
409 v = Py_None;
410 PyDict_SetItemString(dict, *p, v);
411 }
412 }
413
414 /* First, delete __main__ */
415 value = PyDict_GetItemString(modules, "__main__");
416 if (value != NULL && PyModule_Check(value)) {
417 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000418 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000419 _PyModule_Clear(value);
420 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000421 }
422
Guido van Rossum758eec01998-01-19 21:58:26 +0000423 /* The special treatment of __builtin__ here is because even
424 when it's not referenced as a module, its dictionary is
425 referenced by almost every module's __builtins__. Since
426 deleting a module clears its dictionary (even if there are
427 references left to it), we need to delete the __builtin__
428 module last. Likewise, we don't delete sys until the very
429 end because it is implicitly referenced (e.g. by print).
430
431 Also note that we 'delete' modules by replacing their entry
432 in the modules dict with None, rather than really deleting
433 them; this avoids a rehash of the modules dictionary and
434 also marks them as "non existent" so they won't be
435 re-imported. */
436
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000437 /* Next, repeatedly delete modules with a reference count of
Guido van Rossum758eec01998-01-19 21:58:26 +0000438 one (skipping __builtin__ and sys) and delete them */
439 do {
440 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000441 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000442 while (PyDict_Next(modules, &pos, &key, &value)) {
443 if (value->ob_refcnt != 1)
444 continue;
Guido van Rossum566373e1998-10-01 15:24:50 +0000445 if (PyString_Check(key) && PyModule_Check(value)) {
446 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000447 if (strcmp(name, "__builtin__") == 0)
448 continue;
449 if (strcmp(name, "sys") == 0)
450 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000451 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000452 PySys_WriteStderr(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000453 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000454 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000455 PyDict_SetItem(modules, key, Py_None);
456 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000457 }
458 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000459 } while (ndone > 0);
460
Guido van Rossum758eec01998-01-19 21:58:26 +0000461 /* Next, delete all modules (still skipping __builtin__ and sys) */
462 pos = 0;
463 while (PyDict_Next(modules, &pos, &key, &value)) {
Guido van Rossum566373e1998-10-01 15:24:50 +0000464 if (PyString_Check(key) && PyModule_Check(value)) {
465 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000466 if (strcmp(name, "__builtin__") == 0)
467 continue;
468 if (strcmp(name, "sys") == 0)
469 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000470 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000471 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000472 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000473 PyDict_SetItem(modules, key, Py_None);
474 }
475 }
476
477 /* Next, delete sys and __builtin__ (in that order) */
478 value = PyDict_GetItemString(modules, "sys");
479 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000480 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000481 PySys_WriteStderr("# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000482 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000483 PyDict_SetItemString(modules, "sys", Py_None);
484 }
485 value = PyDict_GetItemString(modules, "__builtin__");
486 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000487 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000488 PySys_WriteStderr("# cleanup __builtin__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000489 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000490 PyDict_SetItemString(modules, "__builtin__", Py_None);
491 }
492
493 /* Finally, clear and delete the modules directory */
494 PyDict_Clear(modules);
495 interp->modules = NULL;
496 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000497}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000498
499
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000500/* Helper for pythonrun.c -- return magic number */
501
502long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000503PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000504{
Guido van Rossum96774c12000-05-01 20:19:08 +0000505 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000506}
507
508
Guido van Rossum25ce5661997-08-02 03:10:38 +0000509/* Magic for extension modules (built-in as well as dynamically
510 loaded). To prevent initializing an extension module more than
511 once, we keep a static dictionary 'extensions' keyed by module name
512 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000513 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000514 dictionary is stored by calling _PyImport_FixupExtension()
515 immediately after the module initialization function succeeds. A
516 copy can be retrieved from there by calling
517 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000518
Guido van Rossum79f25d91997-04-29 20:08:16 +0000519PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000520_PyImport_FixupExtension(char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000521{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000522 PyObject *modules, *mod, *dict, *copy;
523 if (extensions == NULL) {
524 extensions = PyDict_New();
525 if (extensions == NULL)
526 return NULL;
527 }
528 modules = PyImport_GetModuleDict();
529 mod = PyDict_GetItemString(modules, name);
530 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000531 PyErr_Format(PyExc_SystemError,
532 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000533 return NULL;
534 }
535 dict = PyModule_GetDict(mod);
536 if (dict == NULL)
537 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000538 copy = PyDict_Copy(dict);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000539 if (copy == NULL)
540 return NULL;
541 PyDict_SetItemString(extensions, filename, copy);
542 Py_DECREF(copy);
543 return copy;
544}
545
546PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000547_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000548{
Fred Drake9cd0efc2001-10-25 21:38:59 +0000549 PyObject *dict, *mod, *mdict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000550 if (extensions == NULL)
551 return NULL;
552 dict = PyDict_GetItemString(extensions, filename);
553 if (dict == NULL)
554 return NULL;
555 mod = PyImport_AddModule(name);
556 if (mod == NULL)
557 return NULL;
558 mdict = PyModule_GetDict(mod);
559 if (mdict == NULL)
560 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000561 if (PyDict_Update(mdict, dict))
Guido van Rossum25ce5661997-08-02 03:10:38 +0000562 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000563 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000564 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Guido van Rossum25ce5661997-08-02 03:10:38 +0000565 name, filename);
566 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000567}
568
569
570/* Get the module object corresponding to a module name.
571 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000572 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000573 Because the former action is most common, THIS DOES NOT RETURN A
574 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000575
Guido van Rossum79f25d91997-04-29 20:08:16 +0000576PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000577PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000578{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000579 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000580 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000581
Guido van Rossum25ce5661997-08-02 03:10:38 +0000582 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000583 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000584 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000585 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000586 if (m == NULL)
587 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000588 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000589 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000590 return NULL;
591 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000592 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000593
594 return m;
595}
596
Tim Peters1cd70172004-08-02 03:52:12 +0000597/* Remove name from sys.modules, if it's there. */
598static void
599_RemoveModule(const char *name)
600{
601 PyObject *modules = PyImport_GetModuleDict();
602 if (PyDict_GetItemString(modules, name) == NULL)
603 return;
604 if (PyDict_DelItemString(modules, name) < 0)
605 Py_FatalError("import: deleting existing key in"
606 "sys.modules failed");
607}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000608
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000609/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000610 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
611 * removed from sys.modules, to avoid leaving damaged module objects
612 * in sys.modules. The caller may wish to restore the original
613 * module object (if any) in this case; PyImport_ReloadModule is an
614 * example.
615 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000616PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000617PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000618{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000619 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
620}
621
622PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000623PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000624{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000625 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000626 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000627
Guido van Rossum79f25d91997-04-29 20:08:16 +0000628 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000629 if (m == NULL)
630 return NULL;
Jeremy Hyltonecd91292004-01-02 23:25:32 +0000631 /* If the module is being reloaded, we get the old module back
632 and re-use its dict to exec the new code. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000633 d = PyModule_GetDict(m);
634 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
635 if (PyDict_SetItemString(d, "__builtins__",
636 PyEval_GetBuiltins()) != 0)
Tim Peters1cd70172004-08-02 03:52:12 +0000637 goto error;
Guido van Rossum6135a871995-01-09 17:53:26 +0000638 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000639 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000640 v = NULL;
641 if (pathname != NULL) {
642 v = PyString_FromString(pathname);
643 if (v == NULL)
644 PyErr_Clear();
645 }
646 if (v == NULL) {
647 v = ((PyCodeObject *)co)->co_filename;
648 Py_INCREF(v);
649 }
650 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000651 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000652 Py_DECREF(v);
653
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000654 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000655 if (v == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000656 goto error;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000657 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000658
Guido van Rossum25ce5661997-08-02 03:10:38 +0000659 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000660 PyErr_Format(PyExc_ImportError,
661 "Loaded module %.200s not found in sys.modules",
662 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000663 return NULL;
664 }
665
Guido van Rossum79f25d91997-04-29 20:08:16 +0000666 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000667
668 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000669
670 error:
671 _RemoveModule(name);
672 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000673}
674
675
676/* Given a pathname for a Python source file, fill a buffer with the
677 pathname for the corresponding compiled file. Return the pathname
678 for the compiled file, or NULL if there's no space in the buffer.
679 Doesn't set an exception. */
680
681static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000682make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000683{
Tim Petersc1731372001-08-04 08:12:36 +0000684 size_t len = strlen(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000685 if (len+2 > buflen)
686 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000687
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000688#ifdef MS_WINDOWS
Tim Petersc1731372001-08-04 08:12:36 +0000689 /* Treat .pyw as if it were .py. The case of ".pyw" must match
690 that used in _PyImport_StandardFiletab. */
691 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
692 --len; /* pretend 'w' isn't there */
693#endif
694 memcpy(buf, pathname, len);
695 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
696 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000697
698 return buf;
699}
700
701
702/* Given a pathname for a Python source file, its time of last
703 modification, and a pathname for a compiled file, check whether the
704 compiled file represents the same version of the source. If so,
705 return a FILE pointer for the compiled file, positioned just after
706 the header; if not, return NULL.
707 Doesn't set an exception. */
708
709static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000710check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000711{
712 FILE *fp;
713 long magic;
714 long pyc_mtime;
715
716 fp = fopen(cpathname, "rb");
717 if (fp == NULL)
718 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000719 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000720 if (magic != pyc_magic) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000721 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000722 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000723 fclose(fp);
724 return NULL;
725 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000726 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000727 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000728 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000729 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000730 fclose(fp);
731 return NULL;
732 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000733 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000734 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000735 return fp;
736}
737
738
739/* Read a code object from a file and check it for validity */
740
Guido van Rossum79f25d91997-04-29 20:08:16 +0000741static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000742read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000743{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000745
Tim Petersd9b9ac82001-01-28 00:27:39 +0000746 co = PyMarshal_ReadLastObjectFromFile(fp);
Armin Rigo01ab2792004-03-26 15:09:27 +0000747 if (co == NULL)
748 return NULL;
749 if (!PyCode_Check(co)) {
750 PyErr_Format(PyExc_ImportError,
751 "Non-code object in %.200s", cpathname);
752 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000753 return NULL;
754 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000755 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000756}
757
758
759/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000760 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000761
Guido van Rossum79f25d91997-04-29 20:08:16 +0000762static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000763load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000764{
765 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000766 PyCodeObject *co;
767 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000768
Guido van Rossum79f25d91997-04-29 20:08:16 +0000769 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000770 if (magic != pyc_magic) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000771 PyErr_Format(PyExc_ImportError,
772 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000773 return NULL;
774 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000775 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000776 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000777 if (co == NULL)
778 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000779 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000780 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000781 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000782 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000783 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000784
785 return m;
786}
787
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000788/* Parse a source file and return the corresponding code object */
789
Guido van Rossum79f25d91997-04-29 20:08:16 +0000790static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000791parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000792{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000793 PyCodeObject *co = NULL;
794 mod_ty mod;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000795 PyArena *arena = PyArena_New();
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000796
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000797 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, 0,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000798 NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000799 if (mod) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000800 co = PyAST_Compile(mod, pathname, NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000801 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000802 PyArena_Free(arena);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000803 return co;
804}
805
806
Guido van Rossum55a83382000-09-20 20:31:38 +0000807/* Helper to open a bytecode file for writing in exclusive mode */
808
809static FILE *
810open_exclusive(char *filename)
811{
812#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
813 /* Use O_EXCL to avoid a race condition when another process tries to
814 write the same file. When that happens, our open() call fails,
815 which is just fine (since it's only a cache).
816 XXX If the file exists and is writable but the directory is not
817 writable, the file will never be written. Oh well.
818 */
819 int fd;
820 (void) unlink(filename);
Tim Peters42c83af2000-09-29 04:03:10 +0000821 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
822#ifdef O_BINARY
823 |O_BINARY /* necessary for Windows */
824#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000825#ifdef __VMS
Martin v. Löwis18e16552006-02-15 17:27:45 +0000826 , 0666, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000827#else
Martin v. Löwis18e16552006-02-15 17:27:45 +0000828 , 0666
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000829#endif
Martin v. Löwis18e16552006-02-15 17:27:45 +0000830 );
Guido van Rossum55a83382000-09-20 20:31:38 +0000831 if (fd < 0)
832 return NULL;
833 return fdopen(fd, "wb");
834#else
835 /* Best we can do -- on Windows this can't happen anyway */
836 return fopen(filename, "wb");
837#endif
838}
839
840
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000841/* Write a compiled module to a file, placing the time of last
842 modification of its source into the header.
843 Errors are ignored, if a write error occurs an attempt is made to
844 remove the file. */
845
846static void
Martin v. Löwis18e16552006-02-15 17:27:45 +0000847write_compiled_module(PyCodeObject *co, char *cpathname, time_t mtime)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000848{
849 FILE *fp;
850
Guido van Rossum55a83382000-09-20 20:31:38 +0000851 fp = open_exclusive(cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000852 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000853 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000854 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000855 "# can't create %s\n", cpathname);
856 return;
857 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000858 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000859 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000860 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
861 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000862 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000864 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000865 /* Don't keep partial file */
866 fclose(fp);
867 (void) unlink(cpathname);
868 return;
869 }
870 /* Now write the true mtime */
871 fseek(fp, 4L, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000872 assert(mtime < LONG_MAX);
Martin v. Löwis725507b2006-03-07 12:08:51 +0000873 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000874 fflush(fp);
875 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000876 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000877 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000878}
879
880
881/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000882 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
883 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000884
Guido van Rossum79f25d91997-04-29 20:08:16 +0000885static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000886load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000887{
Fred Drake4c82b232000-06-30 16:18:57 +0000888 time_t mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000889 FILE *fpc;
890 char buf[MAXPATHLEN+1];
891 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000892 PyCodeObject *co;
893 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000894
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000895 mtime = PyOS_GetLastModificationTime(pathname, fp);
Neal Norwitz708e51a2005-10-03 04:48:15 +0000896 if (mtime == (time_t)(-1)) {
897 PyErr_Format(PyExc_RuntimeError,
898 "unable to get modification time from '%s'",
899 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +0000900 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +0000901 }
Fred Drake4c82b232000-06-30 16:18:57 +0000902#if SIZEOF_TIME_T > 4
903 /* Python's .pyc timestamp handling presumes that the timestamp fits
904 in 4 bytes. This will be fine until sometime in the year 2038,
905 when a 4-byte signed time_t will overflow.
906 */
907 if (mtime >> 32) {
908 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +0000909 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +0000910 return NULL;
911 }
912#endif
Tim Peters36515e22001-11-18 04:06:29 +0000913 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +0000914 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000915 if (cpathname != NULL &&
916 (fpc = check_compiled_module(pathname, mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000917 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000918 fclose(fpc);
919 if (co == NULL)
920 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000922 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000923 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000924 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000925 }
926 else {
927 co = parse_source_module(pathname, fp);
928 if (co == NULL)
929 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000930 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000931 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000932 name, pathname);
933 write_compiled_module(co, cpathname, mtime);
934 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000935 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000937
938 return m;
939}
940
941
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000942/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +0000943static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
944static struct filedescr *find_module(char *, char *, PyObject *,
945 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +0000946static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000947
948/* Load a package and return its module object WITH INCREMENTED
949 REFERENCE COUNT */
950
951static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000952load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000953{
Tim Peters1cd70172004-08-02 03:52:12 +0000954 PyObject *m, *d;
955 PyObject *file = NULL;
956 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000957 int err;
958 char buf[MAXPATHLEN+1];
959 FILE *fp = NULL;
960 struct filedescr *fdp;
961
962 m = PyImport_AddModule(name);
963 if (m == NULL)
964 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000965 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000966 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000967 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000968 d = PyModule_GetDict(m);
969 file = PyString_FromString(pathname);
970 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000971 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000972 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +0000973 if (path == NULL)
974 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000975 err = PyDict_SetItemString(d, "__file__", file);
976 if (err == 0)
977 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +0000978 if (err != 0)
979 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000980 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +0000981 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000982 if (fdp == NULL) {
983 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
984 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +0000985 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000986 }
987 else
988 m = NULL;
989 goto cleanup;
990 }
Just van Rossum52e14d62002-12-30 22:08:05 +0000991 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000992 if (fp != NULL)
993 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +0000994 goto cleanup;
995
996 error:
997 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000998 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000999 Py_XDECREF(path);
1000 Py_XDECREF(file);
1001 return m;
1002}
1003
1004
1005/* Helper to test for built-in module */
1006
1007static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001008is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001009{
1010 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +00001011 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1012 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1013 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001014 return -1;
1015 else
1016 return 1;
1017 }
1018 }
1019 return 0;
1020}
1021
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001022
Just van Rossum52e14d62002-12-30 22:08:05 +00001023/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1024 possibly by fetching it from the path_importer_cache dict. If it
1025 wasn't yet cached, traverse path_hooks until it a hook is found
1026 that can handle the path item. Return None if no hook could;
1027 this tells our caller it should fall back to the builtin
1028 import mechanism. Cache the result in path_importer_cache.
1029 Returns a borrowed reference. */
1030
1031static PyObject *
1032get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1033 PyObject *p)
1034{
1035 PyObject *importer;
Martin v. Löwis725507b2006-03-07 12:08:51 +00001036 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001037
1038 /* These conditions are the caller's responsibility: */
1039 assert(PyList_Check(path_hooks));
1040 assert(PyDict_Check(path_importer_cache));
1041
1042 nhooks = PyList_Size(path_hooks);
1043 if (nhooks < 0)
1044 return NULL; /* Shouldn't happen */
1045
1046 importer = PyDict_GetItem(path_importer_cache, p);
1047 if (importer != NULL)
1048 return importer;
1049
1050 /* set path_importer_cache[p] to None to avoid recursion */
1051 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1052 return NULL;
1053
1054 for (j = 0; j < nhooks; j++) {
1055 PyObject *hook = PyList_GetItem(path_hooks, j);
1056 if (hook == NULL)
1057 return NULL;
Georg Brandl684fd0c2006-05-25 19:15:31 +00001058 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
Just van Rossum52e14d62002-12-30 22:08:05 +00001059 if (importer != NULL)
1060 break;
1061
1062 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1063 return NULL;
1064 }
1065 PyErr_Clear();
1066 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001067 if (importer == NULL) {
1068 importer = PyObject_CallFunctionObjArgs(
1069 (PyObject *)&NullImporterType, p, NULL
1070 );
1071 if (importer == NULL) {
1072 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1073 PyErr_Clear();
1074 return Py_None;
1075 }
1076 }
1077 }
1078 if (importer != NULL) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001079 int err = PyDict_SetItem(path_importer_cache, p, importer);
1080 Py_DECREF(importer);
1081 if (err != 0)
1082 return NULL;
1083 }
1084 return importer;
1085}
1086
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001087/* Search the path (default sys.path) for a module. Return the
1088 corresponding filedescr struct, and (via return arguments) the
1089 pathname and an open file. Return NULL if the module is not found. */
1090
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001091#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001092extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001093 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001094#endif
1095
Martin v. Löwis18e16552006-02-15 17:27:45 +00001096static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001097static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001098static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001099
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001100static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001101find_module(char *fullname, char *subname, PyObject *path, char *buf,
1102 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001103{
Martin v. Löwis725507b2006-03-07 12:08:51 +00001104 Py_ssize_t i, npath;
Fred Drake4c82b232000-06-30 16:18:57 +00001105 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001106 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001107 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001108 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001109 PyObject *path_hooks, *path_importer_cache;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001110#ifndef RISCOS
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001111 struct stat statbuf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001112#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001113 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1114 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1115 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001116 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001117#if defined(PYOS_OS2)
1118 size_t saved_len;
1119 size_t saved_namelen;
1120 char *saved_buf = NULL;
1121#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001122 if (p_loader != NULL)
1123 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001124
Just van Rossum52e14d62002-12-30 22:08:05 +00001125 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001126 PyErr_SetString(PyExc_OverflowError,
1127 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001128 return NULL;
1129 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001130 strcpy(name, subname);
1131
1132 /* sys.meta_path import hook */
1133 if (p_loader != NULL) {
1134 PyObject *meta_path;
1135
1136 meta_path = PySys_GetObject("meta_path");
1137 if (meta_path == NULL || !PyList_Check(meta_path)) {
1138 PyErr_SetString(PyExc_ImportError,
1139 "sys.meta_path must be a list of "
1140 "import hooks");
1141 return NULL;
1142 }
1143 Py_INCREF(meta_path); /* zap guard */
1144 npath = PyList_Size(meta_path);
1145 for (i = 0; i < npath; i++) {
1146 PyObject *loader;
1147 PyObject *hook = PyList_GetItem(meta_path, i);
1148 loader = PyObject_CallMethod(hook, "find_module",
1149 "sO", fullname,
1150 path != NULL ?
1151 path : Py_None);
1152 if (loader == NULL) {
1153 Py_DECREF(meta_path);
1154 return NULL; /* true error */
1155 }
1156 if (loader != Py_None) {
1157 /* a loader was found */
1158 *p_loader = loader;
1159 Py_DECREF(meta_path);
1160 return &importhookdescr;
1161 }
1162 Py_DECREF(loader);
1163 }
1164 Py_DECREF(meta_path);
1165 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001166
1167 if (path != NULL && PyString_Check(path)) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001168 /* The only type of submodule allowed inside a "frozen"
1169 package are other frozen modules or packages. */
Guido van Rossum0506a431998-08-11 15:07:39 +00001170 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1171 PyErr_SetString(PyExc_ImportError,
1172 "full frozen module name too long");
1173 return NULL;
1174 }
1175 strcpy(buf, PyString_AsString(path));
1176 strcat(buf, ".");
1177 strcat(buf, name);
1178 strcpy(name, buf);
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001179 if (find_frozen(name) != NULL) {
1180 strcpy(buf, name);
1181 return &fd_frozen;
1182 }
1183 PyErr_Format(PyExc_ImportError,
1184 "No frozen submodule named %.200s", name);
1185 return NULL;
Guido van Rossum0506a431998-08-11 15:07:39 +00001186 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001187 if (path == NULL) {
1188 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001189 strcpy(buf, name);
1190 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001191 }
Greg Ward201baee2001-10-04 14:52:06 +00001192 if ((find_frozen(name)) != NULL) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001193 strcpy(buf, name);
1194 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001195 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001196
Guido van Rossumac279101996-08-22 23:10:58 +00001197#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001198 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1199 if (fp != NULL) {
1200 *p_fp = fp;
1201 return fdp;
1202 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001203#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001204 path = PySys_GetObject("path");
1205 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001206 if (path == NULL || !PyList_Check(path)) {
1207 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001208 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001209 return NULL;
1210 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001211
1212 path_hooks = PySys_GetObject("path_hooks");
1213 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1214 PyErr_SetString(PyExc_ImportError,
1215 "sys.path_hooks must be a list of "
1216 "import hooks");
1217 return NULL;
1218 }
1219 path_importer_cache = PySys_GetObject("path_importer_cache");
1220 if (path_importer_cache == NULL ||
1221 !PyDict_Check(path_importer_cache)) {
1222 PyErr_SetString(PyExc_ImportError,
1223 "sys.path_importer_cache must be a dict");
1224 return NULL;
1225 }
1226
Guido van Rossum79f25d91997-04-29 20:08:16 +00001227 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001228 namelen = strlen(name);
1229 for (i = 0; i < npath; i++) {
Walter Dörwald3430d702002-06-17 10:43:59 +00001230 PyObject *copy = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001231 PyObject *v = PyList_GetItem(path, i);
Walter Dörwald3430d702002-06-17 10:43:59 +00001232#ifdef Py_USING_UNICODE
1233 if (PyUnicode_Check(v)) {
1234 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1235 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1236 if (copy == NULL)
1237 return NULL;
1238 v = copy;
1239 }
1240 else
1241#endif
Guido van Rossum79f25d91997-04-29 20:08:16 +00001242 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001243 continue;
Neal Norwitz2aa9a5d2006-03-20 01:53:23 +00001244 len = PyString_GET_SIZE(v);
Walter Dörwald3430d702002-06-17 10:43:59 +00001245 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1246 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001247 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001248 }
Neal Norwitz2aa9a5d2006-03-20 01:53:23 +00001249 strcpy(buf, PyString_AS_STRING(v));
Walter Dörwald3430d702002-06-17 10:43:59 +00001250 if (strlen(buf) != len) {
1251 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001252 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001253 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001254
1255 /* sys.path_hooks import hook */
1256 if (p_loader != NULL) {
1257 PyObject *importer;
1258
1259 importer = get_path_importer(path_importer_cache,
1260 path_hooks, v);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001261 if (importer == NULL) {
1262 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001263 return NULL;
Neal Norwitza4df11d2006-07-06 04:28:59 +00001264 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001265 /* Note: importer is a borrowed reference */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001266 if (importer != Py_None) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001267 PyObject *loader;
1268 loader = PyObject_CallMethod(importer,
1269 "find_module",
1270 "s", fullname);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001271 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001272 if (loader == NULL)
1273 return NULL; /* error */
1274 if (loader != Py_None) {
1275 /* a loader was found */
1276 *p_loader = loader;
1277 return &importhookdescr;
1278 }
1279 Py_DECREF(loader);
Georg Brandlf4ef1162006-05-26 18:03:31 +00001280 continue;
Just van Rossum52e14d62002-12-30 22:08:05 +00001281 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001282 }
Georg Brandlf4ef1162006-05-26 18:03:31 +00001283 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001284
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001285 if (len > 0 && buf[len-1] != SEP
1286#ifdef ALTSEP
1287 && buf[len-1] != ALTSEP
1288#endif
1289 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001290 buf[len++] = SEP;
Guido van Rossum215c3402000-11-13 17:26:32 +00001291 strcpy(buf+len, name);
1292 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001293
1294 /* Check for package import (buf holds a directory name,
1295 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001296#ifdef HAVE_STAT
Walter Dörwald3430d702002-06-17 10:43:59 +00001297 if (stat(buf, &statbuf) == 0 && /* it exists */
1298 S_ISDIR(statbuf.st_mode) && /* it's a directory */
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001299 case_ok(buf, len, namelen, name)) { /* case matches */
1300 if (find_init_module(buf)) { /* and has __init__.py */
1301 Py_XDECREF(copy);
1302 return &fd_package;
1303 }
1304 else {
1305 char warnstr[MAXPATHLEN+80];
1306 sprintf(warnstr, "Not importing directory "
1307 "'%.*s': missing __init__.py",
1308 MAXPATHLEN, buf);
1309 if (PyErr_Warn(PyExc_ImportWarning,
1310 warnstr)) {
1311 Py_XDECREF(copy);
1312 return NULL;
1313 }
1314 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001315 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001316#else
1317 /* XXX How are you going to test for directories? */
Guido van Rossum48a680c2001-03-02 06:34:14 +00001318#ifdef RISCOS
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001319 if (isdir(buf) &&
Walter Dörwald3430d702002-06-17 10:43:59 +00001320 case_ok(buf, len, namelen, name)) {
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001321 if (find_init_module(buf)) {
1322 Py_XDECREF(copy);
1323 return &fd_package;
1324 }
1325 else {
1326 char warnstr[MAXPATHLEN+80];
1327 sprintf(warnstr, "Not importing directory "
1328 "'%.*s': missing __init__.py",
1329 MAXPATHLEN, buf);
1330 if (PyErr_Warn(PyExc_ImportWarning,
1331 warnstr)) {
1332 Py_XDECREF(copy);
1333 return NULL;
1334 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001335 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001336#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001337#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001338#if defined(PYOS_OS2)
1339 /* take a snapshot of the module spec for restoration
1340 * after the 8 character DLL hackery
1341 */
1342 saved_buf = strdup(buf);
1343 saved_len = len;
1344 saved_namelen = namelen;
1345#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001346 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001347#if defined(PYOS_OS2)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001348 /* OS/2 limits DLLs to 8 character names (w/o
1349 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001350 * so if the name is longer than that and its a
1351 * dynamically loaded module we're going to try,
1352 * truncate the name before trying
1353 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001354 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001355 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001356 const struct filedescr *scan;
1357 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001358 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001359 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001360 break;
1361 else
1362 scan++;
1363 }
1364 if (scan->suffix != NULL) {
1365 /* yes, so truncate the name */
1366 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001367 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001368 buf[len] = '\0';
1369 }
1370 }
1371#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001372 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001373 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001374 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001375 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001376 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001377 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001378 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001379 if (fp != NULL) {
1380 if (case_ok(buf, len, namelen, name))
1381 break;
1382 else { /* continue search */
1383 fclose(fp);
1384 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001385 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001386 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001387#if defined(PYOS_OS2)
1388 /* restore the saved snapshot */
1389 strcpy(buf, saved_buf);
1390 len = saved_len;
1391 namelen = saved_namelen;
1392#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001393 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001394#if defined(PYOS_OS2)
1395 /* don't need/want the module name snapshot anymore */
1396 if (saved_buf)
1397 {
1398 free(saved_buf);
1399 saved_buf = NULL;
1400 }
1401#endif
Walter Dörwald3430d702002-06-17 10:43:59 +00001402 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001403 if (fp != NULL)
1404 break;
1405 }
1406 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001407 PyErr_Format(PyExc_ImportError,
1408 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001409 return NULL;
1410 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001411 *p_fp = fp;
1412 return fdp;
1413}
1414
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001415/* Helpers for main.c
1416 * Find the source file corresponding to a named module
1417 */
1418struct filedescr *
1419_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1420 size_t buflen, FILE **p_fp, PyObject **p_loader)
1421{
1422 return find_module((char *) name, (char *) name, path,
1423 buf, buflen, p_fp, p_loader);
1424}
1425
1426PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1427{
1428 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1429}
1430
Martin v. Löwis18e16552006-02-15 17:27:45 +00001431/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001432 * The arguments here are tricky, best shown by example:
1433 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1434 * ^ ^ ^ ^
1435 * |--------------------- buf ---------------------|
1436 * |------------------- len ------------------|
1437 * |------ name -------|
1438 * |----- namelen -----|
1439 * buf is the full path, but len only counts up to (& exclusive of) the
1440 * extension. name is the module name, also exclusive of extension.
1441 *
1442 * We've already done a successful stat() or fopen() on buf, so know that
1443 * there's some match, possibly case-insensitive.
1444 *
Tim Peters50d8d372001-02-28 05:34:27 +00001445 * case_ok() is to return 1 if there's a case-sensitive match for
1446 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1447 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001448 *
Tim Peters50d8d372001-02-28 05:34:27 +00001449 * case_ok() is used to implement case-sensitive import semantics even
1450 * on platforms with case-insensitive filesystems. It's trivial to implement
1451 * for case-sensitive filesystems. It's pretty much a cross-platform
1452 * nightmare for systems with case-insensitive filesystems.
1453 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001454
Tim Peters50d8d372001-02-28 05:34:27 +00001455/* First we may need a pile of platform-specific header files; the sequence
1456 * of #if's here should match the sequence in the body of case_ok().
1457 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001458#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001459#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001460
Tim Peters50d8d372001-02-28 05:34:27 +00001461#elif defined(DJGPP)
1462#include <dir.h>
1463
Jason Tishler7961aa62005-05-20 00:56:54 +00001464#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001465#include <sys/types.h>
1466#include <dirent.h>
1467
Andrew MacIntyred9400542002-02-26 11:41:34 +00001468#elif defined(PYOS_OS2)
1469#define INCL_DOS
1470#define INCL_DOSERRORS
1471#define INCL_NOPMAPI
1472#include <os2.h>
1473
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001474#elif defined(RISCOS)
1475#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001476#endif
1477
Guido van Rossum0980bd91998-02-13 17:18:36 +00001478static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001479case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001480{
Tim Peters50d8d372001-02-28 05:34:27 +00001481/* Pick a platform-specific implementation; the sequence of #if's here should
1482 * match the sequence just above.
1483 */
1484
Jason Tishler7961aa62005-05-20 00:56:54 +00001485/* MS_WINDOWS */
1486#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001487 WIN32_FIND_DATA data;
1488 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001489
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001490 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001491 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001492
Guido van Rossum0980bd91998-02-13 17:18:36 +00001493 h = FindFirstFile(buf, &data);
1494 if (h == INVALID_HANDLE_VALUE) {
1495 PyErr_Format(PyExc_NameError,
1496 "Can't find file for module %.100s\n(filename %.300s)",
1497 name, buf);
1498 return 0;
1499 }
1500 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001501 return strncmp(data.cFileName, name, namelen) == 0;
1502
1503/* DJGPP */
1504#elif defined(DJGPP)
1505 struct ffblk ffblk;
1506 int done;
1507
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001508 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001509 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001510
1511 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1512 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001513 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001514 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001515 name, buf);
1516 return 0;
1517 }
Tim Peters50d8d372001-02-28 05:34:27 +00001518 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001519
Jason Tishler7961aa62005-05-20 00:56:54 +00001520/* new-fangled macintosh (macosx) or Cygwin */
1521#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001522 DIR *dirp;
1523 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001524 char dirname[MAXPATHLEN + 1];
1525 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001526
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001527 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001528 return 1;
1529
Tim Petersd1e87a82001-03-01 18:12:00 +00001530 /* Copy the dir component into dirname; substitute "." if empty */
1531 if (dirlen <= 0) {
1532 dirname[0] = '.';
1533 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001534 }
1535 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001536 assert(dirlen <= MAXPATHLEN);
1537 memcpy(dirname, buf, dirlen);
1538 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001539 }
1540 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001541 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001542 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001543 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001544 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001545 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001546#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001547 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001548#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001549 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001550#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001551 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001552 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001553 (void)closedir(dirp);
1554 return 1; /* Found */
1555 }
1556 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001557 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001558 }
Tim Peters430f5d42001-03-01 01:30:56 +00001559 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001560
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001561/* RISC OS */
1562#elif defined(RISCOS)
1563 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1564 char buf2[MAXPATHLEN+2];
1565 char *nameWithExt = buf+len-namelen;
1566 int canonlen;
1567 os_error *e;
1568
1569 if (Py_GETENV("PYTHONCASEOK") != NULL)
1570 return 1;
1571
1572 /* workaround:
1573 append wildcard, otherwise case of filename wouldn't be touched */
1574 strcpy(buf2, buf);
1575 strcat(buf2, "*");
1576
1577 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1578 canonlen = MAXPATHLEN+1-canonlen;
1579 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1580 return 0;
1581 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1582 return 1; /* match */
1583
1584 return 0;
1585
Andrew MacIntyred9400542002-02-26 11:41:34 +00001586/* OS/2 */
1587#elif defined(PYOS_OS2)
1588 HDIR hdir = 1;
1589 ULONG srchcnt = 1;
1590 FILEFINDBUF3 ffbuf;
1591 APIRET rc;
1592
1593 if (getenv("PYTHONCASEOK") != NULL)
1594 return 1;
1595
1596 rc = DosFindFirst(buf,
1597 &hdir,
1598 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1599 &ffbuf, sizeof(ffbuf),
1600 &srchcnt,
1601 FIL_STANDARD);
1602 if (rc != NO_ERROR)
1603 return 0;
1604 return strncmp(ffbuf.achName, name, namelen) == 0;
1605
Tim Peters50d8d372001-02-28 05:34:27 +00001606/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1607#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001608 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001609
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001610#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001611}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001612
Guido van Rossum0980bd91998-02-13 17:18:36 +00001613
Guido van Rossum197346f1997-10-31 18:38:52 +00001614#ifdef HAVE_STAT
1615/* Helper to look for __init__.py or __init__.py[co] in potential package */
1616static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001617find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001618{
Tim Peters0f9431f2001-07-05 03:47:53 +00001619 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001620 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001621 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001622 struct stat statbuf;
1623
Tim Peters0f9431f2001-07-05 03:47:53 +00001624/* For calling case_ok(buf, len, namelen, name):
1625 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1626 * ^ ^ ^ ^
1627 * |--------------------- buf ---------------------|
1628 * |------------------- len ------------------|
1629 * |------ name -------|
1630 * |----- namelen -----|
1631 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001632 if (save_len + 13 >= MAXPATHLEN)
1633 return 0;
1634 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001635 pname = buf + i;
1636 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001637 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001638 if (case_ok(buf,
1639 save_len + 9, /* len("/__init__") */
1640 8, /* len("__init__") */
1641 pname)) {
1642 buf[save_len] = '\0';
1643 return 1;
1644 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001645 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001646 i += strlen(pname);
1647 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001648 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001649 if (case_ok(buf,
1650 save_len + 9, /* len("/__init__") */
1651 8, /* len("__init__") */
1652 pname)) {
1653 buf[save_len] = '\0';
1654 return 1;
1655 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001656 }
1657 buf[save_len] = '\0';
1658 return 0;
1659}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001660
1661#else
1662
1663#ifdef RISCOS
1664static int
1665find_init_module(buf)
1666 char *buf;
1667{
1668 int save_len = strlen(buf);
1669 int i = save_len;
1670
1671 if (save_len + 13 >= MAXPATHLEN)
1672 return 0;
1673 buf[i++] = SEP;
1674 strcpy(buf+i, "__init__/py");
1675 if (isfile(buf)) {
1676 buf[save_len] = '\0';
1677 return 1;
1678 }
1679
1680 if (Py_OptimizeFlag)
1681 strcpy(buf+i, "o");
1682 else
1683 strcpy(buf+i, "c");
1684 if (isfile(buf)) {
1685 buf[save_len] = '\0';
1686 return 1;
1687 }
1688 buf[save_len] = '\0';
1689 return 0;
1690}
1691#endif /*RISCOS*/
1692
Guido van Rossum197346f1997-10-31 18:38:52 +00001693#endif /* HAVE_STAT */
1694
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001695
Tim Petersdbd9ba62000-07-09 03:09:57 +00001696static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001697
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001698/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001699 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001700
Guido van Rossum79f25d91997-04-29 20:08:16 +00001701static PyObject *
Just van Rossum52e14d62002-12-30 22:08:05 +00001702load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001703{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001704 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001705 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001706 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001707
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001708 /* First check that there's an open file (if we need one) */
1709 switch (type) {
1710 case PY_SOURCE:
1711 case PY_COMPILED:
1712 if (fp == NULL) {
1713 PyErr_Format(PyExc_ValueError,
1714 "file object required for import (type code %d)",
1715 type);
1716 return NULL;
1717 }
1718 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001719
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001720 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001721
1722 case PY_SOURCE:
1723 m = load_source_module(name, buf, fp);
1724 break;
1725
1726 case PY_COMPILED:
1727 m = load_compiled_module(name, buf, fp);
1728 break;
1729
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001730#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001731 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001732 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001733 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001734#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001735
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001736 case PKG_DIRECTORY:
1737 m = load_package(name, buf);
1738 break;
1739
1740 case C_BUILTIN:
1741 case PY_FROZEN:
Guido van Rossuma5568d31998-03-05 03:45:08 +00001742 if (buf != NULL && buf[0] != '\0')
1743 name = buf;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001744 if (type == C_BUILTIN)
1745 err = init_builtin(name);
1746 else
1747 err = PyImport_ImportFrozenModule(name);
1748 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001749 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001750 if (err == 0) {
1751 PyErr_Format(PyExc_ImportError,
1752 "Purported %s module %.200s not found",
1753 type == C_BUILTIN ?
1754 "builtin" : "frozen",
1755 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001756 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001757 }
1758 modules = PyImport_GetModuleDict();
1759 m = PyDict_GetItemString(modules, name);
1760 if (m == NULL) {
1761 PyErr_Format(
1762 PyExc_ImportError,
1763 "%s module %.200s not properly initialized",
1764 type == C_BUILTIN ?
1765 "builtin" : "frozen",
1766 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001767 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001768 }
1769 Py_INCREF(m);
1770 break;
1771
Just van Rossum52e14d62002-12-30 22:08:05 +00001772 case IMP_HOOK: {
1773 if (loader == NULL) {
1774 PyErr_SetString(PyExc_ImportError,
1775 "import hook without loader");
1776 return NULL;
1777 }
1778 m = PyObject_CallMethod(loader, "load_module", "s", name);
1779 break;
1780 }
1781
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001782 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001783 PyErr_Format(PyExc_ImportError,
1784 "Don't know how to import %.200s (type code %d)",
1785 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001786 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001787
1788 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001789
1790 return m;
1791}
1792
1793
1794/* Initialize a built-in module.
1795 Return 1 for succes, 0 if the module is not found, and -1 with
1796 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001797
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001798static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001799init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001800{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001801 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001802
Greg Ward201baee2001-10-04 14:52:06 +00001803 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001804 return 1;
1805
Guido van Rossum771c6c81997-10-31 18:37:24 +00001806 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001807 if (strcmp(name, p->name) == 0) {
1808 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001809 PyErr_Format(PyExc_ImportError,
1810 "Cannot re-init internal module %.200s",
1811 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001812 return -1;
1813 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001814 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001815 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001816 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001817 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001818 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001819 if (_PyImport_FixupExtension(name, name) == NULL)
1820 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001821 return 1;
1822 }
1823 }
1824 return 0;
1825}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001826
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001827
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001828/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001829
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001830static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001831find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001832{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001833 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001834
Guido van Rossum79f25d91997-04-29 20:08:16 +00001835 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001836 if (p->name == NULL)
1837 return NULL;
1838 if (strcmp(p->name, name) == 0)
1839 break;
1840 }
1841 return p;
1842}
1843
Guido van Rossum79f25d91997-04-29 20:08:16 +00001844static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001845get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001846{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001847 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001848 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001849
1850 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001851 PyErr_Format(PyExc_ImportError,
1852 "No such frozen object named %.200s",
1853 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001854 return NULL;
1855 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001856 if (p->code == NULL) {
1857 PyErr_Format(PyExc_ImportError,
1858 "Excluded frozen object named %.200s",
1859 name);
1860 return NULL;
1861 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001862 size = p->size;
1863 if (size < 0)
1864 size = -size;
1865 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001866}
1867
1868/* Initialize a frozen module.
1869 Return 1 for succes, 0 if the module is not found, and -1 with
1870 an exception set if the initialization failed.
1871 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001872
1873int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001874PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001875{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001876 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001877 PyObject *co;
1878 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001879 int ispackage;
1880 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001881
1882 if (p == NULL)
1883 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001884 if (p->code == NULL) {
1885 PyErr_Format(PyExc_ImportError,
1886 "Excluded frozen object named %.200s",
1887 name);
1888 return -1;
1889 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001890 size = p->size;
1891 ispackage = (size < 0);
1892 if (ispackage)
1893 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001894 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001895 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001896 name, ispackage ? " package" : "");
1897 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001898 if (co == NULL)
1899 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001900 if (!PyCode_Check(co)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001901 PyErr_Format(PyExc_TypeError,
1902 "frozen object %.200s is not a code object",
1903 name);
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001904 goto err_return;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001905 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001906 if (ispackage) {
1907 /* Set __path__ to the package name */
1908 PyObject *d, *s;
1909 int err;
1910 m = PyImport_AddModule(name);
1911 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001912 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001913 d = PyModule_GetDict(m);
1914 s = PyString_InternFromString(name);
1915 if (s == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001916 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001917 err = PyDict_SetItemString(d, "__path__", s);
1918 Py_DECREF(s);
1919 if (err != 0)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001920 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001921 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001922 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001923 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001924 goto err_return;
1925 Py_DECREF(co);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001926 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001927 return 1;
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001928err_return:
1929 Py_DECREF(co);
1930 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001931}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001932
1933
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001934/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001935 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001936
Guido van Rossum79f25d91997-04-29 20:08:16 +00001937PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001938PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001939{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001940 PyObject *pname;
1941 PyObject *result;
1942
1943 pname = PyString_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00001944 if (pname == NULL)
1945 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001946 result = PyImport_Import(pname);
1947 Py_DECREF(pname);
1948 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001949}
1950
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001951/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001952static PyObject *get_parent(PyObject *globals, char *buf,
1953 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001954static PyObject *load_next(PyObject *mod, PyObject *altmod,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001955 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001956static int mark_miss(char *name);
1957static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001958 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001959static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001960
1961/* The Magnum Opus of dotted-name import :-) */
1962
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001963static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001964import_module_level(char *name, PyObject *globals, PyObject *locals,
1965 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001966{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001967 char buf[MAXPATHLEN+1];
Martin v. Löwis18e16552006-02-15 17:27:45 +00001968 Py_ssize_t buflen = 0;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001969 PyObject *parent, *head, *next, *tail;
1970
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001971 parent = get_parent(globals, buf, &buflen, level);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001972 if (parent == NULL)
1973 return NULL;
1974
1975 head = load_next(parent, Py_None, &name, buf, &buflen);
1976 if (head == NULL)
1977 return NULL;
1978
1979 tail = head;
1980 Py_INCREF(tail);
1981 while (name) {
1982 next = load_next(tail, tail, &name, buf, &buflen);
1983 Py_DECREF(tail);
1984 if (next == NULL) {
1985 Py_DECREF(head);
1986 return NULL;
1987 }
1988 tail = next;
1989 }
Thomas Wouters8ddab272006-04-04 16:17:02 +00001990 if (tail == Py_None) {
1991 /* If tail is Py_None, both get_parent and load_next found
1992 an empty module name: someone called __import__("") or
1993 doctored faulty bytecode */
Thomas Wouters4bdaa272006-04-05 13:39:37 +00001994 Py_DECREF(tail);
1995 Py_DECREF(head);
Thomas Wouters8ddab272006-04-04 16:17:02 +00001996 PyErr_SetString(PyExc_ValueError,
1997 "Empty module name");
1998 return NULL;
1999 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002000
2001 if (fromlist != NULL) {
2002 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2003 fromlist = NULL;
2004 }
2005
2006 if (fromlist == NULL) {
2007 Py_DECREF(tail);
2008 return head;
2009 }
2010
2011 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002012 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002013 Py_DECREF(tail);
2014 return NULL;
2015 }
2016
2017 return tail;
2018}
2019
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002020/* For DLL compatibility */
2021#undef PyImport_ImportModuleEx
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002022PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002023PyImport_ImportModuleEx(char *name, PyObject *globals, PyObject *locals,
2024 PyObject *fromlist)
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002025{
2026 PyObject *result;
2027 lock_import();
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002028 result = import_module_level(name, globals, locals, fromlist, -1);
2029 if (unlock_import() < 0) {
2030 Py_XDECREF(result);
2031 PyErr_SetString(PyExc_RuntimeError,
2032 "not holding the import lock");
2033 return NULL;
2034 }
2035 return result;
2036}
2037#define PyImport_ImportModuleEx(n, g, l, f) \
2038 PyImport_ImportModuleLevel(n, g, l, f, -1);
2039
2040PyObject *
2041PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2042 PyObject *fromlist, int level)
2043{
2044 PyObject *result;
2045 lock_import();
2046 result = import_module_level(name, globals, locals, fromlist, level);
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002047 if (unlock_import() < 0) {
2048 Py_XDECREF(result);
2049 PyErr_SetString(PyExc_RuntimeError,
2050 "not holding the import lock");
2051 return NULL;
2052 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002053 return result;
2054}
2055
Fred Drake87590902004-05-28 20:21:36 +00002056/* Return the package that an import is being performed in. If globals comes
2057 from the module foo.bar.bat (not itself a package), this returns the
2058 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Georg Brandl5f6861d2006-05-28 21:57:35 +00002059 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002060
2061 The *name* of the returned package is returned in buf, with the length of
2062 the name in *p_buflen.
2063
2064 If globals doesn't come from a package or a module in a package, or a
2065 corresponding entry is not found in sys.modules, Py_None is returned.
2066*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002067static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002068get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002069{
2070 static PyObject *namestr = NULL;
2071 static PyObject *pathstr = NULL;
2072 PyObject *modname, *modpath, *modules, *parent;
2073
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002074 if (globals == NULL || !PyDict_Check(globals) || !level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002075 return Py_None;
2076
2077 if (namestr == NULL) {
2078 namestr = PyString_InternFromString("__name__");
2079 if (namestr == NULL)
2080 return NULL;
2081 }
2082 if (pathstr == NULL) {
2083 pathstr = PyString_InternFromString("__path__");
2084 if (pathstr == NULL)
2085 return NULL;
2086 }
2087
2088 *buf = '\0';
2089 *p_buflen = 0;
2090 modname = PyDict_GetItem(globals, namestr);
2091 if (modname == NULL || !PyString_Check(modname))
2092 return Py_None;
2093
2094 modpath = PyDict_GetItem(globals, pathstr);
2095 if (modpath != NULL) {
Martin v. Löwis725507b2006-03-07 12:08:51 +00002096 Py_ssize_t len = PyString_GET_SIZE(modname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002097 if (len > MAXPATHLEN) {
2098 PyErr_SetString(PyExc_ValueError,
2099 "Module name too long");
2100 return NULL;
2101 }
2102 strcpy(buf, PyString_AS_STRING(modname));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002103 }
2104 else {
2105 char *start = PyString_AS_STRING(modname);
2106 char *lastdot = strrchr(start, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002107 size_t len;
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002108 if (lastdot == NULL && level > 0) {
2109 PyErr_SetString(PyExc_ValueError,
2110 "Relative importpath too deep");
2111 return NULL;
2112 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002113 if (lastdot == NULL)
2114 return Py_None;
2115 len = lastdot - start;
2116 if (len >= MAXPATHLEN) {
2117 PyErr_SetString(PyExc_ValueError,
2118 "Module name too long");
2119 return NULL;
2120 }
2121 strncpy(buf, start, len);
2122 buf[len] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002123 }
2124
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002125 while (--level > 0) {
2126 char *dot = strrchr(buf, '.');
2127 if (dot == NULL) {
2128 PyErr_SetString(PyExc_ValueError,
2129 "Relative importpath too deep");
2130 return NULL;
2131 }
2132 *dot = '\0';
2133 }
2134 *p_buflen = strlen(buf);
2135
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002136 modules = PyImport_GetModuleDict();
2137 parent = PyDict_GetItemString(modules, buf);
2138 if (parent == NULL)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002139 PyErr_Format(PyExc_SystemError,
2140 "Parent module '%.200s' not loaded", buf);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002141 return parent;
2142 /* We expect, but can't guarantee, if parent != None, that:
2143 - parent.__name__ == buf
2144 - parent.__dict__ is globals
2145 If this is violated... Who cares? */
2146}
2147
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002148/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002149static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002150load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002151 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002152{
2153 char *name = *p_name;
2154 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002155 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002156 char *p;
2157 PyObject *result;
2158
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002159 if (strlen(name) == 0) {
Thomas Wouters8ddab272006-04-04 16:17:02 +00002160 /* completely empty module name should only happen in
2161 'from . import' (or '__import__("")')*/
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002162 Py_INCREF(mod);
2163 *p_name = NULL;
2164 return mod;
2165 }
2166
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002167 if (dot == NULL) {
2168 *p_name = NULL;
2169 len = strlen(name);
2170 }
2171 else {
2172 *p_name = dot+1;
2173 len = dot-name;
2174 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002175 if (len == 0) {
2176 PyErr_SetString(PyExc_ValueError,
2177 "Empty module name");
2178 return NULL;
2179 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002180
2181 p = buf + *p_buflen;
2182 if (p != buf)
2183 *p++ = '.';
2184 if (p+len-buf >= MAXPATHLEN) {
2185 PyErr_SetString(PyExc_ValueError,
2186 "Module name too long");
2187 return NULL;
2188 }
2189 strncpy(p, name, len);
2190 p[len] = '\0';
2191 *p_buflen = p+len-buf;
2192
2193 result = import_submodule(mod, p, buf);
2194 if (result == Py_None && altmod != mod) {
2195 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002196 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002197 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002198 if (result != NULL && result != Py_None) {
2199 if (mark_miss(buf) != 0) {
2200 Py_DECREF(result);
2201 return NULL;
2202 }
2203 strncpy(buf, name, len);
2204 buf[len] = '\0';
2205 *p_buflen = len;
2206 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002207 }
2208 if (result == NULL)
2209 return NULL;
2210
2211 if (result == Py_None) {
2212 Py_DECREF(result);
2213 PyErr_Format(PyExc_ImportError,
2214 "No module named %.200s", name);
2215 return NULL;
2216 }
2217
2218 return result;
2219}
2220
2221static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002222mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002223{
2224 PyObject *modules = PyImport_GetModuleDict();
2225 return PyDict_SetItemString(modules, name, Py_None);
2226}
2227
2228static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002229ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002230 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002231{
2232 int i;
2233
2234 if (!PyObject_HasAttrString(mod, "__path__"))
2235 return 1;
2236
2237 for (i = 0; ; i++) {
2238 PyObject *item = PySequence_GetItem(fromlist, i);
2239 int hasit;
2240 if (item == NULL) {
2241 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2242 PyErr_Clear();
2243 return 1;
2244 }
2245 return 0;
2246 }
2247 if (!PyString_Check(item)) {
2248 PyErr_SetString(PyExc_TypeError,
2249 "Item in ``from list'' not a string");
2250 Py_DECREF(item);
2251 return 0;
2252 }
2253 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002254 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002255 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002256 /* See if the package defines __all__ */
2257 if (recursive)
2258 continue; /* Avoid endless recursion */
2259 all = PyObject_GetAttrString(mod, "__all__");
2260 if (all == NULL)
2261 PyErr_Clear();
2262 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002263 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002264 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002265 if (!ret)
2266 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002267 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002268 continue;
2269 }
2270 hasit = PyObject_HasAttr(mod, item);
2271 if (!hasit) {
2272 char *subname = PyString_AS_STRING(item);
2273 PyObject *submod;
2274 char *p;
2275 if (buflen + strlen(subname) >= MAXPATHLEN) {
2276 PyErr_SetString(PyExc_ValueError,
2277 "Module name too long");
2278 Py_DECREF(item);
2279 return 0;
2280 }
2281 p = buf + buflen;
2282 *p++ = '.';
2283 strcpy(p, subname);
2284 submod = import_submodule(mod, subname, buf);
2285 Py_XDECREF(submod);
2286 if (submod == NULL) {
2287 Py_DECREF(item);
2288 return 0;
2289 }
2290 }
2291 Py_DECREF(item);
2292 }
2293
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002294 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002295}
2296
Neil Schemenauer00b09662003-06-16 21:03:07 +00002297static int
2298add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2299 PyObject *modules)
2300{
2301 if (mod == Py_None)
2302 return 1;
2303 /* Irrespective of the success of this load, make a
2304 reference to it in the parent package module. A copy gets
2305 saved in the modules dictionary under the full name, so get a
2306 reference from there, if need be. (The exception is when the
2307 load failed with a SyntaxError -- then there's no trace in
2308 sys.modules. In that case, of course, do nothing extra.) */
2309 if (submod == NULL) {
2310 submod = PyDict_GetItemString(modules, fullname);
2311 if (submod == NULL)
2312 return 1;
2313 }
2314 if (PyModule_Check(mod)) {
2315 /* We can't use setattr here since it can give a
2316 * spurious warning if the submodule name shadows a
2317 * builtin name */
2318 PyObject *dict = PyModule_GetDict(mod);
2319 if (!dict)
2320 return 0;
2321 if (PyDict_SetItemString(dict, subname, submod) < 0)
2322 return 0;
2323 }
2324 else {
2325 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2326 return 0;
2327 }
2328 return 1;
2329}
2330
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002331static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002332import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002333{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002334 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002335 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002336
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002337 /* Require:
2338 if mod == None: subname == fullname
2339 else: mod.__name__ + "." + subname == fullname
2340 */
2341
Tim Peters50d8d372001-02-28 05:34:27 +00002342 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002343 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002344 }
2345 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002346 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002347 char buf[MAXPATHLEN+1];
2348 struct filedescr *fdp;
2349 FILE *fp = NULL;
2350
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002351 if (mod == Py_None)
2352 path = NULL;
2353 else {
2354 path = PyObject_GetAttrString(mod, "__path__");
2355 if (path == NULL) {
2356 PyErr_Clear();
2357 Py_INCREF(Py_None);
2358 return Py_None;
2359 }
2360 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002361
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002362 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002363 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2364 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002365 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002366 if (fdp == NULL) {
2367 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2368 return NULL;
2369 PyErr_Clear();
2370 Py_INCREF(Py_None);
2371 return Py_None;
2372 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002373 m = load_module(fullname, fp, buf, fdp->type, loader);
2374 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002375 if (fp)
2376 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002377 if (!add_submodule(mod, m, fullname, subname, modules)) {
2378 Py_XDECREF(m);
2379 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002380 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002381 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002382
2383 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002384}
2385
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002386
2387/* Re-import a module of any kind and return its module object, WITH
2388 INCREMENTED REFERENCE COUNT */
2389
Guido van Rossum79f25d91997-04-29 20:08:16 +00002390PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002391PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002392{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002393 PyObject *modules = PyImport_GetModuleDict();
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002394 PyObject *path = NULL, *loader = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002395 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002396 char buf[MAXPATHLEN+1];
2397 struct filedescr *fdp;
2398 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002399 PyObject *newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002400
Guido van Rossum79f25d91997-04-29 20:08:16 +00002401 if (m == NULL || !PyModule_Check(m)) {
2402 PyErr_SetString(PyExc_TypeError,
2403 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002404 return NULL;
2405 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002406 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002407 if (name == NULL)
2408 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002409 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002410 PyErr_Format(PyExc_ImportError,
2411 "reload(): module %.200s not in sys.modules",
2412 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002413 return NULL;
2414 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002415 subname = strrchr(name, '.');
2416 if (subname == NULL)
2417 subname = name;
2418 else {
2419 PyObject *parentname, *parent;
2420 parentname = PyString_FromStringAndSize(name, (subname-name));
2421 if (parentname == NULL)
2422 return NULL;
2423 parent = PyDict_GetItem(modules, parentname);
2424 if (parent == NULL) {
2425 PyErr_Format(PyExc_ImportError,
2426 "reload(): parent %.200s not in sys.modules",
Georg Brandl0c55f292005-09-14 06:56:20 +00002427 PyString_AS_STRING(parentname));
2428 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002429 return NULL;
2430 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002431 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002432 subname++;
2433 path = PyObject_GetAttrString(parent, "__path__");
2434 if (path == NULL)
2435 PyErr_Clear();
2436 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002437 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002438 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002439 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002440
2441 if (fdp == NULL) {
2442 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002443 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002444 }
2445
2446 newm = load_module(name, fp, buf, fdp->type, loader);
2447 Py_XDECREF(loader);
2448
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002449 if (fp)
2450 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002451 if (newm == NULL) {
2452 /* load_module probably removed name from modules because of
2453 * the error. Put back the original module object. We're
2454 * going to return NULL in this case regardless of whether
2455 * replacing name succeeds, so the return value is ignored.
2456 */
2457 PyDict_SetItemString(modules, name, m);
2458 }
2459 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002460}
2461
2462
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002463/* Higher-level import emulator which emulates the "import" statement
2464 more accurately -- it invokes the __import__() function from the
2465 builtins of the current globals. This means that the import is
2466 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002467 environment, e.g. by "rexec".
2468 A dummy list ["__doc__"] is passed as the 4th argument so that
2469 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
2470 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002471
2472PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002473PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002474{
2475 static PyObject *silly_list = NULL;
2476 static PyObject *builtins_str = NULL;
2477 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002478 PyObject *globals = NULL;
2479 PyObject *import = NULL;
2480 PyObject *builtins = NULL;
2481 PyObject *r = NULL;
2482
2483 /* Initialize constant string objects */
2484 if (silly_list == NULL) {
2485 import_str = PyString_InternFromString("__import__");
2486 if (import_str == NULL)
2487 return NULL;
2488 builtins_str = PyString_InternFromString("__builtins__");
2489 if (builtins_str == NULL)
2490 return NULL;
2491 silly_list = Py_BuildValue("[s]", "__doc__");
2492 if (silly_list == NULL)
2493 return NULL;
2494 }
2495
2496 /* Get the builtins from current globals */
2497 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002498 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002499 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002500 builtins = PyObject_GetItem(globals, builtins_str);
2501 if (builtins == NULL)
2502 goto err;
2503 }
2504 else {
2505 /* No globals -- use standard builtins, and fake globals */
2506 PyErr_Clear();
2507
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002508 builtins = PyImport_ImportModuleLevel("__builtin__",
2509 NULL, NULL, NULL, 0);
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002510 if (builtins == NULL)
2511 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002512 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2513 if (globals == NULL)
2514 goto err;
2515 }
2516
2517 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002518 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002519 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002520 if (import == NULL)
2521 PyErr_SetObject(PyExc_KeyError, import_str);
2522 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002523 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002524 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002525 if (import == NULL)
2526 goto err;
2527
2528 /* Call the _import__ function with the proper argument list */
Georg Brandl684fd0c2006-05-25 19:15:31 +00002529 r = PyObject_CallFunctionObjArgs(import, module_name, globals,
2530 globals, silly_list, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002531
2532 err:
2533 Py_XDECREF(globals);
2534 Py_XDECREF(builtins);
2535 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002536
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002537 return r;
2538}
2539
2540
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002541/* Module 'imp' provides Python access to the primitives used for
2542 importing modules.
2543*/
2544
Guido van Rossum79f25d91997-04-29 20:08:16 +00002545static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002546imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002547{
2548 char buf[4];
2549
Guido van Rossum96774c12000-05-01 20:19:08 +00002550 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2551 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2552 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2553 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002554
Guido van Rossum79f25d91997-04-29 20:08:16 +00002555 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002556}
2557
Guido van Rossum79f25d91997-04-29 20:08:16 +00002558static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002559imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002560{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002561 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002562 struct filedescr *fdp;
2563
Guido van Rossum79f25d91997-04-29 20:08:16 +00002564 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002565 if (list == NULL)
2566 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002567 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2568 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002569 fdp->suffix, fdp->mode, fdp->type);
2570 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002571 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002572 return NULL;
2573 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002574 if (PyList_Append(list, item) < 0) {
2575 Py_DECREF(list);
2576 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002577 return NULL;
2578 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002579 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002580 }
2581 return list;
2582}
2583
Guido van Rossum79f25d91997-04-29 20:08:16 +00002584static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002585call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002586{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002587 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002588 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002589 struct filedescr *fdp;
2590 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002591 FILE *fp = NULL;
2592
2593 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002594 if (path == Py_None)
2595 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002596 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002597 if (fdp == NULL)
2598 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002599 if (fp != NULL) {
2600 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2601 if (fob == NULL) {
2602 fclose(fp);
2603 return NULL;
2604 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002605 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002606 else {
2607 fob = Py_None;
2608 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002609 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002610 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002611 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002612 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002613 return ret;
2614}
2615
Guido van Rossum79f25d91997-04-29 20:08:16 +00002616static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002617imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002618{
2619 char *name;
2620 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002621 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002622 return NULL;
2623 return call_find_module(name, path);
2624}
2625
2626static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002627imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002628{
2629 char *name;
2630 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002631 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002632 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002633 return NULL;
2634 ret = init_builtin(name);
2635 if (ret < 0)
2636 return NULL;
2637 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002638 Py_INCREF(Py_None);
2639 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002640 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002641 m = PyImport_AddModule(name);
2642 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002643 return m;
2644}
2645
Guido van Rossum79f25d91997-04-29 20:08:16 +00002646static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002647imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002648{
2649 char *name;
2650 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002651 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002652 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002653 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002654 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002655 if (ret < 0)
2656 return NULL;
2657 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002658 Py_INCREF(Py_None);
2659 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002660 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002661 m = PyImport_AddModule(name);
2662 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002663 return m;
2664}
2665
Guido van Rossum79f25d91997-04-29 20:08:16 +00002666static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002667imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002668{
2669 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002670
Guido van Rossum43713e52000-02-29 13:59:29 +00002671 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002672 return NULL;
2673 return get_frozen_object(name);
2674}
2675
Guido van Rossum79f25d91997-04-29 20:08:16 +00002676static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002677imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002678{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002679 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002680 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002681 return NULL;
Guido van Rossum50ee94f2002-04-09 18:00:58 +00002682 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002683}
2684
Guido van Rossum79f25d91997-04-29 20:08:16 +00002685static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002686imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002687{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002688 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002689 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002690 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002691 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002692 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00002693 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002694}
2695
2696static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002697get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002698{
2699 FILE *fp;
2700 if (fob == NULL) {
Tim Peters86c7d2f2004-08-01 23:24:21 +00002701 if (mode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002702 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002703 fp = fopen(pathname, mode);
2704 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002705 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002706 }
2707 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002708 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002709 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002710 PyErr_SetString(PyExc_ValueError,
2711 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002712 }
2713 return fp;
2714}
2715
Guido van Rossum79f25d91997-04-29 20:08:16 +00002716static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002717imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002718{
2719 char *name;
2720 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002721 PyObject *fob = NULL;
2722 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002723 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002724 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002725 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002726 return NULL;
2727 fp = get_file(pathname, fob, "rb");
2728 if (fp == NULL)
2729 return NULL;
2730 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002731 if (fob == NULL)
2732 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002733 return m;
2734}
2735
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002736#ifdef HAVE_DYNAMIC_LOADING
2737
Guido van Rossum79f25d91997-04-29 20:08:16 +00002738static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002739imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002740{
2741 char *name;
2742 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002743 PyObject *fob = NULL;
2744 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002745 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002746 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002747 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002748 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002749 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002750 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002751 if (fp == NULL)
2752 return NULL;
2753 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002754 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002755 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002756}
2757
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002758#endif /* HAVE_DYNAMIC_LOADING */
2759
Guido van Rossum79f25d91997-04-29 20:08:16 +00002760static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002761imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002762{
2763 char *name;
2764 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002765 PyObject *fob = NULL;
2766 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002767 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002768 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002769 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002770 return NULL;
2771 fp = get_file(pathname, fob, "r");
2772 if (fp == NULL)
2773 return NULL;
2774 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002775 if (fob == NULL)
2776 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002777 return m;
2778}
2779
Guido van Rossum79f25d91997-04-29 20:08:16 +00002780static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002781imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002782{
2783 char *name;
2784 PyObject *fob;
2785 char *pathname;
2786 char *suffix; /* Unused */
2787 char *mode;
2788 int type;
2789 FILE *fp;
2790
Guido van Rossum43713e52000-02-29 13:59:29 +00002791 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002792 &name, &fob, &pathname,
2793 &suffix, &mode, &type))
2794 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002795 if (*mode) {
2796 /* Mode must start with 'r' or 'U' and must not contain '+'.
2797 Implicit in this test is the assumption that the mode
2798 may contain other modifiers like 'b' or 't'. */
2799
2800 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002801 PyErr_Format(PyExc_ValueError,
2802 "invalid file open mode %.200s", mode);
2803 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002804 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002805 }
2806 if (fob == Py_None)
2807 fp = NULL;
2808 else {
2809 if (!PyFile_Check(fob)) {
2810 PyErr_SetString(PyExc_ValueError,
2811 "load_module arg#2 should be a file or None");
2812 return NULL;
2813 }
2814 fp = get_file(pathname, fob, mode);
2815 if (fp == NULL)
2816 return NULL;
2817 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002818 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002819}
2820
2821static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002822imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002823{
2824 char *name;
2825 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00002826 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002827 return NULL;
2828 return load_package(name, pathname);
2829}
2830
2831static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002832imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002833{
2834 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002835 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002836 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002837 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002838}
2839
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002840/* Doc strings */
2841
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002842PyDoc_STRVAR(doc_imp,
2843"This module provides the components needed to build your own\n\
2844__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002845
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002846PyDoc_STRVAR(doc_find_module,
2847"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002848Search for a module. If path is omitted or None, search for a\n\
2849built-in, frozen or special module and continue search in sys.path.\n\
2850The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002851package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002852
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002853PyDoc_STRVAR(doc_load_module,
2854"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002855Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002856The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002857
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002858PyDoc_STRVAR(doc_get_magic,
2859"get_magic() -> string\n\
2860Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002861
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002862PyDoc_STRVAR(doc_get_suffixes,
2863"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002864Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002865that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002866
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002867PyDoc_STRVAR(doc_new_module,
2868"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002869Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002870The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002871
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002872PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00002873"lock_held() -> boolean\n\
2874Return True if the import lock is currently held, else False.\n\
2875On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00002876
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002877PyDoc_STRVAR(doc_acquire_lock,
2878"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00002879Acquires the interpreter's import lock for the current thread.\n\
2880This lock should be used by import hooks to ensure thread-safety\n\
2881when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002882On platforms without threads, this function does nothing.");
2883
2884PyDoc_STRVAR(doc_release_lock,
2885"release_lock() -> None\n\
2886Release the interpreter's import lock.\n\
2887On platforms without threads, this function does nothing.");
2888
Guido van Rossum79f25d91997-04-29 20:08:16 +00002889static PyMethodDef imp_methods[] = {
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002890 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
2891 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
2892 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
2893 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
2894 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
2895 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
2896 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
2897 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002898 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00002899 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
2900 {"init_builtin", imp_init_builtin, METH_VARARGS},
2901 {"init_frozen", imp_init_frozen, METH_VARARGS},
2902 {"is_builtin", imp_is_builtin, METH_VARARGS},
2903 {"is_frozen", imp_is_frozen, METH_VARARGS},
2904 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002905#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00002906 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002907#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00002908 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00002909 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002910 {NULL, NULL} /* sentinel */
2911};
2912
Guido van Rossum1a8791e1998-08-04 22:46:29 +00002913static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002914setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002915{
2916 PyObject *v;
2917 int err;
2918
2919 v = PyInt_FromLong((long)value);
2920 err = PyDict_SetItemString(d, name, v);
2921 Py_XDECREF(v);
2922 return err;
2923}
2924
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00002925typedef struct {
2926 PyObject_HEAD
2927} NullImporter;
2928
2929static int
2930NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
2931{
2932 char *path;
2933
2934 if (!_PyArg_NoKeywords("NullImporter()", kwds))
2935 return -1;
2936
2937 if (!PyArg_ParseTuple(args, "s:NullImporter",
2938 &path))
2939 return -1;
2940
2941 if (strlen(path) == 0) {
2942 PyErr_SetString(PyExc_ImportError, "empty pathname");
2943 return -1;
2944 } else {
2945#ifndef RISCOS
2946 struct stat statbuf;
2947 int rv;
2948
2949 rv = stat(path, &statbuf);
2950 if (rv == 0) {
2951 /* it exists */
2952 if (S_ISDIR(statbuf.st_mode)) {
2953 /* it's a directory */
2954 PyErr_SetString(PyExc_ImportError,
2955 "existing directory");
2956 return -1;
2957 }
2958 }
2959#else
2960 if (object_exists(path)) {
2961 /* it exists */
2962 if (isdir(path)) {
2963 /* it's a directory */
2964 PyErr_SetString(PyExc_ImportError,
2965 "existing directory");
2966 return -1;
2967 }
2968 }
2969#endif
2970 }
2971 return 0;
2972}
2973
2974static PyObject *
2975NullImporter_find_module(NullImporter *self, PyObject *args)
2976{
2977 Py_RETURN_NONE;
2978}
2979
2980static PyMethodDef NullImporter_methods[] = {
2981 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
2982 "Always return None"
2983 },
2984 {NULL} /* Sentinel */
2985};
2986
2987
2988static PyTypeObject NullImporterType = {
2989 PyObject_HEAD_INIT(NULL)
2990 0, /*ob_size*/
2991 "imp.NullImporter", /*tp_name*/
2992 sizeof(NullImporter), /*tp_basicsize*/
2993 0, /*tp_itemsize*/
2994 0, /*tp_dealloc*/
2995 0, /*tp_print*/
2996 0, /*tp_getattr*/
2997 0, /*tp_setattr*/
2998 0, /*tp_compare*/
2999 0, /*tp_repr*/
3000 0, /*tp_as_number*/
3001 0, /*tp_as_sequence*/
3002 0, /*tp_as_mapping*/
3003 0, /*tp_hash */
3004 0, /*tp_call*/
3005 0, /*tp_str*/
3006 0, /*tp_getattro*/
3007 0, /*tp_setattro*/
3008 0, /*tp_as_buffer*/
3009 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3010 "Null importer object", /* tp_doc */
3011 0, /* tp_traverse */
3012 0, /* tp_clear */
3013 0, /* tp_richcompare */
3014 0, /* tp_weaklistoffset */
3015 0, /* tp_iter */
3016 0, /* tp_iternext */
3017 NullImporter_methods, /* tp_methods */
3018 0, /* tp_members */
3019 0, /* tp_getset */
3020 0, /* tp_base */
3021 0, /* tp_dict */
3022 0, /* tp_descr_get */
3023 0, /* tp_descr_set */
3024 0, /* tp_dictoffset */
3025 (initproc)NullImporter_init, /* tp_init */
3026 0, /* tp_alloc */
3027 PyType_GenericNew /* tp_new */
3028};
3029
3030
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003031PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003032initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003033{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003034 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003035
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003036 if (PyType_Ready(&NullImporterType) < 0)
3037 goto failure;
3038
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003039 m = Py_InitModule4("imp", imp_methods, doc_imp,
3040 NULL, PYTHON_API_VERSION);
Neal Norwitz1ac754f2006-01-19 06:09:39 +00003041 if (m == NULL)
3042 goto failure;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003043 d = PyModule_GetDict(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003044
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003045 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3046 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3047 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3048 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3049 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3050 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3051 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3052 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00003053 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00003054 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003055
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003056 Py_INCREF(&NullImporterType);
3057 PyModule_AddObject(m, "NullImporter", (PyObject *)&NullImporterType);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003058 failure:
3059 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003060}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003061
3062
Guido van Rossumb18618d2000-05-03 23:44:39 +00003063/* API for embedding applications that want to add their own entries
3064 to the table of built-in modules. This should normally be called
3065 *before* Py_Initialize(). When the table resize fails, -1 is
3066 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003067
3068 After a similar function by Just van Rossum. */
3069
3070int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003071PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003072{
3073 static struct _inittab *our_copy = NULL;
3074 struct _inittab *p;
3075 int i, n;
3076
3077 /* Count the number of entries in both tables */
3078 for (n = 0; newtab[n].name != NULL; n++)
3079 ;
3080 if (n == 0)
3081 return 0; /* Nothing to do */
3082 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3083 ;
3084
3085 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00003086 p = our_copy;
3087 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003088 if (p == NULL)
3089 return -1;
3090
3091 /* Copy the tables into the new memory */
3092 if (our_copy != PyImport_Inittab)
3093 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3094 PyImport_Inittab = our_copy = p;
3095 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3096
3097 return 0;
3098}
3099
3100/* Shorthand to add a single entry given a name and a function */
3101
3102int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003103PyImport_AppendInittab(char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003104{
3105 struct _inittab newtab[2];
3106
3107 memset(newtab, '\0', sizeof newtab);
3108
3109 newtab[0].name = name;
3110 newtab[0].initfunc = initfunc;
3111
3112 return PyImport_ExtendInittab(newtab);
3113}
Anthony Baxterac6bd462006-04-13 02:06:09 +00003114
3115#ifdef __cplusplus
3116}
3117#endif