blob: 49a47bb314397f9a2f73a8cb08fcaab5a30de832 [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"
Guido van Rossumd8faa362007-04-27 19:54:29 +00007#undef Yield /* undefine macro conflicting with winbase.h */
Neal Norwitzadb69fc2005-12-17 20:54:49 +00008#include "pyarena.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00009#include "pythonrun.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000010#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000011#include "marshal.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000012#include "code.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000013#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000014#include "eval.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000015#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000016#include "importdl.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000017
Guido van Rossum55a83382000-09-20 20:31:38 +000018#ifdef HAVE_FCNTL_H
19#include <fcntl.h>
20#endif
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000021#ifdef __cplusplus
22extern "C" {
23#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000024
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000025extern time_t PyOS_GetLastModificationTime(char *, FILE *);
26 /* In getmtime.c */
Guido van Rossum21d335e1993-10-15 13:01:11 +000027
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000028/* Magic word to reject .pyc files generated by other Python versions.
29 It should change for each incompatible change to the bytecode.
30
31 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000032 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000033 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000034
Guido van Rossum45aecf42006-03-15 04:58:47 +000035 The magic numbers must be spaced apart at least 2 values, as the
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000036 -U interpeter flag will cause MAGIC+1 being used. They have been
37 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000038
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000039 There were a variety of old schemes for setting the magic number.
40 The current working scheme is to increment the previous value by
41 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000042
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000043 Known values:
44 Python 1.5: 20121
45 Python 1.5.1: 20121
46 Python 1.5.2: 20121
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000047 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000048 Python 2.0: 50823
49 Python 2.0.1: 50823
50 Python 2.1: 60202
51 Python 2.1.1: 60202
52 Python 2.1.2: 60202
53 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000054 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000055 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000056 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000057 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000058 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000059 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000060 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000061 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000062 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000063 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000064 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
65 Python 2.5b3: 62111 (fix wrong code: x += yield)
66 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
67 storing constants that should have been removed)
Thomas Wouters89f507f2006-12-13 04:49:30 +000068 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
69 Python 2.6a0: 62141 (peephole optimizations)
Guido van Rossum45aecf42006-03-15 04:58:47 +000070 Python 3000: 3000
Brett Cannone2e23ef2006-08-25 05:05:30 +000071 3010 (removed UNARY_CONVERT)
Guido van Rossum86e58e22006-08-28 15:27:34 +000072 3020 (added BUILD_SET)
Guido van Rossum4f72a782006-10-27 23:31:49 +000073 3030 (added keyword-only parameters)
Guido van Rossum3203bdc2006-12-28 21:03:31 +000074 3040 (added signature annotations)
Guido van Rossum452bf512007-02-09 05:32:43 +000075 3050 (print becomes a function)
Guido van Rossum52cc1d82007-03-18 15:41:51 +000076 3060 (PEP 3115 metaclass syntax)
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000077.
Tim Peters36515e22001-11-18 04:06:29 +000078*/
Guido van Rossum52cc1d82007-03-18 15:41:51 +000079#define MAGIC (3060 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000080
Guido van Rossum96774c12000-05-01 20:19:08 +000081/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000082 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000083 compiler works which are enabled by command line switches. */
84static long pyc_magic = MAGIC;
85
Guido van Rossum25ce5661997-08-02 03:10:38 +000086/* See _PyImport_FixupExtension() below */
87static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000088
Guido van Rossum771c6c81997-10-31 18:37:24 +000089/* This table is defined in config.c: */
90extern struct _inittab _PyImport_Inittab[];
91
92struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000093
Guido van Rossumed1170e1999-12-20 21:23:41 +000094/* these tables define the module suffixes that Python recognizes */
95struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +000096
Guido van Rossumed1170e1999-12-20 21:23:41 +000097static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +000098 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000099#ifdef MS_WINDOWS
Jack Jansenc88da1f2002-05-28 10:58:19 +0000100 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000101#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000102 {".pyc", "rb", PY_COMPILED},
103 {0, 0}
104};
105
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000106static PyTypeObject NullImporterType; /* Forward reference */
107
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000108/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000109
110void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000111_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000112{
Guido van Rossumed1170e1999-12-20 21:23:41 +0000113 const struct filedescr *scan;
114 struct filedescr *filetab;
115 int countD = 0;
116 int countS = 0;
117
118 /* prepare _PyImport_Filetab: copy entries from
119 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
120 */
121 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
122 ++countD;
123 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
124 ++countS;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000125 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000126 if (filetab == NULL)
127 Py_FatalError("Can't initialize import file table.");
Guido van Rossumed1170e1999-12-20 21:23:41 +0000128 memcpy(filetab, _PyImport_DynLoadFiletab,
129 countD * sizeof(struct filedescr));
130 memcpy(filetab + countD, _PyImport_StandardFiletab,
131 countS * sizeof(struct filedescr));
132 filetab[countD + countS].suffix = NULL;
133
134 _PyImport_Filetab = filetab;
135
Guido van Rossum0824f631997-03-11 18:37:35 +0000136 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000137 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
138 for (; filetab->suffix != NULL; filetab++) {
139 if (strcmp(filetab->suffix, ".pyc") == 0)
140 filetab->suffix = ".pyo";
Guido van Rossum0824f631997-03-11 18:37:35 +0000141 }
142 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000143
Guido van Rossum572dbf82007-04-27 23:53:51 +0000144 {
Guido van Rossum96774c12000-05-01 20:19:08 +0000145 /* 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 */
Thomas Wouters0e3f5912006-08-11 14:57:12 +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();
Thomas Wouters0e3f5912006-08-11 14:57:12 +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 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +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 */
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000250 if (import_lock == NULL) {
Guido van Rossum65d5b571998-12-21 19:32:43 +0000251 import_lock = PyThread_allocate_lock();
Thomas Wouters0e3f5912006-08-11 14:57:12 +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();
Thomas Wouters0e3f5912006-08-11 14:57:12 +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 Rossumd8faa362007-04-27 19:54:29 +0000338static void
339imp_modules_reloading_clear(void)
340{
341 PyInterpreterState *interp = PyThreadState_Get()->interp;
342 if (interp->modules_reloading != NULL)
343 PyDict_Clear(interp->modules_reloading);
344}
345
Guido van Rossum25ce5661997-08-02 03:10:38 +0000346/* Helper for sys */
347
348PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000349PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000350{
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000351 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000352 if (interp->modules == NULL)
353 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
354 return interp->modules;
355}
356
Guido van Rossum3f5da241990-12-20 15:06:42 +0000357
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000358/* List of names to clear in sys */
359static char* sys_deletes[] = {
Collin Winter670e6922007-03-21 02:57:17 +0000360 "path", "argv", "ps1", "ps2",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000361 "last_type", "last_value", "last_traceback",
Just van Rossum52e14d62002-12-30 22:08:05 +0000362 "path_hooks", "path_importer_cache", "meta_path",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000363 NULL
364};
365
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000366static char* sys_files[] = {
367 "stdin", "__stdin__",
368 "stdout", "__stdout__",
369 "stderr", "__stderr__",
370 NULL
371};
372
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000373
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000374/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000375
Guido van Rossum3f5da241990-12-20 15:06:42 +0000376void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000377PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000378{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000379 Py_ssize_t pos, ndone;
Guido van Rossum758eec01998-01-19 21:58:26 +0000380 char *name;
381 PyObject *key, *value, *dict;
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000382 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000383 PyObject *modules = interp->modules;
384
385 if (modules == NULL)
386 return; /* Already done */
387
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000388 /* Delete some special variables first. These are common
389 places where user values hide and people complain when their
390 destructors fail. Since the modules containing them are
391 deleted *last* of all, they would come too late in the normal
392 destruction order. Sigh. */
393
394 value = PyDict_GetItemString(modules, "__builtin__");
395 if (value != NULL && PyModule_Check(value)) {
396 dict = PyModule_GetDict(value);
397 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000398 PySys_WriteStderr("# clear __builtin__._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000399 PyDict_SetItemString(dict, "_", Py_None);
400 }
401 value = PyDict_GetItemString(modules, "sys");
402 if (value != NULL && PyModule_Check(value)) {
403 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000404 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000405 dict = PyModule_GetDict(value);
406 for (p = sys_deletes; *p != NULL; p++) {
407 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000408 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000409 PyDict_SetItemString(dict, *p, Py_None);
410 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000411 for (p = sys_files; *p != NULL; p+=2) {
412 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000413 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000414 v = PyDict_GetItemString(dict, *(p+1));
415 if (v == NULL)
416 v = Py_None;
417 PyDict_SetItemString(dict, *p, v);
418 }
419 }
420
421 /* First, delete __main__ */
422 value = PyDict_GetItemString(modules, "__main__");
423 if (value != NULL && PyModule_Check(value)) {
424 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000425 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000426 _PyModule_Clear(value);
427 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000428 }
429
Guido van Rossum758eec01998-01-19 21:58:26 +0000430 /* The special treatment of __builtin__ here is because even
431 when it's not referenced as a module, its dictionary is
432 referenced by almost every module's __builtins__. Since
433 deleting a module clears its dictionary (even if there are
434 references left to it), we need to delete the __builtin__
435 module last. Likewise, we don't delete sys until the very
436 end because it is implicitly referenced (e.g. by print).
437
438 Also note that we 'delete' modules by replacing their entry
439 in the modules dict with None, rather than really deleting
440 them; this avoids a rehash of the modules dictionary and
441 also marks them as "non existent" so they won't be
442 re-imported. */
443
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000444 /* Next, repeatedly delete modules with a reference count of
Guido van Rossum758eec01998-01-19 21:58:26 +0000445 one (skipping __builtin__ and sys) and delete them */
446 do {
447 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000448 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000449 while (PyDict_Next(modules, &pos, &key, &value)) {
450 if (value->ob_refcnt != 1)
451 continue;
Guido van Rossum566373e1998-10-01 15:24:50 +0000452 if (PyString_Check(key) && PyModule_Check(value)) {
453 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000454 if (strcmp(name, "__builtin__") == 0)
455 continue;
456 if (strcmp(name, "sys") == 0)
457 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000458 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000459 PySys_WriteStderr(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000460 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000461 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000462 PyDict_SetItem(modules, key, Py_None);
463 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000464 }
465 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000466 } while (ndone > 0);
467
Guido van Rossum758eec01998-01-19 21:58:26 +0000468 /* Next, delete all modules (still skipping __builtin__ and sys) */
469 pos = 0;
470 while (PyDict_Next(modules, &pos, &key, &value)) {
Guido van Rossum566373e1998-10-01 15:24:50 +0000471 if (PyString_Check(key) && PyModule_Check(value)) {
472 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000473 if (strcmp(name, "__builtin__") == 0)
474 continue;
475 if (strcmp(name, "sys") == 0)
476 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000477 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000478 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000479 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000480 PyDict_SetItem(modules, key, Py_None);
481 }
482 }
483
484 /* Next, delete sys and __builtin__ (in that order) */
485 value = PyDict_GetItemString(modules, "sys");
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 sys\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, "sys", Py_None);
491 }
492 value = PyDict_GetItemString(modules, "__builtin__");
493 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000494 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000495 PySys_WriteStderr("# cleanup __builtin__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000496 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000497 PyDict_SetItemString(modules, "__builtin__", Py_None);
498 }
499
500 /* Finally, clear and delete the modules directory */
501 PyDict_Clear(modules);
502 interp->modules = NULL;
503 Py_DECREF(modules);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000504 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000505}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000506
507
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000508/* Helper for pythonrun.c -- return magic number */
509
510long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000511PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000512{
Guido van Rossum96774c12000-05-01 20:19:08 +0000513 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000514}
515
516
Guido van Rossum25ce5661997-08-02 03:10:38 +0000517/* Magic for extension modules (built-in as well as dynamically
518 loaded). To prevent initializing an extension module more than
519 once, we keep a static dictionary 'extensions' keyed by module name
520 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000521 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000522 dictionary is stored by calling _PyImport_FixupExtension()
523 immediately after the module initialization function succeeds. A
524 copy can be retrieved from there by calling
525 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000526
Guido van Rossum79f25d91997-04-29 20:08:16 +0000527PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000528_PyImport_FixupExtension(char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000529{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000530 PyObject *modules, *mod, *dict, *copy;
531 if (extensions == NULL) {
532 extensions = PyDict_New();
533 if (extensions == NULL)
534 return NULL;
535 }
536 modules = PyImport_GetModuleDict();
537 mod = PyDict_GetItemString(modules, name);
538 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000539 PyErr_Format(PyExc_SystemError,
540 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000541 return NULL;
542 }
543 dict = PyModule_GetDict(mod);
544 if (dict == NULL)
545 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000546 copy = PyDict_Copy(dict);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000547 if (copy == NULL)
548 return NULL;
549 PyDict_SetItemString(extensions, filename, copy);
550 Py_DECREF(copy);
551 return copy;
552}
553
554PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000555_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000556{
Fred Drake9cd0efc2001-10-25 21:38:59 +0000557 PyObject *dict, *mod, *mdict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000558 if (extensions == NULL)
559 return NULL;
560 dict = PyDict_GetItemString(extensions, filename);
561 if (dict == NULL)
562 return NULL;
563 mod = PyImport_AddModule(name);
564 if (mod == NULL)
565 return NULL;
566 mdict = PyModule_GetDict(mod);
567 if (mdict == NULL)
568 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000569 if (PyDict_Update(mdict, dict))
Guido van Rossum25ce5661997-08-02 03:10:38 +0000570 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000571 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000572 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Guido van Rossum25ce5661997-08-02 03:10:38 +0000573 name, filename);
574 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000575}
576
577
578/* Get the module object corresponding to a module name.
579 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000580 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000581 Because the former action is most common, THIS DOES NOT RETURN A
582 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000583
Guido van Rossum79f25d91997-04-29 20:08:16 +0000584PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000585PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000586{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000587 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000588 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000589
Guido van Rossum25ce5661997-08-02 03:10:38 +0000590 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000591 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000592 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000593 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000594 if (m == NULL)
595 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000596 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000597 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000598 return NULL;
599 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000600 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000601
602 return m;
603}
604
Tim Peters1cd70172004-08-02 03:52:12 +0000605/* Remove name from sys.modules, if it's there. */
606static void
607_RemoveModule(const char *name)
608{
609 PyObject *modules = PyImport_GetModuleDict();
610 if (PyDict_GetItemString(modules, name) == NULL)
611 return;
612 if (PyDict_DelItemString(modules, name) < 0)
613 Py_FatalError("import: deleting existing key in"
614 "sys.modules failed");
615}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000616
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000617/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000618 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
619 * removed from sys.modules, to avoid leaving damaged module objects
620 * in sys.modules. The caller may wish to restore the original
621 * module object (if any) in this case; PyImport_ReloadModule is an
622 * example.
623 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000624PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000625PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000626{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000627 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
628}
629
630PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000631PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000632{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000633 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000634 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000635
Guido van Rossum79f25d91997-04-29 20:08:16 +0000636 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000637 if (m == NULL)
638 return NULL;
Jeremy Hyltonecd91292004-01-02 23:25:32 +0000639 /* If the module is being reloaded, we get the old module back
640 and re-use its dict to exec the new code. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641 d = PyModule_GetDict(m);
642 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
643 if (PyDict_SetItemString(d, "__builtins__",
644 PyEval_GetBuiltins()) != 0)
Tim Peters1cd70172004-08-02 03:52:12 +0000645 goto error;
Guido van Rossum6135a871995-01-09 17:53:26 +0000646 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000647 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000648 v = NULL;
649 if (pathname != NULL) {
650 v = PyString_FromString(pathname);
651 if (v == NULL)
652 PyErr_Clear();
653 }
654 if (v == NULL) {
655 v = ((PyCodeObject *)co)->co_filename;
656 Py_INCREF(v);
657 }
658 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000659 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000660 Py_DECREF(v);
661
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000662 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000663 if (v == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000664 goto error;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000665 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000666
Guido van Rossum25ce5661997-08-02 03:10:38 +0000667 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000668 PyErr_Format(PyExc_ImportError,
669 "Loaded module %.200s not found in sys.modules",
670 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000671 return NULL;
672 }
673
Guido van Rossum79f25d91997-04-29 20:08:16 +0000674 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000675
676 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000677
678 error:
679 _RemoveModule(name);
680 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000681}
682
683
684/* Given a pathname for a Python source file, fill a buffer with the
685 pathname for the corresponding compiled file. Return the pathname
686 for the compiled file, or NULL if there's no space in the buffer.
687 Doesn't set an exception. */
688
689static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000690make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000691{
Tim Petersc1731372001-08-04 08:12:36 +0000692 size_t len = strlen(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000693 if (len+2 > buflen)
694 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000695
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000696#ifdef MS_WINDOWS
Tim Petersc1731372001-08-04 08:12:36 +0000697 /* Treat .pyw as if it were .py. The case of ".pyw" must match
698 that used in _PyImport_StandardFiletab. */
699 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
700 --len; /* pretend 'w' isn't there */
701#endif
702 memcpy(buf, pathname, len);
703 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
704 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000705
706 return buf;
707}
708
709
710/* Given a pathname for a Python source file, its time of last
711 modification, and a pathname for a compiled file, check whether the
712 compiled file represents the same version of the source. If so,
713 return a FILE pointer for the compiled file, positioned just after
714 the header; if not, return NULL.
715 Doesn't set an exception. */
716
717static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000718check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000719{
720 FILE *fp;
721 long magic;
722 long pyc_mtime;
723
724 fp = fopen(cpathname, "rb");
725 if (fp == NULL)
726 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000727 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000728 if (magic != pyc_magic) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000729 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000730 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000731 fclose(fp);
732 return NULL;
733 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000734 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000735 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000736 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000737 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000738 fclose(fp);
739 return NULL;
740 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000741 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000742 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000743 return fp;
744}
745
746
747/* Read a code object from a file and check it for validity */
748
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000750read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000751{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000752 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000753
Tim Petersd9b9ac82001-01-28 00:27:39 +0000754 co = PyMarshal_ReadLastObjectFromFile(fp);
Armin Rigo01ab2792004-03-26 15:09:27 +0000755 if (co == NULL)
756 return NULL;
757 if (!PyCode_Check(co)) {
758 PyErr_Format(PyExc_ImportError,
759 "Non-code object in %.200s", cpathname);
760 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000761 return NULL;
762 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000763 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000764}
765
766
767/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000768 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000769
Guido van Rossum79f25d91997-04-29 20:08:16 +0000770static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000771load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000772{
773 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000774 PyCodeObject *co;
775 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000776
Guido van Rossum79f25d91997-04-29 20:08:16 +0000777 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000778 if (magic != pyc_magic) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000779 PyErr_Format(PyExc_ImportError,
780 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000781 return NULL;
782 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000783 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000784 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000785 if (co == NULL)
786 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000787 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000788 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000789 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000790 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000791 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000792
793 return m;
794}
795
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000796/* Parse a source file and return the corresponding code object */
797
Guido van Rossum79f25d91997-04-29 20:08:16 +0000798static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000799parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000800{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000801 PyCodeObject *co = NULL;
802 mod_ty mod;
Thomas Wouters89f507f2006-12-13 04:49:30 +0000803 PyArena *arena = PyArena_New();
804 if (arena == NULL)
805 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000806
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000807 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, 0,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000808 NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000809 if (mod) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000810 co = PyAST_Compile(mod, pathname, NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000811 }
Thomas Wouters89f507f2006-12-13 04:49:30 +0000812 PyArena_Free(arena);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000813 return co;
814}
815
816
Guido van Rossum55a83382000-09-20 20:31:38 +0000817/* Helper to open a bytecode file for writing in exclusive mode */
818
819static FILE *
820open_exclusive(char *filename)
821{
822#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
823 /* Use O_EXCL to avoid a race condition when another process tries to
824 write the same file. When that happens, our open() call fails,
825 which is just fine (since it's only a cache).
826 XXX If the file exists and is writable but the directory is not
827 writable, the file will never be written. Oh well.
828 */
829 int fd;
830 (void) unlink(filename);
Tim Peters42c83af2000-09-29 04:03:10 +0000831 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
832#ifdef O_BINARY
833 |O_BINARY /* necessary for Windows */
834#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000835#ifdef __VMS
Martin v. Löwis18e16552006-02-15 17:27:45 +0000836 , 0666, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000837#else
Martin v. Löwis18e16552006-02-15 17:27:45 +0000838 , 0666
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000839#endif
Martin v. Löwis18e16552006-02-15 17:27:45 +0000840 );
Guido van Rossum55a83382000-09-20 20:31:38 +0000841 if (fd < 0)
842 return NULL;
843 return fdopen(fd, "wb");
844#else
845 /* Best we can do -- on Windows this can't happen anyway */
846 return fopen(filename, "wb");
847#endif
848}
849
850
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000851/* Write a compiled module to a file, placing the time of last
852 modification of its source into the header.
853 Errors are ignored, if a write error occurs an attempt is made to
854 remove the file. */
855
856static void
Martin v. Löwis18e16552006-02-15 17:27:45 +0000857write_compiled_module(PyCodeObject *co, char *cpathname, time_t mtime)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000858{
859 FILE *fp;
860
Guido van Rossum55a83382000-09-20 20:31:38 +0000861 fp = open_exclusive(cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000862 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000864 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000865 "# can't create %s\n", cpathname);
866 return;
867 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000868 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000869 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000870 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
871 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000872 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000873 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000874 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000875 /* Don't keep partial file */
876 fclose(fp);
877 (void) unlink(cpathname);
878 return;
879 }
880 /* Now write the true mtime */
881 fseek(fp, 4L, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000882 assert(mtime < LONG_MAX);
Martin v. Löwis725507b2006-03-07 12:08:51 +0000883 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000884 fflush(fp);
885 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000886 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000887 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000888}
889
890
891/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000892 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
893 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000894
Guido van Rossum79f25d91997-04-29 20:08:16 +0000895static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000896load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000897{
Fred Drake4c82b232000-06-30 16:18:57 +0000898 time_t mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000899 FILE *fpc;
900 char buf[MAXPATHLEN+1];
901 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000902 PyCodeObject *co;
903 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000904
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000905 mtime = PyOS_GetLastModificationTime(pathname, fp);
Neal Norwitz708e51a2005-10-03 04:48:15 +0000906 if (mtime == (time_t)(-1)) {
907 PyErr_Format(PyExc_RuntimeError,
908 "unable to get modification time from '%s'",
909 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +0000910 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +0000911 }
Fred Drake4c82b232000-06-30 16:18:57 +0000912#if SIZEOF_TIME_T > 4
913 /* Python's .pyc timestamp handling presumes that the timestamp fits
914 in 4 bytes. This will be fine until sometime in the year 2038,
915 when a 4-byte signed time_t will overflow.
916 */
917 if (mtime >> 32) {
918 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +0000919 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +0000920 return NULL;
921 }
922#endif
Tim Peters36515e22001-11-18 04:06:29 +0000923 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +0000924 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000925 if (cpathname != NULL &&
926 (fpc = check_compiled_module(pathname, mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000927 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000928 fclose(fpc);
929 if (co == NULL)
930 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000931 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000932 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000933 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000934 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000935 }
936 else {
937 co = parse_source_module(pathname, fp);
938 if (co == NULL)
939 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000940 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000941 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000942 name, pathname);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000943 if (cpathname)
944 write_compiled_module(co, cpathname, mtime);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000945 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000946 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000947 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000948
949 return m;
950}
951
952
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000953/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +0000954static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
955static struct filedescr *find_module(char *, char *, PyObject *,
956 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +0000957static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000958
959/* Load a package and return its module object WITH INCREMENTED
960 REFERENCE COUNT */
961
962static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000963load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000964{
Tim Peters1cd70172004-08-02 03:52:12 +0000965 PyObject *m, *d;
966 PyObject *file = NULL;
967 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000968 int err;
969 char buf[MAXPATHLEN+1];
970 FILE *fp = NULL;
971 struct filedescr *fdp;
972
973 m = PyImport_AddModule(name);
974 if (m == NULL)
975 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000976 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000977 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000978 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000979 d = PyModule_GetDict(m);
980 file = PyString_FromString(pathname);
981 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000982 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000983 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +0000984 if (path == NULL)
985 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000986 err = PyDict_SetItemString(d, "__file__", file);
987 if (err == 0)
988 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +0000989 if (err != 0)
990 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000991 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +0000992 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000993 if (fdp == NULL) {
994 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
995 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +0000996 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000997 }
998 else
999 m = NULL;
1000 goto cleanup;
1001 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001002 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001003 if (fp != NULL)
1004 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00001005 goto cleanup;
1006
1007 error:
1008 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001009 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001010 Py_XDECREF(path);
1011 Py_XDECREF(file);
1012 return m;
1013}
1014
1015
1016/* Helper to test for built-in module */
1017
1018static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001019is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001020{
1021 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +00001022 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1023 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1024 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001025 return -1;
1026 else
1027 return 1;
1028 }
1029 }
1030 return 0;
1031}
1032
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001033
Just van Rossum52e14d62002-12-30 22:08:05 +00001034/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1035 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001036 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001037 that can handle the path item. Return None if no hook could;
1038 this tells our caller it should fall back to the builtin
1039 import mechanism. Cache the result in path_importer_cache.
1040 Returns a borrowed reference. */
1041
1042static PyObject *
1043get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1044 PyObject *p)
1045{
1046 PyObject *importer;
Martin v. Löwis725507b2006-03-07 12:08:51 +00001047 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001048
1049 /* These conditions are the caller's responsibility: */
1050 assert(PyList_Check(path_hooks));
1051 assert(PyDict_Check(path_importer_cache));
1052
1053 nhooks = PyList_Size(path_hooks);
1054 if (nhooks < 0)
1055 return NULL; /* Shouldn't happen */
1056
1057 importer = PyDict_GetItem(path_importer_cache, p);
1058 if (importer != NULL)
1059 return importer;
1060
1061 /* set path_importer_cache[p] to None to avoid recursion */
1062 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1063 return NULL;
1064
1065 for (j = 0; j < nhooks; j++) {
1066 PyObject *hook = PyList_GetItem(path_hooks, j);
1067 if (hook == NULL)
1068 return NULL;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001069 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
Just van Rossum52e14d62002-12-30 22:08:05 +00001070 if (importer != NULL)
1071 break;
1072
1073 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1074 return NULL;
1075 }
1076 PyErr_Clear();
1077 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001078 if (importer == NULL) {
1079 importer = PyObject_CallFunctionObjArgs(
1080 (PyObject *)&NullImporterType, p, NULL
1081 );
1082 if (importer == NULL) {
1083 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1084 PyErr_Clear();
1085 return Py_None;
1086 }
1087 }
1088 }
1089 if (importer != NULL) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001090 int err = PyDict_SetItem(path_importer_cache, p, importer);
1091 Py_DECREF(importer);
1092 if (err != 0)
1093 return NULL;
1094 }
1095 return importer;
1096}
1097
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001098/* Search the path (default sys.path) for a module. Return the
1099 corresponding filedescr struct, and (via return arguments) the
1100 pathname and an open file. Return NULL if the module is not found. */
1101
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001102#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001103extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001104 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001105#endif
1106
Martin v. Löwis18e16552006-02-15 17:27:45 +00001107static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001108static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001109static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001110
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001111static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001112find_module(char *fullname, char *subname, PyObject *path, char *buf,
1113 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001114{
Martin v. Löwis725507b2006-03-07 12:08:51 +00001115 Py_ssize_t i, npath;
Fred Drake4c82b232000-06-30 16:18:57 +00001116 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001117 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001118 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001119 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001120 PyObject *path_hooks, *path_importer_cache;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001121 struct stat statbuf;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001122 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1123 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1124 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001125 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001126#if defined(PYOS_OS2)
1127 size_t saved_len;
1128 size_t saved_namelen;
1129 char *saved_buf = NULL;
1130#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001131 if (p_loader != NULL)
1132 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001133
Just van Rossum52e14d62002-12-30 22:08:05 +00001134 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001135 PyErr_SetString(PyExc_OverflowError,
1136 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001137 return NULL;
1138 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001139 strcpy(name, subname);
1140
1141 /* sys.meta_path import hook */
1142 if (p_loader != NULL) {
1143 PyObject *meta_path;
1144
1145 meta_path = PySys_GetObject("meta_path");
1146 if (meta_path == NULL || !PyList_Check(meta_path)) {
1147 PyErr_SetString(PyExc_ImportError,
1148 "sys.meta_path must be a list of "
1149 "import hooks");
1150 return NULL;
1151 }
1152 Py_INCREF(meta_path); /* zap guard */
1153 npath = PyList_Size(meta_path);
1154 for (i = 0; i < npath; i++) {
1155 PyObject *loader;
1156 PyObject *hook = PyList_GetItem(meta_path, i);
1157 loader = PyObject_CallMethod(hook, "find_module",
1158 "sO", fullname,
1159 path != NULL ?
1160 path : Py_None);
1161 if (loader == NULL) {
1162 Py_DECREF(meta_path);
1163 return NULL; /* true error */
1164 }
1165 if (loader != Py_None) {
1166 /* a loader was found */
1167 *p_loader = loader;
1168 Py_DECREF(meta_path);
1169 return &importhookdescr;
1170 }
1171 Py_DECREF(loader);
1172 }
1173 Py_DECREF(meta_path);
1174 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001175
Guido van Rossum13d77992007-07-23 03:16:50 +00001176 if (path != NULL && PyUnicode_Check(path)) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001177 /* The only type of submodule allowed inside a "frozen"
1178 package are other frozen modules or packages. */
Guido van Rossum13d77992007-07-23 03:16:50 +00001179 char *p = PyUnicode_AsString(path);
1180 if (strlen(p) + 1 + strlen(name) >= (size_t)buflen) {
Guido van Rossum0506a431998-08-11 15:07:39 +00001181 PyErr_SetString(PyExc_ImportError,
1182 "full frozen module name too long");
1183 return NULL;
1184 }
Guido van Rossum13d77992007-07-23 03:16:50 +00001185 strcpy(buf, p);
Guido van Rossum0506a431998-08-11 15:07:39 +00001186 strcat(buf, ".");
1187 strcat(buf, name);
1188 strcpy(name, buf);
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001189 if (find_frozen(name) != NULL) {
1190 strcpy(buf, name);
1191 return &fd_frozen;
1192 }
1193 PyErr_Format(PyExc_ImportError,
1194 "No frozen submodule named %.200s", name);
1195 return NULL;
Guido van Rossum0506a431998-08-11 15:07:39 +00001196 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001197 if (path == NULL) {
1198 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001199 strcpy(buf, name);
1200 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001201 }
Greg Ward201baee2001-10-04 14:52:06 +00001202 if ((find_frozen(name)) != NULL) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001203 strcpy(buf, name);
1204 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001205 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001206
Guido van Rossumac279101996-08-22 23:10:58 +00001207#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001208 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1209 if (fp != NULL) {
1210 *p_fp = fp;
1211 return fdp;
1212 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001213#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001214 path = PySys_GetObject("path");
1215 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001216 if (path == NULL || !PyList_Check(path)) {
1217 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001218 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001219 return NULL;
1220 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001221
1222 path_hooks = PySys_GetObject("path_hooks");
1223 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1224 PyErr_SetString(PyExc_ImportError,
1225 "sys.path_hooks must be a list of "
1226 "import hooks");
1227 return NULL;
1228 }
1229 path_importer_cache = PySys_GetObject("path_importer_cache");
1230 if (path_importer_cache == NULL ||
1231 !PyDict_Check(path_importer_cache)) {
1232 PyErr_SetString(PyExc_ImportError,
1233 "sys.path_importer_cache must be a dict");
1234 return NULL;
1235 }
1236
Guido van Rossum79f25d91997-04-29 20:08:16 +00001237 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001238 namelen = strlen(name);
1239 for (i = 0; i < npath; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001240 PyObject *v = PyList_GetItem(path, i);
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001241 PyObject *origv = v;
Guido van Rossum6262cc72007-05-09 23:29:27 +00001242 const char *base;
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001243 Py_ssize_t size;
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001244 if (!v)
1245 return NULL;
Guido van Rossum6262cc72007-05-09 23:29:27 +00001246 if (PyObject_AsCharBuffer(v, &base, &size) < 0)
1247 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001248 len = size;
Walter Dörwald3430d702002-06-17 10:43:59 +00001249 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001250 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001251 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001252 strcpy(buf, base);
Walter Dörwald3430d702002-06-17 10:43:59 +00001253 if (strlen(buf) != len) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001254 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001255 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001256
1257 /* sys.path_hooks import hook */
1258 if (p_loader != NULL) {
1259 PyObject *importer;
1260
1261 importer = get_path_importer(path_importer_cache,
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001262 path_hooks, origv);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001263 if (importer == NULL) {
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001264 return NULL;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001265 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001266 /* Note: importer is a borrowed reference */
1267 if (importer != Py_None) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001268 PyObject *loader;
1269 loader = PyObject_CallMethod(importer,
1270 "find_module",
1271 "s", fullname);
1272 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);
Thomas Wouters477c8d52006-05-27 19:21:47 +00001280 continue;
Just van Rossum52e14d62002-12-30 22:08:05 +00001281 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001282 }
Thomas Wouters477c8d52006-05-27 19:21:47 +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 Wouters477c8d52006-05-27 19:21:47 +00001299 case_ok(buf, len, namelen, name)) { /* case matches */
1300 if (find_init_module(buf)) { /* and has __init__.py */
Thomas Wouters477c8d52006-05-27 19:21:47 +00001301 return &fd_package;
1302 }
1303 else {
1304 char warnstr[MAXPATHLEN+80];
1305 sprintf(warnstr, "Not importing directory "
1306 "'%.*s': missing __init__.py",
1307 MAXPATHLEN, buf);
Skip Montanaro46fc3372007-08-12 11:44:53 +00001308 if (PyErr_WarnEx(PyExc_ImportWarning,
1309 warnstr, 1)) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001310 return NULL;
1311 }
1312 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001313 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001314#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001315#if defined(PYOS_OS2)
1316 /* take a snapshot of the module spec for restoration
1317 * after the 8 character DLL hackery
1318 */
1319 saved_buf = strdup(buf);
1320 saved_len = len;
1321 saved_namelen = namelen;
1322#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001323 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001324#if defined(PYOS_OS2)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001325 /* OS/2 limits DLLs to 8 character names (w/o
1326 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001327 * so if the name is longer than that and its a
1328 * dynamically loaded module we're going to try,
1329 * truncate the name before trying
1330 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001331 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001332 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001333 const struct filedescr *scan;
1334 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001335 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001336 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001337 break;
1338 else
1339 scan++;
1340 }
1341 if (scan->suffix != NULL) {
1342 /* yes, so truncate the name */
1343 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001344 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001345 buf[len] = '\0';
1346 }
1347 }
1348#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001349 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001350 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001351 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001352 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001353 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001354 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001355 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001356 if (fp != NULL) {
1357 if (case_ok(buf, len, namelen, name))
1358 break;
1359 else { /* continue search */
1360 fclose(fp);
1361 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001362 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001363 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001364#if defined(PYOS_OS2)
1365 /* restore the saved snapshot */
1366 strcpy(buf, saved_buf);
1367 len = saved_len;
1368 namelen = saved_namelen;
1369#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001370 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001371#if defined(PYOS_OS2)
1372 /* don't need/want the module name snapshot anymore */
1373 if (saved_buf)
1374 {
1375 free(saved_buf);
1376 saved_buf = NULL;
1377 }
1378#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001379 if (fp != NULL)
1380 break;
1381 }
1382 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001383 PyErr_Format(PyExc_ImportError,
1384 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001385 return NULL;
1386 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001387 *p_fp = fp;
1388 return fdp;
1389}
1390
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001391/* Helpers for main.c
1392 * Find the source file corresponding to a named module
1393 */
1394struct filedescr *
1395_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1396 size_t buflen, FILE **p_fp, PyObject **p_loader)
1397{
1398 return find_module((char *) name, (char *) name, path,
1399 buf, buflen, p_fp, p_loader);
1400}
1401
1402PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1403{
1404 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1405}
1406
Martin v. Löwis18e16552006-02-15 17:27:45 +00001407/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001408 * The arguments here are tricky, best shown by example:
1409 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1410 * ^ ^ ^ ^
1411 * |--------------------- buf ---------------------|
1412 * |------------------- len ------------------|
1413 * |------ name -------|
1414 * |----- namelen -----|
1415 * buf is the full path, but len only counts up to (& exclusive of) the
1416 * extension. name is the module name, also exclusive of extension.
1417 *
1418 * We've already done a successful stat() or fopen() on buf, so know that
1419 * there's some match, possibly case-insensitive.
1420 *
Tim Peters50d8d372001-02-28 05:34:27 +00001421 * case_ok() is to return 1 if there's a case-sensitive match for
1422 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1423 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001424 *
Tim Peters50d8d372001-02-28 05:34:27 +00001425 * case_ok() is used to implement case-sensitive import semantics even
1426 * on platforms with case-insensitive filesystems. It's trivial to implement
1427 * for case-sensitive filesystems. It's pretty much a cross-platform
1428 * nightmare for systems with case-insensitive filesystems.
1429 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001430
Tim Peters50d8d372001-02-28 05:34:27 +00001431/* First we may need a pile of platform-specific header files; the sequence
1432 * of #if's here should match the sequence in the body of case_ok().
1433 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001434#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001435#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001436
Tim Peters50d8d372001-02-28 05:34:27 +00001437#elif defined(DJGPP)
1438#include <dir.h>
1439
Jason Tishler7961aa62005-05-20 00:56:54 +00001440#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001441#include <sys/types.h>
1442#include <dirent.h>
1443
Andrew MacIntyred9400542002-02-26 11:41:34 +00001444#elif defined(PYOS_OS2)
1445#define INCL_DOS
1446#define INCL_DOSERRORS
1447#define INCL_NOPMAPI
1448#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00001449#endif
1450
Guido van Rossum0980bd91998-02-13 17:18:36 +00001451static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001452case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001453{
Tim Peters50d8d372001-02-28 05:34:27 +00001454/* Pick a platform-specific implementation; the sequence of #if's here should
1455 * match the sequence just above.
1456 */
1457
Jason Tishler7961aa62005-05-20 00:56:54 +00001458/* MS_WINDOWS */
1459#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001460 WIN32_FIND_DATA data;
1461 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001462
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001463 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001464 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001465
Guido van Rossum0980bd91998-02-13 17:18:36 +00001466 h = FindFirstFile(buf, &data);
1467 if (h == INVALID_HANDLE_VALUE) {
1468 PyErr_Format(PyExc_NameError,
1469 "Can't find file for module %.100s\n(filename %.300s)",
1470 name, buf);
1471 return 0;
1472 }
1473 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001474 return strncmp(data.cFileName, name, namelen) == 0;
1475
1476/* DJGPP */
1477#elif defined(DJGPP)
1478 struct ffblk ffblk;
1479 int done;
1480
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001481 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001482 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001483
1484 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1485 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001486 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001487 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001488 name, buf);
1489 return 0;
1490 }
Tim Peters50d8d372001-02-28 05:34:27 +00001491 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001492
Jason Tishler7961aa62005-05-20 00:56:54 +00001493/* new-fangled macintosh (macosx) or Cygwin */
1494#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001495 DIR *dirp;
1496 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001497 char dirname[MAXPATHLEN + 1];
1498 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001499
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001500 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001501 return 1;
1502
Tim Petersd1e87a82001-03-01 18:12:00 +00001503 /* Copy the dir component into dirname; substitute "." if empty */
1504 if (dirlen <= 0) {
1505 dirname[0] = '.';
1506 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001507 }
1508 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001509 assert(dirlen <= MAXPATHLEN);
1510 memcpy(dirname, buf, dirlen);
1511 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001512 }
1513 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001514 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001515 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001516 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001517 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001518 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001519#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001520 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001521#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001522 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001523#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001524 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001525 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001526 (void)closedir(dirp);
1527 return 1; /* Found */
1528 }
1529 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001530 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001531 }
Tim Peters430f5d42001-03-01 01:30:56 +00001532 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001533
Andrew MacIntyred9400542002-02-26 11:41:34 +00001534/* OS/2 */
1535#elif defined(PYOS_OS2)
1536 HDIR hdir = 1;
1537 ULONG srchcnt = 1;
1538 FILEFINDBUF3 ffbuf;
1539 APIRET rc;
1540
1541 if (getenv("PYTHONCASEOK") != NULL)
1542 return 1;
1543
1544 rc = DosFindFirst(buf,
1545 &hdir,
1546 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1547 &ffbuf, sizeof(ffbuf),
1548 &srchcnt,
1549 FIL_STANDARD);
1550 if (rc != NO_ERROR)
1551 return 0;
1552 return strncmp(ffbuf.achName, name, namelen) == 0;
1553
Tim Peters50d8d372001-02-28 05:34:27 +00001554/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1555#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001556 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001557
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001558#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001559}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001560
Guido van Rossum0980bd91998-02-13 17:18:36 +00001561
Guido van Rossum197346f1997-10-31 18:38:52 +00001562#ifdef HAVE_STAT
1563/* Helper to look for __init__.py or __init__.py[co] in potential package */
1564static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001565find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001566{
Tim Peters0f9431f2001-07-05 03:47:53 +00001567 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001568 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001569 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001570 struct stat statbuf;
1571
Tim Peters0f9431f2001-07-05 03:47:53 +00001572/* For calling case_ok(buf, len, namelen, name):
1573 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1574 * ^ ^ ^ ^
1575 * |--------------------- buf ---------------------|
1576 * |------------------- len ------------------|
1577 * |------ name -------|
1578 * |----- namelen -----|
1579 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001580 if (save_len + 13 >= MAXPATHLEN)
1581 return 0;
1582 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001583 pname = buf + i;
1584 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001585 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001586 if (case_ok(buf,
1587 save_len + 9, /* len("/__init__") */
1588 8, /* len("__init__") */
1589 pname)) {
1590 buf[save_len] = '\0';
1591 return 1;
1592 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001593 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001594 i += strlen(pname);
1595 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001596 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001597 if (case_ok(buf,
1598 save_len + 9, /* len("/__init__") */
1599 8, /* len("__init__") */
1600 pname)) {
1601 buf[save_len] = '\0';
1602 return 1;
1603 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001604 }
1605 buf[save_len] = '\0';
1606 return 0;
1607}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001608
Guido van Rossum197346f1997-10-31 18:38:52 +00001609#endif /* HAVE_STAT */
1610
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001611
Tim Petersdbd9ba62000-07-09 03:09:57 +00001612static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001613
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001614/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001615 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001616
Guido van Rossum79f25d91997-04-29 20:08:16 +00001617static PyObject *
Just van Rossum52e14d62002-12-30 22:08:05 +00001618load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001619{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001620 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001621 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001622 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001623
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001624 /* First check that there's an open file (if we need one) */
1625 switch (type) {
1626 case PY_SOURCE:
1627 case PY_COMPILED:
1628 if (fp == NULL) {
1629 PyErr_Format(PyExc_ValueError,
1630 "file object required for import (type code %d)",
1631 type);
1632 return NULL;
1633 }
1634 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001635
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001636 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001637
1638 case PY_SOURCE:
1639 m = load_source_module(name, buf, fp);
1640 break;
1641
1642 case PY_COMPILED:
1643 m = load_compiled_module(name, buf, fp);
1644 break;
1645
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001646#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001647 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001648 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001649 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001650#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001651
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001652 case PKG_DIRECTORY:
1653 m = load_package(name, buf);
1654 break;
1655
1656 case C_BUILTIN:
1657 case PY_FROZEN:
Guido van Rossuma5568d31998-03-05 03:45:08 +00001658 if (buf != NULL && buf[0] != '\0')
1659 name = buf;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001660 if (type == C_BUILTIN)
1661 err = init_builtin(name);
1662 else
1663 err = PyImport_ImportFrozenModule(name);
1664 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001665 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001666 if (err == 0) {
1667 PyErr_Format(PyExc_ImportError,
1668 "Purported %s module %.200s not found",
1669 type == C_BUILTIN ?
1670 "builtin" : "frozen",
1671 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001672 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001673 }
1674 modules = PyImport_GetModuleDict();
1675 m = PyDict_GetItemString(modules, name);
1676 if (m == NULL) {
1677 PyErr_Format(
1678 PyExc_ImportError,
1679 "%s module %.200s not properly initialized",
1680 type == C_BUILTIN ?
1681 "builtin" : "frozen",
1682 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001683 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001684 }
1685 Py_INCREF(m);
1686 break;
1687
Just van Rossum52e14d62002-12-30 22:08:05 +00001688 case IMP_HOOK: {
1689 if (loader == NULL) {
1690 PyErr_SetString(PyExc_ImportError,
1691 "import hook without loader");
1692 return NULL;
1693 }
1694 m = PyObject_CallMethod(loader, "load_module", "s", name);
1695 break;
1696 }
1697
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001698 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001699 PyErr_Format(PyExc_ImportError,
1700 "Don't know how to import %.200s (type code %d)",
1701 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001702 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001703
1704 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001705
1706 return m;
1707}
1708
1709
1710/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00001711 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001712 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001713
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001714static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001715init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001716{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001717 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001718
Greg Ward201baee2001-10-04 14:52:06 +00001719 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001720 return 1;
1721
Guido van Rossum771c6c81997-10-31 18:37:24 +00001722 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001723 if (strcmp(name, p->name) == 0) {
1724 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001725 PyErr_Format(PyExc_ImportError,
1726 "Cannot re-init internal module %.200s",
1727 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001728 return -1;
1729 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001730 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001731 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001732 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001733 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001734 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001735 if (_PyImport_FixupExtension(name, name) == NULL)
1736 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001737 return 1;
1738 }
1739 }
1740 return 0;
1741}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001742
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001743
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001744/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001745
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001746static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001747find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001748{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001749 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001750
Guido van Rossum79f25d91997-04-29 20:08:16 +00001751 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001752 if (p->name == NULL)
1753 return NULL;
1754 if (strcmp(p->name, name) == 0)
1755 break;
1756 }
1757 return p;
1758}
1759
Guido van Rossum79f25d91997-04-29 20:08:16 +00001760static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001761get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001762{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001763 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001764 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001765
1766 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001767 PyErr_Format(PyExc_ImportError,
1768 "No such frozen object named %.200s",
1769 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001770 return NULL;
1771 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001772 if (p->code == NULL) {
1773 PyErr_Format(PyExc_ImportError,
1774 "Excluded frozen object named %.200s",
1775 name);
1776 return NULL;
1777 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001778 size = p->size;
1779 if (size < 0)
1780 size = -size;
1781 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001782}
1783
1784/* Initialize a frozen module.
1785 Return 1 for succes, 0 if the module is not found, and -1 with
1786 an exception set if the initialization failed.
1787 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001788
1789int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001790PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001791{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001792 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001793 PyObject *co;
1794 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001795 int ispackage;
1796 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001797
1798 if (p == NULL)
1799 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001800 if (p->code == NULL) {
1801 PyErr_Format(PyExc_ImportError,
1802 "Excluded frozen object named %.200s",
1803 name);
1804 return -1;
1805 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001806 size = p->size;
1807 ispackage = (size < 0);
1808 if (ispackage)
1809 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001810 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001811 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001812 name, ispackage ? " package" : "");
1813 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001814 if (co == NULL)
1815 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001816 if (!PyCode_Check(co)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001817 PyErr_Format(PyExc_TypeError,
1818 "frozen object %.200s is not a code object",
1819 name);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001820 goto err_return;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001821 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001822 if (ispackage) {
1823 /* Set __path__ to the package name */
1824 PyObject *d, *s;
1825 int err;
1826 m = PyImport_AddModule(name);
1827 if (m == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001828 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001829 d = PyModule_GetDict(m);
Martin v. Löwis5b222132007-06-10 09:51:05 +00001830 s = PyUnicode_InternFromString(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001831 if (s == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001832 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001833 err = PyDict_SetItemString(d, "__path__", s);
1834 Py_DECREF(s);
1835 if (err != 0)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001836 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001837 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001838 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001839 if (m == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001840 goto err_return;
1841 Py_DECREF(co);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001842 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001843 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001844err_return:
1845 Py_DECREF(co);
1846 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001847}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001848
1849
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001850/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001851 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001852
Guido van Rossum79f25d91997-04-29 20:08:16 +00001853PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001854PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001855{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001856 PyObject *pname;
1857 PyObject *result;
1858
Martin v. Löwis5b222132007-06-10 09:51:05 +00001859 pname = PyUnicode_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00001860 if (pname == NULL)
1861 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001862 result = PyImport_Import(pname);
1863 Py_DECREF(pname);
1864 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001865}
1866
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001867/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001868static PyObject *get_parent(PyObject *globals, char *buf,
1869 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001870static PyObject *load_next(PyObject *mod, PyObject *altmod,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001871 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001872static int mark_miss(char *name);
1873static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001874 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001875static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001876
1877/* The Magnum Opus of dotted-name import :-) */
1878
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001879static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001880import_module_level(char *name, PyObject *globals, PyObject *locals,
1881 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001882{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001883 char buf[MAXPATHLEN+1];
Martin v. Löwis18e16552006-02-15 17:27:45 +00001884 Py_ssize_t buflen = 0;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001885 PyObject *parent, *head, *next, *tail;
1886
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001887 parent = get_parent(globals, buf, &buflen, level);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001888 if (parent == NULL)
1889 return NULL;
1890
1891 head = load_next(parent, Py_None, &name, buf, &buflen);
1892 if (head == NULL)
1893 return NULL;
1894
1895 tail = head;
1896 Py_INCREF(tail);
1897 while (name) {
1898 next = load_next(tail, tail, &name, buf, &buflen);
1899 Py_DECREF(tail);
1900 if (next == NULL) {
1901 Py_DECREF(head);
1902 return NULL;
1903 }
1904 tail = next;
1905 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001906 if (tail == Py_None) {
1907 /* If tail is Py_None, both get_parent and load_next found
1908 an empty module name: someone called __import__("") or
1909 doctored faulty bytecode */
1910 Py_DECREF(tail);
1911 Py_DECREF(head);
1912 PyErr_SetString(PyExc_ValueError,
1913 "Empty module name");
1914 return NULL;
1915 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001916
1917 if (fromlist != NULL) {
1918 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
1919 fromlist = NULL;
1920 }
1921
1922 if (fromlist == NULL) {
1923 Py_DECREF(tail);
1924 return head;
1925 }
1926
1927 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001928 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001929 Py_DECREF(tail);
1930 return NULL;
1931 }
1932
1933 return tail;
1934}
1935
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001936/* For DLL compatibility */
1937#undef PyImport_ImportModuleEx
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001938PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001939PyImport_ImportModuleEx(char *name, PyObject *globals, PyObject *locals,
1940 PyObject *fromlist)
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001941{
1942 PyObject *result;
1943 lock_import();
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001944 result = import_module_level(name, globals, locals, fromlist, -1);
1945 if (unlock_import() < 0) {
1946 Py_XDECREF(result);
1947 PyErr_SetString(PyExc_RuntimeError,
1948 "not holding the import lock");
1949 return NULL;
1950 }
1951 return result;
1952}
1953#define PyImport_ImportModuleEx(n, g, l, f) \
1954 PyImport_ImportModuleLevel(n, g, l, f, -1);
1955
1956PyObject *
1957PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
1958 PyObject *fromlist, int level)
1959{
1960 PyObject *result;
1961 lock_import();
1962 result = import_module_level(name, globals, locals, fromlist, level);
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00001963 if (unlock_import() < 0) {
1964 Py_XDECREF(result);
1965 PyErr_SetString(PyExc_RuntimeError,
1966 "not holding the import lock");
1967 return NULL;
1968 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001969 return result;
1970}
1971
Fred Drake87590902004-05-28 20:21:36 +00001972/* Return the package that an import is being performed in. If globals comes
1973 from the module foo.bar.bat (not itself a package), this returns the
1974 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001975 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00001976
1977 The *name* of the returned package is returned in buf, with the length of
1978 the name in *p_buflen.
1979
1980 If globals doesn't come from a package or a module in a package, or a
1981 corresponding entry is not found in sys.modules, Py_None is returned.
1982*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001983static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001984get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001985{
1986 static PyObject *namestr = NULL;
1987 static PyObject *pathstr = NULL;
1988 PyObject *modname, *modpath, *modules, *parent;
1989
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001990 if (globals == NULL || !PyDict_Check(globals) || !level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001991 return Py_None;
1992
1993 if (namestr == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00001994 namestr = PyUnicode_InternFromString("__name__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001995 if (namestr == NULL)
1996 return NULL;
1997 }
1998 if (pathstr == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00001999 pathstr = PyUnicode_InternFromString("__path__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002000 if (pathstr == NULL)
2001 return NULL;
2002 }
2003
2004 *buf = '\0';
2005 *p_buflen = 0;
2006 modname = PyDict_GetItem(globals, namestr);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002007 if (modname == NULL || (!PyString_Check(modname) && !PyUnicode_Check(modname)))
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002008 return Py_None;
2009
Martin v. Löwis5b222132007-06-10 09:51:05 +00002010 if (PyUnicode_Check(modname)) {
2011 /* XXX need to support Unicode better */
2012 modname = _PyUnicode_AsDefaultEncodedString(modname, NULL);
2013 if (!modname) {
2014 PyErr_Clear();
2015 return NULL;
2016 }
2017 }
2018
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002019 modpath = PyDict_GetItem(globals, pathstr);
2020 if (modpath != NULL) {
Martin v. Löwis725507b2006-03-07 12:08:51 +00002021 Py_ssize_t len = PyString_GET_SIZE(modname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002022 if (len > MAXPATHLEN) {
2023 PyErr_SetString(PyExc_ValueError,
2024 "Module name too long");
2025 return NULL;
2026 }
2027 strcpy(buf, PyString_AS_STRING(modname));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002028 }
2029 else {
2030 char *start = PyString_AS_STRING(modname);
2031 char *lastdot = strrchr(start, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002032 size_t len;
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002033 if (lastdot == NULL && level > 0) {
2034 PyErr_SetString(PyExc_ValueError,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002035 "Attempted relative import in non-package");
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002036 return NULL;
2037 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002038 if (lastdot == NULL)
2039 return Py_None;
2040 len = lastdot - start;
2041 if (len >= MAXPATHLEN) {
2042 PyErr_SetString(PyExc_ValueError,
2043 "Module name too long");
2044 return NULL;
2045 }
2046 strncpy(buf, start, len);
2047 buf[len] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002048 }
2049
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002050 while (--level > 0) {
2051 char *dot = strrchr(buf, '.');
2052 if (dot == NULL) {
2053 PyErr_SetString(PyExc_ValueError,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002054 "Attempted relative import beyond "
2055 "toplevel package");
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002056 return NULL;
2057 }
2058 *dot = '\0';
2059 }
2060 *p_buflen = strlen(buf);
2061
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002062 modules = PyImport_GetModuleDict();
2063 parent = PyDict_GetItemString(modules, buf);
2064 if (parent == NULL)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002065 PyErr_Format(PyExc_SystemError,
2066 "Parent module '%.200s' not loaded", buf);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002067 return parent;
2068 /* We expect, but can't guarantee, if parent != None, that:
2069 - parent.__name__ == buf
2070 - parent.__dict__ is globals
2071 If this is violated... Who cares? */
2072}
2073
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002074/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002075static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002076load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002077 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002078{
2079 char *name = *p_name;
2080 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002081 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002082 char *p;
2083 PyObject *result;
2084
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002085 if (strlen(name) == 0) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002086 /* completely empty module name should only happen in
2087 'from . import' (or '__import__("")')*/
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002088 Py_INCREF(mod);
2089 *p_name = NULL;
2090 return mod;
2091 }
2092
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002093 if (dot == NULL) {
2094 *p_name = NULL;
2095 len = strlen(name);
2096 }
2097 else {
2098 *p_name = dot+1;
2099 len = dot-name;
2100 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002101 if (len == 0) {
2102 PyErr_SetString(PyExc_ValueError,
2103 "Empty module name");
2104 return NULL;
2105 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002106
2107 p = buf + *p_buflen;
2108 if (p != buf)
2109 *p++ = '.';
2110 if (p+len-buf >= MAXPATHLEN) {
2111 PyErr_SetString(PyExc_ValueError,
2112 "Module name too long");
2113 return NULL;
2114 }
2115 strncpy(p, name, len);
2116 p[len] = '\0';
2117 *p_buflen = p+len-buf;
2118
2119 result = import_submodule(mod, p, buf);
2120 if (result == Py_None && altmod != mod) {
2121 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002122 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002123 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002124 if (result != NULL && result != Py_None) {
2125 if (mark_miss(buf) != 0) {
2126 Py_DECREF(result);
2127 return NULL;
2128 }
2129 strncpy(buf, name, len);
2130 buf[len] = '\0';
2131 *p_buflen = len;
2132 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002133 }
2134 if (result == NULL)
2135 return NULL;
2136
2137 if (result == Py_None) {
2138 Py_DECREF(result);
2139 PyErr_Format(PyExc_ImportError,
2140 "No module named %.200s", name);
2141 return NULL;
2142 }
2143
2144 return result;
2145}
2146
2147static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002148mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002149{
2150 PyObject *modules = PyImport_GetModuleDict();
2151 return PyDict_SetItemString(modules, name, Py_None);
2152}
2153
2154static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002155ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002156 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002157{
2158 int i;
2159
2160 if (!PyObject_HasAttrString(mod, "__path__"))
2161 return 1;
2162
2163 for (i = 0; ; i++) {
2164 PyObject *item = PySequence_GetItem(fromlist, i);
2165 int hasit;
2166 if (item == NULL) {
2167 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2168 PyErr_Clear();
2169 return 1;
2170 }
2171 return 0;
2172 }
Martin v. Löwis5b222132007-06-10 09:51:05 +00002173 if (PyString_Check(item)) {
2174 /* XXX there shouldn't be any str8 objects here */
2175 PyObject *uni = PyUnicode_DecodeASCII(PyString_AsString(item),
2176 PyString_Size(item),
2177 "strict");
2178 Py_DECREF(item);
2179 if (!uni)
2180 return 0;
2181 item = uni;
2182 }
2183 if (!PyUnicode_Check(item)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002184 PyErr_SetString(PyExc_TypeError,
Martin v. Löwis5b222132007-06-10 09:51:05 +00002185 "Item in ``from list'' not a unicode string");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002186 Py_DECREF(item);
2187 return 0;
2188 }
Martin v. Löwis5b222132007-06-10 09:51:05 +00002189 if (PyUnicode_AS_UNICODE(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002190 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002191 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002192 /* See if the package defines __all__ */
2193 if (recursive)
2194 continue; /* Avoid endless recursion */
2195 all = PyObject_GetAttrString(mod, "__all__");
2196 if (all == NULL)
2197 PyErr_Clear();
2198 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002199 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002200 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002201 if (!ret)
2202 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002203 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002204 continue;
2205 }
2206 hasit = PyObject_HasAttr(mod, item);
2207 if (!hasit) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002208 PyObject *item8;
2209 char *subname;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002210 PyObject *submod;
2211 char *p;
Martin v. Löwis5b222132007-06-10 09:51:05 +00002212 if (!Py_FileSystemDefaultEncoding) {
2213 item8 = PyUnicode_EncodeASCII(PyUnicode_AsUnicode(item),
2214 PyUnicode_GetSize(item),
Martin v. Löwis427dbff2007-06-12 05:53:00 +00002215 NULL);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002216 } else {
Martin v. Löwis427dbff2007-06-12 05:53:00 +00002217 item8 = PyUnicode_AsEncodedString(item,
2218 Py_FileSystemDefaultEncoding, NULL);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002219 }
2220 if (!item8) {
2221 PyErr_SetString(PyExc_ValueError, "Cannot encode path item");
2222 return 0;
2223 }
2224 subname = PyBytes_AsString(item8);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002225 if (buflen + strlen(subname) >= MAXPATHLEN) {
2226 PyErr_SetString(PyExc_ValueError,
2227 "Module name too long");
2228 Py_DECREF(item);
2229 return 0;
2230 }
2231 p = buf + buflen;
2232 *p++ = '.';
2233 strcpy(p, subname);
2234 submod = import_submodule(mod, subname, buf);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002235 Py_DECREF(item8);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002236 Py_XDECREF(submod);
2237 if (submod == NULL) {
2238 Py_DECREF(item);
2239 return 0;
2240 }
2241 }
2242 Py_DECREF(item);
2243 }
2244
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002245 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002246}
2247
Neil Schemenauer00b09662003-06-16 21:03:07 +00002248static int
2249add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2250 PyObject *modules)
2251{
2252 if (mod == Py_None)
2253 return 1;
2254 /* Irrespective of the success of this load, make a
2255 reference to it in the parent package module. A copy gets
2256 saved in the modules dictionary under the full name, so get a
2257 reference from there, if need be. (The exception is when the
2258 load failed with a SyntaxError -- then there's no trace in
2259 sys.modules. In that case, of course, do nothing extra.) */
2260 if (submod == NULL) {
2261 submod = PyDict_GetItemString(modules, fullname);
2262 if (submod == NULL)
2263 return 1;
2264 }
2265 if (PyModule_Check(mod)) {
2266 /* We can't use setattr here since it can give a
2267 * spurious warning if the submodule name shadows a
2268 * builtin name */
2269 PyObject *dict = PyModule_GetDict(mod);
2270 if (!dict)
2271 return 0;
2272 if (PyDict_SetItemString(dict, subname, submod) < 0)
2273 return 0;
2274 }
2275 else {
2276 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2277 return 0;
2278 }
2279 return 1;
2280}
2281
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002282static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002283import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002284{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002285 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002286 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002287
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002288 /* Require:
2289 if mod == None: subname == fullname
2290 else: mod.__name__ + "." + subname == fullname
2291 */
2292
Tim Peters50d8d372001-02-28 05:34:27 +00002293 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002294 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002295 }
2296 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002297 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002298 char buf[MAXPATHLEN+1];
2299 struct filedescr *fdp;
2300 FILE *fp = NULL;
2301
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002302 if (mod == Py_None)
2303 path = NULL;
2304 else {
2305 path = PyObject_GetAttrString(mod, "__path__");
2306 if (path == NULL) {
2307 PyErr_Clear();
2308 Py_INCREF(Py_None);
2309 return Py_None;
2310 }
2311 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002312
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002313 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002314 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2315 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002316 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002317 if (fdp == NULL) {
2318 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2319 return NULL;
2320 PyErr_Clear();
2321 Py_INCREF(Py_None);
2322 return Py_None;
2323 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002324 m = load_module(fullname, fp, buf, fdp->type, loader);
2325 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002326 if (fp)
2327 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002328 if (!add_submodule(mod, m, fullname, subname, modules)) {
2329 Py_XDECREF(m);
2330 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002331 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002332 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002333
2334 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002335}
2336
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002337
2338/* Re-import a module of any kind and return its module object, WITH
2339 INCREMENTED REFERENCE COUNT */
2340
Guido van Rossum79f25d91997-04-29 20:08:16 +00002341PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002342PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002343{
Guido van Rossumd8faa362007-04-27 19:54:29 +00002344 PyInterpreterState *interp = PyThreadState_Get()->interp;
2345 PyObject *modules_reloading = interp->modules_reloading;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002346 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossumd8faa362007-04-27 19:54:29 +00002347 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002348 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002349 char buf[MAXPATHLEN+1];
2350 struct filedescr *fdp;
2351 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002352 PyObject *newm;
Guido van Rossumd8faa362007-04-27 19:54:29 +00002353
2354 if (modules_reloading == NULL) {
2355 Py_FatalError("PyImport_ReloadModule: "
Guido van Rossume7ba4952007-06-06 23:52:48 +00002356 "no modules_reloading dictionary!");
Guido van Rossumd8faa362007-04-27 19:54:29 +00002357 return NULL;
2358 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002359
Guido van Rossum79f25d91997-04-29 20:08:16 +00002360 if (m == NULL || !PyModule_Check(m)) {
2361 PyErr_SetString(PyExc_TypeError,
2362 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002363 return NULL;
2364 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002365 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002366 if (name == NULL)
2367 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002368 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002369 PyErr_Format(PyExc_ImportError,
2370 "reload(): module %.200s not in sys.modules",
2371 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002372 return NULL;
2373 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00002374 existing_m = PyDict_GetItemString(modules_reloading, name);
2375 if (existing_m != NULL) {
2376 /* Due to a recursive reload, this module is already
2377 being reloaded. */
2378 Py_INCREF(existing_m);
2379 return existing_m;
2380 }
2381 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2382 return NULL;
2383
Guido van Rossum222ef561997-09-06 19:41:09 +00002384 subname = strrchr(name, '.');
2385 if (subname == NULL)
2386 subname = name;
2387 else {
2388 PyObject *parentname, *parent;
2389 parentname = PyString_FromStringAndSize(name, (subname-name));
Guido van Rossumd8faa362007-04-27 19:54:29 +00002390 if (parentname == NULL) {
2391 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002392 return NULL;
Guido van Rossumd8faa362007-04-27 19:54:29 +00002393 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002394 parent = PyDict_GetItem(modules, parentname);
2395 if (parent == NULL) {
2396 PyErr_Format(PyExc_ImportError,
2397 "reload(): parent %.200s not in sys.modules",
Georg Brandl0c55f292005-09-14 06:56:20 +00002398 PyString_AS_STRING(parentname));
2399 Py_DECREF(parentname);
Guido van Rossume7ba4952007-06-06 23:52:48 +00002400 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002401 return NULL;
2402 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002403 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002404 subname++;
2405 path = PyObject_GetAttrString(parent, "__path__");
2406 if (path == NULL)
2407 PyErr_Clear();
2408 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002409 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002410 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002411 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002412
2413 if (fdp == NULL) {
2414 Py_XDECREF(loader);
Guido van Rossumd8faa362007-04-27 19:54:29 +00002415 imp_modules_reloading_clear();
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002416 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002417 }
2418
2419 newm = load_module(name, fp, buf, fdp->type, loader);
2420 Py_XDECREF(loader);
2421
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002422 if (fp)
2423 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002424 if (newm == NULL) {
2425 /* load_module probably removed name from modules because of
2426 * the error. Put back the original module object. We're
2427 * going to return NULL in this case regardless of whether
2428 * replacing name succeeds, so the return value is ignored.
2429 */
2430 PyDict_SetItemString(modules, name, m);
2431 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00002432 imp_modules_reloading_clear();
Tim Peters1cd70172004-08-02 03:52:12 +00002433 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002434}
2435
2436
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002437/* Higher-level import emulator which emulates the "import" statement
2438 more accurately -- it invokes the __import__() function from the
2439 builtins of the current globals. This means that the import is
2440 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002441 environment, e.g. by "rexec".
2442 A dummy list ["__doc__"] is passed as the 4th argument so that
2443 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
2444 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002445
2446PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002447PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002448{
2449 static PyObject *silly_list = NULL;
2450 static PyObject *builtins_str = NULL;
2451 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002452 PyObject *globals = NULL;
2453 PyObject *import = NULL;
2454 PyObject *builtins = NULL;
2455 PyObject *r = NULL;
2456
2457 /* Initialize constant string objects */
2458 if (silly_list == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002459 import_str = PyUnicode_InternFromString("__import__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002460 if (import_str == NULL)
2461 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +00002462 builtins_str = PyUnicode_InternFromString("__builtins__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002463 if (builtins_str == NULL)
2464 return NULL;
2465 silly_list = Py_BuildValue("[s]", "__doc__");
2466 if (silly_list == NULL)
2467 return NULL;
2468 }
2469
2470 /* Get the builtins from current globals */
2471 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002472 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002473 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002474 builtins = PyObject_GetItem(globals, builtins_str);
2475 if (builtins == NULL)
2476 goto err;
2477 }
2478 else {
2479 /* No globals -- use standard builtins, and fake globals */
2480 PyErr_Clear();
2481
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002482 builtins = PyImport_ImportModuleLevel("__builtin__",
2483 NULL, NULL, NULL, 0);
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002484 if (builtins == NULL)
2485 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002486 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2487 if (globals == NULL)
2488 goto err;
2489 }
2490
2491 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002492 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002493 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002494 if (import == NULL)
2495 PyErr_SetObject(PyExc_KeyError, import_str);
2496 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002497 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002498 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002499 if (import == NULL)
2500 goto err;
2501
Guido van Rossumd8faa362007-04-27 19:54:29 +00002502 /* Call the __import__ function with the proper argument list */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002503 r = PyObject_CallFunctionObjArgs(import, module_name, globals,
2504 globals, silly_list, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002505
2506 err:
2507 Py_XDECREF(globals);
2508 Py_XDECREF(builtins);
2509 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002510
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002511 return r;
2512}
2513
2514
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002515/* Module 'imp' provides Python access to the primitives used for
2516 importing modules.
2517*/
2518
Guido van Rossum79f25d91997-04-29 20:08:16 +00002519static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002520imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002521{
2522 char buf[4];
2523
Guido van Rossum96774c12000-05-01 20:19:08 +00002524 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2525 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2526 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2527 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002528
Guido van Rossumad8d3002007-08-03 18:40:49 +00002529 return PyBytes_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002530}
2531
Guido van Rossum79f25d91997-04-29 20:08:16 +00002532static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002533imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002534{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002535 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002536 struct filedescr *fdp;
2537
Guido van Rossum79f25d91997-04-29 20:08:16 +00002538 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002539 if (list == NULL)
2540 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002541 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2542 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002543 fdp->suffix, fdp->mode, fdp->type);
2544 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002545 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002546 return NULL;
2547 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002548 if (PyList_Append(list, item) < 0) {
2549 Py_DECREF(list);
2550 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002551 return NULL;
2552 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002553 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002554 }
2555 return list;
2556}
2557
Guido van Rossum79f25d91997-04-29 20:08:16 +00002558static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002559call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002560{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002561 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002562 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002563 struct filedescr *fdp;
2564 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002565 FILE *fp = NULL;
2566
2567 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002568 if (path == Py_None)
2569 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002570 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002571 if (fdp == NULL)
2572 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002573 if (fp != NULL) {
2574 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2575 if (fob == NULL) {
2576 fclose(fp);
2577 return NULL;
2578 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002579 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002580 else {
2581 fob = Py_None;
2582 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002583 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002584 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002585 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002586 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002587 return ret;
2588}
2589
Guido van Rossum79f25d91997-04-29 20:08:16 +00002590static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002591imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002592{
2593 char *name;
2594 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002595 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002596 return NULL;
2597 return call_find_module(name, path);
2598}
2599
2600static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002601imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002602{
2603 char *name;
2604 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002605 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002606 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002607 return NULL;
2608 ret = init_builtin(name);
2609 if (ret < 0)
2610 return NULL;
2611 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002612 Py_INCREF(Py_None);
2613 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002614 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002615 m = PyImport_AddModule(name);
2616 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002617 return m;
2618}
2619
Guido van Rossum79f25d91997-04-29 20:08:16 +00002620static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002621imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002622{
2623 char *name;
2624 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002625 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002626 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002627 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002628 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002629 if (ret < 0)
2630 return NULL;
2631 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002632 Py_INCREF(Py_None);
2633 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002634 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002635 m = PyImport_AddModule(name);
2636 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002637 return m;
2638}
2639
Guido van Rossum79f25d91997-04-29 20:08:16 +00002640static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002641imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002642{
2643 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002644
Guido van Rossum43713e52000-02-29 13:59:29 +00002645 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002646 return NULL;
2647 return get_frozen_object(name);
2648}
2649
Guido van Rossum79f25d91997-04-29 20:08:16 +00002650static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002651imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002652{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002653 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002654 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002655 return NULL;
Guido van Rossum50ee94f2002-04-09 18:00:58 +00002656 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002657}
2658
Guido van Rossum79f25d91997-04-29 20:08:16 +00002659static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002660imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002661{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002662 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002663 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002664 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002665 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002666 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00002667 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002668}
2669
2670static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002671get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002672{
2673 FILE *fp;
Guido van Rossumda5b8f22007-06-12 23:30:11 +00002674 if (mode[0] == 'U')
2675 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002676 if (fob == NULL) {
2677 fp = fopen(pathname, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002678 }
2679 else {
Guido van Rossumda5b8f22007-06-12 23:30:11 +00002680 int fd = PyObject_AsFileDescriptor(fob);
2681 if (fd == -1)
2682 return NULL;
2683 /* XXX This will leak a FILE struct. Fix this!!!!
2684 (But it doesn't leak a file descrioptor!) */
2685 fp = fdopen(fd, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002686 }
Guido van Rossumda5b8f22007-06-12 23:30:11 +00002687 if (fp == NULL)
2688 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002689 return fp;
2690}
2691
Guido van Rossum79f25d91997-04-29 20:08:16 +00002692static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002693imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002694{
2695 char *name;
2696 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002697 PyObject *fob = NULL;
2698 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002699 FILE *fp;
Guido van Rossumda5b8f22007-06-12 23:30:11 +00002700 if (!PyArg_ParseTuple(args, "ss|O:load_compiled",
2701 &name, &pathname, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002702 return NULL;
2703 fp = get_file(pathname, fob, "rb");
2704 if (fp == NULL)
2705 return NULL;
2706 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002707 if (fob == NULL)
2708 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002709 return m;
2710}
2711
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002712#ifdef HAVE_DYNAMIC_LOADING
2713
Guido van Rossum79f25d91997-04-29 20:08:16 +00002714static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002715imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002716{
2717 char *name;
2718 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002719 PyObject *fob = NULL;
2720 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002721 FILE *fp = NULL;
Guido van Rossumda5b8f22007-06-12 23:30:11 +00002722 if (!PyArg_ParseTuple(args, "ss|O:load_dynamic",
2723 &name, &pathname, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002724 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002725 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002726 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002727 if (fp == NULL)
2728 return NULL;
2729 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002730 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002731 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002732}
2733
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002734#endif /* HAVE_DYNAMIC_LOADING */
2735
Guido van Rossum79f25d91997-04-29 20:08:16 +00002736static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002737imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002738{
2739 char *name;
2740 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002741 PyObject *fob = NULL;
2742 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002743 FILE *fp;
Guido van Rossumda5b8f22007-06-12 23:30:11 +00002744 if (!PyArg_ParseTuple(args, "ss|O:load_source",
2745 &name, &pathname, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002746 return NULL;
2747 fp = get_file(pathname, fob, "r");
2748 if (fp == NULL)
2749 return NULL;
2750 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002751 if (fob == NULL)
2752 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002753 return m;
2754}
2755
Guido van Rossum79f25d91997-04-29 20:08:16 +00002756static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002757imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002758{
2759 char *name;
2760 PyObject *fob;
2761 char *pathname;
2762 char *suffix; /* Unused */
2763 char *mode;
2764 int type;
2765 FILE *fp;
2766
Guido van Rossum43713e52000-02-29 13:59:29 +00002767 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002768 &name, &fob, &pathname,
2769 &suffix, &mode, &type))
2770 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002771 if (*mode) {
2772 /* Mode must start with 'r' or 'U' and must not contain '+'.
2773 Implicit in this test is the assumption that the mode
2774 may contain other modifiers like 'b' or 't'. */
2775
2776 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002777 PyErr_Format(PyExc_ValueError,
2778 "invalid file open mode %.200s", mode);
2779 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002780 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002781 }
2782 if (fob == Py_None)
2783 fp = NULL;
2784 else {
Guido van Rossumda5b8f22007-06-12 23:30:11 +00002785 fp = get_file(NULL, fob, mode);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002786 if (fp == NULL)
2787 return NULL;
2788 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002789 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002790}
2791
2792static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002793imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002794{
2795 char *name;
2796 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00002797 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002798 return NULL;
2799 return load_package(name, pathname);
2800}
2801
2802static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002803imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002804{
2805 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002806 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002807 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002808 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002809}
2810
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002811/* Doc strings */
2812
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002813PyDoc_STRVAR(doc_imp,
2814"This module provides the components needed to build your own\n\
2815__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002816
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002817PyDoc_STRVAR(doc_find_module,
2818"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002819Search for a module. If path is omitted or None, search for a\n\
2820built-in, frozen or special module and continue search in sys.path.\n\
2821The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002822package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002823
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002824PyDoc_STRVAR(doc_load_module,
2825"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002826Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002827The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002828
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002829PyDoc_STRVAR(doc_get_magic,
2830"get_magic() -> string\n\
2831Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002832
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002833PyDoc_STRVAR(doc_get_suffixes,
2834"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002835Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002836that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002837
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002838PyDoc_STRVAR(doc_new_module,
2839"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002840Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002841The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002842
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002843PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00002844"lock_held() -> boolean\n\
2845Return True if the import lock is currently held, else False.\n\
2846On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00002847
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002848PyDoc_STRVAR(doc_acquire_lock,
2849"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00002850Acquires the interpreter's import lock for the current thread.\n\
2851This lock should be used by import hooks to ensure thread-safety\n\
2852when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002853On platforms without threads, this function does nothing.");
2854
2855PyDoc_STRVAR(doc_release_lock,
2856"release_lock() -> None\n\
2857Release the interpreter's import lock.\n\
2858On platforms without threads, this function does nothing.");
2859
Guido van Rossum79f25d91997-04-29 20:08:16 +00002860static PyMethodDef imp_methods[] = {
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002861 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
2862 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
2863 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
2864 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
2865 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
2866 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
2867 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
2868 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002869 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00002870 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
2871 {"init_builtin", imp_init_builtin, METH_VARARGS},
2872 {"init_frozen", imp_init_frozen, METH_VARARGS},
2873 {"is_builtin", imp_is_builtin, METH_VARARGS},
2874 {"is_frozen", imp_is_frozen, METH_VARARGS},
2875 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002876#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00002877 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002878#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00002879 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00002880 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002881 {NULL, NULL} /* sentinel */
2882};
2883
Guido van Rossum1a8791e1998-08-04 22:46:29 +00002884static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002885setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002886{
2887 PyObject *v;
2888 int err;
2889
2890 v = PyInt_FromLong((long)value);
2891 err = PyDict_SetItemString(d, name, v);
2892 Py_XDECREF(v);
2893 return err;
2894}
2895
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002896typedef struct {
2897 PyObject_HEAD
2898} NullImporter;
2899
2900static int
2901NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
2902{
2903 char *path;
2904
2905 if (!_PyArg_NoKeywords("NullImporter()", kwds))
2906 return -1;
2907
2908 if (!PyArg_ParseTuple(args, "s:NullImporter",
2909 &path))
2910 return -1;
2911
2912 if (strlen(path) == 0) {
2913 PyErr_SetString(PyExc_ImportError, "empty pathname");
2914 return -1;
2915 } else {
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002916 struct stat statbuf;
2917 int rv;
2918
2919 rv = stat(path, &statbuf);
2920 if (rv == 0) {
2921 /* it exists */
2922 if (S_ISDIR(statbuf.st_mode)) {
2923 /* it's a directory */
2924 PyErr_SetString(PyExc_ImportError,
2925 "existing directory");
2926 return -1;
2927 }
2928 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002929 }
2930 return 0;
2931}
2932
2933static PyObject *
2934NullImporter_find_module(NullImporter *self, PyObject *args)
2935{
2936 Py_RETURN_NONE;
2937}
2938
2939static PyMethodDef NullImporter_methods[] = {
2940 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
2941 "Always return None"
2942 },
2943 {NULL} /* Sentinel */
2944};
2945
2946
2947static PyTypeObject NullImporterType = {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002948 PyVarObject_HEAD_INIT(NULL, 0)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002949 "imp.NullImporter", /*tp_name*/
2950 sizeof(NullImporter), /*tp_basicsize*/
2951 0, /*tp_itemsize*/
2952 0, /*tp_dealloc*/
2953 0, /*tp_print*/
2954 0, /*tp_getattr*/
2955 0, /*tp_setattr*/
2956 0, /*tp_compare*/
2957 0, /*tp_repr*/
2958 0, /*tp_as_number*/
2959 0, /*tp_as_sequence*/
2960 0, /*tp_as_mapping*/
2961 0, /*tp_hash */
2962 0, /*tp_call*/
2963 0, /*tp_str*/
2964 0, /*tp_getattro*/
2965 0, /*tp_setattro*/
2966 0, /*tp_as_buffer*/
2967 Py_TPFLAGS_DEFAULT, /*tp_flags*/
2968 "Null importer object", /* tp_doc */
2969 0, /* tp_traverse */
2970 0, /* tp_clear */
2971 0, /* tp_richcompare */
2972 0, /* tp_weaklistoffset */
2973 0, /* tp_iter */
2974 0, /* tp_iternext */
2975 NullImporter_methods, /* tp_methods */
2976 0, /* tp_members */
2977 0, /* tp_getset */
2978 0, /* tp_base */
2979 0, /* tp_dict */
2980 0, /* tp_descr_get */
2981 0, /* tp_descr_set */
2982 0, /* tp_dictoffset */
2983 (initproc)NullImporter_init, /* tp_init */
2984 0, /* tp_alloc */
2985 PyType_GenericNew /* tp_new */
2986};
2987
2988
Jason Tishler6bc06ec2003-09-04 11:59:50 +00002989PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002990initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002991{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002992 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002993
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002994 if (PyType_Ready(&NullImporterType) < 0)
2995 goto failure;
2996
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002997 m = Py_InitModule4("imp", imp_methods, doc_imp,
2998 NULL, PYTHON_API_VERSION);
Neal Norwitz1ac754f2006-01-19 06:09:39 +00002999 if (m == NULL)
3000 goto failure;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003001 d = PyModule_GetDict(m);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00003002 if (d == NULL)
3003 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003004
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003005 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3006 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3007 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3008 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3009 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3010 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3011 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3012 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00003013 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00003014 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003015
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003016 Py_INCREF(&NullImporterType);
3017 PyModule_AddObject(m, "NullImporter", (PyObject *)&NullImporterType);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003018 failure:
3019 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003020}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003021
3022
Guido van Rossumb18618d2000-05-03 23:44:39 +00003023/* API for embedding applications that want to add their own entries
3024 to the table of built-in modules. This should normally be called
3025 *before* Py_Initialize(). When the table resize fails, -1 is
3026 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003027
3028 After a similar function by Just van Rossum. */
3029
3030int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003031PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003032{
3033 static struct _inittab *our_copy = NULL;
3034 struct _inittab *p;
3035 int i, n;
3036
3037 /* Count the number of entries in both tables */
3038 for (n = 0; newtab[n].name != NULL; n++)
3039 ;
3040 if (n == 0)
3041 return 0; /* Nothing to do */
3042 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3043 ;
3044
3045 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00003046 p = our_copy;
3047 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003048 if (p == NULL)
3049 return -1;
3050
3051 /* Copy the tables into the new memory */
3052 if (our_copy != PyImport_Inittab)
3053 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3054 PyImport_Inittab = our_copy = p;
3055 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3056
3057 return 0;
3058}
3059
3060/* Shorthand to add a single entry given a name and a function */
3061
3062int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003063PyImport_AppendInittab(char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003064{
3065 struct _inittab newtab[2];
3066
3067 memset(newtab, '\0', sizeof newtab);
3068
3069 newtab[0].name = name;
3070 newtab[0].initfunc = initfunc;
3071
3072 return PyImport_ExtendInittab(newtab);
3073}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003074
3075#ifdef __cplusplus
3076}
3077#endif