blob: 9e46e0290a1dbe4bf6dd3057d7de6faba158ae96 [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
Thomas Wouters49fd7fa2006-04-21 10:40:58 +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
Guido van Rossum45aecf42006-03-15 04:58:47 +000034 The magic numbers must be spaced apart at least 2 values, as the
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000035 -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
Thomas Wouters49fd7fa2006-04-21 10:40:58 +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)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000063 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
64 Python 2.5b3: 62111 (fix wrong code: x += yield)
65 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
66 storing constants that should have been removed)
Thomas Wouters89f507f2006-12-13 04:49:30 +000067 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
68 Python 2.6a0: 62141 (peephole optimizations)
Guido van Rossum45aecf42006-03-15 04:58:47 +000069 Python 3000: 3000
Brett Cannone2e23ef2006-08-25 05:05:30 +000070 3010 (removed UNARY_CONVERT)
Guido van Rossum86e58e22006-08-28 15:27:34 +000071 3020 (added BUILD_SET)
Guido van Rossum4f72a782006-10-27 23:31:49 +000072 3030 (added keyword-only parameters)
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000073.
Tim Peters36515e22001-11-18 04:06:29 +000074*/
Guido van Rossum4f72a782006-10-27 23:31:49 +000075#define MAGIC (3030 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000076
Guido van Rossum96774c12000-05-01 20:19:08 +000077/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000078 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000079 compiler works which are enabled by command line switches. */
80static long pyc_magic = MAGIC;
81
Guido van Rossum25ce5661997-08-02 03:10:38 +000082/* See _PyImport_FixupExtension() below */
83static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000084
Guido van Rossum771c6c81997-10-31 18:37:24 +000085/* This table is defined in config.c: */
86extern struct _inittab _PyImport_Inittab[];
87
88struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000089
Guido van Rossumed1170e1999-12-20 21:23:41 +000090/* these tables define the module suffixes that Python recognizes */
91struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +000092
93#ifdef RISCOS
94static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +000095 {"/py", "U", PY_SOURCE},
Guido van Rossum48a680c2001-03-02 06:34:14 +000096 {"/pyc", "rb", PY_COMPILED},
97 {0, 0}
98};
99#else
Guido van Rossumed1170e1999-12-20 21:23:41 +0000100static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +0000101 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000102#ifdef MS_WINDOWS
Jack Jansenc88da1f2002-05-28 10:58:19 +0000103 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000104#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000105 {".pyc", "rb", PY_COMPILED},
106 {0, 0}
107};
Guido van Rossum48a680c2001-03-02 06:34:14 +0000108#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000109
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000110static PyTypeObject NullImporterType; /* Forward reference */
111
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000112/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000113
114void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000115_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000116{
Guido van Rossumed1170e1999-12-20 21:23:41 +0000117 const struct filedescr *scan;
118 struct filedescr *filetab;
119 int countD = 0;
120 int countS = 0;
121
122 /* prepare _PyImport_Filetab: copy entries from
123 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
124 */
125 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
126 ++countD;
127 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
128 ++countS;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000129 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000130 if (filetab == NULL)
131 Py_FatalError("Can't initialize import file table.");
Guido van Rossumed1170e1999-12-20 21:23:41 +0000132 memcpy(filetab, _PyImport_DynLoadFiletab,
133 countD * sizeof(struct filedescr));
134 memcpy(filetab + countD, _PyImport_StandardFiletab,
135 countS * sizeof(struct filedescr));
136 filetab[countD + countS].suffix = NULL;
137
138 _PyImport_Filetab = filetab;
139
Guido van Rossum0824f631997-03-11 18:37:35 +0000140 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000141 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
142 for (; filetab->suffix != NULL; filetab++) {
Guido van Rossum48a680c2001-03-02 06:34:14 +0000143#ifndef RISCOS
Guido van Rossumed1170e1999-12-20 21:23:41 +0000144 if (strcmp(filetab->suffix, ".pyc") == 0)
145 filetab->suffix = ".pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000146#else
147 if (strcmp(filetab->suffix, "/pyc") == 0)
148 filetab->suffix = "/pyo";
149#endif
Guido van Rossum0824f631997-03-11 18:37:35 +0000150 }
151 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000152
153 if (Py_UnicodeFlag) {
154 /* Fix the pyc_magic so that byte compiled code created
155 using the all-Unicode method doesn't interfere with
156 code created in normal operation mode. */
157 pyc_magic = MAGIC + 1;
158 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000159}
160
Guido van Rossum25ce5661997-08-02 03:10:38 +0000161void
Just van Rossum52e14d62002-12-30 22:08:05 +0000162_PyImportHooks_Init(void)
163{
164 PyObject *v, *path_hooks = NULL, *zimpimport;
165 int err = 0;
166
167 /* adding sys.path_hooks and sys.path_importer_cache, setting up
168 zipimport */
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000169 if (PyType_Ready(&NullImporterType) < 0)
170 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000171
172 if (Py_VerboseFlag)
173 PySys_WriteStderr("# installing zipimport hook\n");
174
175 v = PyList_New(0);
176 if (v == NULL)
177 goto error;
178 err = PySys_SetObject("meta_path", v);
179 Py_DECREF(v);
180 if (err)
181 goto error;
182 v = PyDict_New();
183 if (v == NULL)
184 goto error;
185 err = PySys_SetObject("path_importer_cache", v);
186 Py_DECREF(v);
187 if (err)
188 goto error;
189 path_hooks = PyList_New(0);
190 if (path_hooks == NULL)
191 goto error;
192 err = PySys_SetObject("path_hooks", path_hooks);
193 if (err) {
194 error:
195 PyErr_Print();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000196 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
197 "path_importer_cache, or NullImporter failed"
198 );
Just van Rossum52e14d62002-12-30 22:08:05 +0000199 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000200
Just van Rossum52e14d62002-12-30 22:08:05 +0000201 zimpimport = PyImport_ImportModule("zipimport");
202 if (zimpimport == NULL) {
203 PyErr_Clear(); /* No zip import module -- okay */
204 if (Py_VerboseFlag)
205 PySys_WriteStderr("# can't import zipimport\n");
206 }
207 else {
208 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
209 "zipimporter");
210 Py_DECREF(zimpimport);
211 if (zipimporter == NULL) {
212 PyErr_Clear(); /* No zipimporter object -- okay */
213 if (Py_VerboseFlag)
214 PySys_WriteStderr(
Fred Drake1e5fc552003-07-11 15:01:02 +0000215 "# can't import zipimport.zipimporter\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000216 }
217 else {
218 /* sys.path_hooks.append(zipimporter) */
219 err = PyList_Append(path_hooks, zipimporter);
220 Py_DECREF(zipimporter);
221 if (err)
222 goto error;
223 if (Py_VerboseFlag)
224 PySys_WriteStderr(
225 "# installed zipimport hook\n");
226 }
227 }
228 Py_DECREF(path_hooks);
229}
230
231void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000232_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000233{
234 Py_XDECREF(extensions);
235 extensions = NULL;
Barry Warsaw84294482000-10-03 16:02:05 +0000236 PyMem_DEL(_PyImport_Filetab);
237 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000238}
239
240
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000241/* Locking primitives to prevent parallel imports of the same module
242 in different threads to return with a partially loaded module.
243 These calls are serialized by the global interpreter lock. */
244
245#ifdef WITH_THREAD
246
Guido van Rossum49b56061998-10-01 20:42:43 +0000247#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000248
Guido van Rossum65d5b571998-12-21 19:32:43 +0000249static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000250static long import_lock_thread = -1;
251static int import_lock_level = 0;
252
253static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000254lock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000255{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000256 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000257 if (me == -1)
258 return; /* Too bad */
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000259 if (import_lock == NULL) {
Guido van Rossum65d5b571998-12-21 19:32:43 +0000260 import_lock = PyThread_allocate_lock();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000261 if (import_lock == NULL)
262 return; /* Nothing much we can do. */
263 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000264 if (import_lock_thread == me) {
265 import_lock_level++;
266 return;
267 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000268 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
269 {
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000270 PyThreadState *tstate = PyEval_SaveThread();
Guido van Rossum65d5b571998-12-21 19:32:43 +0000271 PyThread_acquire_lock(import_lock, 1);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000272 PyEval_RestoreThread(tstate);
273 }
274 import_lock_thread = me;
275 import_lock_level = 1;
276}
277
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000278static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000279unlock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000280{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000281 long me = PyThread_get_thread_ident();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000282 if (me == -1 || import_lock == NULL)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000283 return 0; /* Too bad */
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000284 if (import_lock_thread != me)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000285 return -1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000286 import_lock_level--;
287 if (import_lock_level == 0) {
288 import_lock_thread = -1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000289 PyThread_release_lock(import_lock);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000290 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000291 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000292}
293
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000294/* This function is called from PyOS_AfterFork to ensure that newly
295 created child processes do not share locks with the parent. */
296
297void
298_PyImport_ReInitLock(void)
299{
300#ifdef _AIX
301 if (import_lock != NULL)
302 import_lock = PyThread_allocate_lock();
303#endif
304}
305
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000306#else
307
308#define lock_import()
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000309#define unlock_import() 0
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000310
311#endif
312
Tim Peters69232342001-08-30 05:16:13 +0000313static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000314imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000315{
Tim Peters69232342001-08-30 05:16:13 +0000316#ifdef WITH_THREAD
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000317 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000318#else
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000319 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000320#endif
321}
322
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000323static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000324imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000325{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000326#ifdef WITH_THREAD
327 lock_import();
328#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000329 Py_INCREF(Py_None);
330 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000331}
332
333static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000334imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000335{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000336#ifdef WITH_THREAD
337 if (unlock_import() < 0) {
338 PyErr_SetString(PyExc_RuntimeError,
339 "not holding the import lock");
340 return NULL;
341 }
342#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000343 Py_INCREF(Py_None);
344 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000345}
346
Guido van Rossum25ce5661997-08-02 03:10:38 +0000347/* Helper for sys */
348
349PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000350PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000351{
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000352 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000353 if (interp->modules == NULL)
354 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
355 return interp->modules;
356}
357
Guido van Rossum3f5da241990-12-20 15:06:42 +0000358
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000359/* List of names to clear in sys */
360static char* sys_deletes[] = {
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000361 "path", "argv", "ps1", "ps2", "exitfunc",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000362 "exc_type", "exc_value", "exc_traceback",
363 "last_type", "last_value", "last_traceback",
Just van Rossum52e14d62002-12-30 22:08:05 +0000364 "path_hooks", "path_importer_cache", "meta_path",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000365 NULL
366};
367
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000368static char* sys_files[] = {
369 "stdin", "__stdin__",
370 "stdout", "__stdout__",
371 "stderr", "__stderr__",
372 NULL
373};
374
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000375
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000376/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000377
Guido van Rossum3f5da241990-12-20 15:06:42 +0000378void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000379PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000380{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000381 Py_ssize_t pos, ndone;
Guido van Rossum758eec01998-01-19 21:58:26 +0000382 char *name;
383 PyObject *key, *value, *dict;
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000384 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000385 PyObject *modules = interp->modules;
386
387 if (modules == NULL)
388 return; /* Already done */
389
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000390 /* Delete some special variables first. These are common
391 places where user values hide and people complain when their
392 destructors fail. Since the modules containing them are
393 deleted *last* of all, they would come too late in the normal
394 destruction order. Sigh. */
395
396 value = PyDict_GetItemString(modules, "__builtin__");
397 if (value != NULL && PyModule_Check(value)) {
398 dict = PyModule_GetDict(value);
399 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000400 PySys_WriteStderr("# clear __builtin__._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000401 PyDict_SetItemString(dict, "_", Py_None);
402 }
403 value = PyDict_GetItemString(modules, "sys");
404 if (value != NULL && PyModule_Check(value)) {
405 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000406 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000407 dict = PyModule_GetDict(value);
408 for (p = sys_deletes; *p != NULL; p++) {
409 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000410 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000411 PyDict_SetItemString(dict, *p, Py_None);
412 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000413 for (p = sys_files; *p != NULL; p+=2) {
414 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000415 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000416 v = PyDict_GetItemString(dict, *(p+1));
417 if (v == NULL)
418 v = Py_None;
419 PyDict_SetItemString(dict, *p, v);
420 }
421 }
422
423 /* First, delete __main__ */
424 value = PyDict_GetItemString(modules, "__main__");
425 if (value != NULL && PyModule_Check(value)) {
426 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000427 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000428 _PyModule_Clear(value);
429 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000430 }
431
Guido van Rossum758eec01998-01-19 21:58:26 +0000432 /* The special treatment of __builtin__ here is because even
433 when it's not referenced as a module, its dictionary is
434 referenced by almost every module's __builtins__. Since
435 deleting a module clears its dictionary (even if there are
436 references left to it), we need to delete the __builtin__
437 module last. Likewise, we don't delete sys until the very
438 end because it is implicitly referenced (e.g. by print).
439
440 Also note that we 'delete' modules by replacing their entry
441 in the modules dict with None, rather than really deleting
442 them; this avoids a rehash of the modules dictionary and
443 also marks them as "non existent" so they won't be
444 re-imported. */
445
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000446 /* Next, repeatedly delete modules with a reference count of
Guido van Rossum758eec01998-01-19 21:58:26 +0000447 one (skipping __builtin__ and sys) and delete them */
448 do {
449 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000450 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000451 while (PyDict_Next(modules, &pos, &key, &value)) {
452 if (value->ob_refcnt != 1)
453 continue;
Guido van Rossum566373e1998-10-01 15:24:50 +0000454 if (PyString_Check(key) && PyModule_Check(value)) {
455 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000456 if (strcmp(name, "__builtin__") == 0)
457 continue;
458 if (strcmp(name, "sys") == 0)
459 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000460 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000461 PySys_WriteStderr(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000462 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000463 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000464 PyDict_SetItem(modules, key, Py_None);
465 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000466 }
467 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000468 } while (ndone > 0);
469
Guido van Rossum758eec01998-01-19 21:58:26 +0000470 /* Next, delete all modules (still skipping __builtin__ and sys) */
471 pos = 0;
472 while (PyDict_Next(modules, &pos, &key, &value)) {
Guido van Rossum566373e1998-10-01 15:24:50 +0000473 if (PyString_Check(key) && PyModule_Check(value)) {
474 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000475 if (strcmp(name, "__builtin__") == 0)
476 continue;
477 if (strcmp(name, "sys") == 0)
478 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000479 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000480 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000481 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000482 PyDict_SetItem(modules, key, Py_None);
483 }
484 }
485
486 /* Next, delete sys and __builtin__ (in that order) */
487 value = PyDict_GetItemString(modules, "sys");
488 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000489 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000490 PySys_WriteStderr("# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000491 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000492 PyDict_SetItemString(modules, "sys", Py_None);
493 }
494 value = PyDict_GetItemString(modules, "__builtin__");
495 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000496 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000497 PySys_WriteStderr("# cleanup __builtin__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000498 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000499 PyDict_SetItemString(modules, "__builtin__", Py_None);
500 }
501
502 /* Finally, clear and delete the modules directory */
503 PyDict_Clear(modules);
504 interp->modules = NULL;
505 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000506}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000507
508
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000509/* Helper for pythonrun.c -- return magic number */
510
511long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000512PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000513{
Guido van Rossum96774c12000-05-01 20:19:08 +0000514 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000515}
516
517
Guido van Rossum25ce5661997-08-02 03:10:38 +0000518/* Magic for extension modules (built-in as well as dynamically
519 loaded). To prevent initializing an extension module more than
520 once, we keep a static dictionary 'extensions' keyed by module name
521 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000522 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000523 dictionary is stored by calling _PyImport_FixupExtension()
524 immediately after the module initialization function succeeds. A
525 copy can be retrieved from there by calling
526 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000527
Guido van Rossum79f25d91997-04-29 20:08:16 +0000528PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000529_PyImport_FixupExtension(char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000530{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000531 PyObject *modules, *mod, *dict, *copy;
532 if (extensions == NULL) {
533 extensions = PyDict_New();
534 if (extensions == NULL)
535 return NULL;
536 }
537 modules = PyImport_GetModuleDict();
538 mod = PyDict_GetItemString(modules, name);
539 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000540 PyErr_Format(PyExc_SystemError,
541 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000542 return NULL;
543 }
544 dict = PyModule_GetDict(mod);
545 if (dict == NULL)
546 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000547 copy = PyDict_Copy(dict);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000548 if (copy == NULL)
549 return NULL;
550 PyDict_SetItemString(extensions, filename, copy);
551 Py_DECREF(copy);
552 return copy;
553}
554
555PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000556_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000557{
Fred Drake9cd0efc2001-10-25 21:38:59 +0000558 PyObject *dict, *mod, *mdict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000559 if (extensions == NULL)
560 return NULL;
561 dict = PyDict_GetItemString(extensions, filename);
562 if (dict == NULL)
563 return NULL;
564 mod = PyImport_AddModule(name);
565 if (mod == NULL)
566 return NULL;
567 mdict = PyModule_GetDict(mod);
568 if (mdict == NULL)
569 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000570 if (PyDict_Update(mdict, dict))
Guido van Rossum25ce5661997-08-02 03:10:38 +0000571 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000572 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000573 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Guido van Rossum25ce5661997-08-02 03:10:38 +0000574 name, filename);
575 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000576}
577
578
579/* Get the module object corresponding to a module name.
580 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000581 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000582 Because the former action is most common, THIS DOES NOT RETURN A
583 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000584
Guido van Rossum79f25d91997-04-29 20:08:16 +0000585PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000586PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000587{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000588 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000589 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000590
Guido van Rossum25ce5661997-08-02 03:10:38 +0000591 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000592 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000593 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000594 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000595 if (m == NULL)
596 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000597 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000598 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000599 return NULL;
600 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000601 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000602
603 return m;
604}
605
Tim Peters1cd70172004-08-02 03:52:12 +0000606/* Remove name from sys.modules, if it's there. */
607static void
608_RemoveModule(const char *name)
609{
610 PyObject *modules = PyImport_GetModuleDict();
611 if (PyDict_GetItemString(modules, name) == NULL)
612 return;
613 if (PyDict_DelItemString(modules, name) < 0)
614 Py_FatalError("import: deleting existing key in"
615 "sys.modules failed");
616}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000617
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000618/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000619 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
620 * removed from sys.modules, to avoid leaving damaged module objects
621 * in sys.modules. The caller may wish to restore the original
622 * module object (if any) in this case; PyImport_ReloadModule is an
623 * example.
624 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000625PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000626PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000627{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000628 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
629}
630
631PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000632PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000633{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000634 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000635 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000636
Guido van Rossum79f25d91997-04-29 20:08:16 +0000637 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000638 if (m == NULL)
639 return NULL;
Jeremy Hyltonecd91292004-01-02 23:25:32 +0000640 /* If the module is being reloaded, we get the old module back
641 and re-use its dict to exec the new code. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000642 d = PyModule_GetDict(m);
643 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
644 if (PyDict_SetItemString(d, "__builtins__",
645 PyEval_GetBuiltins()) != 0)
Tim Peters1cd70172004-08-02 03:52:12 +0000646 goto error;
Guido van Rossum6135a871995-01-09 17:53:26 +0000647 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000648 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000649 v = NULL;
650 if (pathname != NULL) {
651 v = PyString_FromString(pathname);
652 if (v == NULL)
653 PyErr_Clear();
654 }
655 if (v == NULL) {
656 v = ((PyCodeObject *)co)->co_filename;
657 Py_INCREF(v);
658 }
659 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000660 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000661 Py_DECREF(v);
662
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000663 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000664 if (v == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000665 goto error;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000666 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000667
Guido van Rossum25ce5661997-08-02 03:10:38 +0000668 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000669 PyErr_Format(PyExc_ImportError,
670 "Loaded module %.200s not found in sys.modules",
671 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000672 return NULL;
673 }
674
Guido van Rossum79f25d91997-04-29 20:08:16 +0000675 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000676
677 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000678
679 error:
680 _RemoveModule(name);
681 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000682}
683
684
685/* Given a pathname for a Python source file, fill a buffer with the
686 pathname for the corresponding compiled file. Return the pathname
687 for the compiled file, or NULL if there's no space in the buffer.
688 Doesn't set an exception. */
689
690static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000691make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000692{
Tim Petersc1731372001-08-04 08:12:36 +0000693 size_t len = strlen(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000694 if (len+2 > buflen)
695 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000696
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000697#ifdef MS_WINDOWS
Tim Petersc1731372001-08-04 08:12:36 +0000698 /* Treat .pyw as if it were .py. The case of ".pyw" must match
699 that used in _PyImport_StandardFiletab. */
700 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
701 --len; /* pretend 'w' isn't there */
702#endif
703 memcpy(buf, pathname, len);
704 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
705 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000706
707 return buf;
708}
709
710
711/* Given a pathname for a Python source file, its time of last
712 modification, and a pathname for a compiled file, check whether the
713 compiled file represents the same version of the source. If so,
714 return a FILE pointer for the compiled file, positioned just after
715 the header; if not, return NULL.
716 Doesn't set an exception. */
717
718static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000719check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000720{
721 FILE *fp;
722 long magic;
723 long pyc_mtime;
724
725 fp = fopen(cpathname, "rb");
726 if (fp == NULL)
727 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000728 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000729 if (magic != pyc_magic) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000730 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000731 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000732 fclose(fp);
733 return NULL;
734 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000735 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000736 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000737 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000738 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000739 fclose(fp);
740 return NULL;
741 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000742 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000743 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000744 return fp;
745}
746
747
748/* Read a code object from a file and check it for validity */
749
Guido van Rossum79f25d91997-04-29 20:08:16 +0000750static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000751read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000752{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000753 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000754
Tim Petersd9b9ac82001-01-28 00:27:39 +0000755 co = PyMarshal_ReadLastObjectFromFile(fp);
Armin Rigo01ab2792004-03-26 15:09:27 +0000756 if (co == NULL)
757 return NULL;
758 if (!PyCode_Check(co)) {
759 PyErr_Format(PyExc_ImportError,
760 "Non-code object in %.200s", cpathname);
761 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000762 return NULL;
763 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000764 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000765}
766
767
768/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000769 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000770
Guido van Rossum79f25d91997-04-29 20:08:16 +0000771static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000772load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000773{
774 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000775 PyCodeObject *co;
776 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000777
Guido van Rossum79f25d91997-04-29 20:08:16 +0000778 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000779 if (magic != pyc_magic) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000780 PyErr_Format(PyExc_ImportError,
781 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000782 return NULL;
783 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000784 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000785 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000786 if (co == NULL)
787 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000788 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000789 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000790 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000791 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000792 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000793
794 return m;
795}
796
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000797/* Parse a source file and return the corresponding code object */
798
Guido van Rossum79f25d91997-04-29 20:08:16 +0000799static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000800parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000801{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000802 PyCodeObject *co = NULL;
803 mod_ty mod;
Thomas Wouters89f507f2006-12-13 04:49:30 +0000804 PyArena *arena = PyArena_New();
805 if (arena == NULL)
806 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000807
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000808 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, 0,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000809 NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000810 if (mod) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000811 co = PyAST_Compile(mod, pathname, NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000812 }
Thomas Wouters89f507f2006-12-13 04:49:30 +0000813 PyArena_Free(arena);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000814 return co;
815}
816
817
Guido van Rossum55a83382000-09-20 20:31:38 +0000818/* Helper to open a bytecode file for writing in exclusive mode */
819
820static FILE *
821open_exclusive(char *filename)
822{
823#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
824 /* Use O_EXCL to avoid a race condition when another process tries to
825 write the same file. When that happens, our open() call fails,
826 which is just fine (since it's only a cache).
827 XXX If the file exists and is writable but the directory is not
828 writable, the file will never be written. Oh well.
829 */
830 int fd;
831 (void) unlink(filename);
Tim Peters42c83af2000-09-29 04:03:10 +0000832 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
833#ifdef O_BINARY
834 |O_BINARY /* necessary for Windows */
835#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000836#ifdef __VMS
Martin v. Löwis18e16552006-02-15 17:27:45 +0000837 , 0666, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000838#else
Martin v. Löwis18e16552006-02-15 17:27:45 +0000839 , 0666
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000840#endif
Martin v. Löwis18e16552006-02-15 17:27:45 +0000841 );
Guido van Rossum55a83382000-09-20 20:31:38 +0000842 if (fd < 0)
843 return NULL;
844 return fdopen(fd, "wb");
845#else
846 /* Best we can do -- on Windows this can't happen anyway */
847 return fopen(filename, "wb");
848#endif
849}
850
851
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000852/* Write a compiled module to a file, placing the time of last
853 modification of its source into the header.
854 Errors are ignored, if a write error occurs an attempt is made to
855 remove the file. */
856
857static void
Martin v. Löwis18e16552006-02-15 17:27:45 +0000858write_compiled_module(PyCodeObject *co, char *cpathname, time_t mtime)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000859{
860 FILE *fp;
861
Guido van Rossum55a83382000-09-20 20:31:38 +0000862 fp = open_exclusive(cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000863 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000864 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000865 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000866 "# can't create %s\n", cpathname);
867 return;
868 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000869 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000870 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000871 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
872 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000873 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000874 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000875 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000876 /* Don't keep partial file */
877 fclose(fp);
878 (void) unlink(cpathname);
879 return;
880 }
881 /* Now write the true mtime */
882 fseek(fp, 4L, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000883 assert(mtime < LONG_MAX);
Martin v. Löwis725507b2006-03-07 12:08:51 +0000884 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000885 fflush(fp);
886 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000887 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000888 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000889}
890
891
892/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000893 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
894 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000895
Guido van Rossum79f25d91997-04-29 20:08:16 +0000896static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000897load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000898{
Fred Drake4c82b232000-06-30 16:18:57 +0000899 time_t mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000900 FILE *fpc;
901 char buf[MAXPATHLEN+1];
902 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000903 PyCodeObject *co;
904 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000905
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000906 mtime = PyOS_GetLastModificationTime(pathname, fp);
Neal Norwitz708e51a2005-10-03 04:48:15 +0000907 if (mtime == (time_t)(-1)) {
908 PyErr_Format(PyExc_RuntimeError,
909 "unable to get modification time from '%s'",
910 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +0000911 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +0000912 }
Fred Drake4c82b232000-06-30 16:18:57 +0000913#if SIZEOF_TIME_T > 4
914 /* Python's .pyc timestamp handling presumes that the timestamp fits
915 in 4 bytes. This will be fine until sometime in the year 2038,
916 when a 4-byte signed time_t will overflow.
917 */
918 if (mtime >> 32) {
919 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +0000920 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +0000921 return NULL;
922 }
923#endif
Tim Peters36515e22001-11-18 04:06:29 +0000924 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +0000925 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000926 if (cpathname != NULL &&
927 (fpc = check_compiled_module(pathname, mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000928 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000929 fclose(fpc);
930 if (co == NULL)
931 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000932 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000933 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000934 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000935 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000936 }
937 else {
938 co = parse_source_module(pathname, fp);
939 if (co == NULL)
940 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000941 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000942 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000943 name, pathname);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000944 if (cpathname)
945 write_compiled_module(co, cpathname, mtime);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000946 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000947 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000949
950 return m;
951}
952
953
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000954/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +0000955static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
956static struct filedescr *find_module(char *, char *, PyObject *,
957 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +0000958static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000959
960/* Load a package and return its module object WITH INCREMENTED
961 REFERENCE COUNT */
962
963static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000964load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000965{
Tim Peters1cd70172004-08-02 03:52:12 +0000966 PyObject *m, *d;
967 PyObject *file = NULL;
968 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000969 int err;
970 char buf[MAXPATHLEN+1];
971 FILE *fp = NULL;
972 struct filedescr *fdp;
973
974 m = PyImport_AddModule(name);
975 if (m == NULL)
976 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000977 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000978 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000979 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000980 d = PyModule_GetDict(m);
981 file = PyString_FromString(pathname);
982 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000983 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000984 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +0000985 if (path == NULL)
986 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000987 err = PyDict_SetItemString(d, "__file__", file);
988 if (err == 0)
989 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +0000990 if (err != 0)
991 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000992 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +0000993 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000994 if (fdp == NULL) {
995 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
996 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +0000997 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000998 }
999 else
1000 m = NULL;
1001 goto cleanup;
1002 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001003 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001004 if (fp != NULL)
1005 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00001006 goto cleanup;
1007
1008 error:
1009 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001010 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001011 Py_XDECREF(path);
1012 Py_XDECREF(file);
1013 return m;
1014}
1015
1016
1017/* Helper to test for built-in module */
1018
1019static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001020is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001021{
1022 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +00001023 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1024 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1025 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001026 return -1;
1027 else
1028 return 1;
1029 }
1030 }
1031 return 0;
1032}
1033
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001034
Just van Rossum52e14d62002-12-30 22:08:05 +00001035/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1036 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001037 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001038 that can handle the path item. Return None if no hook could;
1039 this tells our caller it should fall back to the builtin
1040 import mechanism. Cache the result in path_importer_cache.
1041 Returns a borrowed reference. */
1042
1043static PyObject *
1044get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1045 PyObject *p)
1046{
1047 PyObject *importer;
Martin v. Löwis725507b2006-03-07 12:08:51 +00001048 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001049
1050 /* These conditions are the caller's responsibility: */
1051 assert(PyList_Check(path_hooks));
1052 assert(PyDict_Check(path_importer_cache));
1053
1054 nhooks = PyList_Size(path_hooks);
1055 if (nhooks < 0)
1056 return NULL; /* Shouldn't happen */
1057
1058 importer = PyDict_GetItem(path_importer_cache, p);
1059 if (importer != NULL)
1060 return importer;
1061
1062 /* set path_importer_cache[p] to None to avoid recursion */
1063 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1064 return NULL;
1065
1066 for (j = 0; j < nhooks; j++) {
1067 PyObject *hook = PyList_GetItem(path_hooks, j);
1068 if (hook == NULL)
1069 return NULL;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001070 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
Just van Rossum52e14d62002-12-30 22:08:05 +00001071 if (importer != NULL)
1072 break;
1073
1074 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1075 return NULL;
1076 }
1077 PyErr_Clear();
1078 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001079 if (importer == NULL) {
1080 importer = PyObject_CallFunctionObjArgs(
1081 (PyObject *)&NullImporterType, p, NULL
1082 );
1083 if (importer == NULL) {
1084 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1085 PyErr_Clear();
1086 return Py_None;
1087 }
1088 }
1089 }
1090 if (importer != NULL) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001091 int err = PyDict_SetItem(path_importer_cache, p, importer);
1092 Py_DECREF(importer);
1093 if (err != 0)
1094 return NULL;
1095 }
1096 return importer;
1097}
1098
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001099/* Search the path (default sys.path) for a module. Return the
1100 corresponding filedescr struct, and (via return arguments) the
1101 pathname and an open file. Return NULL if the module is not found. */
1102
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001103#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001104extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001105 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001106#endif
1107
Martin v. Löwis18e16552006-02-15 17:27:45 +00001108static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001109static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001110static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001111
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001112static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001113find_module(char *fullname, char *subname, PyObject *path, char *buf,
1114 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001115{
Martin v. Löwis725507b2006-03-07 12:08:51 +00001116 Py_ssize_t i, npath;
Fred Drake4c82b232000-06-30 16:18:57 +00001117 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001118 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001119 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001120 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001121 PyObject *path_hooks, *path_importer_cache;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001122#ifndef RISCOS
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001123 struct stat statbuf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001124#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001125 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1126 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1127 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001128 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001129#if defined(PYOS_OS2)
1130 size_t saved_len;
1131 size_t saved_namelen;
1132 char *saved_buf = NULL;
1133#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001134 if (p_loader != NULL)
1135 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001136
Just van Rossum52e14d62002-12-30 22:08:05 +00001137 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001138 PyErr_SetString(PyExc_OverflowError,
1139 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001140 return NULL;
1141 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001142 strcpy(name, subname);
1143
1144 /* sys.meta_path import hook */
1145 if (p_loader != NULL) {
1146 PyObject *meta_path;
1147
1148 meta_path = PySys_GetObject("meta_path");
1149 if (meta_path == NULL || !PyList_Check(meta_path)) {
1150 PyErr_SetString(PyExc_ImportError,
1151 "sys.meta_path must be a list of "
1152 "import hooks");
1153 return NULL;
1154 }
1155 Py_INCREF(meta_path); /* zap guard */
1156 npath = PyList_Size(meta_path);
1157 for (i = 0; i < npath; i++) {
1158 PyObject *loader;
1159 PyObject *hook = PyList_GetItem(meta_path, i);
1160 loader = PyObject_CallMethod(hook, "find_module",
1161 "sO", fullname,
1162 path != NULL ?
1163 path : Py_None);
1164 if (loader == NULL) {
1165 Py_DECREF(meta_path);
1166 return NULL; /* true error */
1167 }
1168 if (loader != Py_None) {
1169 /* a loader was found */
1170 *p_loader = loader;
1171 Py_DECREF(meta_path);
1172 return &importhookdescr;
1173 }
1174 Py_DECREF(loader);
1175 }
1176 Py_DECREF(meta_path);
1177 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001178
1179 if (path != NULL && PyString_Check(path)) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001180 /* The only type of submodule allowed inside a "frozen"
1181 package are other frozen modules or packages. */
Guido van Rossum0506a431998-08-11 15:07:39 +00001182 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1183 PyErr_SetString(PyExc_ImportError,
1184 "full frozen module name too long");
1185 return NULL;
1186 }
1187 strcpy(buf, PyString_AsString(path));
1188 strcat(buf, ".");
1189 strcat(buf, name);
1190 strcpy(name, buf);
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001191 if (find_frozen(name) != NULL) {
1192 strcpy(buf, name);
1193 return &fd_frozen;
1194 }
1195 PyErr_Format(PyExc_ImportError,
1196 "No frozen submodule named %.200s", name);
1197 return NULL;
Guido van Rossum0506a431998-08-11 15:07:39 +00001198 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001199 if (path == NULL) {
1200 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001201 strcpy(buf, name);
1202 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001203 }
Greg Ward201baee2001-10-04 14:52:06 +00001204 if ((find_frozen(name)) != NULL) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001205 strcpy(buf, name);
1206 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001207 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001208
Guido van Rossumac279101996-08-22 23:10:58 +00001209#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001210 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1211 if (fp != NULL) {
1212 *p_fp = fp;
1213 return fdp;
1214 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001215#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001216 path = PySys_GetObject("path");
1217 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001218 if (path == NULL || !PyList_Check(path)) {
1219 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001220 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001221 return NULL;
1222 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001223
1224 path_hooks = PySys_GetObject("path_hooks");
1225 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1226 PyErr_SetString(PyExc_ImportError,
1227 "sys.path_hooks must be a list of "
1228 "import hooks");
1229 return NULL;
1230 }
1231 path_importer_cache = PySys_GetObject("path_importer_cache");
1232 if (path_importer_cache == NULL ||
1233 !PyDict_Check(path_importer_cache)) {
1234 PyErr_SetString(PyExc_ImportError,
1235 "sys.path_importer_cache must be a dict");
1236 return NULL;
1237 }
1238
Guido van Rossum79f25d91997-04-29 20:08:16 +00001239 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001240 namelen = strlen(name);
1241 for (i = 0; i < npath; i++) {
Walter Dörwald3430d702002-06-17 10:43:59 +00001242 PyObject *copy = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001243 PyObject *v = PyList_GetItem(path, i);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001244 if (!v)
1245 return NULL;
Walter Dörwald3430d702002-06-17 10:43:59 +00001246#ifdef Py_USING_UNICODE
1247 if (PyUnicode_Check(v)) {
1248 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1249 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1250 if (copy == NULL)
1251 return NULL;
1252 v = copy;
1253 }
1254 else
1255#endif
Guido van Rossum79f25d91997-04-29 20:08:16 +00001256 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001257 continue;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001258 len = PyString_GET_SIZE(v);
Walter Dörwald3430d702002-06-17 10:43:59 +00001259 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1260 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001261 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001262 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001263 strcpy(buf, PyString_AS_STRING(v));
Walter Dörwald3430d702002-06-17 10:43:59 +00001264 if (strlen(buf) != len) {
1265 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001266 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001267 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001268
1269 /* sys.path_hooks import hook */
1270 if (p_loader != NULL) {
1271 PyObject *importer;
1272
1273 importer = get_path_importer(path_importer_cache,
1274 path_hooks, v);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001275 if (importer == NULL) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001276 Py_XDECREF(copy);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001277 return NULL;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001278 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001279 /* Note: importer is a borrowed reference */
1280 if (importer != Py_None) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001281 PyObject *loader;
1282 loader = PyObject_CallMethod(importer,
1283 "find_module",
1284 "s", fullname);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001285 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001286 if (loader == NULL)
1287 return NULL; /* error */
1288 if (loader != Py_None) {
1289 /* a loader was found */
1290 *p_loader = loader;
1291 return &importhookdescr;
1292 }
1293 Py_DECREF(loader);
Thomas Wouters477c8d52006-05-27 19:21:47 +00001294 continue;
Just van Rossum52e14d62002-12-30 22:08:05 +00001295 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001296 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001297 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001298
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001299 if (len > 0 && buf[len-1] != SEP
1300#ifdef ALTSEP
1301 && buf[len-1] != ALTSEP
1302#endif
1303 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001304 buf[len++] = SEP;
Guido van Rossum215c3402000-11-13 17:26:32 +00001305 strcpy(buf+len, name);
1306 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001307
1308 /* Check for package import (buf holds a directory name,
1309 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001310#ifdef HAVE_STAT
Walter Dörwald3430d702002-06-17 10:43:59 +00001311 if (stat(buf, &statbuf) == 0 && /* it exists */
1312 S_ISDIR(statbuf.st_mode) && /* it's a directory */
Thomas Wouters477c8d52006-05-27 19:21:47 +00001313 case_ok(buf, len, namelen, name)) { /* case matches */
1314 if (find_init_module(buf)) { /* and has __init__.py */
1315 Py_XDECREF(copy);
1316 return &fd_package;
1317 }
1318 else {
1319 char warnstr[MAXPATHLEN+80];
1320 sprintf(warnstr, "Not importing directory "
1321 "'%.*s': missing __init__.py",
1322 MAXPATHLEN, buf);
1323 if (PyErr_Warn(PyExc_ImportWarning,
1324 warnstr)) {
1325 Py_XDECREF(copy);
1326 return NULL;
1327 }
1328 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001329 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001330#else
1331 /* XXX How are you going to test for directories? */
Guido van Rossum48a680c2001-03-02 06:34:14 +00001332#ifdef RISCOS
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001333 if (isdir(buf) &&
Walter Dörwald3430d702002-06-17 10:43:59 +00001334 case_ok(buf, len, namelen, name)) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001335 if (find_init_module(buf)) {
1336 Py_XDECREF(copy);
1337 return &fd_package;
1338 }
1339 else {
1340 char warnstr[MAXPATHLEN+80];
1341 sprintf(warnstr, "Not importing directory "
1342 "'%.*s': missing __init__.py",
1343 MAXPATHLEN, buf);
1344 if (PyErr_Warn(PyExc_ImportWarning,
1345 warnstr)) {
1346 Py_XDECREF(copy);
1347 return NULL;
1348 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001349 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001350#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001351#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001352#if defined(PYOS_OS2)
1353 /* take a snapshot of the module spec for restoration
1354 * after the 8 character DLL hackery
1355 */
1356 saved_buf = strdup(buf);
1357 saved_len = len;
1358 saved_namelen = namelen;
1359#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001360 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001361#if defined(PYOS_OS2)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001362 /* OS/2 limits DLLs to 8 character names (w/o
1363 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001364 * so if the name is longer than that and its a
1365 * dynamically loaded module we're going to try,
1366 * truncate the name before trying
1367 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001368 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001369 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001370 const struct filedescr *scan;
1371 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001372 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001373 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001374 break;
1375 else
1376 scan++;
1377 }
1378 if (scan->suffix != NULL) {
1379 /* yes, so truncate the name */
1380 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001381 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001382 buf[len] = '\0';
1383 }
1384 }
1385#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001386 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001387 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001388 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001389 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001390 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001391 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001392 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001393 if (fp != NULL) {
1394 if (case_ok(buf, len, namelen, name))
1395 break;
1396 else { /* continue search */
1397 fclose(fp);
1398 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001399 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001400 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001401#if defined(PYOS_OS2)
1402 /* restore the saved snapshot */
1403 strcpy(buf, saved_buf);
1404 len = saved_len;
1405 namelen = saved_namelen;
1406#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001407 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001408#if defined(PYOS_OS2)
1409 /* don't need/want the module name snapshot anymore */
1410 if (saved_buf)
1411 {
1412 free(saved_buf);
1413 saved_buf = NULL;
1414 }
1415#endif
Walter Dörwald3430d702002-06-17 10:43:59 +00001416 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001417 if (fp != NULL)
1418 break;
1419 }
1420 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001421 PyErr_Format(PyExc_ImportError,
1422 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001423 return NULL;
1424 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001425 *p_fp = fp;
1426 return fdp;
1427}
1428
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001429/* Helpers for main.c
1430 * Find the source file corresponding to a named module
1431 */
1432struct filedescr *
1433_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1434 size_t buflen, FILE **p_fp, PyObject **p_loader)
1435{
1436 return find_module((char *) name, (char *) name, path,
1437 buf, buflen, p_fp, p_loader);
1438}
1439
1440PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1441{
1442 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1443}
1444
Martin v. Löwis18e16552006-02-15 17:27:45 +00001445/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001446 * The arguments here are tricky, best shown by example:
1447 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1448 * ^ ^ ^ ^
1449 * |--------------------- buf ---------------------|
1450 * |------------------- len ------------------|
1451 * |------ name -------|
1452 * |----- namelen -----|
1453 * buf is the full path, but len only counts up to (& exclusive of) the
1454 * extension. name is the module name, also exclusive of extension.
1455 *
1456 * We've already done a successful stat() or fopen() on buf, so know that
1457 * there's some match, possibly case-insensitive.
1458 *
Tim Peters50d8d372001-02-28 05:34:27 +00001459 * case_ok() is to return 1 if there's a case-sensitive match for
1460 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1461 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001462 *
Tim Peters50d8d372001-02-28 05:34:27 +00001463 * case_ok() is used to implement case-sensitive import semantics even
1464 * on platforms with case-insensitive filesystems. It's trivial to implement
1465 * for case-sensitive filesystems. It's pretty much a cross-platform
1466 * nightmare for systems with case-insensitive filesystems.
1467 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001468
Tim Peters50d8d372001-02-28 05:34:27 +00001469/* First we may need a pile of platform-specific header files; the sequence
1470 * of #if's here should match the sequence in the body of case_ok().
1471 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001472#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001473#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001474
Tim Peters50d8d372001-02-28 05:34:27 +00001475#elif defined(DJGPP)
1476#include <dir.h>
1477
Jason Tishler7961aa62005-05-20 00:56:54 +00001478#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001479#include <sys/types.h>
1480#include <dirent.h>
1481
Andrew MacIntyred9400542002-02-26 11:41:34 +00001482#elif defined(PYOS_OS2)
1483#define INCL_DOS
1484#define INCL_DOSERRORS
1485#define INCL_NOPMAPI
1486#include <os2.h>
1487
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001488#elif defined(RISCOS)
1489#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001490#endif
1491
Guido van Rossum0980bd91998-02-13 17:18:36 +00001492static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001493case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001494{
Tim Peters50d8d372001-02-28 05:34:27 +00001495/* Pick a platform-specific implementation; the sequence of #if's here should
1496 * match the sequence just above.
1497 */
1498
Jason Tishler7961aa62005-05-20 00:56:54 +00001499/* MS_WINDOWS */
1500#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001501 WIN32_FIND_DATA data;
1502 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001503
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001504 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001505 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001506
Guido van Rossum0980bd91998-02-13 17:18:36 +00001507 h = FindFirstFile(buf, &data);
1508 if (h == INVALID_HANDLE_VALUE) {
1509 PyErr_Format(PyExc_NameError,
1510 "Can't find file for module %.100s\n(filename %.300s)",
1511 name, buf);
1512 return 0;
1513 }
1514 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001515 return strncmp(data.cFileName, name, namelen) == 0;
1516
1517/* DJGPP */
1518#elif defined(DJGPP)
1519 struct ffblk ffblk;
1520 int done;
1521
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001522 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001523 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001524
1525 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1526 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001527 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001528 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001529 name, buf);
1530 return 0;
1531 }
Tim Peters50d8d372001-02-28 05:34:27 +00001532 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001533
Jason Tishler7961aa62005-05-20 00:56:54 +00001534/* new-fangled macintosh (macosx) or Cygwin */
1535#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001536 DIR *dirp;
1537 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001538 char dirname[MAXPATHLEN + 1];
1539 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001540
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001541 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001542 return 1;
1543
Tim Petersd1e87a82001-03-01 18:12:00 +00001544 /* Copy the dir component into dirname; substitute "." if empty */
1545 if (dirlen <= 0) {
1546 dirname[0] = '.';
1547 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001548 }
1549 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001550 assert(dirlen <= MAXPATHLEN);
1551 memcpy(dirname, buf, dirlen);
1552 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001553 }
1554 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001555 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001556 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001557 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001558 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001559 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001560#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001561 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001562#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001563 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001564#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001565 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001566 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001567 (void)closedir(dirp);
1568 return 1; /* Found */
1569 }
1570 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001571 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001572 }
Tim Peters430f5d42001-03-01 01:30:56 +00001573 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001574
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001575/* RISC OS */
1576#elif defined(RISCOS)
1577 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1578 char buf2[MAXPATHLEN+2];
1579 char *nameWithExt = buf+len-namelen;
1580 int canonlen;
1581 os_error *e;
1582
1583 if (Py_GETENV("PYTHONCASEOK") != NULL)
1584 return 1;
1585
1586 /* workaround:
1587 append wildcard, otherwise case of filename wouldn't be touched */
1588 strcpy(buf2, buf);
1589 strcat(buf2, "*");
1590
1591 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1592 canonlen = MAXPATHLEN+1-canonlen;
1593 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1594 return 0;
1595 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1596 return 1; /* match */
1597
1598 return 0;
1599
Andrew MacIntyred9400542002-02-26 11:41:34 +00001600/* OS/2 */
1601#elif defined(PYOS_OS2)
1602 HDIR hdir = 1;
1603 ULONG srchcnt = 1;
1604 FILEFINDBUF3 ffbuf;
1605 APIRET rc;
1606
1607 if (getenv("PYTHONCASEOK") != NULL)
1608 return 1;
1609
1610 rc = DosFindFirst(buf,
1611 &hdir,
1612 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1613 &ffbuf, sizeof(ffbuf),
1614 &srchcnt,
1615 FIL_STANDARD);
1616 if (rc != NO_ERROR)
1617 return 0;
1618 return strncmp(ffbuf.achName, name, namelen) == 0;
1619
Tim Peters50d8d372001-02-28 05:34:27 +00001620/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1621#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001622 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001623
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001624#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001625}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001626
Guido van Rossum0980bd91998-02-13 17:18:36 +00001627
Guido van Rossum197346f1997-10-31 18:38:52 +00001628#ifdef HAVE_STAT
1629/* Helper to look for __init__.py or __init__.py[co] in potential package */
1630static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001631find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001632{
Tim Peters0f9431f2001-07-05 03:47:53 +00001633 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001634 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001635 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001636 struct stat statbuf;
1637
Tim Peters0f9431f2001-07-05 03:47:53 +00001638/* For calling case_ok(buf, len, namelen, name):
1639 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1640 * ^ ^ ^ ^
1641 * |--------------------- buf ---------------------|
1642 * |------------------- len ------------------|
1643 * |------ name -------|
1644 * |----- namelen -----|
1645 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001646 if (save_len + 13 >= MAXPATHLEN)
1647 return 0;
1648 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001649 pname = buf + i;
1650 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001651 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001652 if (case_ok(buf,
1653 save_len + 9, /* len("/__init__") */
1654 8, /* len("__init__") */
1655 pname)) {
1656 buf[save_len] = '\0';
1657 return 1;
1658 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001659 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001660 i += strlen(pname);
1661 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001662 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001663 if (case_ok(buf,
1664 save_len + 9, /* len("/__init__") */
1665 8, /* len("__init__") */
1666 pname)) {
1667 buf[save_len] = '\0';
1668 return 1;
1669 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001670 }
1671 buf[save_len] = '\0';
1672 return 0;
1673}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001674
1675#else
1676
1677#ifdef RISCOS
1678static int
1679find_init_module(buf)
1680 char *buf;
1681{
1682 int save_len = strlen(buf);
1683 int i = save_len;
1684
1685 if (save_len + 13 >= MAXPATHLEN)
1686 return 0;
1687 buf[i++] = SEP;
1688 strcpy(buf+i, "__init__/py");
1689 if (isfile(buf)) {
1690 buf[save_len] = '\0';
1691 return 1;
1692 }
1693
1694 if (Py_OptimizeFlag)
1695 strcpy(buf+i, "o");
1696 else
1697 strcpy(buf+i, "c");
1698 if (isfile(buf)) {
1699 buf[save_len] = '\0';
1700 return 1;
1701 }
1702 buf[save_len] = '\0';
1703 return 0;
1704}
1705#endif /*RISCOS*/
1706
Guido van Rossum197346f1997-10-31 18:38:52 +00001707#endif /* HAVE_STAT */
1708
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001709
Tim Petersdbd9ba62000-07-09 03:09:57 +00001710static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001711
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001712/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001713 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001714
Guido van Rossum79f25d91997-04-29 20:08:16 +00001715static PyObject *
Just van Rossum52e14d62002-12-30 22:08:05 +00001716load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001717{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001718 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001719 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001720 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001721
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001722 /* First check that there's an open file (if we need one) */
1723 switch (type) {
1724 case PY_SOURCE:
1725 case PY_COMPILED:
1726 if (fp == NULL) {
1727 PyErr_Format(PyExc_ValueError,
1728 "file object required for import (type code %d)",
1729 type);
1730 return NULL;
1731 }
1732 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001733
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001734 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001735
1736 case PY_SOURCE:
1737 m = load_source_module(name, buf, fp);
1738 break;
1739
1740 case PY_COMPILED:
1741 m = load_compiled_module(name, buf, fp);
1742 break;
1743
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001744#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001745 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001746 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001747 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001748#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001749
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001750 case PKG_DIRECTORY:
1751 m = load_package(name, buf);
1752 break;
1753
1754 case C_BUILTIN:
1755 case PY_FROZEN:
Guido van Rossuma5568d31998-03-05 03:45:08 +00001756 if (buf != NULL && buf[0] != '\0')
1757 name = buf;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001758 if (type == C_BUILTIN)
1759 err = init_builtin(name);
1760 else
1761 err = PyImport_ImportFrozenModule(name);
1762 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001763 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001764 if (err == 0) {
1765 PyErr_Format(PyExc_ImportError,
1766 "Purported %s module %.200s not found",
1767 type == C_BUILTIN ?
1768 "builtin" : "frozen",
1769 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001770 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001771 }
1772 modules = PyImport_GetModuleDict();
1773 m = PyDict_GetItemString(modules, name);
1774 if (m == NULL) {
1775 PyErr_Format(
1776 PyExc_ImportError,
1777 "%s module %.200s not properly initialized",
1778 type == C_BUILTIN ?
1779 "builtin" : "frozen",
1780 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001781 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001782 }
1783 Py_INCREF(m);
1784 break;
1785
Just van Rossum52e14d62002-12-30 22:08:05 +00001786 case IMP_HOOK: {
1787 if (loader == NULL) {
1788 PyErr_SetString(PyExc_ImportError,
1789 "import hook without loader");
1790 return NULL;
1791 }
1792 m = PyObject_CallMethod(loader, "load_module", "s", name);
1793 break;
1794 }
1795
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001796 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001797 PyErr_Format(PyExc_ImportError,
1798 "Don't know how to import %.200s (type code %d)",
1799 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001800 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001801
1802 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001803
1804 return m;
1805}
1806
1807
1808/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00001809 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001810 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001811
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001812static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001813init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001814{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001815 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001816
Greg Ward201baee2001-10-04 14:52:06 +00001817 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001818 return 1;
1819
Guido van Rossum771c6c81997-10-31 18:37:24 +00001820 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001821 if (strcmp(name, p->name) == 0) {
1822 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001823 PyErr_Format(PyExc_ImportError,
1824 "Cannot re-init internal module %.200s",
1825 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001826 return -1;
1827 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001828 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001829 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001830 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001831 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001832 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001833 if (_PyImport_FixupExtension(name, name) == NULL)
1834 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001835 return 1;
1836 }
1837 }
1838 return 0;
1839}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001840
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001841
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001842/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001843
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001844static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001845find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001846{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001847 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001848
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001850 if (p->name == NULL)
1851 return NULL;
1852 if (strcmp(p->name, name) == 0)
1853 break;
1854 }
1855 return p;
1856}
1857
Guido van Rossum79f25d91997-04-29 20:08:16 +00001858static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001859get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001860{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001861 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001862 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001863
1864 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001865 PyErr_Format(PyExc_ImportError,
1866 "No such frozen object named %.200s",
1867 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001868 return NULL;
1869 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001870 if (p->code == NULL) {
1871 PyErr_Format(PyExc_ImportError,
1872 "Excluded frozen object named %.200s",
1873 name);
1874 return NULL;
1875 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001876 size = p->size;
1877 if (size < 0)
1878 size = -size;
1879 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001880}
1881
1882/* Initialize a frozen module.
1883 Return 1 for succes, 0 if the module is not found, and -1 with
1884 an exception set if the initialization failed.
1885 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001886
1887int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001888PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001889{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001890 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001891 PyObject *co;
1892 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001893 int ispackage;
1894 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001895
1896 if (p == NULL)
1897 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001898 if (p->code == NULL) {
1899 PyErr_Format(PyExc_ImportError,
1900 "Excluded frozen object named %.200s",
1901 name);
1902 return -1;
1903 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001904 size = p->size;
1905 ispackage = (size < 0);
1906 if (ispackage)
1907 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001908 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001909 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001910 name, ispackage ? " package" : "");
1911 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001912 if (co == NULL)
1913 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001914 if (!PyCode_Check(co)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001915 PyErr_Format(PyExc_TypeError,
1916 "frozen object %.200s is not a code object",
1917 name);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001918 goto err_return;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001919 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001920 if (ispackage) {
1921 /* Set __path__ to the package name */
1922 PyObject *d, *s;
1923 int err;
1924 m = PyImport_AddModule(name);
1925 if (m == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001926 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001927 d = PyModule_GetDict(m);
1928 s = PyString_InternFromString(name);
1929 if (s == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001930 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001931 err = PyDict_SetItemString(d, "__path__", s);
1932 Py_DECREF(s);
1933 if (err != 0)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001934 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001935 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001936 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001937 if (m == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001938 goto err_return;
1939 Py_DECREF(co);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001940 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001941 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001942err_return:
1943 Py_DECREF(co);
1944 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001945}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001946
1947
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001948/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001949 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001950
Guido van Rossum79f25d91997-04-29 20:08:16 +00001951PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001952PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001953{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001954 PyObject *pname;
1955 PyObject *result;
1956
1957 pname = PyString_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00001958 if (pname == NULL)
1959 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001960 result = PyImport_Import(pname);
1961 Py_DECREF(pname);
1962 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001963}
1964
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001965/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001966static PyObject *get_parent(PyObject *globals, char *buf,
1967 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001968static PyObject *load_next(PyObject *mod, PyObject *altmod,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001969 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001970static int mark_miss(char *name);
1971static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001972 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001973static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001974
1975/* The Magnum Opus of dotted-name import :-) */
1976
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001977static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001978import_module_level(char *name, PyObject *globals, PyObject *locals,
1979 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001980{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001981 char buf[MAXPATHLEN+1];
Martin v. Löwis18e16552006-02-15 17:27:45 +00001982 Py_ssize_t buflen = 0;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001983 PyObject *parent, *head, *next, *tail;
1984
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001985 parent = get_parent(globals, buf, &buflen, level);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001986 if (parent == NULL)
1987 return NULL;
1988
1989 head = load_next(parent, Py_None, &name, buf, &buflen);
1990 if (head == NULL)
1991 return NULL;
1992
1993 tail = head;
1994 Py_INCREF(tail);
1995 while (name) {
1996 next = load_next(tail, tail, &name, buf, &buflen);
1997 Py_DECREF(tail);
1998 if (next == NULL) {
1999 Py_DECREF(head);
2000 return NULL;
2001 }
2002 tail = next;
2003 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002004 if (tail == Py_None) {
2005 /* If tail is Py_None, both get_parent and load_next found
2006 an empty module name: someone called __import__("") or
2007 doctored faulty bytecode */
2008 Py_DECREF(tail);
2009 Py_DECREF(head);
2010 PyErr_SetString(PyExc_ValueError,
2011 "Empty module name");
2012 return NULL;
2013 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002014
2015 if (fromlist != NULL) {
2016 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2017 fromlist = NULL;
2018 }
2019
2020 if (fromlist == NULL) {
2021 Py_DECREF(tail);
2022 return head;
2023 }
2024
2025 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002026 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002027 Py_DECREF(tail);
2028 return NULL;
2029 }
2030
2031 return tail;
2032}
2033
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002034/* For DLL compatibility */
2035#undef PyImport_ImportModuleEx
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002036PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002037PyImport_ImportModuleEx(char *name, PyObject *globals, PyObject *locals,
2038 PyObject *fromlist)
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002039{
2040 PyObject *result;
2041 lock_import();
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002042 result = import_module_level(name, globals, locals, fromlist, -1);
2043 if (unlock_import() < 0) {
2044 Py_XDECREF(result);
2045 PyErr_SetString(PyExc_RuntimeError,
2046 "not holding the import lock");
2047 return NULL;
2048 }
2049 return result;
2050}
2051#define PyImport_ImportModuleEx(n, g, l, f) \
2052 PyImport_ImportModuleLevel(n, g, l, f, -1);
2053
2054PyObject *
2055PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2056 PyObject *fromlist, int level)
2057{
2058 PyObject *result;
2059 lock_import();
2060 result = import_module_level(name, globals, locals, fromlist, level);
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002061 if (unlock_import() < 0) {
2062 Py_XDECREF(result);
2063 PyErr_SetString(PyExc_RuntimeError,
2064 "not holding the import lock");
2065 return NULL;
2066 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002067 return result;
2068}
2069
Fred Drake87590902004-05-28 20:21:36 +00002070/* Return the package that an import is being performed in. If globals comes
2071 from the module foo.bar.bat (not itself a package), this returns the
2072 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002073 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002074
2075 The *name* of the returned package is returned in buf, with the length of
2076 the name in *p_buflen.
2077
2078 If globals doesn't come from a package or a module in a package, or a
2079 corresponding entry is not found in sys.modules, Py_None is returned.
2080*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002081static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002082get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002083{
2084 static PyObject *namestr = NULL;
2085 static PyObject *pathstr = NULL;
2086 PyObject *modname, *modpath, *modules, *parent;
2087
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002088 if (globals == NULL || !PyDict_Check(globals) || !level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002089 return Py_None;
2090
2091 if (namestr == NULL) {
2092 namestr = PyString_InternFromString("__name__");
2093 if (namestr == NULL)
2094 return NULL;
2095 }
2096 if (pathstr == NULL) {
2097 pathstr = PyString_InternFromString("__path__");
2098 if (pathstr == NULL)
2099 return NULL;
2100 }
2101
2102 *buf = '\0';
2103 *p_buflen = 0;
2104 modname = PyDict_GetItem(globals, namestr);
2105 if (modname == NULL || !PyString_Check(modname))
2106 return Py_None;
2107
2108 modpath = PyDict_GetItem(globals, pathstr);
2109 if (modpath != NULL) {
Martin v. Löwis725507b2006-03-07 12:08:51 +00002110 Py_ssize_t len = PyString_GET_SIZE(modname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002111 if (len > MAXPATHLEN) {
2112 PyErr_SetString(PyExc_ValueError,
2113 "Module name too long");
2114 return NULL;
2115 }
2116 strcpy(buf, PyString_AS_STRING(modname));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002117 }
2118 else {
2119 char *start = PyString_AS_STRING(modname);
2120 char *lastdot = strrchr(start, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002121 size_t len;
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002122 if (lastdot == NULL && level > 0) {
2123 PyErr_SetString(PyExc_ValueError,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002124 "Attempted relative import in non-package");
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002125 return NULL;
2126 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002127 if (lastdot == NULL)
2128 return Py_None;
2129 len = lastdot - start;
2130 if (len >= MAXPATHLEN) {
2131 PyErr_SetString(PyExc_ValueError,
2132 "Module name too long");
2133 return NULL;
2134 }
2135 strncpy(buf, start, len);
2136 buf[len] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002137 }
2138
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002139 while (--level > 0) {
2140 char *dot = strrchr(buf, '.');
2141 if (dot == NULL) {
2142 PyErr_SetString(PyExc_ValueError,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002143 "Attempted relative import beyond "
2144 "toplevel package");
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002145 return NULL;
2146 }
2147 *dot = '\0';
2148 }
2149 *p_buflen = strlen(buf);
2150
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002151 modules = PyImport_GetModuleDict();
2152 parent = PyDict_GetItemString(modules, buf);
2153 if (parent == NULL)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002154 PyErr_Format(PyExc_SystemError,
2155 "Parent module '%.200s' not loaded", buf);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002156 return parent;
2157 /* We expect, but can't guarantee, if parent != None, that:
2158 - parent.__name__ == buf
2159 - parent.__dict__ is globals
2160 If this is violated... Who cares? */
2161}
2162
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002163/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002164static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002165load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002166 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002167{
2168 char *name = *p_name;
2169 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002170 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002171 char *p;
2172 PyObject *result;
2173
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002174 if (strlen(name) == 0) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002175 /* completely empty module name should only happen in
2176 'from . import' (or '__import__("")')*/
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002177 Py_INCREF(mod);
2178 *p_name = NULL;
2179 return mod;
2180 }
2181
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002182 if (dot == NULL) {
2183 *p_name = NULL;
2184 len = strlen(name);
2185 }
2186 else {
2187 *p_name = dot+1;
2188 len = dot-name;
2189 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002190 if (len == 0) {
2191 PyErr_SetString(PyExc_ValueError,
2192 "Empty module name");
2193 return NULL;
2194 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002195
2196 p = buf + *p_buflen;
2197 if (p != buf)
2198 *p++ = '.';
2199 if (p+len-buf >= MAXPATHLEN) {
2200 PyErr_SetString(PyExc_ValueError,
2201 "Module name too long");
2202 return NULL;
2203 }
2204 strncpy(p, name, len);
2205 p[len] = '\0';
2206 *p_buflen = p+len-buf;
2207
2208 result = import_submodule(mod, p, buf);
2209 if (result == Py_None && altmod != mod) {
2210 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002211 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002212 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002213 if (result != NULL && result != Py_None) {
2214 if (mark_miss(buf) != 0) {
2215 Py_DECREF(result);
2216 return NULL;
2217 }
2218 strncpy(buf, name, len);
2219 buf[len] = '\0';
2220 *p_buflen = len;
2221 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002222 }
2223 if (result == NULL)
2224 return NULL;
2225
2226 if (result == Py_None) {
2227 Py_DECREF(result);
2228 PyErr_Format(PyExc_ImportError,
2229 "No module named %.200s", name);
2230 return NULL;
2231 }
2232
2233 return result;
2234}
2235
2236static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002237mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002238{
2239 PyObject *modules = PyImport_GetModuleDict();
2240 return PyDict_SetItemString(modules, name, Py_None);
2241}
2242
2243static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002244ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002245 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002246{
2247 int i;
2248
2249 if (!PyObject_HasAttrString(mod, "__path__"))
2250 return 1;
2251
2252 for (i = 0; ; i++) {
2253 PyObject *item = PySequence_GetItem(fromlist, i);
2254 int hasit;
2255 if (item == NULL) {
2256 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2257 PyErr_Clear();
2258 return 1;
2259 }
2260 return 0;
2261 }
2262 if (!PyString_Check(item)) {
2263 PyErr_SetString(PyExc_TypeError,
2264 "Item in ``from list'' not a string");
2265 Py_DECREF(item);
2266 return 0;
2267 }
2268 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002269 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002270 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002271 /* See if the package defines __all__ */
2272 if (recursive)
2273 continue; /* Avoid endless recursion */
2274 all = PyObject_GetAttrString(mod, "__all__");
2275 if (all == NULL)
2276 PyErr_Clear();
2277 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002278 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002279 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002280 if (!ret)
2281 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002282 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002283 continue;
2284 }
2285 hasit = PyObject_HasAttr(mod, item);
2286 if (!hasit) {
2287 char *subname = PyString_AS_STRING(item);
2288 PyObject *submod;
2289 char *p;
2290 if (buflen + strlen(subname) >= MAXPATHLEN) {
2291 PyErr_SetString(PyExc_ValueError,
2292 "Module name too long");
2293 Py_DECREF(item);
2294 return 0;
2295 }
2296 p = buf + buflen;
2297 *p++ = '.';
2298 strcpy(p, subname);
2299 submod = import_submodule(mod, subname, buf);
2300 Py_XDECREF(submod);
2301 if (submod == NULL) {
2302 Py_DECREF(item);
2303 return 0;
2304 }
2305 }
2306 Py_DECREF(item);
2307 }
2308
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002309 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002310}
2311
Neil Schemenauer00b09662003-06-16 21:03:07 +00002312static int
2313add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2314 PyObject *modules)
2315{
2316 if (mod == Py_None)
2317 return 1;
2318 /* Irrespective of the success of this load, make a
2319 reference to it in the parent package module. A copy gets
2320 saved in the modules dictionary under the full name, so get a
2321 reference from there, if need be. (The exception is when the
2322 load failed with a SyntaxError -- then there's no trace in
2323 sys.modules. In that case, of course, do nothing extra.) */
2324 if (submod == NULL) {
2325 submod = PyDict_GetItemString(modules, fullname);
2326 if (submod == NULL)
2327 return 1;
2328 }
2329 if (PyModule_Check(mod)) {
2330 /* We can't use setattr here since it can give a
2331 * spurious warning if the submodule name shadows a
2332 * builtin name */
2333 PyObject *dict = PyModule_GetDict(mod);
2334 if (!dict)
2335 return 0;
2336 if (PyDict_SetItemString(dict, subname, submod) < 0)
2337 return 0;
2338 }
2339 else {
2340 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2341 return 0;
2342 }
2343 return 1;
2344}
2345
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002346static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002347import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002348{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002349 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002350 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002351
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002352 /* Require:
2353 if mod == None: subname == fullname
2354 else: mod.__name__ + "." + subname == fullname
2355 */
2356
Tim Peters50d8d372001-02-28 05:34:27 +00002357 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002358 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002359 }
2360 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002361 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002362 char buf[MAXPATHLEN+1];
2363 struct filedescr *fdp;
2364 FILE *fp = NULL;
2365
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002366 if (mod == Py_None)
2367 path = NULL;
2368 else {
2369 path = PyObject_GetAttrString(mod, "__path__");
2370 if (path == NULL) {
2371 PyErr_Clear();
2372 Py_INCREF(Py_None);
2373 return Py_None;
2374 }
2375 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002376
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002377 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002378 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2379 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002380 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002381 if (fdp == NULL) {
2382 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2383 return NULL;
2384 PyErr_Clear();
2385 Py_INCREF(Py_None);
2386 return Py_None;
2387 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002388 m = load_module(fullname, fp, buf, fdp->type, loader);
2389 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002390 if (fp)
2391 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002392 if (!add_submodule(mod, m, fullname, subname, modules)) {
2393 Py_XDECREF(m);
2394 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002395 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002396 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002397
2398 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002399}
2400
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002401
2402/* Re-import a module of any kind and return its module object, WITH
2403 INCREMENTED REFERENCE COUNT */
2404
Guido van Rossum79f25d91997-04-29 20:08:16 +00002405PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002406PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002407{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002408 PyObject *modules = PyImport_GetModuleDict();
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002409 PyObject *path = NULL, *loader = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002410 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002411 char buf[MAXPATHLEN+1];
2412 struct filedescr *fdp;
2413 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002414 PyObject *newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002415
Guido van Rossum79f25d91997-04-29 20:08:16 +00002416 if (m == NULL || !PyModule_Check(m)) {
2417 PyErr_SetString(PyExc_TypeError,
2418 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002419 return NULL;
2420 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002421 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002422 if (name == NULL)
2423 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002424 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002425 PyErr_Format(PyExc_ImportError,
2426 "reload(): module %.200s not in sys.modules",
2427 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002428 return NULL;
2429 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002430 subname = strrchr(name, '.');
2431 if (subname == NULL)
2432 subname = name;
2433 else {
2434 PyObject *parentname, *parent;
2435 parentname = PyString_FromStringAndSize(name, (subname-name));
2436 if (parentname == NULL)
2437 return NULL;
2438 parent = PyDict_GetItem(modules, parentname);
2439 if (parent == NULL) {
2440 PyErr_Format(PyExc_ImportError,
2441 "reload(): parent %.200s not in sys.modules",
Georg Brandl0c55f292005-09-14 06:56:20 +00002442 PyString_AS_STRING(parentname));
2443 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002444 return NULL;
2445 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002446 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002447 subname++;
2448 path = PyObject_GetAttrString(parent, "__path__");
2449 if (path == NULL)
2450 PyErr_Clear();
2451 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002452 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002453 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002454 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002455
2456 if (fdp == NULL) {
2457 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002458 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002459 }
2460
2461 newm = load_module(name, fp, buf, fdp->type, loader);
2462 Py_XDECREF(loader);
2463
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002464 if (fp)
2465 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002466 if (newm == NULL) {
2467 /* load_module probably removed name from modules because of
2468 * the error. Put back the original module object. We're
2469 * going to return NULL in this case regardless of whether
2470 * replacing name succeeds, so the return value is ignored.
2471 */
2472 PyDict_SetItemString(modules, name, m);
2473 }
2474 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002475}
2476
2477
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002478/* Higher-level import emulator which emulates the "import" statement
2479 more accurately -- it invokes the __import__() function from the
2480 builtins of the current globals. This means that the import is
2481 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002482 environment, e.g. by "rexec".
2483 A dummy list ["__doc__"] is passed as the 4th argument so that
2484 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
2485 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002486
2487PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002488PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002489{
2490 static PyObject *silly_list = NULL;
2491 static PyObject *builtins_str = NULL;
2492 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002493 PyObject *globals = NULL;
2494 PyObject *import = NULL;
2495 PyObject *builtins = NULL;
2496 PyObject *r = NULL;
2497
2498 /* Initialize constant string objects */
2499 if (silly_list == NULL) {
2500 import_str = PyString_InternFromString("__import__");
2501 if (import_str == NULL)
2502 return NULL;
2503 builtins_str = PyString_InternFromString("__builtins__");
2504 if (builtins_str == NULL)
2505 return NULL;
2506 silly_list = Py_BuildValue("[s]", "__doc__");
2507 if (silly_list == NULL)
2508 return NULL;
2509 }
2510
2511 /* Get the builtins from current globals */
2512 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002513 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002514 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002515 builtins = PyObject_GetItem(globals, builtins_str);
2516 if (builtins == NULL)
2517 goto err;
2518 }
2519 else {
2520 /* No globals -- use standard builtins, and fake globals */
2521 PyErr_Clear();
2522
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002523 builtins = PyImport_ImportModuleLevel("__builtin__",
2524 NULL, NULL, NULL, 0);
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002525 if (builtins == NULL)
2526 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002527 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2528 if (globals == NULL)
2529 goto err;
2530 }
2531
2532 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002533 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002534 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002535 if (import == NULL)
2536 PyErr_SetObject(PyExc_KeyError, import_str);
2537 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002538 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002539 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002540 if (import == NULL)
2541 goto err;
2542
2543 /* Call the _import__ function with the proper argument list */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002544 r = PyObject_CallFunctionObjArgs(import, module_name, globals,
2545 globals, silly_list, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002546
2547 err:
2548 Py_XDECREF(globals);
2549 Py_XDECREF(builtins);
2550 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002551
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002552 return r;
2553}
2554
2555
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002556/* Module 'imp' provides Python access to the primitives used for
2557 importing modules.
2558*/
2559
Guido van Rossum79f25d91997-04-29 20:08:16 +00002560static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002561imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002562{
2563 char buf[4];
2564
Guido van Rossum96774c12000-05-01 20:19:08 +00002565 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2566 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2567 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2568 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002569
Guido van Rossum79f25d91997-04-29 20:08:16 +00002570 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002571}
2572
Guido van Rossum79f25d91997-04-29 20:08:16 +00002573static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002574imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002575{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002576 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002577 struct filedescr *fdp;
2578
Guido van Rossum79f25d91997-04-29 20:08:16 +00002579 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002580 if (list == NULL)
2581 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002582 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2583 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002584 fdp->suffix, fdp->mode, fdp->type);
2585 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002586 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002587 return NULL;
2588 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002589 if (PyList_Append(list, item) < 0) {
2590 Py_DECREF(list);
2591 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002592 return NULL;
2593 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002594 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002595 }
2596 return list;
2597}
2598
Guido van Rossum79f25d91997-04-29 20:08:16 +00002599static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002600call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002601{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002602 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002603 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002604 struct filedescr *fdp;
2605 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002606 FILE *fp = NULL;
2607
2608 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002609 if (path == Py_None)
2610 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002611 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002612 if (fdp == NULL)
2613 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002614 if (fp != NULL) {
2615 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2616 if (fob == NULL) {
2617 fclose(fp);
2618 return NULL;
2619 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002620 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002621 else {
2622 fob = Py_None;
2623 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002624 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002625 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002626 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002627 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002628 return ret;
2629}
2630
Guido van Rossum79f25d91997-04-29 20:08:16 +00002631static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002632imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002633{
2634 char *name;
2635 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002636 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002637 return NULL;
2638 return call_find_module(name, path);
2639}
2640
2641static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002642imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002643{
2644 char *name;
2645 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002646 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002647 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002648 return NULL;
2649 ret = init_builtin(name);
2650 if (ret < 0)
2651 return NULL;
2652 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002653 Py_INCREF(Py_None);
2654 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002655 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002656 m = PyImport_AddModule(name);
2657 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002658 return m;
2659}
2660
Guido van Rossum79f25d91997-04-29 20:08:16 +00002661static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002662imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002663{
2664 char *name;
2665 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002666 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002667 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002668 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002669 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002670 if (ret < 0)
2671 return NULL;
2672 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002673 Py_INCREF(Py_None);
2674 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002675 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002676 m = PyImport_AddModule(name);
2677 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002678 return m;
2679}
2680
Guido van Rossum79f25d91997-04-29 20:08:16 +00002681static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002682imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002683{
2684 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002685
Guido van Rossum43713e52000-02-29 13:59:29 +00002686 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002687 return NULL;
2688 return get_frozen_object(name);
2689}
2690
Guido van Rossum79f25d91997-04-29 20:08:16 +00002691static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002692imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002693{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002694 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002695 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002696 return NULL;
Guido van Rossum50ee94f2002-04-09 18:00:58 +00002697 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002698}
2699
Guido van Rossum79f25d91997-04-29 20:08:16 +00002700static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002701imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002702{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002703 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002704 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002705 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002706 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002707 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00002708 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002709}
2710
2711static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002712get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002713{
2714 FILE *fp;
2715 if (fob == NULL) {
Tim Peters86c7d2f2004-08-01 23:24:21 +00002716 if (mode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002717 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002718 fp = fopen(pathname, mode);
2719 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002720 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002721 }
2722 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002723 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002724 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002725 PyErr_SetString(PyExc_ValueError,
2726 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002727 }
2728 return fp;
2729}
2730
Guido van Rossum79f25d91997-04-29 20:08:16 +00002731static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002732imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002733{
2734 char *name;
2735 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002736 PyObject *fob = NULL;
2737 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002738 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002739 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002740 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002741 return NULL;
2742 fp = get_file(pathname, fob, "rb");
2743 if (fp == NULL)
2744 return NULL;
2745 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002746 if (fob == NULL)
2747 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002748 return m;
2749}
2750
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002751#ifdef HAVE_DYNAMIC_LOADING
2752
Guido van Rossum79f25d91997-04-29 20:08:16 +00002753static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002754imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002755{
2756 char *name;
2757 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002758 PyObject *fob = NULL;
2759 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002760 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002761 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002762 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002763 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002764 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002765 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002766 if (fp == NULL)
2767 return NULL;
2768 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002769 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002770 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002771}
2772
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002773#endif /* HAVE_DYNAMIC_LOADING */
2774
Guido van Rossum79f25d91997-04-29 20:08:16 +00002775static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002776imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002777{
2778 char *name;
2779 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002780 PyObject *fob = NULL;
2781 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002782 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002783 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002784 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002785 return NULL;
2786 fp = get_file(pathname, fob, "r");
2787 if (fp == NULL)
2788 return NULL;
2789 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002790 if (fob == NULL)
2791 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002792 return m;
2793}
2794
Guido van Rossum79f25d91997-04-29 20:08:16 +00002795static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002796imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002797{
2798 char *name;
2799 PyObject *fob;
2800 char *pathname;
2801 char *suffix; /* Unused */
2802 char *mode;
2803 int type;
2804 FILE *fp;
2805
Guido van Rossum43713e52000-02-29 13:59:29 +00002806 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002807 &name, &fob, &pathname,
2808 &suffix, &mode, &type))
2809 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002810 if (*mode) {
2811 /* Mode must start with 'r' or 'U' and must not contain '+'.
2812 Implicit in this test is the assumption that the mode
2813 may contain other modifiers like 'b' or 't'. */
2814
2815 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002816 PyErr_Format(PyExc_ValueError,
2817 "invalid file open mode %.200s", mode);
2818 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002819 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002820 }
2821 if (fob == Py_None)
2822 fp = NULL;
2823 else {
2824 if (!PyFile_Check(fob)) {
2825 PyErr_SetString(PyExc_ValueError,
2826 "load_module arg#2 should be a file or None");
2827 return NULL;
2828 }
2829 fp = get_file(pathname, fob, mode);
2830 if (fp == NULL)
2831 return NULL;
2832 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002833 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002834}
2835
2836static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002837imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002838{
2839 char *name;
2840 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00002841 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002842 return NULL;
2843 return load_package(name, pathname);
2844}
2845
2846static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002847imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002848{
2849 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002850 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002851 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002852 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002853}
2854
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002855/* Doc strings */
2856
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002857PyDoc_STRVAR(doc_imp,
2858"This module provides the components needed to build your own\n\
2859__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002860
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002861PyDoc_STRVAR(doc_find_module,
2862"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002863Search for a module. If path is omitted or None, search for a\n\
2864built-in, frozen or special module and continue search in sys.path.\n\
2865The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002866package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002867
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002868PyDoc_STRVAR(doc_load_module,
2869"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002870Load a module, given information returned by find_module().\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_get_magic,
2874"get_magic() -> string\n\
2875Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002876
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002877PyDoc_STRVAR(doc_get_suffixes,
2878"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002879Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002880that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002881
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002882PyDoc_STRVAR(doc_new_module,
2883"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002884Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002885The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002886
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002887PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00002888"lock_held() -> boolean\n\
2889Return True if the import lock is currently held, else False.\n\
2890On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00002891
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002892PyDoc_STRVAR(doc_acquire_lock,
2893"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00002894Acquires the interpreter's import lock for the current thread.\n\
2895This lock should be used by import hooks to ensure thread-safety\n\
2896when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002897On platforms without threads, this function does nothing.");
2898
2899PyDoc_STRVAR(doc_release_lock,
2900"release_lock() -> None\n\
2901Release the interpreter's import lock.\n\
2902On platforms without threads, this function does nothing.");
2903
Guido van Rossum79f25d91997-04-29 20:08:16 +00002904static PyMethodDef imp_methods[] = {
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002905 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
2906 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
2907 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
2908 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
2909 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
2910 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
2911 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
2912 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002913 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00002914 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
2915 {"init_builtin", imp_init_builtin, METH_VARARGS},
2916 {"init_frozen", imp_init_frozen, METH_VARARGS},
2917 {"is_builtin", imp_is_builtin, METH_VARARGS},
2918 {"is_frozen", imp_is_frozen, METH_VARARGS},
2919 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002920#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00002921 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002922#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00002923 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00002924 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002925 {NULL, NULL} /* sentinel */
2926};
2927
Guido van Rossum1a8791e1998-08-04 22:46:29 +00002928static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002929setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002930{
2931 PyObject *v;
2932 int err;
2933
2934 v = PyInt_FromLong((long)value);
2935 err = PyDict_SetItemString(d, name, v);
2936 Py_XDECREF(v);
2937 return err;
2938}
2939
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002940typedef struct {
2941 PyObject_HEAD
2942} NullImporter;
2943
2944static int
2945NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
2946{
2947 char *path;
2948
2949 if (!_PyArg_NoKeywords("NullImporter()", kwds))
2950 return -1;
2951
2952 if (!PyArg_ParseTuple(args, "s:NullImporter",
2953 &path))
2954 return -1;
2955
2956 if (strlen(path) == 0) {
2957 PyErr_SetString(PyExc_ImportError, "empty pathname");
2958 return -1;
2959 } else {
2960#ifndef RISCOS
2961 struct stat statbuf;
2962 int rv;
2963
2964 rv = stat(path, &statbuf);
2965 if (rv == 0) {
2966 /* it exists */
2967 if (S_ISDIR(statbuf.st_mode)) {
2968 /* it's a directory */
2969 PyErr_SetString(PyExc_ImportError,
2970 "existing directory");
2971 return -1;
2972 }
2973 }
2974#else
2975 if (object_exists(path)) {
2976 /* it exists */
2977 if (isdir(path)) {
2978 /* it's a directory */
2979 PyErr_SetString(PyExc_ImportError,
2980 "existing directory");
2981 return -1;
2982 }
2983 }
2984#endif
2985 }
2986 return 0;
2987}
2988
2989static PyObject *
2990NullImporter_find_module(NullImporter *self, PyObject *args)
2991{
2992 Py_RETURN_NONE;
2993}
2994
2995static PyMethodDef NullImporter_methods[] = {
2996 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
2997 "Always return None"
2998 },
2999 {NULL} /* Sentinel */
3000};
3001
3002
3003static PyTypeObject NullImporterType = {
3004 PyObject_HEAD_INIT(NULL)
3005 0, /*ob_size*/
3006 "imp.NullImporter", /*tp_name*/
3007 sizeof(NullImporter), /*tp_basicsize*/
3008 0, /*tp_itemsize*/
3009 0, /*tp_dealloc*/
3010 0, /*tp_print*/
3011 0, /*tp_getattr*/
3012 0, /*tp_setattr*/
3013 0, /*tp_compare*/
3014 0, /*tp_repr*/
3015 0, /*tp_as_number*/
3016 0, /*tp_as_sequence*/
3017 0, /*tp_as_mapping*/
3018 0, /*tp_hash */
3019 0, /*tp_call*/
3020 0, /*tp_str*/
3021 0, /*tp_getattro*/
3022 0, /*tp_setattro*/
3023 0, /*tp_as_buffer*/
3024 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3025 "Null importer object", /* tp_doc */
3026 0, /* tp_traverse */
3027 0, /* tp_clear */
3028 0, /* tp_richcompare */
3029 0, /* tp_weaklistoffset */
3030 0, /* tp_iter */
3031 0, /* tp_iternext */
3032 NullImporter_methods, /* tp_methods */
3033 0, /* tp_members */
3034 0, /* tp_getset */
3035 0, /* tp_base */
3036 0, /* tp_dict */
3037 0, /* tp_descr_get */
3038 0, /* tp_descr_set */
3039 0, /* tp_dictoffset */
3040 (initproc)NullImporter_init, /* tp_init */
3041 0, /* tp_alloc */
3042 PyType_GenericNew /* tp_new */
3043};
3044
3045
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003046PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003047initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003048{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003049 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003050
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003051 if (PyType_Ready(&NullImporterType) < 0)
3052 goto failure;
3053
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003054 m = Py_InitModule4("imp", imp_methods, doc_imp,
3055 NULL, PYTHON_API_VERSION);
Neal Norwitz1ac754f2006-01-19 06:09:39 +00003056 if (m == NULL)
3057 goto failure;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003058 d = PyModule_GetDict(m);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00003059 if (d == NULL)
3060 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003061
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003062 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3063 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3064 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3065 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3066 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3067 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3068 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3069 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00003070 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00003071 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003072
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003073 Py_INCREF(&NullImporterType);
3074 PyModule_AddObject(m, "NullImporter", (PyObject *)&NullImporterType);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003075 failure:
3076 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003077}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003078
3079
Guido van Rossumb18618d2000-05-03 23:44:39 +00003080/* API for embedding applications that want to add their own entries
3081 to the table of built-in modules. This should normally be called
3082 *before* Py_Initialize(). When the table resize fails, -1 is
3083 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003084
3085 After a similar function by Just van Rossum. */
3086
3087int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003088PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003089{
3090 static struct _inittab *our_copy = NULL;
3091 struct _inittab *p;
3092 int i, n;
3093
3094 /* Count the number of entries in both tables */
3095 for (n = 0; newtab[n].name != NULL; n++)
3096 ;
3097 if (n == 0)
3098 return 0; /* Nothing to do */
3099 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3100 ;
3101
3102 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00003103 p = our_copy;
3104 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003105 if (p == NULL)
3106 return -1;
3107
3108 /* Copy the tables into the new memory */
3109 if (our_copy != PyImport_Inittab)
3110 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3111 PyImport_Inittab = our_copy = p;
3112 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3113
3114 return 0;
3115}
3116
3117/* Shorthand to add a single entry given a name and a function */
3118
3119int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003120PyImport_AppendInittab(char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003121{
3122 struct _inittab newtab[2];
3123
3124 memset(newtab, '\0', sizeof newtab);
3125
3126 newtab[0].name = name;
3127 newtab[0].initfunc = initfunc;
3128
3129 return PyImport_ExtendInittab(newtab);
3130}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003131
3132#ifdef __cplusplus
3133}
3134#endif