blob: 26664ce7c88180f48cacb88fc8de20d3832c40d2 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Module definition and import implementation */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00005
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "Python-ast.h"
Neal Norwitzadb69fc2005-12-17 20:54:49 +00007#include "pyarena.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00008#include "pythonrun.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00009#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000010#include "marshal.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000011#include "code.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000012#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000013#include "eval.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000014#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000015#include "importdl.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000016
Guido van Rossum55a83382000-09-20 20:31:38 +000017#ifdef HAVE_FCNTL_H
18#include <fcntl.h>
19#endif
Anthony Baxterac6bd462006-04-13 02:06:09 +000020#ifdef __cplusplus
21extern "C" {
22#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000023
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000024extern time_t PyOS_GetLastModificationTime(char *, FILE *);
25 /* In getmtime.c */
Guido van Rossum21d335e1993-10-15 13:01:11 +000026
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000027/* Magic word to reject .pyc files generated by other Python versions.
28 It should change for each incompatible change to the bytecode.
29
30 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000031 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000032 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000033
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000034 The magic numbers must be spaced apart atleast 2 values, as the
35 -U interpeter flag will cause MAGIC+1 being used. They have been
36 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000037
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000038 There were a variety of old schemes for setting the magic number.
39 The current working scheme is to increment the previous value by
40 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000041
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000042 Known values:
43 Python 1.5: 20121
44 Python 1.5.1: 20121
45 Python 1.5.2: 20121
Skip Montanaro4ec3c262006-03-25 14:12:03 +000046 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000047 Python 2.0: 50823
48 Python 2.0.1: 50823
49 Python 2.1: 60202
50 Python 2.1.1: 60202
51 Python 2.1.2: 60202
52 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000053 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000054 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000055 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000056 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000057 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000058 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000059 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000060 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000061 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000062 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Neal Norwitz0d62a062006-07-30 06:53:31 +000063 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
64 Python 2.5b3: 62111 (fix wrong code: x += yield)
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000065.
Tim Peters36515e22001-11-18 04:06:29 +000066*/
Neal Norwitz0d62a062006-07-30 06:53:31 +000067#define MAGIC (62111 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000068
Guido van Rossum96774c12000-05-01 20:19:08 +000069/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000070 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000071 compiler works which are enabled by command line switches. */
72static long pyc_magic = MAGIC;
73
Guido van Rossum25ce5661997-08-02 03:10:38 +000074/* See _PyImport_FixupExtension() below */
75static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000076
Guido van Rossum771c6c81997-10-31 18:37:24 +000077/* This table is defined in config.c: */
78extern struct _inittab _PyImport_Inittab[];
79
80struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000081
Guido van Rossumed1170e1999-12-20 21:23:41 +000082/* these tables define the module suffixes that Python recognizes */
83struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +000084
85#ifdef RISCOS
86static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +000087 {"/py", "U", PY_SOURCE},
Guido van Rossum48a680c2001-03-02 06:34:14 +000088 {"/pyc", "rb", PY_COMPILED},
89 {0, 0}
90};
91#else
Guido van Rossumed1170e1999-12-20 21:23:41 +000092static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +000093 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000094#ifdef MS_WINDOWS
Jack Jansenc88da1f2002-05-28 10:58:19 +000095 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +000096#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +000097 {".pyc", "rb", PY_COMPILED},
98 {0, 0}
99};
Guido van Rossum48a680c2001-03-02 06:34:14 +0000100#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000101
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000102static PyTypeObject NullImporterType; /* Forward reference */
103
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000104/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000105
106void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000107_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000108{
Guido van Rossumed1170e1999-12-20 21:23:41 +0000109 const struct filedescr *scan;
110 struct filedescr *filetab;
111 int countD = 0;
112 int countS = 0;
113
114 /* prepare _PyImport_Filetab: copy entries from
115 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
116 */
117 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
118 ++countD;
119 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
120 ++countS;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000121 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
Neal Norwitze1fdb322006-07-21 05:32:28 +0000122 if (filetab == NULL)
Neal Norwitz33722ae2006-07-21 07:59:02 +0000123 Py_FatalError("Can't initialize import file table.");
Guido van Rossumed1170e1999-12-20 21:23:41 +0000124 memcpy(filetab, _PyImport_DynLoadFiletab,
125 countD * sizeof(struct filedescr));
126 memcpy(filetab + countD, _PyImport_StandardFiletab,
127 countS * sizeof(struct filedescr));
128 filetab[countD + countS].suffix = NULL;
129
130 _PyImport_Filetab = filetab;
131
Guido van Rossum0824f631997-03-11 18:37:35 +0000132 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000133 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
134 for (; filetab->suffix != NULL; filetab++) {
Guido van Rossum48a680c2001-03-02 06:34:14 +0000135#ifndef RISCOS
Guido van Rossumed1170e1999-12-20 21:23:41 +0000136 if (strcmp(filetab->suffix, ".pyc") == 0)
137 filetab->suffix = ".pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000138#else
139 if (strcmp(filetab->suffix, "/pyc") == 0)
140 filetab->suffix = "/pyo";
141#endif
Guido van Rossum0824f631997-03-11 18:37:35 +0000142 }
143 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000144
145 if (Py_UnicodeFlag) {
146 /* Fix the pyc_magic so that byte compiled code created
147 using the all-Unicode method doesn't interfere with
148 code created in normal operation mode. */
149 pyc_magic = MAGIC + 1;
150 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000151}
152
Guido van Rossum25ce5661997-08-02 03:10:38 +0000153void
Just van Rossum52e14d62002-12-30 22:08:05 +0000154_PyImportHooks_Init(void)
155{
156 PyObject *v, *path_hooks = NULL, *zimpimport;
157 int err = 0;
158
159 /* adding sys.path_hooks and sys.path_importer_cache, setting up
160 zipimport */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000161 if (PyType_Ready(&NullImporterType) < 0)
162 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000163
164 if (Py_VerboseFlag)
165 PySys_WriteStderr("# installing zipimport hook\n");
166
167 v = PyList_New(0);
168 if (v == NULL)
169 goto error;
170 err = PySys_SetObject("meta_path", v);
171 Py_DECREF(v);
172 if (err)
173 goto error;
174 v = PyDict_New();
175 if (v == NULL)
176 goto error;
177 err = PySys_SetObject("path_importer_cache", v);
178 Py_DECREF(v);
179 if (err)
180 goto error;
181 path_hooks = PyList_New(0);
182 if (path_hooks == NULL)
183 goto error;
184 err = PySys_SetObject("path_hooks", path_hooks);
185 if (err) {
186 error:
187 PyErr_Print();
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000188 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
189 "path_importer_cache, or NullImporter failed"
190 );
Just van Rossum52e14d62002-12-30 22:08:05 +0000191 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000192
Just van Rossum52e14d62002-12-30 22:08:05 +0000193 zimpimport = PyImport_ImportModule("zipimport");
194 if (zimpimport == NULL) {
195 PyErr_Clear(); /* No zip import module -- okay */
196 if (Py_VerboseFlag)
197 PySys_WriteStderr("# can't import zipimport\n");
198 }
199 else {
200 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
201 "zipimporter");
202 Py_DECREF(zimpimport);
203 if (zipimporter == NULL) {
204 PyErr_Clear(); /* No zipimporter object -- okay */
205 if (Py_VerboseFlag)
206 PySys_WriteStderr(
Fred Drake1e5fc552003-07-11 15:01:02 +0000207 "# can't import zipimport.zipimporter\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000208 }
209 else {
210 /* sys.path_hooks.append(zipimporter) */
211 err = PyList_Append(path_hooks, zipimporter);
212 Py_DECREF(zipimporter);
213 if (err)
214 goto error;
215 if (Py_VerboseFlag)
216 PySys_WriteStderr(
217 "# installed zipimport hook\n");
218 }
219 }
220 Py_DECREF(path_hooks);
221}
222
223void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000224_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000225{
226 Py_XDECREF(extensions);
227 extensions = NULL;
Barry Warsaw84294482000-10-03 16:02:05 +0000228 PyMem_DEL(_PyImport_Filetab);
229 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000230}
231
232
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000233/* Locking primitives to prevent parallel imports of the same module
234 in different threads to return with a partially loaded module.
235 These calls are serialized by the global interpreter lock. */
236
237#ifdef WITH_THREAD
238
Guido van Rossum49b56061998-10-01 20:42:43 +0000239#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000240
Guido van Rossum65d5b571998-12-21 19:32:43 +0000241static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000242static long import_lock_thread = -1;
243static int import_lock_level = 0;
244
245static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000246lock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000247{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000248 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000249 if (me == -1)
250 return; /* Too bad */
Neal Norwitze1fdb322006-07-21 05:32:28 +0000251 if (import_lock == NULL) {
Guido van Rossum65d5b571998-12-21 19:32:43 +0000252 import_lock = PyThread_allocate_lock();
Neal Norwitze1fdb322006-07-21 05:32:28 +0000253 if (import_lock == NULL)
254 return; /* Nothing much we can do. */
255 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000256 if (import_lock_thread == me) {
257 import_lock_level++;
258 return;
259 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000260 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
261 {
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000262 PyThreadState *tstate = PyEval_SaveThread();
Guido van Rossum65d5b571998-12-21 19:32:43 +0000263 PyThread_acquire_lock(import_lock, 1);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000264 PyEval_RestoreThread(tstate);
265 }
266 import_lock_thread = me;
267 import_lock_level = 1;
268}
269
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000270static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000271unlock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000272{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000273 long me = PyThread_get_thread_ident();
Neal Norwitze1fdb322006-07-21 05:32:28 +0000274 if (me == -1 || import_lock == NULL)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000275 return 0; /* Too bad */
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000276 if (import_lock_thread != me)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000277 return -1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000278 import_lock_level--;
279 if (import_lock_level == 0) {
280 import_lock_thread = -1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000281 PyThread_release_lock(import_lock);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000282 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000283 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000284}
285
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000286/* This function is called from PyOS_AfterFork to ensure that newly
287 created child processes do not share locks with the parent. */
288
289void
290_PyImport_ReInitLock(void)
291{
292#ifdef _AIX
293 if (import_lock != NULL)
294 import_lock = PyThread_allocate_lock();
295#endif
296}
297
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000298#else
299
300#define lock_import()
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000301#define unlock_import() 0
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000302
303#endif
304
Tim Peters69232342001-08-30 05:16:13 +0000305static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000306imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000307{
Tim Peters69232342001-08-30 05:16:13 +0000308#ifdef WITH_THREAD
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000309 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000310#else
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000311 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000312#endif
313}
314
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000315static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000316imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000317{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000318#ifdef WITH_THREAD
319 lock_import();
320#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000321 Py_INCREF(Py_None);
322 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000323}
324
325static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000326imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000327{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000328#ifdef WITH_THREAD
329 if (unlock_import() < 0) {
330 PyErr_SetString(PyExc_RuntimeError,
331 "not holding the import lock");
332 return NULL;
333 }
334#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000335 Py_INCREF(Py_None);
336 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000337}
338
Guido van Rossum25ce5661997-08-02 03:10:38 +0000339/* Helper for sys */
340
341PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000342PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000343{
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000344 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000345 if (interp->modules == NULL)
346 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
347 return interp->modules;
348}
349
Guido van Rossum3f5da241990-12-20 15:06:42 +0000350
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000351/* List of names to clear in sys */
352static char* sys_deletes[] = {
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000353 "path", "argv", "ps1", "ps2", "exitfunc",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000354 "exc_type", "exc_value", "exc_traceback",
355 "last_type", "last_value", "last_traceback",
Just van Rossum52e14d62002-12-30 22:08:05 +0000356 "path_hooks", "path_importer_cache", "meta_path",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000357 NULL
358};
359
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000360static char* sys_files[] = {
361 "stdin", "__stdin__",
362 "stdout", "__stdout__",
363 "stderr", "__stderr__",
364 NULL
365};
366
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000367
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000368/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000369
Guido van Rossum3f5da241990-12-20 15:06:42 +0000370void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000371PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000372{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000373 Py_ssize_t pos, ndone;
Guido van Rossum758eec01998-01-19 21:58:26 +0000374 char *name;
375 PyObject *key, *value, *dict;
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000376 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000377 PyObject *modules = interp->modules;
378
379 if (modules == NULL)
380 return; /* Already done */
381
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000382 /* Delete some special variables first. These are common
383 places where user values hide and people complain when their
384 destructors fail. Since the modules containing them are
385 deleted *last* of all, they would come too late in the normal
386 destruction order. Sigh. */
387
388 value = PyDict_GetItemString(modules, "__builtin__");
389 if (value != NULL && PyModule_Check(value)) {
390 dict = PyModule_GetDict(value);
391 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000392 PySys_WriteStderr("# clear __builtin__._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000393 PyDict_SetItemString(dict, "_", Py_None);
394 }
395 value = PyDict_GetItemString(modules, "sys");
396 if (value != NULL && PyModule_Check(value)) {
397 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000398 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000399 dict = PyModule_GetDict(value);
400 for (p = sys_deletes; *p != NULL; p++) {
401 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000402 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000403 PyDict_SetItemString(dict, *p, Py_None);
404 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000405 for (p = sys_files; *p != NULL; p+=2) {
406 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000407 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000408 v = PyDict_GetItemString(dict, *(p+1));
409 if (v == NULL)
410 v = Py_None;
411 PyDict_SetItemString(dict, *p, v);
412 }
413 }
414
415 /* First, delete __main__ */
416 value = PyDict_GetItemString(modules, "__main__");
417 if (value != NULL && PyModule_Check(value)) {
418 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000419 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000420 _PyModule_Clear(value);
421 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000422 }
423
Guido van Rossum758eec01998-01-19 21:58:26 +0000424 /* The special treatment of __builtin__ here is because even
425 when it's not referenced as a module, its dictionary is
426 referenced by almost every module's __builtins__. Since
427 deleting a module clears its dictionary (even if there are
428 references left to it), we need to delete the __builtin__
429 module last. Likewise, we don't delete sys until the very
430 end because it is implicitly referenced (e.g. by print).
431
432 Also note that we 'delete' modules by replacing their entry
433 in the modules dict with None, rather than really deleting
434 them; this avoids a rehash of the modules dictionary and
435 also marks them as "non existent" so they won't be
436 re-imported. */
437
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000438 /* Next, repeatedly delete modules with a reference count of
Guido van Rossum758eec01998-01-19 21:58:26 +0000439 one (skipping __builtin__ and sys) and delete them */
440 do {
441 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000442 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000443 while (PyDict_Next(modules, &pos, &key, &value)) {
444 if (value->ob_refcnt != 1)
445 continue;
Guido van Rossum566373e1998-10-01 15:24:50 +0000446 if (PyString_Check(key) && PyModule_Check(value)) {
447 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000448 if (strcmp(name, "__builtin__") == 0)
449 continue;
450 if (strcmp(name, "sys") == 0)
451 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000452 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000453 PySys_WriteStderr(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000454 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000455 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000456 PyDict_SetItem(modules, key, Py_None);
457 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000458 }
459 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000460 } while (ndone > 0);
461
Guido van Rossum758eec01998-01-19 21:58:26 +0000462 /* Next, delete all modules (still skipping __builtin__ and sys) */
463 pos = 0;
464 while (PyDict_Next(modules, &pos, &key, &value)) {
Guido van Rossum566373e1998-10-01 15:24:50 +0000465 if (PyString_Check(key) && PyModule_Check(value)) {
466 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000467 if (strcmp(name, "__builtin__") == 0)
468 continue;
469 if (strcmp(name, "sys") == 0)
470 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000471 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000472 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000473 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000474 PyDict_SetItem(modules, key, Py_None);
475 }
476 }
477
478 /* Next, delete sys and __builtin__ (in that order) */
479 value = PyDict_GetItemString(modules, "sys");
480 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000481 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000482 PySys_WriteStderr("# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000483 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000484 PyDict_SetItemString(modules, "sys", Py_None);
485 }
486 value = PyDict_GetItemString(modules, "__builtin__");
487 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000488 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000489 PySys_WriteStderr("# cleanup __builtin__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000490 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000491 PyDict_SetItemString(modules, "__builtin__", Py_None);
492 }
493
494 /* Finally, clear and delete the modules directory */
495 PyDict_Clear(modules);
496 interp->modules = NULL;
497 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000498}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000499
500
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000501/* Helper for pythonrun.c -- return magic number */
502
503long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000504PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000505{
Guido van Rossum96774c12000-05-01 20:19:08 +0000506 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000507}
508
509
Guido van Rossum25ce5661997-08-02 03:10:38 +0000510/* Magic for extension modules (built-in as well as dynamically
511 loaded). To prevent initializing an extension module more than
512 once, we keep a static dictionary 'extensions' keyed by module name
513 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000514 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000515 dictionary is stored by calling _PyImport_FixupExtension()
516 immediately after the module initialization function succeeds. A
517 copy can be retrieved from there by calling
518 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000519
Guido van Rossum79f25d91997-04-29 20:08:16 +0000520PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000521_PyImport_FixupExtension(char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000522{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000523 PyObject *modules, *mod, *dict, *copy;
524 if (extensions == NULL) {
525 extensions = PyDict_New();
526 if (extensions == NULL)
527 return NULL;
528 }
529 modules = PyImport_GetModuleDict();
530 mod = PyDict_GetItemString(modules, name);
531 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000532 PyErr_Format(PyExc_SystemError,
533 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000534 return NULL;
535 }
536 dict = PyModule_GetDict(mod);
537 if (dict == NULL)
538 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000539 copy = PyDict_Copy(dict);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000540 if (copy == NULL)
541 return NULL;
542 PyDict_SetItemString(extensions, filename, copy);
543 Py_DECREF(copy);
544 return copy;
545}
546
547PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000548_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000549{
Fred Drake9cd0efc2001-10-25 21:38:59 +0000550 PyObject *dict, *mod, *mdict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000551 if (extensions == NULL)
552 return NULL;
553 dict = PyDict_GetItemString(extensions, filename);
554 if (dict == NULL)
555 return NULL;
556 mod = PyImport_AddModule(name);
557 if (mod == NULL)
558 return NULL;
559 mdict = PyModule_GetDict(mod);
560 if (mdict == NULL)
561 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000562 if (PyDict_Update(mdict, dict))
Guido van Rossum25ce5661997-08-02 03:10:38 +0000563 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000564 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000565 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Guido van Rossum25ce5661997-08-02 03:10:38 +0000566 name, filename);
567 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000568}
569
570
571/* Get the module object corresponding to a module name.
572 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000573 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000574 Because the former action is most common, THIS DOES NOT RETURN A
575 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000576
Guido van Rossum79f25d91997-04-29 20:08:16 +0000577PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000578PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000579{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000580 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000581 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000582
Guido van Rossum25ce5661997-08-02 03:10:38 +0000583 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000584 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000585 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000586 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000587 if (m == NULL)
588 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000589 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000590 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000591 return NULL;
592 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000593 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000594
595 return m;
596}
597
Tim Peters1cd70172004-08-02 03:52:12 +0000598/* Remove name from sys.modules, if it's there. */
599static void
600_RemoveModule(const char *name)
601{
602 PyObject *modules = PyImport_GetModuleDict();
603 if (PyDict_GetItemString(modules, name) == NULL)
604 return;
605 if (PyDict_DelItemString(modules, name) < 0)
606 Py_FatalError("import: deleting existing key in"
607 "sys.modules failed");
608}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000609
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000610/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000611 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
612 * removed from sys.modules, to avoid leaving damaged module objects
613 * in sys.modules. The caller may wish to restore the original
614 * module object (if any) in this case; PyImport_ReloadModule is an
615 * example.
616 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000617PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000618PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000619{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000620 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
621}
622
623PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000624PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000625{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000626 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000627 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000628
Guido van Rossum79f25d91997-04-29 20:08:16 +0000629 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000630 if (m == NULL)
631 return NULL;
Jeremy Hyltonecd91292004-01-02 23:25:32 +0000632 /* If the module is being reloaded, we get the old module back
633 and re-use its dict to exec the new code. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000634 d = PyModule_GetDict(m);
635 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
636 if (PyDict_SetItemString(d, "__builtins__",
637 PyEval_GetBuiltins()) != 0)
Tim Peters1cd70172004-08-02 03:52:12 +0000638 goto error;
Guido van Rossum6135a871995-01-09 17:53:26 +0000639 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000640 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000641 v = NULL;
642 if (pathname != NULL) {
643 v = PyString_FromString(pathname);
644 if (v == NULL)
645 PyErr_Clear();
646 }
647 if (v == NULL) {
648 v = ((PyCodeObject *)co)->co_filename;
649 Py_INCREF(v);
650 }
651 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000652 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000653 Py_DECREF(v);
654
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000655 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000656 if (v == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000657 goto error;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000658 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000659
Guido van Rossum25ce5661997-08-02 03:10:38 +0000660 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000661 PyErr_Format(PyExc_ImportError,
662 "Loaded module %.200s not found in sys.modules",
663 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000664 return NULL;
665 }
666
Guido van Rossum79f25d91997-04-29 20:08:16 +0000667 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000668
669 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000670
671 error:
672 _RemoveModule(name);
673 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000674}
675
676
677/* Given a pathname for a Python source file, fill a buffer with the
678 pathname for the corresponding compiled file. Return the pathname
679 for the compiled file, or NULL if there's no space in the buffer.
680 Doesn't set an exception. */
681
682static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000683make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000684{
Tim Petersc1731372001-08-04 08:12:36 +0000685 size_t len = strlen(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000686 if (len+2 > buflen)
687 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000688
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000689#ifdef MS_WINDOWS
Tim Petersc1731372001-08-04 08:12:36 +0000690 /* Treat .pyw as if it were .py. The case of ".pyw" must match
691 that used in _PyImport_StandardFiletab. */
692 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
693 --len; /* pretend 'w' isn't there */
694#endif
695 memcpy(buf, pathname, len);
696 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
697 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000698
699 return buf;
700}
701
702
703/* Given a pathname for a Python source file, its time of last
704 modification, and a pathname for a compiled file, check whether the
705 compiled file represents the same version of the source. If so,
706 return a FILE pointer for the compiled file, positioned just after
707 the header; if not, return NULL.
708 Doesn't set an exception. */
709
710static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000711check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000712{
713 FILE *fp;
714 long magic;
715 long pyc_mtime;
716
717 fp = fopen(cpathname, "rb");
718 if (fp == NULL)
719 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000720 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000721 if (magic != pyc_magic) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000722 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000723 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000724 fclose(fp);
725 return NULL;
726 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000727 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000728 if (pyc_mtime != mtime) {
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 mtime\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 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000735 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000736 return fp;
737}
738
739
740/* Read a code object from a file and check it for validity */
741
Guido van Rossum79f25d91997-04-29 20:08:16 +0000742static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000743read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000744{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000745 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000746
Tim Petersd9b9ac82001-01-28 00:27:39 +0000747 co = PyMarshal_ReadLastObjectFromFile(fp);
Armin Rigo01ab2792004-03-26 15:09:27 +0000748 if (co == NULL)
749 return NULL;
750 if (!PyCode_Check(co)) {
751 PyErr_Format(PyExc_ImportError,
752 "Non-code object in %.200s", cpathname);
753 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000754 return NULL;
755 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000757}
758
759
760/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000761 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000762
Guido van Rossum79f25d91997-04-29 20:08:16 +0000763static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000764load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000765{
766 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000767 PyCodeObject *co;
768 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000769
Guido van Rossum79f25d91997-04-29 20:08:16 +0000770 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000771 if (magic != pyc_magic) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000772 PyErr_Format(PyExc_ImportError,
773 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000774 return NULL;
775 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000776 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000777 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000778 if (co == NULL)
779 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000780 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000781 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000782 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000783 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000784 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000785
786 return m;
787}
788
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000789/* Parse a source file and return the corresponding code object */
790
Guido van Rossum79f25d91997-04-29 20:08:16 +0000791static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000792parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000793{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000794 PyCodeObject *co = NULL;
795 mod_ty mod;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000796 PyArena *arena = PyArena_New();
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000797
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000798 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, 0,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000799 NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000800 if (mod) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000801 co = PyAST_Compile(mod, pathname, NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000802 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000803 PyArena_Free(arena);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000804 return co;
805}
806
807
Guido van Rossum55a83382000-09-20 20:31:38 +0000808/* Helper to open a bytecode file for writing in exclusive mode */
809
810static FILE *
811open_exclusive(char *filename)
812{
813#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
814 /* Use O_EXCL to avoid a race condition when another process tries to
815 write the same file. When that happens, our open() call fails,
816 which is just fine (since it's only a cache).
817 XXX If the file exists and is writable but the directory is not
818 writable, the file will never be written. Oh well.
819 */
820 int fd;
821 (void) unlink(filename);
Tim Peters42c83af2000-09-29 04:03:10 +0000822 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
823#ifdef O_BINARY
824 |O_BINARY /* necessary for Windows */
825#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000826#ifdef __VMS
Martin v. Löwis18e16552006-02-15 17:27:45 +0000827 , 0666, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000828#else
Martin v. Löwis18e16552006-02-15 17:27:45 +0000829 , 0666
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000830#endif
Martin v. Löwis18e16552006-02-15 17:27:45 +0000831 );
Guido van Rossum55a83382000-09-20 20:31:38 +0000832 if (fd < 0)
833 return NULL;
834 return fdopen(fd, "wb");
835#else
836 /* Best we can do -- on Windows this can't happen anyway */
837 return fopen(filename, "wb");
838#endif
839}
840
841
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000842/* Write a compiled module to a file, placing the time of last
843 modification of its source into the header.
844 Errors are ignored, if a write error occurs an attempt is made to
845 remove the file. */
846
847static void
Martin v. Löwis18e16552006-02-15 17:27:45 +0000848write_compiled_module(PyCodeObject *co, char *cpathname, time_t mtime)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000849{
850 FILE *fp;
851
Guido van Rossum55a83382000-09-20 20:31:38 +0000852 fp = open_exclusive(cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000853 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000854 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000855 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000856 "# can't create %s\n", cpathname);
857 return;
858 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000859 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000860 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000861 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
862 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000863 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000864 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000865 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000866 /* Don't keep partial file */
867 fclose(fp);
868 (void) unlink(cpathname);
869 return;
870 }
871 /* Now write the true mtime */
872 fseek(fp, 4L, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000873 assert(mtime < LONG_MAX);
Martin v. Löwis725507b2006-03-07 12:08:51 +0000874 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000875 fflush(fp);
876 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000877 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000878 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000879}
880
881
882/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000883 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
884 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000885
Guido van Rossum79f25d91997-04-29 20:08:16 +0000886static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000887load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000888{
Fred Drake4c82b232000-06-30 16:18:57 +0000889 time_t mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000890 FILE *fpc;
891 char buf[MAXPATHLEN+1];
892 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000893 PyCodeObject *co;
894 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000895
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000896 mtime = PyOS_GetLastModificationTime(pathname, fp);
Neal Norwitz708e51a2005-10-03 04:48:15 +0000897 if (mtime == (time_t)(-1)) {
898 PyErr_Format(PyExc_RuntimeError,
899 "unable to get modification time from '%s'",
900 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +0000901 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +0000902 }
Fred Drake4c82b232000-06-30 16:18:57 +0000903#if SIZEOF_TIME_T > 4
904 /* Python's .pyc timestamp handling presumes that the timestamp fits
905 in 4 bytes. This will be fine until sometime in the year 2038,
906 when a 4-byte signed time_t will overflow.
907 */
908 if (mtime >> 32) {
909 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +0000910 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +0000911 return NULL;
912 }
913#endif
Tim Peters36515e22001-11-18 04:06:29 +0000914 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +0000915 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000916 if (cpathname != NULL &&
917 (fpc = check_compiled_module(pathname, mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000918 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000919 fclose(fpc);
920 if (co == NULL)
921 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000922 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000923 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000924 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000925 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000926 }
927 else {
928 co = parse_source_module(pathname, fp);
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 # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000933 name, pathname);
934 write_compiled_module(co, cpathname, mtime);
935 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000936 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000937 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000938
939 return m;
940}
941
942
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000943/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +0000944static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
945static struct filedescr *find_module(char *, char *, PyObject *,
946 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +0000947static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000948
949/* Load a package and return its module object WITH INCREMENTED
950 REFERENCE COUNT */
951
952static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000953load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000954{
Tim Peters1cd70172004-08-02 03:52:12 +0000955 PyObject *m, *d;
956 PyObject *file = NULL;
957 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000958 int err;
959 char buf[MAXPATHLEN+1];
960 FILE *fp = NULL;
961 struct filedescr *fdp;
962
963 m = PyImport_AddModule(name);
964 if (m == NULL)
965 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000966 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000967 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000968 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000969 d = PyModule_GetDict(m);
970 file = PyString_FromString(pathname);
971 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000972 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000973 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +0000974 if (path == NULL)
975 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000976 err = PyDict_SetItemString(d, "__file__", file);
977 if (err == 0)
978 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +0000979 if (err != 0)
980 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000981 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +0000982 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000983 if (fdp == NULL) {
984 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
985 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +0000986 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000987 }
988 else
989 m = NULL;
990 goto cleanup;
991 }
Just van Rossum52e14d62002-12-30 22:08:05 +0000992 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000993 if (fp != NULL)
994 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +0000995 goto cleanup;
996
997 error:
998 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000999 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001000 Py_XDECREF(path);
1001 Py_XDECREF(file);
1002 return m;
1003}
1004
1005
1006/* Helper to test for built-in module */
1007
1008static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001009is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001010{
1011 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +00001012 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1013 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1014 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001015 return -1;
1016 else
1017 return 1;
1018 }
1019 }
1020 return 0;
1021}
1022
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001023
Just van Rossum52e14d62002-12-30 22:08:05 +00001024/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1025 possibly by fetching it from the path_importer_cache dict. If it
1026 wasn't yet cached, traverse path_hooks until it a hook is found
1027 that can handle the path item. Return None if no hook could;
1028 this tells our caller it should fall back to the builtin
1029 import mechanism. Cache the result in path_importer_cache.
1030 Returns a borrowed reference. */
1031
1032static PyObject *
1033get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1034 PyObject *p)
1035{
1036 PyObject *importer;
Martin v. Löwis725507b2006-03-07 12:08:51 +00001037 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001038
1039 /* These conditions are the caller's responsibility: */
1040 assert(PyList_Check(path_hooks));
1041 assert(PyDict_Check(path_importer_cache));
1042
1043 nhooks = PyList_Size(path_hooks);
1044 if (nhooks < 0)
1045 return NULL; /* Shouldn't happen */
1046
1047 importer = PyDict_GetItem(path_importer_cache, p);
1048 if (importer != NULL)
1049 return importer;
1050
1051 /* set path_importer_cache[p] to None to avoid recursion */
1052 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1053 return NULL;
1054
1055 for (j = 0; j < nhooks; j++) {
1056 PyObject *hook = PyList_GetItem(path_hooks, j);
1057 if (hook == NULL)
1058 return NULL;
Georg Brandl684fd0c2006-05-25 19:15:31 +00001059 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
Just van Rossum52e14d62002-12-30 22:08:05 +00001060 if (importer != NULL)
1061 break;
1062
1063 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1064 return NULL;
1065 }
1066 PyErr_Clear();
1067 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001068 if (importer == NULL) {
1069 importer = PyObject_CallFunctionObjArgs(
1070 (PyObject *)&NullImporterType, p, NULL
1071 );
1072 if (importer == NULL) {
1073 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1074 PyErr_Clear();
1075 return Py_None;
1076 }
1077 }
1078 }
1079 if (importer != NULL) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001080 int err = PyDict_SetItem(path_importer_cache, p, importer);
1081 Py_DECREF(importer);
1082 if (err != 0)
1083 return NULL;
1084 }
1085 return importer;
1086}
1087
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001088/* Search the path (default sys.path) for a module. Return the
1089 corresponding filedescr struct, and (via return arguments) the
1090 pathname and an open file. Return NULL if the module is not found. */
1091
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001092#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001093extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001094 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001095#endif
1096
Martin v. Löwis18e16552006-02-15 17:27:45 +00001097static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001098static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001099static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001100
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001101static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001102find_module(char *fullname, char *subname, PyObject *path, char *buf,
1103 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001104{
Martin v. Löwis725507b2006-03-07 12:08:51 +00001105 Py_ssize_t i, npath;
Fred Drake4c82b232000-06-30 16:18:57 +00001106 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001107 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001108 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001109 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001110 PyObject *path_hooks, *path_importer_cache;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001111#ifndef RISCOS
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001112 struct stat statbuf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001113#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001114 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1115 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1116 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001117 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001118#if defined(PYOS_OS2)
1119 size_t saved_len;
1120 size_t saved_namelen;
1121 char *saved_buf = NULL;
1122#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001123 if (p_loader != NULL)
1124 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001125
Just van Rossum52e14d62002-12-30 22:08:05 +00001126 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001127 PyErr_SetString(PyExc_OverflowError,
1128 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001129 return NULL;
1130 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001131 strcpy(name, subname);
1132
1133 /* sys.meta_path import hook */
1134 if (p_loader != NULL) {
1135 PyObject *meta_path;
1136
1137 meta_path = PySys_GetObject("meta_path");
1138 if (meta_path == NULL || !PyList_Check(meta_path)) {
1139 PyErr_SetString(PyExc_ImportError,
1140 "sys.meta_path must be a list of "
1141 "import hooks");
1142 return NULL;
1143 }
1144 Py_INCREF(meta_path); /* zap guard */
1145 npath = PyList_Size(meta_path);
1146 for (i = 0; i < npath; i++) {
1147 PyObject *loader;
1148 PyObject *hook = PyList_GetItem(meta_path, i);
1149 loader = PyObject_CallMethod(hook, "find_module",
1150 "sO", fullname,
1151 path != NULL ?
1152 path : Py_None);
1153 if (loader == NULL) {
1154 Py_DECREF(meta_path);
1155 return NULL; /* true error */
1156 }
1157 if (loader != Py_None) {
1158 /* a loader was found */
1159 *p_loader = loader;
1160 Py_DECREF(meta_path);
1161 return &importhookdescr;
1162 }
1163 Py_DECREF(loader);
1164 }
1165 Py_DECREF(meta_path);
1166 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001167
1168 if (path != NULL && PyString_Check(path)) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001169 /* The only type of submodule allowed inside a "frozen"
1170 package are other frozen modules or packages. */
Guido van Rossum0506a431998-08-11 15:07:39 +00001171 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1172 PyErr_SetString(PyExc_ImportError,
1173 "full frozen module name too long");
1174 return NULL;
1175 }
1176 strcpy(buf, PyString_AsString(path));
1177 strcat(buf, ".");
1178 strcat(buf, name);
1179 strcpy(name, buf);
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001180 if (find_frozen(name) != NULL) {
1181 strcpy(buf, name);
1182 return &fd_frozen;
1183 }
1184 PyErr_Format(PyExc_ImportError,
1185 "No frozen submodule named %.200s", name);
1186 return NULL;
Guido van Rossum0506a431998-08-11 15:07:39 +00001187 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001188 if (path == NULL) {
1189 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001190 strcpy(buf, name);
1191 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001192 }
Greg Ward201baee2001-10-04 14:52:06 +00001193 if ((find_frozen(name)) != NULL) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001194 strcpy(buf, name);
1195 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001196 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001197
Guido van Rossumac279101996-08-22 23:10:58 +00001198#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001199 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1200 if (fp != NULL) {
1201 *p_fp = fp;
1202 return fdp;
1203 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001204#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001205 path = PySys_GetObject("path");
1206 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001207 if (path == NULL || !PyList_Check(path)) {
1208 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001209 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001210 return NULL;
1211 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001212
1213 path_hooks = PySys_GetObject("path_hooks");
1214 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1215 PyErr_SetString(PyExc_ImportError,
1216 "sys.path_hooks must be a list of "
1217 "import hooks");
1218 return NULL;
1219 }
1220 path_importer_cache = PySys_GetObject("path_importer_cache");
1221 if (path_importer_cache == NULL ||
1222 !PyDict_Check(path_importer_cache)) {
1223 PyErr_SetString(PyExc_ImportError,
1224 "sys.path_importer_cache must be a dict");
1225 return NULL;
1226 }
1227
Guido van Rossum79f25d91997-04-29 20:08:16 +00001228 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001229 namelen = strlen(name);
1230 for (i = 0; i < npath; i++) {
Walter Dörwald3430d702002-06-17 10:43:59 +00001231 PyObject *copy = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001232 PyObject *v = PyList_GetItem(path, i);
Walter Dörwald3430d702002-06-17 10:43:59 +00001233#ifdef Py_USING_UNICODE
1234 if (PyUnicode_Check(v)) {
1235 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1236 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1237 if (copy == NULL)
1238 return NULL;
1239 v = copy;
1240 }
1241 else
1242#endif
Guido van Rossum79f25d91997-04-29 20:08:16 +00001243 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001244 continue;
Neal Norwitz2aa9a5d2006-03-20 01:53:23 +00001245 len = PyString_GET_SIZE(v);
Walter Dörwald3430d702002-06-17 10:43:59 +00001246 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1247 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001248 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001249 }
Neal Norwitz2aa9a5d2006-03-20 01:53:23 +00001250 strcpy(buf, PyString_AS_STRING(v));
Walter Dörwald3430d702002-06-17 10:43:59 +00001251 if (strlen(buf) != len) {
1252 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001253 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001254 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001255
1256 /* sys.path_hooks import hook */
1257 if (p_loader != NULL) {
1258 PyObject *importer;
1259
1260 importer = get_path_importer(path_importer_cache,
1261 path_hooks, v);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001262 if (importer == NULL) {
1263 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001264 return NULL;
Neal Norwitza4df11d2006-07-06 04:28:59 +00001265 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001266 /* Note: importer is a borrowed reference */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001267 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);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001272 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001273 if (loader == NULL)
1274 return NULL; /* error */
1275 if (loader != Py_None) {
1276 /* a loader was found */
1277 *p_loader = loader;
1278 return &importhookdescr;
1279 }
1280 Py_DECREF(loader);
Georg Brandlf4ef1162006-05-26 18:03:31 +00001281 continue;
Just van Rossum52e14d62002-12-30 22:08:05 +00001282 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001283 }
Georg Brandlf4ef1162006-05-26 18:03:31 +00001284 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001285
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001286 if (len > 0 && buf[len-1] != SEP
1287#ifdef ALTSEP
1288 && buf[len-1] != ALTSEP
1289#endif
1290 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001291 buf[len++] = SEP;
Guido van Rossum215c3402000-11-13 17:26:32 +00001292 strcpy(buf+len, name);
1293 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001294
1295 /* Check for package import (buf holds a directory name,
1296 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001297#ifdef HAVE_STAT
Walter Dörwald3430d702002-06-17 10:43:59 +00001298 if (stat(buf, &statbuf) == 0 && /* it exists */
1299 S_ISDIR(statbuf.st_mode) && /* it's a directory */
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001300 case_ok(buf, len, namelen, name)) { /* case matches */
1301 if (find_init_module(buf)) { /* and has __init__.py */
1302 Py_XDECREF(copy);
1303 return &fd_package;
1304 }
1305 else {
1306 char warnstr[MAXPATHLEN+80];
1307 sprintf(warnstr, "Not importing directory "
1308 "'%.*s': missing __init__.py",
1309 MAXPATHLEN, buf);
1310 if (PyErr_Warn(PyExc_ImportWarning,
1311 warnstr)) {
1312 Py_XDECREF(copy);
1313 return NULL;
1314 }
1315 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001316 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001317#else
1318 /* XXX How are you going to test for directories? */
Guido van Rossum48a680c2001-03-02 06:34:14 +00001319#ifdef RISCOS
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001320 if (isdir(buf) &&
Walter Dörwald3430d702002-06-17 10:43:59 +00001321 case_ok(buf, len, namelen, name)) {
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001322 if (find_init_module(buf)) {
1323 Py_XDECREF(copy);
1324 return &fd_package;
1325 }
1326 else {
1327 char warnstr[MAXPATHLEN+80];
1328 sprintf(warnstr, "Not importing directory "
1329 "'%.*s': missing __init__.py",
1330 MAXPATHLEN, buf);
1331 if (PyErr_Warn(PyExc_ImportWarning,
1332 warnstr)) {
1333 Py_XDECREF(copy);
1334 return NULL;
1335 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001336 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001337#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001338#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001339#if defined(PYOS_OS2)
1340 /* take a snapshot of the module spec for restoration
1341 * after the 8 character DLL hackery
1342 */
1343 saved_buf = strdup(buf);
1344 saved_len = len;
1345 saved_namelen = namelen;
1346#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001347 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001348#if defined(PYOS_OS2)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001349 /* OS/2 limits DLLs to 8 character names (w/o
1350 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001351 * so if the name is longer than that and its a
1352 * dynamically loaded module we're going to try,
1353 * truncate the name before trying
1354 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001355 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001356 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001357 const struct filedescr *scan;
1358 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001359 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001360 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001361 break;
1362 else
1363 scan++;
1364 }
1365 if (scan->suffix != NULL) {
1366 /* yes, so truncate the name */
1367 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001368 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001369 buf[len] = '\0';
1370 }
1371 }
1372#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001373 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001374 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001375 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001376 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001377 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001378 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001379 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001380 if (fp != NULL) {
1381 if (case_ok(buf, len, namelen, name))
1382 break;
1383 else { /* continue search */
1384 fclose(fp);
1385 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001386 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001387 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001388#if defined(PYOS_OS2)
1389 /* restore the saved snapshot */
1390 strcpy(buf, saved_buf);
1391 len = saved_len;
1392 namelen = saved_namelen;
1393#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001394 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001395#if defined(PYOS_OS2)
1396 /* don't need/want the module name snapshot anymore */
1397 if (saved_buf)
1398 {
1399 free(saved_buf);
1400 saved_buf = NULL;
1401 }
1402#endif
Walter Dörwald3430d702002-06-17 10:43:59 +00001403 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001404 if (fp != NULL)
1405 break;
1406 }
1407 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001408 PyErr_Format(PyExc_ImportError,
1409 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001410 return NULL;
1411 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001412 *p_fp = fp;
1413 return fdp;
1414}
1415
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001416/* Helpers for main.c
1417 * Find the source file corresponding to a named module
1418 */
1419struct filedescr *
1420_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1421 size_t buflen, FILE **p_fp, PyObject **p_loader)
1422{
1423 return find_module((char *) name, (char *) name, path,
1424 buf, buflen, p_fp, p_loader);
1425}
1426
1427PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1428{
1429 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1430}
1431
Martin v. Löwis18e16552006-02-15 17:27:45 +00001432/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001433 * The arguments here are tricky, best shown by example:
1434 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1435 * ^ ^ ^ ^
1436 * |--------------------- buf ---------------------|
1437 * |------------------- len ------------------|
1438 * |------ name -------|
1439 * |----- namelen -----|
1440 * buf is the full path, but len only counts up to (& exclusive of) the
1441 * extension. name is the module name, also exclusive of extension.
1442 *
1443 * We've already done a successful stat() or fopen() on buf, so know that
1444 * there's some match, possibly case-insensitive.
1445 *
Tim Peters50d8d372001-02-28 05:34:27 +00001446 * case_ok() is to return 1 if there's a case-sensitive match for
1447 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1448 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001449 *
Tim Peters50d8d372001-02-28 05:34:27 +00001450 * case_ok() is used to implement case-sensitive import semantics even
1451 * on platforms with case-insensitive filesystems. It's trivial to implement
1452 * for case-sensitive filesystems. It's pretty much a cross-platform
1453 * nightmare for systems with case-insensitive filesystems.
1454 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001455
Tim Peters50d8d372001-02-28 05:34:27 +00001456/* First we may need a pile of platform-specific header files; the sequence
1457 * of #if's here should match the sequence in the body of case_ok().
1458 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001459#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001460#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001461
Tim Peters50d8d372001-02-28 05:34:27 +00001462#elif defined(DJGPP)
1463#include <dir.h>
1464
Jason Tishler7961aa62005-05-20 00:56:54 +00001465#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001466#include <sys/types.h>
1467#include <dirent.h>
1468
Andrew MacIntyred9400542002-02-26 11:41:34 +00001469#elif defined(PYOS_OS2)
1470#define INCL_DOS
1471#define INCL_DOSERRORS
1472#define INCL_NOPMAPI
1473#include <os2.h>
1474
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001475#elif defined(RISCOS)
1476#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001477#endif
1478
Guido van Rossum0980bd91998-02-13 17:18:36 +00001479static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001480case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001481{
Tim Peters50d8d372001-02-28 05:34:27 +00001482/* Pick a platform-specific implementation; the sequence of #if's here should
1483 * match the sequence just above.
1484 */
1485
Jason Tishler7961aa62005-05-20 00:56:54 +00001486/* MS_WINDOWS */
1487#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001488 WIN32_FIND_DATA data;
1489 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001490
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001491 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001492 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001493
Guido van Rossum0980bd91998-02-13 17:18:36 +00001494 h = FindFirstFile(buf, &data);
1495 if (h == INVALID_HANDLE_VALUE) {
1496 PyErr_Format(PyExc_NameError,
1497 "Can't find file for module %.100s\n(filename %.300s)",
1498 name, buf);
1499 return 0;
1500 }
1501 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001502 return strncmp(data.cFileName, name, namelen) == 0;
1503
1504/* DJGPP */
1505#elif defined(DJGPP)
1506 struct ffblk ffblk;
1507 int done;
1508
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001509 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001510 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001511
1512 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1513 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001514 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001515 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001516 name, buf);
1517 return 0;
1518 }
Tim Peters50d8d372001-02-28 05:34:27 +00001519 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001520
Jason Tishler7961aa62005-05-20 00:56:54 +00001521/* new-fangled macintosh (macosx) or Cygwin */
1522#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001523 DIR *dirp;
1524 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001525 char dirname[MAXPATHLEN + 1];
1526 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001527
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001528 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001529 return 1;
1530
Tim Petersd1e87a82001-03-01 18:12:00 +00001531 /* Copy the dir component into dirname; substitute "." if empty */
1532 if (dirlen <= 0) {
1533 dirname[0] = '.';
1534 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001535 }
1536 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001537 assert(dirlen <= MAXPATHLEN);
1538 memcpy(dirname, buf, dirlen);
1539 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001540 }
1541 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001542 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001543 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001544 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001545 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001546 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001547#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001548 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001549#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001550 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001551#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001552 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001553 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001554 (void)closedir(dirp);
1555 return 1; /* Found */
1556 }
1557 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001558 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001559 }
Tim Peters430f5d42001-03-01 01:30:56 +00001560 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001561
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001562/* RISC OS */
1563#elif defined(RISCOS)
1564 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1565 char buf2[MAXPATHLEN+2];
1566 char *nameWithExt = buf+len-namelen;
1567 int canonlen;
1568 os_error *e;
1569
1570 if (Py_GETENV("PYTHONCASEOK") != NULL)
1571 return 1;
1572
1573 /* workaround:
1574 append wildcard, otherwise case of filename wouldn't be touched */
1575 strcpy(buf2, buf);
1576 strcat(buf2, "*");
1577
1578 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1579 canonlen = MAXPATHLEN+1-canonlen;
1580 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1581 return 0;
1582 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1583 return 1; /* match */
1584
1585 return 0;
1586
Andrew MacIntyred9400542002-02-26 11:41:34 +00001587/* OS/2 */
1588#elif defined(PYOS_OS2)
1589 HDIR hdir = 1;
1590 ULONG srchcnt = 1;
1591 FILEFINDBUF3 ffbuf;
1592 APIRET rc;
1593
1594 if (getenv("PYTHONCASEOK") != NULL)
1595 return 1;
1596
1597 rc = DosFindFirst(buf,
1598 &hdir,
1599 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1600 &ffbuf, sizeof(ffbuf),
1601 &srchcnt,
1602 FIL_STANDARD);
1603 if (rc != NO_ERROR)
1604 return 0;
1605 return strncmp(ffbuf.achName, name, namelen) == 0;
1606
Tim Peters50d8d372001-02-28 05:34:27 +00001607/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1608#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001609 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001610
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001611#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001612}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001613
Guido van Rossum0980bd91998-02-13 17:18:36 +00001614
Guido van Rossum197346f1997-10-31 18:38:52 +00001615#ifdef HAVE_STAT
1616/* Helper to look for __init__.py or __init__.py[co] in potential package */
1617static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001618find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001619{
Tim Peters0f9431f2001-07-05 03:47:53 +00001620 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001621 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001622 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001623 struct stat statbuf;
1624
Tim Peters0f9431f2001-07-05 03:47:53 +00001625/* For calling case_ok(buf, len, namelen, name):
1626 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1627 * ^ ^ ^ ^
1628 * |--------------------- buf ---------------------|
1629 * |------------------- len ------------------|
1630 * |------ name -------|
1631 * |----- namelen -----|
1632 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001633 if (save_len + 13 >= MAXPATHLEN)
1634 return 0;
1635 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001636 pname = buf + i;
1637 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001638 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001639 if (case_ok(buf,
1640 save_len + 9, /* len("/__init__") */
1641 8, /* len("__init__") */
1642 pname)) {
1643 buf[save_len] = '\0';
1644 return 1;
1645 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001646 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001647 i += strlen(pname);
1648 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001649 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001650 if (case_ok(buf,
1651 save_len + 9, /* len("/__init__") */
1652 8, /* len("__init__") */
1653 pname)) {
1654 buf[save_len] = '\0';
1655 return 1;
1656 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001657 }
1658 buf[save_len] = '\0';
1659 return 0;
1660}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001661
1662#else
1663
1664#ifdef RISCOS
1665static int
1666find_init_module(buf)
1667 char *buf;
1668{
1669 int save_len = strlen(buf);
1670 int i = save_len;
1671
1672 if (save_len + 13 >= MAXPATHLEN)
1673 return 0;
1674 buf[i++] = SEP;
1675 strcpy(buf+i, "__init__/py");
1676 if (isfile(buf)) {
1677 buf[save_len] = '\0';
1678 return 1;
1679 }
1680
1681 if (Py_OptimizeFlag)
1682 strcpy(buf+i, "o");
1683 else
1684 strcpy(buf+i, "c");
1685 if (isfile(buf)) {
1686 buf[save_len] = '\0';
1687 return 1;
1688 }
1689 buf[save_len] = '\0';
1690 return 0;
1691}
1692#endif /*RISCOS*/
1693
Guido van Rossum197346f1997-10-31 18:38:52 +00001694#endif /* HAVE_STAT */
1695
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001696
Tim Petersdbd9ba62000-07-09 03:09:57 +00001697static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001698
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001699/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001700 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001701
Guido van Rossum79f25d91997-04-29 20:08:16 +00001702static PyObject *
Just van Rossum52e14d62002-12-30 22:08:05 +00001703load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001704{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001705 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001706 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001707 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001708
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001709 /* First check that there's an open file (if we need one) */
1710 switch (type) {
1711 case PY_SOURCE:
1712 case PY_COMPILED:
1713 if (fp == NULL) {
1714 PyErr_Format(PyExc_ValueError,
1715 "file object required for import (type code %d)",
1716 type);
1717 return NULL;
1718 }
1719 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001720
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001721 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001722
1723 case PY_SOURCE:
1724 m = load_source_module(name, buf, fp);
1725 break;
1726
1727 case PY_COMPILED:
1728 m = load_compiled_module(name, buf, fp);
1729 break;
1730
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001731#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001732 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001733 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001734 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001735#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001736
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001737 case PKG_DIRECTORY:
1738 m = load_package(name, buf);
1739 break;
1740
1741 case C_BUILTIN:
1742 case PY_FROZEN:
Guido van Rossuma5568d31998-03-05 03:45:08 +00001743 if (buf != NULL && buf[0] != '\0')
1744 name = buf;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001745 if (type == C_BUILTIN)
1746 err = init_builtin(name);
1747 else
1748 err = PyImport_ImportFrozenModule(name);
1749 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001750 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001751 if (err == 0) {
1752 PyErr_Format(PyExc_ImportError,
1753 "Purported %s module %.200s not found",
1754 type == C_BUILTIN ?
1755 "builtin" : "frozen",
1756 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001757 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001758 }
1759 modules = PyImport_GetModuleDict();
1760 m = PyDict_GetItemString(modules, name);
1761 if (m == NULL) {
1762 PyErr_Format(
1763 PyExc_ImportError,
1764 "%s module %.200s not properly initialized",
1765 type == C_BUILTIN ?
1766 "builtin" : "frozen",
1767 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001768 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001769 }
1770 Py_INCREF(m);
1771 break;
1772
Just van Rossum52e14d62002-12-30 22:08:05 +00001773 case IMP_HOOK: {
1774 if (loader == NULL) {
1775 PyErr_SetString(PyExc_ImportError,
1776 "import hook without loader");
1777 return NULL;
1778 }
1779 m = PyObject_CallMethod(loader, "load_module", "s", name);
1780 break;
1781 }
1782
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001783 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001784 PyErr_Format(PyExc_ImportError,
1785 "Don't know how to import %.200s (type code %d)",
1786 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001787 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001788
1789 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001790
1791 return m;
1792}
1793
1794
1795/* Initialize a built-in module.
1796 Return 1 for succes, 0 if the module is not found, and -1 with
1797 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001798
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001799static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001800init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001801{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001802 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001803
Greg Ward201baee2001-10-04 14:52:06 +00001804 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001805 return 1;
1806
Guido van Rossum771c6c81997-10-31 18:37:24 +00001807 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001808 if (strcmp(name, p->name) == 0) {
1809 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001810 PyErr_Format(PyExc_ImportError,
1811 "Cannot re-init internal module %.200s",
1812 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001813 return -1;
1814 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001815 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001816 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001817 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001818 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001819 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001820 if (_PyImport_FixupExtension(name, name) == NULL)
1821 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001822 return 1;
1823 }
1824 }
1825 return 0;
1826}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001827
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001828
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001829/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001830
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001831static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001832find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001833{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001834 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001835
Guido van Rossum79f25d91997-04-29 20:08:16 +00001836 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001837 if (p->name == NULL)
1838 return NULL;
1839 if (strcmp(p->name, name) == 0)
1840 break;
1841 }
1842 return p;
1843}
1844
Guido van Rossum79f25d91997-04-29 20:08:16 +00001845static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001846get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001847{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001848 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001849 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001850
1851 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001852 PyErr_Format(PyExc_ImportError,
1853 "No such frozen object named %.200s",
1854 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001855 return NULL;
1856 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001857 if (p->code == NULL) {
1858 PyErr_Format(PyExc_ImportError,
1859 "Excluded frozen object named %.200s",
1860 name);
1861 return NULL;
1862 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001863 size = p->size;
1864 if (size < 0)
1865 size = -size;
1866 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001867}
1868
1869/* Initialize a frozen module.
1870 Return 1 for succes, 0 if the module is not found, and -1 with
1871 an exception set if the initialization failed.
1872 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001873
1874int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001875PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001876{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001877 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001878 PyObject *co;
1879 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001880 int ispackage;
1881 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001882
1883 if (p == NULL)
1884 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001885 if (p->code == NULL) {
1886 PyErr_Format(PyExc_ImportError,
1887 "Excluded frozen object named %.200s",
1888 name);
1889 return -1;
1890 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001891 size = p->size;
1892 ispackage = (size < 0);
1893 if (ispackage)
1894 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001895 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001896 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001897 name, ispackage ? " package" : "");
1898 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001899 if (co == NULL)
1900 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001901 if (!PyCode_Check(co)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001902 PyErr_Format(PyExc_TypeError,
1903 "frozen object %.200s is not a code object",
1904 name);
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001905 goto err_return;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001906 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001907 if (ispackage) {
1908 /* Set __path__ to the package name */
1909 PyObject *d, *s;
1910 int err;
1911 m = PyImport_AddModule(name);
1912 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001913 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001914 d = PyModule_GetDict(m);
1915 s = PyString_InternFromString(name);
1916 if (s == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001917 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001918 err = PyDict_SetItemString(d, "__path__", s);
1919 Py_DECREF(s);
1920 if (err != 0)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001921 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001922 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001923 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001924 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001925 goto err_return;
1926 Py_DECREF(co);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001927 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001928 return 1;
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001929err_return:
1930 Py_DECREF(co);
1931 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001932}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001933
1934
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001935/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001936 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001937
Guido van Rossum79f25d91997-04-29 20:08:16 +00001938PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001939PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001940{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001941 PyObject *pname;
1942 PyObject *result;
1943
1944 pname = PyString_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00001945 if (pname == NULL)
1946 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001947 result = PyImport_Import(pname);
1948 Py_DECREF(pname);
1949 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001950}
1951
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001952/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001953static PyObject *get_parent(PyObject *globals, char *buf,
1954 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001955static PyObject *load_next(PyObject *mod, PyObject *altmod,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001956 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001957static int mark_miss(char *name);
1958static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001959 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001960static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001961
1962/* The Magnum Opus of dotted-name import :-) */
1963
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001964static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001965import_module_level(char *name, PyObject *globals, PyObject *locals,
1966 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001967{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001968 char buf[MAXPATHLEN+1];
Martin v. Löwis18e16552006-02-15 17:27:45 +00001969 Py_ssize_t buflen = 0;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001970 PyObject *parent, *head, *next, *tail;
1971
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001972 parent = get_parent(globals, buf, &buflen, level);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001973 if (parent == NULL)
1974 return NULL;
1975
1976 head = load_next(parent, Py_None, &name, buf, &buflen);
1977 if (head == NULL)
1978 return NULL;
1979
1980 tail = head;
1981 Py_INCREF(tail);
1982 while (name) {
1983 next = load_next(tail, tail, &name, buf, &buflen);
1984 Py_DECREF(tail);
1985 if (next == NULL) {
1986 Py_DECREF(head);
1987 return NULL;
1988 }
1989 tail = next;
1990 }
Thomas Wouters8ddab272006-04-04 16:17:02 +00001991 if (tail == Py_None) {
1992 /* If tail is Py_None, both get_parent and load_next found
1993 an empty module name: someone called __import__("") or
1994 doctored faulty bytecode */
Thomas Wouters4bdaa272006-04-05 13:39:37 +00001995 Py_DECREF(tail);
1996 Py_DECREF(head);
Thomas Wouters8ddab272006-04-04 16:17:02 +00001997 PyErr_SetString(PyExc_ValueError,
1998 "Empty module name");
1999 return NULL;
2000 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002001
2002 if (fromlist != NULL) {
2003 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2004 fromlist = NULL;
2005 }
2006
2007 if (fromlist == NULL) {
2008 Py_DECREF(tail);
2009 return head;
2010 }
2011
2012 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002013 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002014 Py_DECREF(tail);
2015 return NULL;
2016 }
2017
2018 return tail;
2019}
2020
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002021/* For DLL compatibility */
2022#undef PyImport_ImportModuleEx
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002023PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002024PyImport_ImportModuleEx(char *name, PyObject *globals, PyObject *locals,
2025 PyObject *fromlist)
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002026{
2027 PyObject *result;
2028 lock_import();
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002029 result = import_module_level(name, globals, locals, fromlist, -1);
2030 if (unlock_import() < 0) {
2031 Py_XDECREF(result);
2032 PyErr_SetString(PyExc_RuntimeError,
2033 "not holding the import lock");
2034 return NULL;
2035 }
2036 return result;
2037}
2038#define PyImport_ImportModuleEx(n, g, l, f) \
2039 PyImport_ImportModuleLevel(n, g, l, f, -1);
2040
2041PyObject *
2042PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2043 PyObject *fromlist, int level)
2044{
2045 PyObject *result;
2046 lock_import();
2047 result = import_module_level(name, globals, locals, fromlist, level);
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002048 if (unlock_import() < 0) {
2049 Py_XDECREF(result);
2050 PyErr_SetString(PyExc_RuntimeError,
2051 "not holding the import lock");
2052 return NULL;
2053 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002054 return result;
2055}
2056
Fred Drake87590902004-05-28 20:21:36 +00002057/* Return the package that an import is being performed in. If globals comes
2058 from the module foo.bar.bat (not itself a package), this returns the
2059 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Georg Brandl5f6861d2006-05-28 21:57:35 +00002060 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002061
2062 The *name* of the returned package is returned in buf, with the length of
2063 the name in *p_buflen.
2064
2065 If globals doesn't come from a package or a module in a package, or a
2066 corresponding entry is not found in sys.modules, Py_None is returned.
2067*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002068static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002069get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002070{
2071 static PyObject *namestr = NULL;
2072 static PyObject *pathstr = NULL;
2073 PyObject *modname, *modpath, *modules, *parent;
2074
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002075 if (globals == NULL || !PyDict_Check(globals) || !level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002076 return Py_None;
2077
2078 if (namestr == NULL) {
2079 namestr = PyString_InternFromString("__name__");
2080 if (namestr == NULL)
2081 return NULL;
2082 }
2083 if (pathstr == NULL) {
2084 pathstr = PyString_InternFromString("__path__");
2085 if (pathstr == NULL)
2086 return NULL;
2087 }
2088
2089 *buf = '\0';
2090 *p_buflen = 0;
2091 modname = PyDict_GetItem(globals, namestr);
2092 if (modname == NULL || !PyString_Check(modname))
2093 return Py_None;
2094
2095 modpath = PyDict_GetItem(globals, pathstr);
2096 if (modpath != NULL) {
Martin v. Löwis725507b2006-03-07 12:08:51 +00002097 Py_ssize_t len = PyString_GET_SIZE(modname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002098 if (len > MAXPATHLEN) {
2099 PyErr_SetString(PyExc_ValueError,
2100 "Module name too long");
2101 return NULL;
2102 }
2103 strcpy(buf, PyString_AS_STRING(modname));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002104 }
2105 else {
2106 char *start = PyString_AS_STRING(modname);
2107 char *lastdot = strrchr(start, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002108 size_t len;
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002109 if (lastdot == NULL && level > 0) {
2110 PyErr_SetString(PyExc_ValueError,
2111 "Relative importpath too deep");
2112 return NULL;
2113 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002114 if (lastdot == NULL)
2115 return Py_None;
2116 len = lastdot - start;
2117 if (len >= MAXPATHLEN) {
2118 PyErr_SetString(PyExc_ValueError,
2119 "Module name too long");
2120 return NULL;
2121 }
2122 strncpy(buf, start, len);
2123 buf[len] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002124 }
2125
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002126 while (--level > 0) {
2127 char *dot = strrchr(buf, '.');
2128 if (dot == NULL) {
2129 PyErr_SetString(PyExc_ValueError,
2130 "Relative importpath too deep");
2131 return NULL;
2132 }
2133 *dot = '\0';
2134 }
2135 *p_buflen = strlen(buf);
2136
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002137 modules = PyImport_GetModuleDict();
2138 parent = PyDict_GetItemString(modules, buf);
2139 if (parent == NULL)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002140 PyErr_Format(PyExc_SystemError,
2141 "Parent module '%.200s' not loaded", buf);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002142 return parent;
2143 /* We expect, but can't guarantee, if parent != None, that:
2144 - parent.__name__ == buf
2145 - parent.__dict__ is globals
2146 If this is violated... Who cares? */
2147}
2148
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002149/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002150static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002151load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002152 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002153{
2154 char *name = *p_name;
2155 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002156 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002157 char *p;
2158 PyObject *result;
2159
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002160 if (strlen(name) == 0) {
Thomas Wouters8ddab272006-04-04 16:17:02 +00002161 /* completely empty module name should only happen in
2162 'from . import' (or '__import__("")')*/
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002163 Py_INCREF(mod);
2164 *p_name = NULL;
2165 return mod;
2166 }
2167
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002168 if (dot == NULL) {
2169 *p_name = NULL;
2170 len = strlen(name);
2171 }
2172 else {
2173 *p_name = dot+1;
2174 len = dot-name;
2175 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002176 if (len == 0) {
2177 PyErr_SetString(PyExc_ValueError,
2178 "Empty module name");
2179 return NULL;
2180 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002181
2182 p = buf + *p_buflen;
2183 if (p != buf)
2184 *p++ = '.';
2185 if (p+len-buf >= MAXPATHLEN) {
2186 PyErr_SetString(PyExc_ValueError,
2187 "Module name too long");
2188 return NULL;
2189 }
2190 strncpy(p, name, len);
2191 p[len] = '\0';
2192 *p_buflen = p+len-buf;
2193
2194 result = import_submodule(mod, p, buf);
2195 if (result == Py_None && altmod != mod) {
2196 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002197 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002198 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002199 if (result != NULL && result != Py_None) {
2200 if (mark_miss(buf) != 0) {
2201 Py_DECREF(result);
2202 return NULL;
2203 }
2204 strncpy(buf, name, len);
2205 buf[len] = '\0';
2206 *p_buflen = len;
2207 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002208 }
2209 if (result == NULL)
2210 return NULL;
2211
2212 if (result == Py_None) {
2213 Py_DECREF(result);
2214 PyErr_Format(PyExc_ImportError,
2215 "No module named %.200s", name);
2216 return NULL;
2217 }
2218
2219 return result;
2220}
2221
2222static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002223mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002224{
2225 PyObject *modules = PyImport_GetModuleDict();
2226 return PyDict_SetItemString(modules, name, Py_None);
2227}
2228
2229static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002230ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002231 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002232{
2233 int i;
2234
2235 if (!PyObject_HasAttrString(mod, "__path__"))
2236 return 1;
2237
2238 for (i = 0; ; i++) {
2239 PyObject *item = PySequence_GetItem(fromlist, i);
2240 int hasit;
2241 if (item == NULL) {
2242 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2243 PyErr_Clear();
2244 return 1;
2245 }
2246 return 0;
2247 }
2248 if (!PyString_Check(item)) {
2249 PyErr_SetString(PyExc_TypeError,
2250 "Item in ``from list'' not a string");
2251 Py_DECREF(item);
2252 return 0;
2253 }
2254 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002255 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002256 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002257 /* See if the package defines __all__ */
2258 if (recursive)
2259 continue; /* Avoid endless recursion */
2260 all = PyObject_GetAttrString(mod, "__all__");
2261 if (all == NULL)
2262 PyErr_Clear();
2263 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002264 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002265 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002266 if (!ret)
2267 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002268 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002269 continue;
2270 }
2271 hasit = PyObject_HasAttr(mod, item);
2272 if (!hasit) {
2273 char *subname = PyString_AS_STRING(item);
2274 PyObject *submod;
2275 char *p;
2276 if (buflen + strlen(subname) >= MAXPATHLEN) {
2277 PyErr_SetString(PyExc_ValueError,
2278 "Module name too long");
2279 Py_DECREF(item);
2280 return 0;
2281 }
2282 p = buf + buflen;
2283 *p++ = '.';
2284 strcpy(p, subname);
2285 submod = import_submodule(mod, subname, buf);
2286 Py_XDECREF(submod);
2287 if (submod == NULL) {
2288 Py_DECREF(item);
2289 return 0;
2290 }
2291 }
2292 Py_DECREF(item);
2293 }
2294
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002295 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002296}
2297
Neil Schemenauer00b09662003-06-16 21:03:07 +00002298static int
2299add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2300 PyObject *modules)
2301{
2302 if (mod == Py_None)
2303 return 1;
2304 /* Irrespective of the success of this load, make a
2305 reference to it in the parent package module. A copy gets
2306 saved in the modules dictionary under the full name, so get a
2307 reference from there, if need be. (The exception is when the
2308 load failed with a SyntaxError -- then there's no trace in
2309 sys.modules. In that case, of course, do nothing extra.) */
2310 if (submod == NULL) {
2311 submod = PyDict_GetItemString(modules, fullname);
2312 if (submod == NULL)
2313 return 1;
2314 }
2315 if (PyModule_Check(mod)) {
2316 /* We can't use setattr here since it can give a
2317 * spurious warning if the submodule name shadows a
2318 * builtin name */
2319 PyObject *dict = PyModule_GetDict(mod);
2320 if (!dict)
2321 return 0;
2322 if (PyDict_SetItemString(dict, subname, submod) < 0)
2323 return 0;
2324 }
2325 else {
2326 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2327 return 0;
2328 }
2329 return 1;
2330}
2331
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002332static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002333import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002334{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002335 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002336 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002337
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002338 /* Require:
2339 if mod == None: subname == fullname
2340 else: mod.__name__ + "." + subname == fullname
2341 */
2342
Tim Peters50d8d372001-02-28 05:34:27 +00002343 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002344 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002345 }
2346 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002347 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002348 char buf[MAXPATHLEN+1];
2349 struct filedescr *fdp;
2350 FILE *fp = NULL;
2351
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002352 if (mod == Py_None)
2353 path = NULL;
2354 else {
2355 path = PyObject_GetAttrString(mod, "__path__");
2356 if (path == NULL) {
2357 PyErr_Clear();
2358 Py_INCREF(Py_None);
2359 return Py_None;
2360 }
2361 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002362
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002363 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002364 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2365 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002366 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002367 if (fdp == NULL) {
2368 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2369 return NULL;
2370 PyErr_Clear();
2371 Py_INCREF(Py_None);
2372 return Py_None;
2373 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002374 m = load_module(fullname, fp, buf, fdp->type, loader);
2375 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002376 if (fp)
2377 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002378 if (!add_submodule(mod, m, fullname, subname, modules)) {
2379 Py_XDECREF(m);
2380 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002381 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002382 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002383
2384 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002385}
2386
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002387
2388/* Re-import a module of any kind and return its module object, WITH
2389 INCREMENTED REFERENCE COUNT */
2390
Guido van Rossum79f25d91997-04-29 20:08:16 +00002391PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002392PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002393{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002394 PyObject *modules = PyImport_GetModuleDict();
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002395 PyObject *path = NULL, *loader = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002396 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002397 char buf[MAXPATHLEN+1];
2398 struct filedescr *fdp;
2399 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002400 PyObject *newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002401
Guido van Rossum79f25d91997-04-29 20:08:16 +00002402 if (m == NULL || !PyModule_Check(m)) {
2403 PyErr_SetString(PyExc_TypeError,
2404 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002405 return NULL;
2406 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002407 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002408 if (name == NULL)
2409 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002410 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002411 PyErr_Format(PyExc_ImportError,
2412 "reload(): module %.200s not in sys.modules",
2413 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002414 return NULL;
2415 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002416 subname = strrchr(name, '.');
2417 if (subname == NULL)
2418 subname = name;
2419 else {
2420 PyObject *parentname, *parent;
2421 parentname = PyString_FromStringAndSize(name, (subname-name));
2422 if (parentname == NULL)
2423 return NULL;
2424 parent = PyDict_GetItem(modules, parentname);
2425 if (parent == NULL) {
2426 PyErr_Format(PyExc_ImportError,
2427 "reload(): parent %.200s not in sys.modules",
Georg Brandl0c55f292005-09-14 06:56:20 +00002428 PyString_AS_STRING(parentname));
2429 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002430 return NULL;
2431 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002432 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002433 subname++;
2434 path = PyObject_GetAttrString(parent, "__path__");
2435 if (path == NULL)
2436 PyErr_Clear();
2437 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002438 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002439 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002440 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002441
2442 if (fdp == NULL) {
2443 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002444 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002445 }
2446
2447 newm = load_module(name, fp, buf, fdp->type, loader);
2448 Py_XDECREF(loader);
2449
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002450 if (fp)
2451 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002452 if (newm == NULL) {
2453 /* load_module probably removed name from modules because of
2454 * the error. Put back the original module object. We're
2455 * going to return NULL in this case regardless of whether
2456 * replacing name succeeds, so the return value is ignored.
2457 */
2458 PyDict_SetItemString(modules, name, m);
2459 }
2460 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002461}
2462
2463
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002464/* Higher-level import emulator which emulates the "import" statement
2465 more accurately -- it invokes the __import__() function from the
2466 builtins of the current globals. This means that the import is
2467 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002468 environment, e.g. by "rexec".
2469 A dummy list ["__doc__"] is passed as the 4th argument so that
2470 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
2471 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002472
2473PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002474PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002475{
2476 static PyObject *silly_list = NULL;
2477 static PyObject *builtins_str = NULL;
2478 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002479 PyObject *globals = NULL;
2480 PyObject *import = NULL;
2481 PyObject *builtins = NULL;
2482 PyObject *r = NULL;
2483
2484 /* Initialize constant string objects */
2485 if (silly_list == NULL) {
2486 import_str = PyString_InternFromString("__import__");
2487 if (import_str == NULL)
2488 return NULL;
2489 builtins_str = PyString_InternFromString("__builtins__");
2490 if (builtins_str == NULL)
2491 return NULL;
2492 silly_list = Py_BuildValue("[s]", "__doc__");
2493 if (silly_list == NULL)
2494 return NULL;
2495 }
2496
2497 /* Get the builtins from current globals */
2498 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002499 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002500 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002501 builtins = PyObject_GetItem(globals, builtins_str);
2502 if (builtins == NULL)
2503 goto err;
2504 }
2505 else {
2506 /* No globals -- use standard builtins, and fake globals */
2507 PyErr_Clear();
2508
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002509 builtins = PyImport_ImportModuleLevel("__builtin__",
2510 NULL, NULL, NULL, 0);
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002511 if (builtins == NULL)
2512 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002513 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2514 if (globals == NULL)
2515 goto err;
2516 }
2517
2518 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002519 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002520 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002521 if (import == NULL)
2522 PyErr_SetObject(PyExc_KeyError, import_str);
2523 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002524 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002525 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002526 if (import == NULL)
2527 goto err;
2528
2529 /* Call the _import__ function with the proper argument list */
Georg Brandl684fd0c2006-05-25 19:15:31 +00002530 r = PyObject_CallFunctionObjArgs(import, module_name, globals,
2531 globals, silly_list, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002532
2533 err:
2534 Py_XDECREF(globals);
2535 Py_XDECREF(builtins);
2536 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002537
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002538 return r;
2539}
2540
2541
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002542/* Module 'imp' provides Python access to the primitives used for
2543 importing modules.
2544*/
2545
Guido van Rossum79f25d91997-04-29 20:08:16 +00002546static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002547imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002548{
2549 char buf[4];
2550
Guido van Rossum96774c12000-05-01 20:19:08 +00002551 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2552 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2553 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2554 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002555
Guido van Rossum79f25d91997-04-29 20:08:16 +00002556 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002557}
2558
Guido van Rossum79f25d91997-04-29 20:08:16 +00002559static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002560imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002561{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002562 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002563 struct filedescr *fdp;
2564
Guido van Rossum79f25d91997-04-29 20:08:16 +00002565 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002566 if (list == NULL)
2567 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002568 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2569 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002570 fdp->suffix, fdp->mode, fdp->type);
2571 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002572 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002573 return NULL;
2574 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002575 if (PyList_Append(list, item) < 0) {
2576 Py_DECREF(list);
2577 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002578 return NULL;
2579 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002580 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002581 }
2582 return list;
2583}
2584
Guido van Rossum79f25d91997-04-29 20:08:16 +00002585static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002586call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002587{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002588 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002589 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002590 struct filedescr *fdp;
2591 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002592 FILE *fp = NULL;
2593
2594 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002595 if (path == Py_None)
2596 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002597 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002598 if (fdp == NULL)
2599 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002600 if (fp != NULL) {
2601 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2602 if (fob == NULL) {
2603 fclose(fp);
2604 return NULL;
2605 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002606 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002607 else {
2608 fob = Py_None;
2609 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002610 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002611 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002612 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002613 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002614 return ret;
2615}
2616
Guido van Rossum79f25d91997-04-29 20:08:16 +00002617static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002618imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002619{
2620 char *name;
2621 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002622 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002623 return NULL;
2624 return call_find_module(name, path);
2625}
2626
2627static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002628imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002629{
2630 char *name;
2631 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002632 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002633 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002634 return NULL;
2635 ret = init_builtin(name);
2636 if (ret < 0)
2637 return NULL;
2638 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002639 Py_INCREF(Py_None);
2640 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002641 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002642 m = PyImport_AddModule(name);
2643 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002644 return m;
2645}
2646
Guido van Rossum79f25d91997-04-29 20:08:16 +00002647static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002648imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002649{
2650 char *name;
2651 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002652 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002653 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002654 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002655 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002656 if (ret < 0)
2657 return NULL;
2658 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002659 Py_INCREF(Py_None);
2660 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002661 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002662 m = PyImport_AddModule(name);
2663 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002664 return m;
2665}
2666
Guido van Rossum79f25d91997-04-29 20:08:16 +00002667static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002668imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002669{
2670 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002671
Guido van Rossum43713e52000-02-29 13:59:29 +00002672 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002673 return NULL;
2674 return get_frozen_object(name);
2675}
2676
Guido van Rossum79f25d91997-04-29 20:08:16 +00002677static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002678imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002679{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002680 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002681 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002682 return NULL;
Guido van Rossum50ee94f2002-04-09 18:00:58 +00002683 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002684}
2685
Guido van Rossum79f25d91997-04-29 20:08:16 +00002686static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002687imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002688{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002689 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002690 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002691 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002692 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002693 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00002694 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002695}
2696
2697static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002698get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002699{
2700 FILE *fp;
2701 if (fob == NULL) {
Tim Peters86c7d2f2004-08-01 23:24:21 +00002702 if (mode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002703 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002704 fp = fopen(pathname, mode);
2705 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002706 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002707 }
2708 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002709 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002710 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002711 PyErr_SetString(PyExc_ValueError,
2712 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002713 }
2714 return fp;
2715}
2716
Guido van Rossum79f25d91997-04-29 20:08:16 +00002717static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002718imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002719{
2720 char *name;
2721 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002722 PyObject *fob = NULL;
2723 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002724 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002725 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002726 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002727 return NULL;
2728 fp = get_file(pathname, fob, "rb");
2729 if (fp == NULL)
2730 return NULL;
2731 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002732 if (fob == NULL)
2733 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002734 return m;
2735}
2736
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002737#ifdef HAVE_DYNAMIC_LOADING
2738
Guido van Rossum79f25d91997-04-29 20:08:16 +00002739static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002740imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002741{
2742 char *name;
2743 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002744 PyObject *fob = NULL;
2745 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002746 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002747 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002748 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002749 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002750 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002751 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002752 if (fp == NULL)
2753 return NULL;
2754 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002755 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002756 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002757}
2758
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002759#endif /* HAVE_DYNAMIC_LOADING */
2760
Guido van Rossum79f25d91997-04-29 20:08:16 +00002761static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002762imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002763{
2764 char *name;
2765 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002766 PyObject *fob = NULL;
2767 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002768 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002769 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002770 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002771 return NULL;
2772 fp = get_file(pathname, fob, "r");
2773 if (fp == NULL)
2774 return NULL;
2775 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002776 if (fob == NULL)
2777 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002778 return m;
2779}
2780
Guido van Rossum79f25d91997-04-29 20:08:16 +00002781static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002782imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002783{
2784 char *name;
2785 PyObject *fob;
2786 char *pathname;
2787 char *suffix; /* Unused */
2788 char *mode;
2789 int type;
2790 FILE *fp;
2791
Guido van Rossum43713e52000-02-29 13:59:29 +00002792 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002793 &name, &fob, &pathname,
2794 &suffix, &mode, &type))
2795 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002796 if (*mode) {
2797 /* Mode must start with 'r' or 'U' and must not contain '+'.
2798 Implicit in this test is the assumption that the mode
2799 may contain other modifiers like 'b' or 't'. */
2800
2801 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002802 PyErr_Format(PyExc_ValueError,
2803 "invalid file open mode %.200s", mode);
2804 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002805 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002806 }
2807 if (fob == Py_None)
2808 fp = NULL;
2809 else {
2810 if (!PyFile_Check(fob)) {
2811 PyErr_SetString(PyExc_ValueError,
2812 "load_module arg#2 should be a file or None");
2813 return NULL;
2814 }
2815 fp = get_file(pathname, fob, mode);
2816 if (fp == NULL)
2817 return NULL;
2818 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002819 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002820}
2821
2822static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002823imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002824{
2825 char *name;
2826 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00002827 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002828 return NULL;
2829 return load_package(name, pathname);
2830}
2831
2832static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002833imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002834{
2835 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002836 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002837 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002838 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002839}
2840
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002841/* Doc strings */
2842
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002843PyDoc_STRVAR(doc_imp,
2844"This module provides the components needed to build your own\n\
2845__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002846
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002847PyDoc_STRVAR(doc_find_module,
2848"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002849Search for a module. If path is omitted or None, search for a\n\
2850built-in, frozen or special module and continue search in sys.path.\n\
2851The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002852package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002853
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002854PyDoc_STRVAR(doc_load_module,
2855"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002856Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002857The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002858
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002859PyDoc_STRVAR(doc_get_magic,
2860"get_magic() -> string\n\
2861Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002862
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002863PyDoc_STRVAR(doc_get_suffixes,
2864"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002865Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002866that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002867
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002868PyDoc_STRVAR(doc_new_module,
2869"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002870Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002871The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002872
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002873PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00002874"lock_held() -> boolean\n\
2875Return True if the import lock is currently held, else False.\n\
2876On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00002877
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002878PyDoc_STRVAR(doc_acquire_lock,
2879"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00002880Acquires the interpreter's import lock for the current thread.\n\
2881This lock should be used by import hooks to ensure thread-safety\n\
2882when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002883On platforms without threads, this function does nothing.");
2884
2885PyDoc_STRVAR(doc_release_lock,
2886"release_lock() -> None\n\
2887Release the interpreter's import lock.\n\
2888On platforms without threads, this function does nothing.");
2889
Guido van Rossum79f25d91997-04-29 20:08:16 +00002890static PyMethodDef imp_methods[] = {
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002891 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
2892 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
2893 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
2894 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
2895 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
2896 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
2897 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
2898 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002899 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00002900 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
2901 {"init_builtin", imp_init_builtin, METH_VARARGS},
2902 {"init_frozen", imp_init_frozen, METH_VARARGS},
2903 {"is_builtin", imp_is_builtin, METH_VARARGS},
2904 {"is_frozen", imp_is_frozen, METH_VARARGS},
2905 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002906#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00002907 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002908#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00002909 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00002910 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002911 {NULL, NULL} /* sentinel */
2912};
2913
Guido van Rossum1a8791e1998-08-04 22:46:29 +00002914static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002915setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002916{
2917 PyObject *v;
2918 int err;
2919
2920 v = PyInt_FromLong((long)value);
2921 err = PyDict_SetItemString(d, name, v);
2922 Py_XDECREF(v);
2923 return err;
2924}
2925
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00002926typedef struct {
2927 PyObject_HEAD
2928} NullImporter;
2929
2930static int
2931NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
2932{
2933 char *path;
2934
2935 if (!_PyArg_NoKeywords("NullImporter()", kwds))
2936 return -1;
2937
2938 if (!PyArg_ParseTuple(args, "s:NullImporter",
2939 &path))
2940 return -1;
2941
2942 if (strlen(path) == 0) {
2943 PyErr_SetString(PyExc_ImportError, "empty pathname");
2944 return -1;
2945 } else {
2946#ifndef RISCOS
2947 struct stat statbuf;
2948 int rv;
2949
2950 rv = stat(path, &statbuf);
2951 if (rv == 0) {
2952 /* it exists */
2953 if (S_ISDIR(statbuf.st_mode)) {
2954 /* it's a directory */
2955 PyErr_SetString(PyExc_ImportError,
2956 "existing directory");
2957 return -1;
2958 }
2959 }
2960#else
2961 if (object_exists(path)) {
2962 /* it exists */
2963 if (isdir(path)) {
2964 /* it's a directory */
2965 PyErr_SetString(PyExc_ImportError,
2966 "existing directory");
2967 return -1;
2968 }
2969 }
2970#endif
2971 }
2972 return 0;
2973}
2974
2975static PyObject *
2976NullImporter_find_module(NullImporter *self, PyObject *args)
2977{
2978 Py_RETURN_NONE;
2979}
2980
2981static PyMethodDef NullImporter_methods[] = {
2982 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
2983 "Always return None"
2984 },
2985 {NULL} /* Sentinel */
2986};
2987
2988
2989static PyTypeObject NullImporterType = {
2990 PyObject_HEAD_INIT(NULL)
2991 0, /*ob_size*/
2992 "imp.NullImporter", /*tp_name*/
2993 sizeof(NullImporter), /*tp_basicsize*/
2994 0, /*tp_itemsize*/
2995 0, /*tp_dealloc*/
2996 0, /*tp_print*/
2997 0, /*tp_getattr*/
2998 0, /*tp_setattr*/
2999 0, /*tp_compare*/
3000 0, /*tp_repr*/
3001 0, /*tp_as_number*/
3002 0, /*tp_as_sequence*/
3003 0, /*tp_as_mapping*/
3004 0, /*tp_hash */
3005 0, /*tp_call*/
3006 0, /*tp_str*/
3007 0, /*tp_getattro*/
3008 0, /*tp_setattro*/
3009 0, /*tp_as_buffer*/
3010 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3011 "Null importer object", /* tp_doc */
3012 0, /* tp_traverse */
3013 0, /* tp_clear */
3014 0, /* tp_richcompare */
3015 0, /* tp_weaklistoffset */
3016 0, /* tp_iter */
3017 0, /* tp_iternext */
3018 NullImporter_methods, /* tp_methods */
3019 0, /* tp_members */
3020 0, /* tp_getset */
3021 0, /* tp_base */
3022 0, /* tp_dict */
3023 0, /* tp_descr_get */
3024 0, /* tp_descr_set */
3025 0, /* tp_dictoffset */
3026 (initproc)NullImporter_init, /* tp_init */
3027 0, /* tp_alloc */
3028 PyType_GenericNew /* tp_new */
3029};
3030
3031
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003032PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003033initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003034{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003035 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003036
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003037 if (PyType_Ready(&NullImporterType) < 0)
3038 goto failure;
3039
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003040 m = Py_InitModule4("imp", imp_methods, doc_imp,
3041 NULL, PYTHON_API_VERSION);
Neal Norwitz1ac754f2006-01-19 06:09:39 +00003042 if (m == NULL)
3043 goto failure;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003044 d = PyModule_GetDict(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003045
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003046 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3047 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3048 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3049 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3050 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3051 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3052 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3053 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00003054 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00003055 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003056
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003057 Py_INCREF(&NullImporterType);
3058 PyModule_AddObject(m, "NullImporter", (PyObject *)&NullImporterType);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003059 failure:
3060 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003061}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003062
3063
Guido van Rossumb18618d2000-05-03 23:44:39 +00003064/* API for embedding applications that want to add their own entries
3065 to the table of built-in modules. This should normally be called
3066 *before* Py_Initialize(). When the table resize fails, -1 is
3067 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003068
3069 After a similar function by Just van Rossum. */
3070
3071int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003072PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003073{
3074 static struct _inittab *our_copy = NULL;
3075 struct _inittab *p;
3076 int i, n;
3077
3078 /* Count the number of entries in both tables */
3079 for (n = 0; newtab[n].name != NULL; n++)
3080 ;
3081 if (n == 0)
3082 return 0; /* Nothing to do */
3083 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3084 ;
3085
3086 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00003087 p = our_copy;
3088 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003089 if (p == NULL)
3090 return -1;
3091
3092 /* Copy the tables into the new memory */
3093 if (our_copy != PyImport_Inittab)
3094 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3095 PyImport_Inittab = our_copy = p;
3096 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3097
3098 return 0;
3099}
3100
3101/* Shorthand to add a single entry given a name and a function */
3102
3103int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003104PyImport_AppendInittab(char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003105{
3106 struct _inittab newtab[2];
3107
3108 memset(newtab, '\0', sizeof newtab);
3109
3110 newtab[0].name = name;
3111 newtab[0].initfunc = initfunc;
3112
3113 return PyImport_ExtendInittab(newtab);
3114}
Anthony Baxterac6bd462006-04-13 02:06:09 +00003115
3116#ifdef __cplusplus
3117}
3118#endif