blob: e019a17ec687c190d7cebab2602535d4693ef133 [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
20
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000021extern time_t PyOS_GetLastModificationTime(char *, FILE *);
22 /* In getmtime.c */
Guido van Rossum21d335e1993-10-15 13:01:11 +000023
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000024/* Magic word to reject .pyc files generated by other Python versions.
25 It should change for each incompatible change to the bytecode.
26
27 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000028 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000029 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000030
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000031 The magic numbers must be spaced apart atleast 2 values, as the
32 -U interpeter flag will cause MAGIC+1 being used. They have been
33 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000034
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000035 There were a variety of old schemes for setting the magic number.
36 The current working scheme is to increment the previous value by
37 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000038
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000039 Known values:
40 Python 1.5: 20121
41 Python 1.5.1: 20121
42 Python 1.5.2: 20121
43 Python 2.0: 50823
44 Python 2.0.1: 50823
45 Python 2.1: 60202
46 Python 2.1.1: 60202
47 Python 2.1.2: 60202
48 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000049 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000050 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000051 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000052 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000053 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000054 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000055 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000056 Python 2.5a0: 62081 (ast-branch)
57.
Tim Peters36515e22001-11-18 04:06:29 +000058*/
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000059#define MAGIC (62081 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000060
Guido van Rossum96774c12000-05-01 20:19:08 +000061/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000062 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000063 compiler works which are enabled by command line switches. */
64static long pyc_magic = MAGIC;
65
Guido van Rossum25ce5661997-08-02 03:10:38 +000066/* See _PyImport_FixupExtension() below */
67static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000068
Guido van Rossum771c6c81997-10-31 18:37:24 +000069/* This table is defined in config.c: */
70extern struct _inittab _PyImport_Inittab[];
71
72struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000073
Guido van Rossumed1170e1999-12-20 21:23:41 +000074/* these tables define the module suffixes that Python recognizes */
75struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +000076
77#ifdef RISCOS
78static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +000079 {"/py", "U", PY_SOURCE},
Guido van Rossum48a680c2001-03-02 06:34:14 +000080 {"/pyc", "rb", PY_COMPILED},
81 {0, 0}
82};
83#else
Guido van Rossumed1170e1999-12-20 21:23:41 +000084static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +000085 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000086#ifdef MS_WINDOWS
Jack Jansenc88da1f2002-05-28 10:58:19 +000087 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +000088#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +000089 {".pyc", "rb", PY_COMPILED},
90 {0, 0}
91};
Guido van Rossum48a680c2001-03-02 06:34:14 +000092#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +000093
Guido van Rossum1ae940a1995-01-02 19:04:15 +000094/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000095
96void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000097_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000098{
Guido van Rossumed1170e1999-12-20 21:23:41 +000099 const struct filedescr *scan;
100 struct filedescr *filetab;
101 int countD = 0;
102 int countS = 0;
103
104 /* prepare _PyImport_Filetab: copy entries from
105 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
106 */
107 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
108 ++countD;
109 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
110 ++countS;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000111 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
Guido van Rossumed1170e1999-12-20 21:23:41 +0000112 memcpy(filetab, _PyImport_DynLoadFiletab,
113 countD * sizeof(struct filedescr));
114 memcpy(filetab + countD, _PyImport_StandardFiletab,
115 countS * sizeof(struct filedescr));
116 filetab[countD + countS].suffix = NULL;
117
118 _PyImport_Filetab = filetab;
119
Guido van Rossum0824f631997-03-11 18:37:35 +0000120 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000121 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
122 for (; filetab->suffix != NULL; filetab++) {
Guido van Rossum48a680c2001-03-02 06:34:14 +0000123#ifndef RISCOS
Guido van Rossumed1170e1999-12-20 21:23:41 +0000124 if (strcmp(filetab->suffix, ".pyc") == 0)
125 filetab->suffix = ".pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000126#else
127 if (strcmp(filetab->suffix, "/pyc") == 0)
128 filetab->suffix = "/pyo";
129#endif
Guido van Rossum0824f631997-03-11 18:37:35 +0000130 }
131 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000132
133 if (Py_UnicodeFlag) {
134 /* Fix the pyc_magic so that byte compiled code created
135 using the all-Unicode method doesn't interfere with
136 code created in normal operation mode. */
137 pyc_magic = MAGIC + 1;
138 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000139}
140
Guido van Rossum25ce5661997-08-02 03:10:38 +0000141void
Just van Rossum52e14d62002-12-30 22:08:05 +0000142_PyImportHooks_Init(void)
143{
144 PyObject *v, *path_hooks = NULL, *zimpimport;
145 int err = 0;
146
147 /* adding sys.path_hooks and sys.path_importer_cache, setting up
148 zipimport */
149
150 if (Py_VerboseFlag)
151 PySys_WriteStderr("# installing zipimport hook\n");
152
153 v = PyList_New(0);
154 if (v == NULL)
155 goto error;
156 err = PySys_SetObject("meta_path", v);
157 Py_DECREF(v);
158 if (err)
159 goto error;
160 v = PyDict_New();
161 if (v == NULL)
162 goto error;
163 err = PySys_SetObject("path_importer_cache", v);
164 Py_DECREF(v);
165 if (err)
166 goto error;
167 path_hooks = PyList_New(0);
168 if (path_hooks == NULL)
169 goto error;
170 err = PySys_SetObject("path_hooks", path_hooks);
171 if (err) {
172 error:
173 PyErr_Print();
174 Py_FatalError("initializing sys.meta_path, sys.path_hooks or "
175 "path_importer_cache failed");
176 }
177 zimpimport = PyImport_ImportModule("zipimport");
178 if (zimpimport == NULL) {
179 PyErr_Clear(); /* No zip import module -- okay */
180 if (Py_VerboseFlag)
181 PySys_WriteStderr("# can't import zipimport\n");
182 }
183 else {
184 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
185 "zipimporter");
186 Py_DECREF(zimpimport);
187 if (zipimporter == NULL) {
188 PyErr_Clear(); /* No zipimporter object -- okay */
189 if (Py_VerboseFlag)
190 PySys_WriteStderr(
Fred Drake1e5fc552003-07-11 15:01:02 +0000191 "# can't import zipimport.zipimporter\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000192 }
193 else {
194 /* sys.path_hooks.append(zipimporter) */
195 err = PyList_Append(path_hooks, zipimporter);
196 Py_DECREF(zipimporter);
197 if (err)
198 goto error;
199 if (Py_VerboseFlag)
200 PySys_WriteStderr(
201 "# installed zipimport hook\n");
202 }
203 }
204 Py_DECREF(path_hooks);
205}
206
207void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000208_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000209{
210 Py_XDECREF(extensions);
211 extensions = NULL;
Barry Warsaw84294482000-10-03 16:02:05 +0000212 PyMem_DEL(_PyImport_Filetab);
213 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000214}
215
216
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000217/* Locking primitives to prevent parallel imports of the same module
218 in different threads to return with a partially loaded module.
219 These calls are serialized by the global interpreter lock. */
220
221#ifdef WITH_THREAD
222
Guido van Rossum49b56061998-10-01 20:42:43 +0000223#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000224
Guido van Rossum65d5b571998-12-21 19:32:43 +0000225static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000226static long import_lock_thread = -1;
227static int import_lock_level = 0;
228
229static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000230lock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000231{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000232 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000233 if (me == -1)
234 return; /* Too bad */
235 if (import_lock == NULL)
Guido van Rossum65d5b571998-12-21 19:32:43 +0000236 import_lock = PyThread_allocate_lock();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000237 if (import_lock_thread == me) {
238 import_lock_level++;
239 return;
240 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000241 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
242 {
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000243 PyThreadState *tstate = PyEval_SaveThread();
Guido van Rossum65d5b571998-12-21 19:32:43 +0000244 PyThread_acquire_lock(import_lock, 1);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000245 PyEval_RestoreThread(tstate);
246 }
247 import_lock_thread = me;
248 import_lock_level = 1;
249}
250
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000251static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000252unlock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000253{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000254 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000255 if (me == -1)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000256 return 0; /* Too bad */
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000257 if (import_lock_thread != me)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000258 return -1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000259 import_lock_level--;
260 if (import_lock_level == 0) {
261 import_lock_thread = -1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000262 PyThread_release_lock(import_lock);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000263 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000264 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000265}
266
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000267/* This function is called from PyOS_AfterFork to ensure that newly
268 created child processes do not share locks with the parent. */
269
270void
271_PyImport_ReInitLock(void)
272{
273#ifdef _AIX
274 if (import_lock != NULL)
275 import_lock = PyThread_allocate_lock();
276#endif
277}
278
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000279#else
280
281#define lock_import()
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000282#define unlock_import() 0
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000283
284#endif
285
Tim Peters69232342001-08-30 05:16:13 +0000286static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000287imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000288{
Tim Peters69232342001-08-30 05:16:13 +0000289#ifdef WITH_THREAD
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000290 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000291#else
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000292 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000293#endif
294}
295
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000296static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000297imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000298{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000299#ifdef WITH_THREAD
300 lock_import();
301#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000302 Py_INCREF(Py_None);
303 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000304}
305
306static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000307imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000308{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000309#ifdef WITH_THREAD
310 if (unlock_import() < 0) {
311 PyErr_SetString(PyExc_RuntimeError,
312 "not holding the import lock");
313 return NULL;
314 }
315#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000316 Py_INCREF(Py_None);
317 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000318}
319
Guido van Rossum25ce5661997-08-02 03:10:38 +0000320/* Helper for sys */
321
322PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000323PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000324{
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000325 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000326 if (interp->modules == NULL)
327 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
328 return interp->modules;
329}
330
Guido van Rossum3f5da241990-12-20 15:06:42 +0000331
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000332/* List of names to clear in sys */
333static char* sys_deletes[] = {
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000334 "path", "argv", "ps1", "ps2", "exitfunc",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000335 "exc_type", "exc_value", "exc_traceback",
336 "last_type", "last_value", "last_traceback",
Just van Rossum52e14d62002-12-30 22:08:05 +0000337 "path_hooks", "path_importer_cache", "meta_path",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000338 NULL
339};
340
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000341static char* sys_files[] = {
342 "stdin", "__stdin__",
343 "stdout", "__stdout__",
344 "stderr", "__stderr__",
345 NULL
346};
347
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000348
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000349/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000350
Guido van Rossum3f5da241990-12-20 15:06:42 +0000351void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000352PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000353{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000354 Py_ssize_t pos, ndone;
Guido van Rossum758eec01998-01-19 21:58:26 +0000355 char *name;
356 PyObject *key, *value, *dict;
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000357 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000358 PyObject *modules = interp->modules;
359
360 if (modules == NULL)
361 return; /* Already done */
362
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000363 /* Delete some special variables first. These are common
364 places where user values hide and people complain when their
365 destructors fail. Since the modules containing them are
366 deleted *last* of all, they would come too late in the normal
367 destruction order. Sigh. */
368
369 value = PyDict_GetItemString(modules, "__builtin__");
370 if (value != NULL && PyModule_Check(value)) {
371 dict = PyModule_GetDict(value);
372 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000373 PySys_WriteStderr("# clear __builtin__._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000374 PyDict_SetItemString(dict, "_", Py_None);
375 }
376 value = PyDict_GetItemString(modules, "sys");
377 if (value != NULL && PyModule_Check(value)) {
378 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000379 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000380 dict = PyModule_GetDict(value);
381 for (p = sys_deletes; *p != NULL; p++) {
382 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000383 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000384 PyDict_SetItemString(dict, *p, Py_None);
385 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000386 for (p = sys_files; *p != NULL; p+=2) {
387 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000388 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000389 v = PyDict_GetItemString(dict, *(p+1));
390 if (v == NULL)
391 v = Py_None;
392 PyDict_SetItemString(dict, *p, v);
393 }
394 }
395
396 /* First, delete __main__ */
397 value = PyDict_GetItemString(modules, "__main__");
398 if (value != NULL && PyModule_Check(value)) {
399 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000400 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000401 _PyModule_Clear(value);
402 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000403 }
404
Guido van Rossum758eec01998-01-19 21:58:26 +0000405 /* The special treatment of __builtin__ here is because even
406 when it's not referenced as a module, its dictionary is
407 referenced by almost every module's __builtins__. Since
408 deleting a module clears its dictionary (even if there are
409 references left to it), we need to delete the __builtin__
410 module last. Likewise, we don't delete sys until the very
411 end because it is implicitly referenced (e.g. by print).
412
413 Also note that we 'delete' modules by replacing their entry
414 in the modules dict with None, rather than really deleting
415 them; this avoids a rehash of the modules dictionary and
416 also marks them as "non existent" so they won't be
417 re-imported. */
418
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000419 /* Next, repeatedly delete modules with a reference count of
Guido van Rossum758eec01998-01-19 21:58:26 +0000420 one (skipping __builtin__ and sys) and delete them */
421 do {
422 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000423 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000424 while (PyDict_Next(modules, &pos, &key, &value)) {
425 if (value->ob_refcnt != 1)
426 continue;
Guido van Rossum566373e1998-10-01 15:24:50 +0000427 if (PyString_Check(key) && PyModule_Check(value)) {
428 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000429 if (strcmp(name, "__builtin__") == 0)
430 continue;
431 if (strcmp(name, "sys") == 0)
432 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000433 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000434 PySys_WriteStderr(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000435 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000436 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000437 PyDict_SetItem(modules, key, Py_None);
438 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000439 }
440 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000441 } while (ndone > 0);
442
Guido van Rossum758eec01998-01-19 21:58:26 +0000443 /* Next, delete all modules (still skipping __builtin__ and sys) */
444 pos = 0;
445 while (PyDict_Next(modules, &pos, &key, &value)) {
Guido van Rossum566373e1998-10-01 15:24:50 +0000446 if (PyString_Check(key) && PyModule_Check(value)) {
447 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000448 if (strcmp(name, "__builtin__") == 0)
449 continue;
450 if (strcmp(name, "sys") == 0)
451 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000452 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000453 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000454 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000455 PyDict_SetItem(modules, key, Py_None);
456 }
457 }
458
459 /* Next, delete sys and __builtin__ (in that order) */
460 value = PyDict_GetItemString(modules, "sys");
461 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000462 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000463 PySys_WriteStderr("# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000464 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000465 PyDict_SetItemString(modules, "sys", Py_None);
466 }
467 value = PyDict_GetItemString(modules, "__builtin__");
468 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000469 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000470 PySys_WriteStderr("# cleanup __builtin__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000471 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000472 PyDict_SetItemString(modules, "__builtin__", Py_None);
473 }
474
475 /* Finally, clear and delete the modules directory */
476 PyDict_Clear(modules);
477 interp->modules = NULL;
478 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000479}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000480
481
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000482/* Helper for pythonrun.c -- return magic number */
483
484long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000485PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000486{
Guido van Rossum96774c12000-05-01 20:19:08 +0000487 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000488}
489
490
Guido van Rossum25ce5661997-08-02 03:10:38 +0000491/* Magic for extension modules (built-in as well as dynamically
492 loaded). To prevent initializing an extension module more than
493 once, we keep a static dictionary 'extensions' keyed by module name
494 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000495 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000496 dictionary is stored by calling _PyImport_FixupExtension()
497 immediately after the module initialization function succeeds. A
498 copy can be retrieved from there by calling
499 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000500
Guido van Rossum79f25d91997-04-29 20:08:16 +0000501PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000502_PyImport_FixupExtension(char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000503{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000504 PyObject *modules, *mod, *dict, *copy;
505 if (extensions == NULL) {
506 extensions = PyDict_New();
507 if (extensions == NULL)
508 return NULL;
509 }
510 modules = PyImport_GetModuleDict();
511 mod = PyDict_GetItemString(modules, name);
512 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000513 PyErr_Format(PyExc_SystemError,
514 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000515 return NULL;
516 }
517 dict = PyModule_GetDict(mod);
518 if (dict == NULL)
519 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000520 copy = PyDict_Copy(dict);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000521 if (copy == NULL)
522 return NULL;
523 PyDict_SetItemString(extensions, filename, copy);
524 Py_DECREF(copy);
525 return copy;
526}
527
528PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000529_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000530{
Fred Drake9cd0efc2001-10-25 21:38:59 +0000531 PyObject *dict, *mod, *mdict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000532 if (extensions == NULL)
533 return NULL;
534 dict = PyDict_GetItemString(extensions, filename);
535 if (dict == NULL)
536 return NULL;
537 mod = PyImport_AddModule(name);
538 if (mod == NULL)
539 return NULL;
540 mdict = PyModule_GetDict(mod);
541 if (mdict == NULL)
542 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000543 if (PyDict_Update(mdict, dict))
Guido van Rossum25ce5661997-08-02 03:10:38 +0000544 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000545 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000546 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Guido van Rossum25ce5661997-08-02 03:10:38 +0000547 name, filename);
548 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000549}
550
551
552/* Get the module object corresponding to a module name.
553 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000554 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000555 Because the former action is most common, THIS DOES NOT RETURN A
556 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000557
Guido van Rossum79f25d91997-04-29 20:08:16 +0000558PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000559PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000560{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000561 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000562 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000563
Guido van Rossum25ce5661997-08-02 03:10:38 +0000564 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000565 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000566 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000567 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000568 if (m == NULL)
569 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000570 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000571 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000572 return NULL;
573 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000574 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000575
576 return m;
577}
578
Tim Peters1cd70172004-08-02 03:52:12 +0000579/* Remove name from sys.modules, if it's there. */
580static void
581_RemoveModule(const char *name)
582{
583 PyObject *modules = PyImport_GetModuleDict();
584 if (PyDict_GetItemString(modules, name) == NULL)
585 return;
586 if (PyDict_DelItemString(modules, name) < 0)
587 Py_FatalError("import: deleting existing key in"
588 "sys.modules failed");
589}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000590
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000591/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000592 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
593 * removed from sys.modules, to avoid leaving damaged module objects
594 * in sys.modules. The caller may wish to restore the original
595 * module object (if any) in this case; PyImport_ReloadModule is an
596 * example.
597 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000598PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000599PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000600{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000601 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
602}
603
604PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000605PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000606{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000607 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000608 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000609
Guido van Rossum79f25d91997-04-29 20:08:16 +0000610 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000611 if (m == NULL)
612 return NULL;
Jeremy Hyltonecd91292004-01-02 23:25:32 +0000613 /* If the module is being reloaded, we get the old module back
614 and re-use its dict to exec the new code. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000615 d = PyModule_GetDict(m);
616 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
617 if (PyDict_SetItemString(d, "__builtins__",
618 PyEval_GetBuiltins()) != 0)
Tim Peters1cd70172004-08-02 03:52:12 +0000619 goto error;
Guido van Rossum6135a871995-01-09 17:53:26 +0000620 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000621 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000622 v = NULL;
623 if (pathname != NULL) {
624 v = PyString_FromString(pathname);
625 if (v == NULL)
626 PyErr_Clear();
627 }
628 if (v == NULL) {
629 v = ((PyCodeObject *)co)->co_filename;
630 Py_INCREF(v);
631 }
632 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000633 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000634 Py_DECREF(v);
635
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000636 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000637 if (v == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000638 goto error;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000639 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000640
Guido van Rossum25ce5661997-08-02 03:10:38 +0000641 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000642 PyErr_Format(PyExc_ImportError,
643 "Loaded module %.200s not found in sys.modules",
644 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000645 return NULL;
646 }
647
Guido van Rossum79f25d91997-04-29 20:08:16 +0000648 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000649
650 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000651
652 error:
653 _RemoveModule(name);
654 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000655}
656
657
658/* Given a pathname for a Python source file, fill a buffer with the
659 pathname for the corresponding compiled file. Return the pathname
660 for the compiled file, or NULL if there's no space in the buffer.
661 Doesn't set an exception. */
662
663static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000664make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000665{
Tim Petersc1731372001-08-04 08:12:36 +0000666 size_t len = strlen(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000667 if (len+2 > buflen)
668 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000669
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000670#ifdef MS_WINDOWS
Tim Petersc1731372001-08-04 08:12:36 +0000671 /* Treat .pyw as if it were .py. The case of ".pyw" must match
672 that used in _PyImport_StandardFiletab. */
673 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
674 --len; /* pretend 'w' isn't there */
675#endif
676 memcpy(buf, pathname, len);
677 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
678 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000679
680 return buf;
681}
682
683
684/* Given a pathname for a Python source file, its time of last
685 modification, and a pathname for a compiled file, check whether the
686 compiled file represents the same version of the source. If so,
687 return a FILE pointer for the compiled file, positioned just after
688 the header; if not, return NULL.
689 Doesn't set an exception. */
690
691static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000692check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000693{
694 FILE *fp;
695 long magic;
696 long pyc_mtime;
697
698 fp = fopen(cpathname, "rb");
699 if (fp == NULL)
700 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000701 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000702 if (magic != pyc_magic) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000703 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000704 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000705 fclose(fp);
706 return NULL;
707 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000708 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000709 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000710 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000711 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000712 fclose(fp);
713 return NULL;
714 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000715 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000716 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000717 return fp;
718}
719
720
721/* Read a code object from a file and check it for validity */
722
Guido van Rossum79f25d91997-04-29 20:08:16 +0000723static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000724read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000725{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000726 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000727
Tim Petersd9b9ac82001-01-28 00:27:39 +0000728 co = PyMarshal_ReadLastObjectFromFile(fp);
Armin Rigo01ab2792004-03-26 15:09:27 +0000729 if (co == NULL)
730 return NULL;
731 if (!PyCode_Check(co)) {
732 PyErr_Format(PyExc_ImportError,
733 "Non-code object in %.200s", cpathname);
734 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000735 return NULL;
736 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000737 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000738}
739
740
741/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000742 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000743
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000745load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000746{
747 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000748 PyCodeObject *co;
749 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000750
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000752 if (magic != pyc_magic) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000753 PyErr_Format(PyExc_ImportError,
754 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000755 return NULL;
756 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000757 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000758 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000759 if (co == NULL)
760 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000761 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000762 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000763 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000764 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000765 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000766
767 return m;
768}
769
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000770/* Parse a source file and return the corresponding code object */
771
Guido van Rossum79f25d91997-04-29 20:08:16 +0000772static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000773parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000774{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000775 PyCodeObject *co = NULL;
776 mod_ty mod;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000777 PyArena *arena = PyArena_New();
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000778
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000779 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, 0,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000780 NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000781 if (mod) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000782 co = PyAST_Compile(mod, pathname, NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000783 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000784 PyArena_Free(arena);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000785 return co;
786}
787
788
Guido van Rossum55a83382000-09-20 20:31:38 +0000789/* Helper to open a bytecode file for writing in exclusive mode */
790
791static FILE *
792open_exclusive(char *filename)
793{
794#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
795 /* Use O_EXCL to avoid a race condition when another process tries to
796 write the same file. When that happens, our open() call fails,
797 which is just fine (since it's only a cache).
798 XXX If the file exists and is writable but the directory is not
799 writable, the file will never be written. Oh well.
800 */
801 int fd;
802 (void) unlink(filename);
Tim Peters42c83af2000-09-29 04:03:10 +0000803 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
804#ifdef O_BINARY
805 |O_BINARY /* necessary for Windows */
806#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000807#ifdef __VMS
Martin v. Löwis18e16552006-02-15 17:27:45 +0000808 , 0666, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000809#else
Martin v. Löwis18e16552006-02-15 17:27:45 +0000810 , 0666
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000811#endif
Martin v. Löwis18e16552006-02-15 17:27:45 +0000812 );
Guido van Rossum55a83382000-09-20 20:31:38 +0000813 if (fd < 0)
814 return NULL;
815 return fdopen(fd, "wb");
816#else
817 /* Best we can do -- on Windows this can't happen anyway */
818 return fopen(filename, "wb");
819#endif
820}
821
822
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000823/* Write a compiled module to a file, placing the time of last
824 modification of its source into the header.
825 Errors are ignored, if a write error occurs an attempt is made to
826 remove the file. */
827
828static void
Martin v. Löwis18e16552006-02-15 17:27:45 +0000829write_compiled_module(PyCodeObject *co, char *cpathname, time_t mtime)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000830{
831 FILE *fp;
832
Guido van Rossum55a83382000-09-20 20:31:38 +0000833 fp = open_exclusive(cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000834 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000835 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000836 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000837 "# can't create %s\n", cpathname);
838 return;
839 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000840 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000841 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000842 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
843 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000844 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000845 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000846 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000847 /* Don't keep partial file */
848 fclose(fp);
849 (void) unlink(cpathname);
850 return;
851 }
852 /* Now write the true mtime */
853 fseek(fp, 4L, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000854 assert(mtime < LONG_MAX);
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000855 PyMarshal_WriteLongToFile(mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000856 fflush(fp);
857 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000858 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000859 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000860}
861
862
863/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000864 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
865 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000866
Guido van Rossum79f25d91997-04-29 20:08:16 +0000867static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000868load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000869{
Fred Drake4c82b232000-06-30 16:18:57 +0000870 time_t mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000871 FILE *fpc;
872 char buf[MAXPATHLEN+1];
873 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000874 PyCodeObject *co;
875 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000876
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000877 mtime = PyOS_GetLastModificationTime(pathname, fp);
Neal Norwitz708e51a2005-10-03 04:48:15 +0000878 if (mtime == (time_t)(-1)) {
879 PyErr_Format(PyExc_RuntimeError,
880 "unable to get modification time from '%s'",
881 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +0000882 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +0000883 }
Fred Drake4c82b232000-06-30 16:18:57 +0000884#if SIZEOF_TIME_T > 4
885 /* Python's .pyc timestamp handling presumes that the timestamp fits
886 in 4 bytes. This will be fine until sometime in the year 2038,
887 when a 4-byte signed time_t will overflow.
888 */
889 if (mtime >> 32) {
890 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +0000891 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +0000892 return NULL;
893 }
894#endif
Tim Peters36515e22001-11-18 04:06:29 +0000895 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +0000896 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000897 if (cpathname != NULL &&
898 (fpc = check_compiled_module(pathname, mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000899 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000900 fclose(fpc);
901 if (co == NULL)
902 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000903 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000904 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000905 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000906 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000907 }
908 else {
909 co = parse_source_module(pathname, fp);
910 if (co == NULL)
911 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000912 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000913 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000914 name, pathname);
915 write_compiled_module(co, cpathname, mtime);
916 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000917 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000918 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000919
920 return m;
921}
922
923
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000924/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +0000925static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
926static struct filedescr *find_module(char *, char *, PyObject *,
927 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +0000928static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000929
930/* Load a package and return its module object WITH INCREMENTED
931 REFERENCE COUNT */
932
933static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000934load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000935{
Tim Peters1cd70172004-08-02 03:52:12 +0000936 PyObject *m, *d;
937 PyObject *file = NULL;
938 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000939 int err;
940 char buf[MAXPATHLEN+1];
941 FILE *fp = NULL;
942 struct filedescr *fdp;
943
944 m = PyImport_AddModule(name);
945 if (m == NULL)
946 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000947 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000948 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000949 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000950 d = PyModule_GetDict(m);
951 file = PyString_FromString(pathname);
952 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000953 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000954 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +0000955 if (path == NULL)
956 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000957 err = PyDict_SetItemString(d, "__file__", file);
958 if (err == 0)
959 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +0000960 if (err != 0)
961 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000962 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +0000963 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000964 if (fdp == NULL) {
965 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
966 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +0000967 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000968 }
969 else
970 m = NULL;
971 goto cleanup;
972 }
Just van Rossum52e14d62002-12-30 22:08:05 +0000973 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000974 if (fp != NULL)
975 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +0000976 goto cleanup;
977
978 error:
979 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000980 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000981 Py_XDECREF(path);
982 Py_XDECREF(file);
983 return m;
984}
985
986
987/* Helper to test for built-in module */
988
989static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000990is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000991{
992 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +0000993 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
994 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
995 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000996 return -1;
997 else
998 return 1;
999 }
1000 }
1001 return 0;
1002}
1003
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001004
Just van Rossum52e14d62002-12-30 22:08:05 +00001005/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1006 possibly by fetching it from the path_importer_cache dict. If it
1007 wasn't yet cached, traverse path_hooks until it a hook is found
1008 that can handle the path item. Return None if no hook could;
1009 this tells our caller it should fall back to the builtin
1010 import mechanism. Cache the result in path_importer_cache.
1011 Returns a borrowed reference. */
1012
1013static PyObject *
1014get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1015 PyObject *p)
1016{
1017 PyObject *importer;
1018 int j, nhooks;
1019
1020 /* These conditions are the caller's responsibility: */
1021 assert(PyList_Check(path_hooks));
1022 assert(PyDict_Check(path_importer_cache));
1023
1024 nhooks = PyList_Size(path_hooks);
1025 if (nhooks < 0)
1026 return NULL; /* Shouldn't happen */
1027
1028 importer = PyDict_GetItem(path_importer_cache, p);
1029 if (importer != NULL)
1030 return importer;
1031
1032 /* set path_importer_cache[p] to None to avoid recursion */
1033 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1034 return NULL;
1035
1036 for (j = 0; j < nhooks; j++) {
1037 PyObject *hook = PyList_GetItem(path_hooks, j);
1038 if (hook == NULL)
1039 return NULL;
1040 importer = PyObject_CallFunction(hook, "O", p);
1041 if (importer != NULL)
1042 break;
1043
1044 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1045 return NULL;
1046 }
1047 PyErr_Clear();
1048 }
1049 if (importer == NULL)
1050 importer = Py_None;
1051 else if (importer != Py_None) {
1052 int err = PyDict_SetItem(path_importer_cache, p, importer);
1053 Py_DECREF(importer);
1054 if (err != 0)
1055 return NULL;
1056 }
1057 return importer;
1058}
1059
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001060/* Search the path (default sys.path) for a module. Return the
1061 corresponding filedescr struct, and (via return arguments) the
1062 pathname and an open file. Return NULL if the module is not found. */
1063
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001064#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001065extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001066 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001067#endif
1068
Martin v. Löwis18e16552006-02-15 17:27:45 +00001069static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001070static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001071static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001072
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001073static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001074find_module(char *fullname, char *subname, PyObject *path, char *buf,
1075 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001076{
Fred Drake4c82b232000-06-30 16:18:57 +00001077 int i, npath;
1078 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001079 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001080 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001081 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001082 PyObject *path_hooks, *path_importer_cache;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001083#ifndef RISCOS
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001084 struct stat statbuf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001085#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001086 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1087 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1088 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001089 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001090#if defined(PYOS_OS2)
1091 size_t saved_len;
1092 size_t saved_namelen;
1093 char *saved_buf = NULL;
1094#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001095 if (p_loader != NULL)
1096 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001097
Just van Rossum52e14d62002-12-30 22:08:05 +00001098 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001099 PyErr_SetString(PyExc_OverflowError,
1100 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001101 return NULL;
1102 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001103 strcpy(name, subname);
1104
1105 /* sys.meta_path import hook */
1106 if (p_loader != NULL) {
1107 PyObject *meta_path;
1108
1109 meta_path = PySys_GetObject("meta_path");
1110 if (meta_path == NULL || !PyList_Check(meta_path)) {
1111 PyErr_SetString(PyExc_ImportError,
1112 "sys.meta_path must be a list of "
1113 "import hooks");
1114 return NULL;
1115 }
1116 Py_INCREF(meta_path); /* zap guard */
1117 npath = PyList_Size(meta_path);
1118 for (i = 0; i < npath; i++) {
1119 PyObject *loader;
1120 PyObject *hook = PyList_GetItem(meta_path, i);
1121 loader = PyObject_CallMethod(hook, "find_module",
1122 "sO", fullname,
1123 path != NULL ?
1124 path : Py_None);
1125 if (loader == NULL) {
1126 Py_DECREF(meta_path);
1127 return NULL; /* true error */
1128 }
1129 if (loader != Py_None) {
1130 /* a loader was found */
1131 *p_loader = loader;
1132 Py_DECREF(meta_path);
1133 return &importhookdescr;
1134 }
1135 Py_DECREF(loader);
1136 }
1137 Py_DECREF(meta_path);
1138 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001139
1140 if (path != NULL && PyString_Check(path)) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001141 /* The only type of submodule allowed inside a "frozen"
1142 package are other frozen modules or packages. */
Guido van Rossum0506a431998-08-11 15:07:39 +00001143 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1144 PyErr_SetString(PyExc_ImportError,
1145 "full frozen module name too long");
1146 return NULL;
1147 }
1148 strcpy(buf, PyString_AsString(path));
1149 strcat(buf, ".");
1150 strcat(buf, name);
1151 strcpy(name, buf);
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001152 if (find_frozen(name) != NULL) {
1153 strcpy(buf, name);
1154 return &fd_frozen;
1155 }
1156 PyErr_Format(PyExc_ImportError,
1157 "No frozen submodule named %.200s", name);
1158 return NULL;
Guido van Rossum0506a431998-08-11 15:07:39 +00001159 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001160 if (path == NULL) {
1161 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001162 strcpy(buf, name);
1163 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001164 }
Greg Ward201baee2001-10-04 14:52:06 +00001165 if ((find_frozen(name)) != NULL) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001166 strcpy(buf, name);
1167 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001168 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001169
Guido van Rossumac279101996-08-22 23:10:58 +00001170#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001171 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1172 if (fp != NULL) {
1173 *p_fp = fp;
1174 return fdp;
1175 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001176#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001177 path = PySys_GetObject("path");
1178 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001179 if (path == NULL || !PyList_Check(path)) {
1180 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001181 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001182 return NULL;
1183 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001184
1185 path_hooks = PySys_GetObject("path_hooks");
1186 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1187 PyErr_SetString(PyExc_ImportError,
1188 "sys.path_hooks must be a list of "
1189 "import hooks");
1190 return NULL;
1191 }
1192 path_importer_cache = PySys_GetObject("path_importer_cache");
1193 if (path_importer_cache == NULL ||
1194 !PyDict_Check(path_importer_cache)) {
1195 PyErr_SetString(PyExc_ImportError,
1196 "sys.path_importer_cache must be a dict");
1197 return NULL;
1198 }
1199
Guido van Rossum79f25d91997-04-29 20:08:16 +00001200 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001201 namelen = strlen(name);
1202 for (i = 0; i < npath; i++) {
Walter Dörwald3430d702002-06-17 10:43:59 +00001203 PyObject *copy = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001204 PyObject *v = PyList_GetItem(path, i);
Walter Dörwald3430d702002-06-17 10:43:59 +00001205#ifdef Py_USING_UNICODE
1206 if (PyUnicode_Check(v)) {
1207 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1208 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1209 if (copy == NULL)
1210 return NULL;
1211 v = copy;
1212 }
1213 else
1214#endif
Guido van Rossum79f25d91997-04-29 20:08:16 +00001215 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001216 continue;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001217 len = PyString_Size(v);
Walter Dörwald3430d702002-06-17 10:43:59 +00001218 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1219 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001220 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001221 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001222 strcpy(buf, PyString_AsString(v));
Walter Dörwald3430d702002-06-17 10:43:59 +00001223 if (strlen(buf) != len) {
1224 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001225 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001226 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001227
1228 /* sys.path_hooks import hook */
1229 if (p_loader != NULL) {
1230 PyObject *importer;
1231
1232 importer = get_path_importer(path_importer_cache,
1233 path_hooks, v);
1234 if (importer == NULL)
1235 return NULL;
1236 /* Note: importer is a borrowed reference */
1237 if (importer != Py_None) {
1238 PyObject *loader;
1239 loader = PyObject_CallMethod(importer,
1240 "find_module",
1241 "s", fullname);
1242 if (loader == NULL)
1243 return NULL; /* error */
1244 if (loader != Py_None) {
1245 /* a loader was found */
1246 *p_loader = loader;
1247 return &importhookdescr;
1248 }
1249 Py_DECREF(loader);
1250 }
1251 /* no hook was successful, use builtin import */
1252 }
1253
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001254 if (len > 0 && buf[len-1] != SEP
1255#ifdef ALTSEP
1256 && buf[len-1] != ALTSEP
1257#endif
1258 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001259 buf[len++] = SEP;
Guido van Rossum215c3402000-11-13 17:26:32 +00001260 strcpy(buf+len, name);
1261 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001262
1263 /* Check for package import (buf holds a directory name,
1264 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001265#ifdef HAVE_STAT
Walter Dörwald3430d702002-06-17 10:43:59 +00001266 if (stat(buf, &statbuf) == 0 && /* it exists */
1267 S_ISDIR(statbuf.st_mode) && /* it's a directory */
1268 find_init_module(buf) && /* it has __init__.py */
1269 case_ok(buf, len, namelen, name)) { /* and case matches */
1270 Py_XDECREF(copy);
Tim Peterscab3f682001-04-29 22:21:25 +00001271 return &fd_package;
Walter Dörwald3430d702002-06-17 10:43:59 +00001272 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001273#else
1274 /* XXX How are you going to test for directories? */
Guido van Rossum48a680c2001-03-02 06:34:14 +00001275#ifdef RISCOS
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001276 if (isdir(buf) &&
1277 find_init_module(buf) &&
Walter Dörwald3430d702002-06-17 10:43:59 +00001278 case_ok(buf, len, namelen, name)) {
1279 Py_XDECREF(copy);
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001280 return &fd_package;
Walter Dörwald3430d702002-06-17 10:43:59 +00001281 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001282#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001283#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001284#if defined(PYOS_OS2)
1285 /* take a snapshot of the module spec for restoration
1286 * after the 8 character DLL hackery
1287 */
1288 saved_buf = strdup(buf);
1289 saved_len = len;
1290 saved_namelen = namelen;
1291#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001292 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001293#if defined(PYOS_OS2)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001294 /* OS/2 limits DLLs to 8 character names (w/o
1295 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001296 * so if the name is longer than that and its a
1297 * dynamically loaded module we're going to try,
1298 * truncate the name before trying
1299 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001300 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001301 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001302 const struct filedescr *scan;
1303 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001304 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001305 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001306 break;
1307 else
1308 scan++;
1309 }
1310 if (scan->suffix != NULL) {
1311 /* yes, so truncate the name */
1312 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001313 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001314 buf[len] = '\0';
1315 }
1316 }
1317#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001318 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001319 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001320 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001321 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001322 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001323 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001324 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001325 if (fp != NULL) {
1326 if (case_ok(buf, len, namelen, name))
1327 break;
1328 else { /* continue search */
1329 fclose(fp);
1330 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001331 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001332 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001333#if defined(PYOS_OS2)
1334 /* restore the saved snapshot */
1335 strcpy(buf, saved_buf);
1336 len = saved_len;
1337 namelen = saved_namelen;
1338#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001339 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001340#if defined(PYOS_OS2)
1341 /* don't need/want the module name snapshot anymore */
1342 if (saved_buf)
1343 {
1344 free(saved_buf);
1345 saved_buf = NULL;
1346 }
1347#endif
Walter Dörwald3430d702002-06-17 10:43:59 +00001348 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001349 if (fp != NULL)
1350 break;
1351 }
1352 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001353 PyErr_Format(PyExc_ImportError,
1354 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001355 return NULL;
1356 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001357 *p_fp = fp;
1358 return fdp;
1359}
1360
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001361/* Helpers for main.c
1362 * Find the source file corresponding to a named module
1363 */
1364struct filedescr *
1365_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1366 size_t buflen, FILE **p_fp, PyObject **p_loader)
1367{
1368 return find_module((char *) name, (char *) name, path,
1369 buf, buflen, p_fp, p_loader);
1370}
1371
1372PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1373{
1374 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1375}
1376
Martin v. Löwis18e16552006-02-15 17:27:45 +00001377/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001378 * The arguments here are tricky, best shown by example:
1379 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1380 * ^ ^ ^ ^
1381 * |--------------------- buf ---------------------|
1382 * |------------------- len ------------------|
1383 * |------ name -------|
1384 * |----- namelen -----|
1385 * buf is the full path, but len only counts up to (& exclusive of) the
1386 * extension. name is the module name, also exclusive of extension.
1387 *
1388 * We've already done a successful stat() or fopen() on buf, so know that
1389 * there's some match, possibly case-insensitive.
1390 *
Tim Peters50d8d372001-02-28 05:34:27 +00001391 * case_ok() is to return 1 if there's a case-sensitive match for
1392 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1393 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001394 *
Tim Peters50d8d372001-02-28 05:34:27 +00001395 * case_ok() is used to implement case-sensitive import semantics even
1396 * on platforms with case-insensitive filesystems. It's trivial to implement
1397 * for case-sensitive filesystems. It's pretty much a cross-platform
1398 * nightmare for systems with case-insensitive filesystems.
1399 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001400
Tim Peters50d8d372001-02-28 05:34:27 +00001401/* First we may need a pile of platform-specific header files; the sequence
1402 * of #if's here should match the sequence in the body of case_ok().
1403 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001404#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001405#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001406
Tim Peters50d8d372001-02-28 05:34:27 +00001407#elif defined(DJGPP)
1408#include <dir.h>
1409
Jason Tishler7961aa62005-05-20 00:56:54 +00001410#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001411#include <sys/types.h>
1412#include <dirent.h>
1413
Andrew MacIntyred9400542002-02-26 11:41:34 +00001414#elif defined(PYOS_OS2)
1415#define INCL_DOS
1416#define INCL_DOSERRORS
1417#define INCL_NOPMAPI
1418#include <os2.h>
1419
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001420#elif defined(RISCOS)
1421#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001422#endif
1423
Guido van Rossum0980bd91998-02-13 17:18:36 +00001424static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001425case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001426{
Tim Peters50d8d372001-02-28 05:34:27 +00001427/* Pick a platform-specific implementation; the sequence of #if's here should
1428 * match the sequence just above.
1429 */
1430
Jason Tishler7961aa62005-05-20 00:56:54 +00001431/* MS_WINDOWS */
1432#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001433 WIN32_FIND_DATA data;
1434 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001435
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001436 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001437 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001438
Guido van Rossum0980bd91998-02-13 17:18:36 +00001439 h = FindFirstFile(buf, &data);
1440 if (h == INVALID_HANDLE_VALUE) {
1441 PyErr_Format(PyExc_NameError,
1442 "Can't find file for module %.100s\n(filename %.300s)",
1443 name, buf);
1444 return 0;
1445 }
1446 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001447 return strncmp(data.cFileName, name, namelen) == 0;
1448
1449/* DJGPP */
1450#elif defined(DJGPP)
1451 struct ffblk ffblk;
1452 int done;
1453
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001454 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001455 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001456
1457 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1458 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001459 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001460 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001461 name, buf);
1462 return 0;
1463 }
Tim Peters50d8d372001-02-28 05:34:27 +00001464 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001465
Jason Tishler7961aa62005-05-20 00:56:54 +00001466/* new-fangled macintosh (macosx) or Cygwin */
1467#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001468 DIR *dirp;
1469 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001470 char dirname[MAXPATHLEN + 1];
1471 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001472
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001473 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001474 return 1;
1475
Tim Petersd1e87a82001-03-01 18:12:00 +00001476 /* Copy the dir component into dirname; substitute "." if empty */
1477 if (dirlen <= 0) {
1478 dirname[0] = '.';
1479 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001480 }
1481 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001482 assert(dirlen <= MAXPATHLEN);
1483 memcpy(dirname, buf, dirlen);
1484 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001485 }
1486 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001487 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001488 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001489 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001490 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001491 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001492#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001493 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001494#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001495 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001496#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001497 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001498 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001499 (void)closedir(dirp);
1500 return 1; /* Found */
1501 }
1502 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001503 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001504 }
Tim Peters430f5d42001-03-01 01:30:56 +00001505 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001506
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001507/* RISC OS */
1508#elif defined(RISCOS)
1509 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1510 char buf2[MAXPATHLEN+2];
1511 char *nameWithExt = buf+len-namelen;
1512 int canonlen;
1513 os_error *e;
1514
1515 if (Py_GETENV("PYTHONCASEOK") != NULL)
1516 return 1;
1517
1518 /* workaround:
1519 append wildcard, otherwise case of filename wouldn't be touched */
1520 strcpy(buf2, buf);
1521 strcat(buf2, "*");
1522
1523 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1524 canonlen = MAXPATHLEN+1-canonlen;
1525 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1526 return 0;
1527 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1528 return 1; /* match */
1529
1530 return 0;
1531
Andrew MacIntyred9400542002-02-26 11:41:34 +00001532/* OS/2 */
1533#elif defined(PYOS_OS2)
1534 HDIR hdir = 1;
1535 ULONG srchcnt = 1;
1536 FILEFINDBUF3 ffbuf;
1537 APIRET rc;
1538
1539 if (getenv("PYTHONCASEOK") != NULL)
1540 return 1;
1541
1542 rc = DosFindFirst(buf,
1543 &hdir,
1544 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1545 &ffbuf, sizeof(ffbuf),
1546 &srchcnt,
1547 FIL_STANDARD);
1548 if (rc != NO_ERROR)
1549 return 0;
1550 return strncmp(ffbuf.achName, name, namelen) == 0;
1551
Tim Peters50d8d372001-02-28 05:34:27 +00001552/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1553#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001554 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001555
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001556#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001557}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001558
Guido van Rossum0980bd91998-02-13 17:18:36 +00001559
Guido van Rossum197346f1997-10-31 18:38:52 +00001560#ifdef HAVE_STAT
1561/* Helper to look for __init__.py or __init__.py[co] in potential package */
1562static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001563find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001564{
Tim Peters0f9431f2001-07-05 03:47:53 +00001565 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001566 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001567 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001568 struct stat statbuf;
1569
Tim Peters0f9431f2001-07-05 03:47:53 +00001570/* For calling case_ok(buf, len, namelen, name):
1571 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1572 * ^ ^ ^ ^
1573 * |--------------------- buf ---------------------|
1574 * |------------------- len ------------------|
1575 * |------ name -------|
1576 * |----- namelen -----|
1577 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001578 if (save_len + 13 >= MAXPATHLEN)
1579 return 0;
1580 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001581 pname = buf + i;
1582 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001583 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001584 if (case_ok(buf,
1585 save_len + 9, /* len("/__init__") */
1586 8, /* len("__init__") */
1587 pname)) {
1588 buf[save_len] = '\0';
1589 return 1;
1590 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001591 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001592 i += strlen(pname);
1593 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001594 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001595 if (case_ok(buf,
1596 save_len + 9, /* len("/__init__") */
1597 8, /* len("__init__") */
1598 pname)) {
1599 buf[save_len] = '\0';
1600 return 1;
1601 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001602 }
1603 buf[save_len] = '\0';
1604 return 0;
1605}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001606
1607#else
1608
1609#ifdef RISCOS
1610static int
1611find_init_module(buf)
1612 char *buf;
1613{
1614 int save_len = strlen(buf);
1615 int i = save_len;
1616
1617 if (save_len + 13 >= MAXPATHLEN)
1618 return 0;
1619 buf[i++] = SEP;
1620 strcpy(buf+i, "__init__/py");
1621 if (isfile(buf)) {
1622 buf[save_len] = '\0';
1623 return 1;
1624 }
1625
1626 if (Py_OptimizeFlag)
1627 strcpy(buf+i, "o");
1628 else
1629 strcpy(buf+i, "c");
1630 if (isfile(buf)) {
1631 buf[save_len] = '\0';
1632 return 1;
1633 }
1634 buf[save_len] = '\0';
1635 return 0;
1636}
1637#endif /*RISCOS*/
1638
Guido van Rossum197346f1997-10-31 18:38:52 +00001639#endif /* HAVE_STAT */
1640
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001641
Tim Petersdbd9ba62000-07-09 03:09:57 +00001642static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001643
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001644/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001645 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001646
Guido van Rossum79f25d91997-04-29 20:08:16 +00001647static PyObject *
Just van Rossum52e14d62002-12-30 22:08:05 +00001648load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001649{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001650 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001651 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001652 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001653
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001654 /* First check that there's an open file (if we need one) */
1655 switch (type) {
1656 case PY_SOURCE:
1657 case PY_COMPILED:
1658 if (fp == NULL) {
1659 PyErr_Format(PyExc_ValueError,
1660 "file object required for import (type code %d)",
1661 type);
1662 return NULL;
1663 }
1664 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001665
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001666 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001667
1668 case PY_SOURCE:
1669 m = load_source_module(name, buf, fp);
1670 break;
1671
1672 case PY_COMPILED:
1673 m = load_compiled_module(name, buf, fp);
1674 break;
1675
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001676#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001677 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001678 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001679 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001680#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001681
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001682 case PKG_DIRECTORY:
1683 m = load_package(name, buf);
1684 break;
1685
1686 case C_BUILTIN:
1687 case PY_FROZEN:
Guido van Rossuma5568d31998-03-05 03:45:08 +00001688 if (buf != NULL && buf[0] != '\0')
1689 name = buf;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001690 if (type == C_BUILTIN)
1691 err = init_builtin(name);
1692 else
1693 err = PyImport_ImportFrozenModule(name);
1694 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001695 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001696 if (err == 0) {
1697 PyErr_Format(PyExc_ImportError,
1698 "Purported %s module %.200s not found",
1699 type == C_BUILTIN ?
1700 "builtin" : "frozen",
1701 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001702 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001703 }
1704 modules = PyImport_GetModuleDict();
1705 m = PyDict_GetItemString(modules, name);
1706 if (m == NULL) {
1707 PyErr_Format(
1708 PyExc_ImportError,
1709 "%s module %.200s not properly initialized",
1710 type == C_BUILTIN ?
1711 "builtin" : "frozen",
1712 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001713 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001714 }
1715 Py_INCREF(m);
1716 break;
1717
Just van Rossum52e14d62002-12-30 22:08:05 +00001718 case IMP_HOOK: {
1719 if (loader == NULL) {
1720 PyErr_SetString(PyExc_ImportError,
1721 "import hook without loader");
1722 return NULL;
1723 }
1724 m = PyObject_CallMethod(loader, "load_module", "s", name);
1725 break;
1726 }
1727
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001728 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001729 PyErr_Format(PyExc_ImportError,
1730 "Don't know how to import %.200s (type code %d)",
1731 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001732 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001733
1734 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001735
1736 return m;
1737}
1738
1739
1740/* Initialize a built-in module.
1741 Return 1 for succes, 0 if the module is not found, and -1 with
1742 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001743
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001744static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001745init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001746{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001747 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001748
Greg Ward201baee2001-10-04 14:52:06 +00001749 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001750 return 1;
1751
Guido van Rossum771c6c81997-10-31 18:37:24 +00001752 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001753 if (strcmp(name, p->name) == 0) {
1754 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001755 PyErr_Format(PyExc_ImportError,
1756 "Cannot re-init internal module %.200s",
1757 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001758 return -1;
1759 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001760 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001761 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001762 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001763 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001764 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001765 if (_PyImport_FixupExtension(name, name) == NULL)
1766 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001767 return 1;
1768 }
1769 }
1770 return 0;
1771}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001772
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001773
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001774/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001775
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001776static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001777find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001778{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001779 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001780
Guido van Rossum79f25d91997-04-29 20:08:16 +00001781 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001782 if (p->name == NULL)
1783 return NULL;
1784 if (strcmp(p->name, name) == 0)
1785 break;
1786 }
1787 return p;
1788}
1789
Guido van Rossum79f25d91997-04-29 20:08:16 +00001790static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001791get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001792{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001793 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001794 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001795
1796 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001797 PyErr_Format(PyExc_ImportError,
1798 "No such frozen object named %.200s",
1799 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001800 return NULL;
1801 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001802 if (p->code == NULL) {
1803 PyErr_Format(PyExc_ImportError,
1804 "Excluded frozen object named %.200s",
1805 name);
1806 return NULL;
1807 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001808 size = p->size;
1809 if (size < 0)
1810 size = -size;
1811 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001812}
1813
1814/* Initialize a frozen module.
1815 Return 1 for succes, 0 if the module is not found, and -1 with
1816 an exception set if the initialization failed.
1817 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001818
1819int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001820PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001821{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001822 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001823 PyObject *co;
1824 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001825 int ispackage;
1826 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001827
1828 if (p == NULL)
1829 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001830 if (p->code == NULL) {
1831 PyErr_Format(PyExc_ImportError,
1832 "Excluded frozen object named %.200s",
1833 name);
1834 return -1;
1835 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001836 size = p->size;
1837 ispackage = (size < 0);
1838 if (ispackage)
1839 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001840 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001841 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001842 name, ispackage ? " package" : "");
1843 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001844 if (co == NULL)
1845 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001846 if (!PyCode_Check(co)) {
1847 Py_DECREF(co);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001848 PyErr_Format(PyExc_TypeError,
1849 "frozen object %.200s is not a code object",
1850 name);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001851 return -1;
1852 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001853 if (ispackage) {
1854 /* Set __path__ to the package name */
1855 PyObject *d, *s;
1856 int err;
1857 m = PyImport_AddModule(name);
1858 if (m == NULL)
1859 return -1;
1860 d = PyModule_GetDict(m);
1861 s = PyString_InternFromString(name);
1862 if (s == NULL)
1863 return -1;
1864 err = PyDict_SetItemString(d, "__path__", s);
1865 Py_DECREF(s);
1866 if (err != 0)
1867 return err;
1868 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001869 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum79f25d91997-04-29 20:08:16 +00001870 Py_DECREF(co);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001871 if (m == NULL)
1872 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001873 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001874 return 1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001875}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001876
1877
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001878/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001879 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001880
Guido van Rossum79f25d91997-04-29 20:08:16 +00001881PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001882PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001883{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001884 PyObject *pname;
1885 PyObject *result;
1886
1887 pname = PyString_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00001888 if (pname == NULL)
1889 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001890 result = PyImport_Import(pname);
1891 Py_DECREF(pname);
1892 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001893}
1894
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001895/* Forward declarations for helper routines */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001896static PyObject *get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001897static PyObject *load_next(PyObject *mod, PyObject *altmod,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001898 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001899static int mark_miss(char *name);
1900static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001901 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001902static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001903
1904/* The Magnum Opus of dotted-name import :-) */
1905
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001906static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001907import_module_ex(char *name, PyObject *globals, PyObject *locals,
1908 PyObject *fromlist)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001909{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001910 char buf[MAXPATHLEN+1];
Martin v. Löwis18e16552006-02-15 17:27:45 +00001911 Py_ssize_t buflen = 0;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001912 PyObject *parent, *head, *next, *tail;
1913
1914 parent = get_parent(globals, buf, &buflen);
1915 if (parent == NULL)
1916 return NULL;
1917
1918 head = load_next(parent, Py_None, &name, buf, &buflen);
1919 if (head == NULL)
1920 return NULL;
1921
1922 tail = head;
1923 Py_INCREF(tail);
1924 while (name) {
1925 next = load_next(tail, tail, &name, buf, &buflen);
1926 Py_DECREF(tail);
1927 if (next == NULL) {
1928 Py_DECREF(head);
1929 return NULL;
1930 }
1931 tail = next;
1932 }
1933
1934 if (fromlist != NULL) {
1935 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
1936 fromlist = NULL;
1937 }
1938
1939 if (fromlist == NULL) {
1940 Py_DECREF(tail);
1941 return head;
1942 }
1943
1944 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001945 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001946 Py_DECREF(tail);
1947 return NULL;
1948 }
1949
1950 return tail;
1951}
1952
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001953PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001954PyImport_ImportModuleEx(char *name, PyObject *globals, PyObject *locals,
1955 PyObject *fromlist)
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001956{
1957 PyObject *result;
1958 lock_import();
Guido van Rossumd65911b1998-03-03 22:33:27 +00001959 result = import_module_ex(name, globals, locals, fromlist);
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00001960 if (unlock_import() < 0) {
1961 Py_XDECREF(result);
1962 PyErr_SetString(PyExc_RuntimeError,
1963 "not holding the import lock");
1964 return NULL;
1965 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001966 return result;
1967}
1968
Fred Drake87590902004-05-28 20:21:36 +00001969/* Return the package that an import is being performed in. If globals comes
1970 from the module foo.bar.bat (not itself a package), this returns the
1971 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
1972 the package's entry in sys.modules is returned.
1973
1974 The *name* of the returned package is returned in buf, with the length of
1975 the name in *p_buflen.
1976
1977 If globals doesn't come from a package or a module in a package, or a
1978 corresponding entry is not found in sys.modules, Py_None is returned.
1979*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001980static PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001981get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001982{
1983 static PyObject *namestr = NULL;
1984 static PyObject *pathstr = NULL;
1985 PyObject *modname, *modpath, *modules, *parent;
1986
1987 if (globals == NULL || !PyDict_Check(globals))
1988 return Py_None;
1989
1990 if (namestr == NULL) {
1991 namestr = PyString_InternFromString("__name__");
1992 if (namestr == NULL)
1993 return NULL;
1994 }
1995 if (pathstr == NULL) {
1996 pathstr = PyString_InternFromString("__path__");
1997 if (pathstr == NULL)
1998 return NULL;
1999 }
2000
2001 *buf = '\0';
2002 *p_buflen = 0;
2003 modname = PyDict_GetItem(globals, namestr);
2004 if (modname == NULL || !PyString_Check(modname))
2005 return Py_None;
2006
2007 modpath = PyDict_GetItem(globals, pathstr);
2008 if (modpath != NULL) {
2009 int len = PyString_GET_SIZE(modname);
2010 if (len > MAXPATHLEN) {
2011 PyErr_SetString(PyExc_ValueError,
2012 "Module name too long");
2013 return NULL;
2014 }
2015 strcpy(buf, PyString_AS_STRING(modname));
2016 *p_buflen = len;
2017 }
2018 else {
2019 char *start = PyString_AS_STRING(modname);
2020 char *lastdot = strrchr(start, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002021 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002022 if (lastdot == NULL)
2023 return Py_None;
2024 len = lastdot - start;
2025 if (len >= MAXPATHLEN) {
2026 PyErr_SetString(PyExc_ValueError,
2027 "Module name too long");
2028 return NULL;
2029 }
2030 strncpy(buf, start, len);
2031 buf[len] = '\0';
2032 *p_buflen = len;
2033 }
2034
2035 modules = PyImport_GetModuleDict();
2036 parent = PyDict_GetItemString(modules, buf);
2037 if (parent == NULL)
2038 parent = Py_None;
2039 return parent;
2040 /* We expect, but can't guarantee, if parent != None, that:
2041 - parent.__name__ == buf
2042 - parent.__dict__ is globals
2043 If this is violated... Who cares? */
2044}
2045
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002046/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002047static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002048load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002049 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002050{
2051 char *name = *p_name;
2052 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002053 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002054 char *p;
2055 PyObject *result;
2056
2057 if (dot == NULL) {
2058 *p_name = NULL;
2059 len = strlen(name);
2060 }
2061 else {
2062 *p_name = dot+1;
2063 len = dot-name;
2064 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002065 if (len == 0) {
2066 PyErr_SetString(PyExc_ValueError,
2067 "Empty module name");
2068 return NULL;
2069 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002070
2071 p = buf + *p_buflen;
2072 if (p != buf)
2073 *p++ = '.';
2074 if (p+len-buf >= MAXPATHLEN) {
2075 PyErr_SetString(PyExc_ValueError,
2076 "Module name too long");
2077 return NULL;
2078 }
2079 strncpy(p, name, len);
2080 p[len] = '\0';
2081 *p_buflen = p+len-buf;
2082
2083 result = import_submodule(mod, p, buf);
2084 if (result == Py_None && altmod != mod) {
2085 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002086 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002087 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002088 if (result != NULL && result != Py_None) {
2089 if (mark_miss(buf) != 0) {
2090 Py_DECREF(result);
2091 return NULL;
2092 }
2093 strncpy(buf, name, len);
2094 buf[len] = '\0';
2095 *p_buflen = len;
2096 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002097 }
2098 if (result == NULL)
2099 return NULL;
2100
2101 if (result == Py_None) {
2102 Py_DECREF(result);
2103 PyErr_Format(PyExc_ImportError,
2104 "No module named %.200s", name);
2105 return NULL;
2106 }
2107
2108 return result;
2109}
2110
2111static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002112mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002113{
2114 PyObject *modules = PyImport_GetModuleDict();
2115 return PyDict_SetItemString(modules, name, Py_None);
2116}
2117
2118static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002119ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002120 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002121{
2122 int i;
2123
2124 if (!PyObject_HasAttrString(mod, "__path__"))
2125 return 1;
2126
2127 for (i = 0; ; i++) {
2128 PyObject *item = PySequence_GetItem(fromlist, i);
2129 int hasit;
2130 if (item == NULL) {
2131 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2132 PyErr_Clear();
2133 return 1;
2134 }
2135 return 0;
2136 }
2137 if (!PyString_Check(item)) {
2138 PyErr_SetString(PyExc_TypeError,
2139 "Item in ``from list'' not a string");
2140 Py_DECREF(item);
2141 return 0;
2142 }
2143 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002144 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002145 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002146 /* See if the package defines __all__ */
2147 if (recursive)
2148 continue; /* Avoid endless recursion */
2149 all = PyObject_GetAttrString(mod, "__all__");
2150 if (all == NULL)
2151 PyErr_Clear();
2152 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002153 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002154 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002155 if (!ret)
2156 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002157 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002158 continue;
2159 }
2160 hasit = PyObject_HasAttr(mod, item);
2161 if (!hasit) {
2162 char *subname = PyString_AS_STRING(item);
2163 PyObject *submod;
2164 char *p;
2165 if (buflen + strlen(subname) >= MAXPATHLEN) {
2166 PyErr_SetString(PyExc_ValueError,
2167 "Module name too long");
2168 Py_DECREF(item);
2169 return 0;
2170 }
2171 p = buf + buflen;
2172 *p++ = '.';
2173 strcpy(p, subname);
2174 submod = import_submodule(mod, subname, buf);
2175 Py_XDECREF(submod);
2176 if (submod == NULL) {
2177 Py_DECREF(item);
2178 return 0;
2179 }
2180 }
2181 Py_DECREF(item);
2182 }
2183
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002184 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002185}
2186
Neil Schemenauer00b09662003-06-16 21:03:07 +00002187static int
2188add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2189 PyObject *modules)
2190{
2191 if (mod == Py_None)
2192 return 1;
2193 /* Irrespective of the success of this load, make a
2194 reference to it in the parent package module. A copy gets
2195 saved in the modules dictionary under the full name, so get a
2196 reference from there, if need be. (The exception is when the
2197 load failed with a SyntaxError -- then there's no trace in
2198 sys.modules. In that case, of course, do nothing extra.) */
2199 if (submod == NULL) {
2200 submod = PyDict_GetItemString(modules, fullname);
2201 if (submod == NULL)
2202 return 1;
2203 }
2204 if (PyModule_Check(mod)) {
2205 /* We can't use setattr here since it can give a
2206 * spurious warning if the submodule name shadows a
2207 * builtin name */
2208 PyObject *dict = PyModule_GetDict(mod);
2209 if (!dict)
2210 return 0;
2211 if (PyDict_SetItemString(dict, subname, submod) < 0)
2212 return 0;
2213 }
2214 else {
2215 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2216 return 0;
2217 }
2218 return 1;
2219}
2220
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002221static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002222import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002223{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002224 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002225 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002226
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002227 /* Require:
2228 if mod == None: subname == fullname
2229 else: mod.__name__ + "." + subname == fullname
2230 */
2231
Tim Peters50d8d372001-02-28 05:34:27 +00002232 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002233 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002234 }
2235 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002236 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002237 char buf[MAXPATHLEN+1];
2238 struct filedescr *fdp;
2239 FILE *fp = NULL;
2240
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002241 if (mod == Py_None)
2242 path = NULL;
2243 else {
2244 path = PyObject_GetAttrString(mod, "__path__");
2245 if (path == NULL) {
2246 PyErr_Clear();
2247 Py_INCREF(Py_None);
2248 return Py_None;
2249 }
2250 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002251
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002252 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002253 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2254 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002255 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002256 if (fdp == NULL) {
2257 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2258 return NULL;
2259 PyErr_Clear();
2260 Py_INCREF(Py_None);
2261 return Py_None;
2262 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002263 m = load_module(fullname, fp, buf, fdp->type, loader);
2264 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002265 if (fp)
2266 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002267 if (!add_submodule(mod, m, fullname, subname, modules)) {
2268 Py_XDECREF(m);
2269 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002270 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002271 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002272
2273 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002274}
2275
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002276
2277/* Re-import a module of any kind and return its module object, WITH
2278 INCREMENTED REFERENCE COUNT */
2279
Guido van Rossum79f25d91997-04-29 20:08:16 +00002280PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002281PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002282{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002283 PyObject *modules = PyImport_GetModuleDict();
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002284 PyObject *path = NULL, *loader = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002285 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002286 char buf[MAXPATHLEN+1];
2287 struct filedescr *fdp;
2288 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002289 PyObject *newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002290
Guido van Rossum79f25d91997-04-29 20:08:16 +00002291 if (m == NULL || !PyModule_Check(m)) {
2292 PyErr_SetString(PyExc_TypeError,
2293 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002294 return NULL;
2295 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002296 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002297 if (name == NULL)
2298 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002299 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002300 PyErr_Format(PyExc_ImportError,
2301 "reload(): module %.200s not in sys.modules",
2302 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002303 return NULL;
2304 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002305 subname = strrchr(name, '.');
2306 if (subname == NULL)
2307 subname = name;
2308 else {
2309 PyObject *parentname, *parent;
2310 parentname = PyString_FromStringAndSize(name, (subname-name));
2311 if (parentname == NULL)
2312 return NULL;
2313 parent = PyDict_GetItem(modules, parentname);
2314 if (parent == NULL) {
2315 PyErr_Format(PyExc_ImportError,
2316 "reload(): parent %.200s not in sys.modules",
Georg Brandl0c55f292005-09-14 06:56:20 +00002317 PyString_AS_STRING(parentname));
2318 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002319 return NULL;
2320 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002321 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002322 subname++;
2323 path = PyObject_GetAttrString(parent, "__path__");
2324 if (path == NULL)
2325 PyErr_Clear();
2326 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002327 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002328 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002329 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002330
2331 if (fdp == NULL) {
2332 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002333 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002334 }
2335
2336 newm = load_module(name, fp, buf, fdp->type, loader);
2337 Py_XDECREF(loader);
2338
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002339 if (fp)
2340 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002341 if (newm == NULL) {
2342 /* load_module probably removed name from modules because of
2343 * the error. Put back the original module object. We're
2344 * going to return NULL in this case regardless of whether
2345 * replacing name succeeds, so the return value is ignored.
2346 */
2347 PyDict_SetItemString(modules, name, m);
2348 }
2349 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002350}
2351
2352
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002353/* Higher-level import emulator which emulates the "import" statement
2354 more accurately -- it invokes the __import__() function from the
2355 builtins of the current globals. This means that the import is
2356 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002357 environment, e.g. by "rexec".
2358 A dummy list ["__doc__"] is passed as the 4th argument so that
2359 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
2360 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002361
2362PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002363PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002364{
2365 static PyObject *silly_list = NULL;
2366 static PyObject *builtins_str = NULL;
2367 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002368 PyObject *globals = NULL;
2369 PyObject *import = NULL;
2370 PyObject *builtins = NULL;
2371 PyObject *r = NULL;
2372
2373 /* Initialize constant string objects */
2374 if (silly_list == NULL) {
2375 import_str = PyString_InternFromString("__import__");
2376 if (import_str == NULL)
2377 return NULL;
2378 builtins_str = PyString_InternFromString("__builtins__");
2379 if (builtins_str == NULL)
2380 return NULL;
2381 silly_list = Py_BuildValue("[s]", "__doc__");
2382 if (silly_list == NULL)
2383 return NULL;
2384 }
2385
2386 /* Get the builtins from current globals */
2387 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002388 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002389 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002390 builtins = PyObject_GetItem(globals, builtins_str);
2391 if (builtins == NULL)
2392 goto err;
2393 }
2394 else {
2395 /* No globals -- use standard builtins, and fake globals */
2396 PyErr_Clear();
2397
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002398 builtins = PyImport_ImportModuleEx("__builtin__",
2399 NULL, NULL, NULL);
2400 if (builtins == NULL)
2401 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002402 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2403 if (globals == NULL)
2404 goto err;
2405 }
2406
2407 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002408 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002409 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002410 if (import == NULL)
2411 PyErr_SetObject(PyExc_KeyError, import_str);
2412 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002413 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002414 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002415 if (import == NULL)
2416 goto err;
2417
2418 /* Call the _import__ function with the proper argument list */
2419 r = PyObject_CallFunction(import, "OOOO",
2420 module_name, globals, globals, silly_list);
2421
2422 err:
2423 Py_XDECREF(globals);
2424 Py_XDECREF(builtins);
2425 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002426
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002427 return r;
2428}
2429
2430
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002431/* Module 'imp' provides Python access to the primitives used for
2432 importing modules.
2433*/
2434
Guido van Rossum79f25d91997-04-29 20:08:16 +00002435static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002436imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002437{
2438 char buf[4];
2439
Guido van Rossum96774c12000-05-01 20:19:08 +00002440 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2441 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2442 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2443 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002444
Guido van Rossum79f25d91997-04-29 20:08:16 +00002445 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002446}
2447
Guido van Rossum79f25d91997-04-29 20:08:16 +00002448static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002449imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002450{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002451 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002452 struct filedescr *fdp;
2453
Guido van Rossum79f25d91997-04-29 20:08:16 +00002454 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002455 if (list == NULL)
2456 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002457 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2458 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002459 fdp->suffix, fdp->mode, fdp->type);
2460 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002461 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002462 return NULL;
2463 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002464 if (PyList_Append(list, item) < 0) {
2465 Py_DECREF(list);
2466 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002467 return NULL;
2468 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002469 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002470 }
2471 return list;
2472}
2473
Guido van Rossum79f25d91997-04-29 20:08:16 +00002474static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002475call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002476{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002477 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002478 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002479 struct filedescr *fdp;
2480 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002481 FILE *fp = NULL;
2482
2483 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002484 if (path == Py_None)
2485 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002486 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002487 if (fdp == NULL)
2488 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002489 if (fp != NULL) {
2490 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2491 if (fob == NULL) {
2492 fclose(fp);
2493 return NULL;
2494 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002495 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002496 else {
2497 fob = Py_None;
2498 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002499 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002500 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002501 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002502 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002503 return ret;
2504}
2505
Guido van Rossum79f25d91997-04-29 20:08:16 +00002506static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002507imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002508{
2509 char *name;
2510 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002511 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002512 return NULL;
2513 return call_find_module(name, path);
2514}
2515
2516static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002517imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002518{
2519 char *name;
2520 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002521 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002522 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002523 return NULL;
2524 ret = init_builtin(name);
2525 if (ret < 0)
2526 return NULL;
2527 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002528 Py_INCREF(Py_None);
2529 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002530 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002531 m = PyImport_AddModule(name);
2532 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002533 return m;
2534}
2535
Guido van Rossum79f25d91997-04-29 20:08:16 +00002536static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002537imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002538{
2539 char *name;
2540 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002541 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002542 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002543 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002544 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002545 if (ret < 0)
2546 return NULL;
2547 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002548 Py_INCREF(Py_None);
2549 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002550 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002551 m = PyImport_AddModule(name);
2552 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002553 return m;
2554}
2555
Guido van Rossum79f25d91997-04-29 20:08:16 +00002556static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002557imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002558{
2559 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002560
Guido van Rossum43713e52000-02-29 13:59:29 +00002561 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002562 return NULL;
2563 return get_frozen_object(name);
2564}
2565
Guido van Rossum79f25d91997-04-29 20:08:16 +00002566static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002567imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002568{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002569 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002570 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002571 return NULL;
Guido van Rossum50ee94f2002-04-09 18:00:58 +00002572 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002573}
2574
Guido van Rossum79f25d91997-04-29 20:08:16 +00002575static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002576imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002577{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002578 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002579 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002580 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002581 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002582 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00002583 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002584}
2585
2586static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002587get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002588{
2589 FILE *fp;
2590 if (fob == NULL) {
Tim Peters86c7d2f2004-08-01 23:24:21 +00002591 if (mode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002592 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002593 fp = fopen(pathname, mode);
2594 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002595 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002596 }
2597 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002598 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002599 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002600 PyErr_SetString(PyExc_ValueError,
2601 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002602 }
2603 return fp;
2604}
2605
Guido van Rossum79f25d91997-04-29 20:08:16 +00002606static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002607imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002608{
2609 char *name;
2610 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002611 PyObject *fob = NULL;
2612 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002613 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002614 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002615 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002616 return NULL;
2617 fp = get_file(pathname, fob, "rb");
2618 if (fp == NULL)
2619 return NULL;
2620 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002621 if (fob == NULL)
2622 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002623 return m;
2624}
2625
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002626#ifdef HAVE_DYNAMIC_LOADING
2627
Guido van Rossum79f25d91997-04-29 20:08:16 +00002628static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002629imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002630{
2631 char *name;
2632 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002633 PyObject *fob = NULL;
2634 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002635 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002636 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002637 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002638 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002639 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002640 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002641 if (fp == NULL)
2642 return NULL;
2643 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002644 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002645 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002646}
2647
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002648#endif /* HAVE_DYNAMIC_LOADING */
2649
Guido van Rossum79f25d91997-04-29 20:08:16 +00002650static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002651imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002652{
2653 char *name;
2654 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002655 PyObject *fob = NULL;
2656 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002657 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002658 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002659 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002660 return NULL;
2661 fp = get_file(pathname, fob, "r");
2662 if (fp == NULL)
2663 return NULL;
2664 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002665 if (fob == NULL)
2666 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002667 return m;
2668}
2669
Guido van Rossum79f25d91997-04-29 20:08:16 +00002670static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002671imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002672{
2673 char *name;
2674 PyObject *fob;
2675 char *pathname;
2676 char *suffix; /* Unused */
2677 char *mode;
2678 int type;
2679 FILE *fp;
2680
Guido van Rossum43713e52000-02-29 13:59:29 +00002681 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002682 &name, &fob, &pathname,
2683 &suffix, &mode, &type))
2684 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002685 if (*mode) {
2686 /* Mode must start with 'r' or 'U' and must not contain '+'.
2687 Implicit in this test is the assumption that the mode
2688 may contain other modifiers like 'b' or 't'. */
2689
2690 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002691 PyErr_Format(PyExc_ValueError,
2692 "invalid file open mode %.200s", mode);
2693 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002694 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002695 }
2696 if (fob == Py_None)
2697 fp = NULL;
2698 else {
2699 if (!PyFile_Check(fob)) {
2700 PyErr_SetString(PyExc_ValueError,
2701 "load_module arg#2 should be a file or None");
2702 return NULL;
2703 }
2704 fp = get_file(pathname, fob, mode);
2705 if (fp == NULL)
2706 return NULL;
2707 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002708 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002709}
2710
2711static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002712imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002713{
2714 char *name;
2715 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00002716 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002717 return NULL;
2718 return load_package(name, pathname);
2719}
2720
2721static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002722imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002723{
2724 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002725 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002726 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002727 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002728}
2729
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002730/* Doc strings */
2731
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002732PyDoc_STRVAR(doc_imp,
2733"This module provides the components needed to build your own\n\
2734__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002735
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002736PyDoc_STRVAR(doc_find_module,
2737"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002738Search for a module. If path is omitted or None, search for a\n\
2739built-in, frozen or special module and continue search in sys.path.\n\
2740The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002741package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002742
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002743PyDoc_STRVAR(doc_load_module,
2744"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002745Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002746The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002747
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002748PyDoc_STRVAR(doc_get_magic,
2749"get_magic() -> string\n\
2750Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002751
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002752PyDoc_STRVAR(doc_get_suffixes,
2753"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002754Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002755that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002756
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002757PyDoc_STRVAR(doc_new_module,
2758"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002759Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002760The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002761
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002762PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00002763"lock_held() -> boolean\n\
2764Return True if the import lock is currently held, else False.\n\
2765On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00002766
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002767PyDoc_STRVAR(doc_acquire_lock,
2768"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00002769Acquires the interpreter's import lock for the current thread.\n\
2770This lock should be used by import hooks to ensure thread-safety\n\
2771when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002772On platforms without threads, this function does nothing.");
2773
2774PyDoc_STRVAR(doc_release_lock,
2775"release_lock() -> None\n\
2776Release the interpreter's import lock.\n\
2777On platforms without threads, this function does nothing.");
2778
Guido van Rossum79f25d91997-04-29 20:08:16 +00002779static PyMethodDef imp_methods[] = {
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002780 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
2781 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
2782 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
2783 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
2784 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
2785 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
2786 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
2787 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002788 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00002789 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
2790 {"init_builtin", imp_init_builtin, METH_VARARGS},
2791 {"init_frozen", imp_init_frozen, METH_VARARGS},
2792 {"is_builtin", imp_is_builtin, METH_VARARGS},
2793 {"is_frozen", imp_is_frozen, METH_VARARGS},
2794 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002795#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00002796 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002797#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00002798 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00002799 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002800 {NULL, NULL} /* sentinel */
2801};
2802
Guido van Rossum1a8791e1998-08-04 22:46:29 +00002803static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002804setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002805{
2806 PyObject *v;
2807 int err;
2808
2809 v = PyInt_FromLong((long)value);
2810 err = PyDict_SetItemString(d, name, v);
2811 Py_XDECREF(v);
2812 return err;
2813}
2814
Jason Tishler6bc06ec2003-09-04 11:59:50 +00002815PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002816initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002817{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002818 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002819
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002820 m = Py_InitModule4("imp", imp_methods, doc_imp,
2821 NULL, PYTHON_API_VERSION);
Neal Norwitz1ac754f2006-01-19 06:09:39 +00002822 if (m == NULL)
2823 goto failure;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002824 d = PyModule_GetDict(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002825
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002826 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
2827 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
2828 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
2829 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
2830 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
2831 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
2832 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
2833 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00002834 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00002835 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002836
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002837 failure:
2838 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002839}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002840
2841
Guido van Rossumb18618d2000-05-03 23:44:39 +00002842/* API for embedding applications that want to add their own entries
2843 to the table of built-in modules. This should normally be called
2844 *before* Py_Initialize(). When the table resize fails, -1 is
2845 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002846
2847 After a similar function by Just van Rossum. */
2848
2849int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002850PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002851{
2852 static struct _inittab *our_copy = NULL;
2853 struct _inittab *p;
2854 int i, n;
2855
2856 /* Count the number of entries in both tables */
2857 for (n = 0; newtab[n].name != NULL; n++)
2858 ;
2859 if (n == 0)
2860 return 0; /* Nothing to do */
2861 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
2862 ;
2863
2864 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00002865 p = our_copy;
2866 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002867 if (p == NULL)
2868 return -1;
2869
2870 /* Copy the tables into the new memory */
2871 if (our_copy != PyImport_Inittab)
2872 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
2873 PyImport_Inittab = our_copy = p;
2874 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
2875
2876 return 0;
2877}
2878
2879/* Shorthand to add a single entry given a name and a function */
2880
2881int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002882PyImport_AppendInittab(char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002883{
2884 struct _inittab newtab[2];
2885
2886 memset(newtab, '\0', sizeof newtab);
2887
2888 newtab[0].name = name;
2889 newtab[0].initfunc = initfunc;
2890
2891 return PyImport_ExtendInittab(newtab);
2892}