blob: f284ff4d21186cbc136034d0adae4fb1045b0b31 [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{
Guido van Rossum758eec01998-01-19 21:58:26 +0000354 int pos, ndone;
355 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 *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000692check_compiled_module(char *pathname, long 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
808 , 0666, "ctxt=bin", "shr=nil");
809#else
810 , 0666);
811#endif
Guido van Rossum55a83382000-09-20 20:31:38 +0000812 if (fd < 0)
813 return NULL;
814 return fdopen(fd, "wb");
815#else
816 /* Best we can do -- on Windows this can't happen anyway */
817 return fopen(filename, "wb");
818#endif
819}
820
821
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000822/* Write a compiled module to a file, placing the time of last
823 modification of its source into the header.
824 Errors are ignored, if a write error occurs an attempt is made to
825 remove the file. */
826
827static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000828write_compiled_module(PyCodeObject *co, char *cpathname, long mtime)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000829{
830 FILE *fp;
831
Guido van Rossum55a83382000-09-20 20:31:38 +0000832 fp = open_exclusive(cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000833 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000834 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000835 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000836 "# can't create %s\n", cpathname);
837 return;
838 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000839 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000840 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000841 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
842 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000843 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000844 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000845 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000846 /* Don't keep partial file */
847 fclose(fp);
848 (void) unlink(cpathname);
849 return;
850 }
851 /* Now write the true mtime */
852 fseek(fp, 4L, 0);
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000853 PyMarshal_WriteLongToFile(mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000854 fflush(fp);
855 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000856 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000857 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000858}
859
860
861/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000862 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
863 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000864
Guido van Rossum79f25d91997-04-29 20:08:16 +0000865static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000866load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000867{
Fred Drake4c82b232000-06-30 16:18:57 +0000868 time_t mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000869 FILE *fpc;
870 char buf[MAXPATHLEN+1];
871 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000872 PyCodeObject *co;
873 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000874
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000875 mtime = PyOS_GetLastModificationTime(pathname, fp);
Neal Norwitz708e51a2005-10-03 04:48:15 +0000876 if (mtime == (time_t)(-1)) {
877 PyErr_Format(PyExc_RuntimeError,
878 "unable to get modification time from '%s'",
879 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +0000880 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +0000881 }
Fred Drake4c82b232000-06-30 16:18:57 +0000882#if SIZEOF_TIME_T > 4
883 /* Python's .pyc timestamp handling presumes that the timestamp fits
884 in 4 bytes. This will be fine until sometime in the year 2038,
885 when a 4-byte signed time_t will overflow.
886 */
887 if (mtime >> 32) {
888 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +0000889 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +0000890 return NULL;
891 }
892#endif
Tim Peters36515e22001-11-18 04:06:29 +0000893 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +0000894 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000895 if (cpathname != NULL &&
896 (fpc = check_compiled_module(pathname, mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000897 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000898 fclose(fpc);
899 if (co == NULL)
900 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000901 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000902 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000903 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000904 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000905 }
906 else {
907 co = parse_source_module(pathname, fp);
908 if (co == NULL)
909 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000911 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000912 name, pathname);
913 write_compiled_module(co, cpathname, mtime);
914 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000915 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000916 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000917
918 return m;
919}
920
921
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000922/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +0000923static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
924static struct filedescr *find_module(char *, char *, PyObject *,
925 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +0000926static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000927
928/* Load a package and return its module object WITH INCREMENTED
929 REFERENCE COUNT */
930
931static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000932load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000933{
Tim Peters1cd70172004-08-02 03:52:12 +0000934 PyObject *m, *d;
935 PyObject *file = NULL;
936 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000937 int err;
938 char buf[MAXPATHLEN+1];
939 FILE *fp = NULL;
940 struct filedescr *fdp;
941
942 m = PyImport_AddModule(name);
943 if (m == NULL)
944 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000945 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000946 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000947 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000948 d = PyModule_GetDict(m);
949 file = PyString_FromString(pathname);
950 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000951 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000952 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +0000953 if (path == NULL)
954 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000955 err = PyDict_SetItemString(d, "__file__", file);
956 if (err == 0)
957 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +0000958 if (err != 0)
959 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000960 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +0000961 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000962 if (fdp == NULL) {
963 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
964 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +0000965 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000966 }
967 else
968 m = NULL;
969 goto cleanup;
970 }
Just van Rossum52e14d62002-12-30 22:08:05 +0000971 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000972 if (fp != NULL)
973 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +0000974 goto cleanup;
975
976 error:
977 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000978 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000979 Py_XDECREF(path);
980 Py_XDECREF(file);
981 return m;
982}
983
984
985/* Helper to test for built-in module */
986
987static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000988is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000989{
990 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +0000991 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
992 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
993 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000994 return -1;
995 else
996 return 1;
997 }
998 }
999 return 0;
1000}
1001
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001002
Just van Rossum52e14d62002-12-30 22:08:05 +00001003/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1004 possibly by fetching it from the path_importer_cache dict. If it
1005 wasn't yet cached, traverse path_hooks until it a hook is found
1006 that can handle the path item. Return None if no hook could;
1007 this tells our caller it should fall back to the builtin
1008 import mechanism. Cache the result in path_importer_cache.
1009 Returns a borrowed reference. */
1010
1011static PyObject *
1012get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1013 PyObject *p)
1014{
1015 PyObject *importer;
1016 int j, nhooks;
1017
1018 /* These conditions are the caller's responsibility: */
1019 assert(PyList_Check(path_hooks));
1020 assert(PyDict_Check(path_importer_cache));
1021
1022 nhooks = PyList_Size(path_hooks);
1023 if (nhooks < 0)
1024 return NULL; /* Shouldn't happen */
1025
1026 importer = PyDict_GetItem(path_importer_cache, p);
1027 if (importer != NULL)
1028 return importer;
1029
1030 /* set path_importer_cache[p] to None to avoid recursion */
1031 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1032 return NULL;
1033
1034 for (j = 0; j < nhooks; j++) {
1035 PyObject *hook = PyList_GetItem(path_hooks, j);
1036 if (hook == NULL)
1037 return NULL;
1038 importer = PyObject_CallFunction(hook, "O", p);
1039 if (importer != NULL)
1040 break;
1041
1042 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1043 return NULL;
1044 }
1045 PyErr_Clear();
1046 }
1047 if (importer == NULL)
1048 importer = Py_None;
1049 else if (importer != Py_None) {
1050 int err = PyDict_SetItem(path_importer_cache, p, importer);
1051 Py_DECREF(importer);
1052 if (err != 0)
1053 return NULL;
1054 }
1055 return importer;
1056}
1057
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001058/* Search the path (default sys.path) for a module. Return the
1059 corresponding filedescr struct, and (via return arguments) the
1060 pathname and an open file. Return NULL if the module is not found. */
1061
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001062#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001063extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
1064 char *, int);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001065#endif
1066
Tim Peters50d8d372001-02-28 05:34:27 +00001067static int case_ok(char *, int, int, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001068static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001069static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001070
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001071static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001072find_module(char *fullname, char *subname, PyObject *path, char *buf,
1073 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001074{
Fred Drake4c82b232000-06-30 16:18:57 +00001075 int i, npath;
1076 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001077 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001078 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001079 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001080 PyObject *path_hooks, *path_importer_cache;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001081#ifndef RISCOS
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001082 struct stat statbuf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001083#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001084 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1085 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1086 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001087 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001088#if defined(PYOS_OS2)
1089 size_t saved_len;
1090 size_t saved_namelen;
1091 char *saved_buf = NULL;
1092#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001093 if (p_loader != NULL)
1094 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001095
Just van Rossum52e14d62002-12-30 22:08:05 +00001096 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001097 PyErr_SetString(PyExc_OverflowError,
1098 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001099 return NULL;
1100 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001101 strcpy(name, subname);
1102
1103 /* sys.meta_path import hook */
1104 if (p_loader != NULL) {
1105 PyObject *meta_path;
1106
1107 meta_path = PySys_GetObject("meta_path");
1108 if (meta_path == NULL || !PyList_Check(meta_path)) {
1109 PyErr_SetString(PyExc_ImportError,
1110 "sys.meta_path must be a list of "
1111 "import hooks");
1112 return NULL;
1113 }
1114 Py_INCREF(meta_path); /* zap guard */
1115 npath = PyList_Size(meta_path);
1116 for (i = 0; i < npath; i++) {
1117 PyObject *loader;
1118 PyObject *hook = PyList_GetItem(meta_path, i);
1119 loader = PyObject_CallMethod(hook, "find_module",
1120 "sO", fullname,
1121 path != NULL ?
1122 path : Py_None);
1123 if (loader == NULL) {
1124 Py_DECREF(meta_path);
1125 return NULL; /* true error */
1126 }
1127 if (loader != Py_None) {
1128 /* a loader was found */
1129 *p_loader = loader;
1130 Py_DECREF(meta_path);
1131 return &importhookdescr;
1132 }
1133 Py_DECREF(loader);
1134 }
1135 Py_DECREF(meta_path);
1136 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001137
1138 if (path != NULL && PyString_Check(path)) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001139 /* The only type of submodule allowed inside a "frozen"
1140 package are other frozen modules or packages. */
Guido van Rossum0506a431998-08-11 15:07:39 +00001141 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1142 PyErr_SetString(PyExc_ImportError,
1143 "full frozen module name too long");
1144 return NULL;
1145 }
1146 strcpy(buf, PyString_AsString(path));
1147 strcat(buf, ".");
1148 strcat(buf, name);
1149 strcpy(name, buf);
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001150 if (find_frozen(name) != NULL) {
1151 strcpy(buf, name);
1152 return &fd_frozen;
1153 }
1154 PyErr_Format(PyExc_ImportError,
1155 "No frozen submodule named %.200s", name);
1156 return NULL;
Guido van Rossum0506a431998-08-11 15:07:39 +00001157 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001158 if (path == NULL) {
1159 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001160 strcpy(buf, name);
1161 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001162 }
Greg Ward201baee2001-10-04 14:52:06 +00001163 if ((find_frozen(name)) != NULL) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001164 strcpy(buf, name);
1165 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001166 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001167
Guido van Rossumac279101996-08-22 23:10:58 +00001168#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001169 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1170 if (fp != NULL) {
1171 *p_fp = fp;
1172 return fdp;
1173 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001174#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001175 path = PySys_GetObject("path");
1176 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001177 if (path == NULL || !PyList_Check(path)) {
1178 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001179 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001180 return NULL;
1181 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001182
1183 path_hooks = PySys_GetObject("path_hooks");
1184 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1185 PyErr_SetString(PyExc_ImportError,
1186 "sys.path_hooks must be a list of "
1187 "import hooks");
1188 return NULL;
1189 }
1190 path_importer_cache = PySys_GetObject("path_importer_cache");
1191 if (path_importer_cache == NULL ||
1192 !PyDict_Check(path_importer_cache)) {
1193 PyErr_SetString(PyExc_ImportError,
1194 "sys.path_importer_cache must be a dict");
1195 return NULL;
1196 }
1197
Guido van Rossum79f25d91997-04-29 20:08:16 +00001198 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001199 namelen = strlen(name);
1200 for (i = 0; i < npath; i++) {
Walter Dörwald3430d702002-06-17 10:43:59 +00001201 PyObject *copy = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001202 PyObject *v = PyList_GetItem(path, i);
Walter Dörwald3430d702002-06-17 10:43:59 +00001203#ifdef Py_USING_UNICODE
1204 if (PyUnicode_Check(v)) {
1205 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1206 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1207 if (copy == NULL)
1208 return NULL;
1209 v = copy;
1210 }
1211 else
1212#endif
Guido van Rossum79f25d91997-04-29 20:08:16 +00001213 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001214 continue;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001215 len = PyString_Size(v);
Walter Dörwald3430d702002-06-17 10:43:59 +00001216 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1217 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001218 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001219 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001220 strcpy(buf, PyString_AsString(v));
Walter Dörwald3430d702002-06-17 10:43:59 +00001221 if (strlen(buf) != len) {
1222 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001223 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001224 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001225
1226 /* sys.path_hooks import hook */
1227 if (p_loader != NULL) {
1228 PyObject *importer;
1229
1230 importer = get_path_importer(path_importer_cache,
1231 path_hooks, v);
1232 if (importer == NULL)
1233 return NULL;
1234 /* Note: importer is a borrowed reference */
1235 if (importer != Py_None) {
1236 PyObject *loader;
1237 loader = PyObject_CallMethod(importer,
1238 "find_module",
1239 "s", fullname);
1240 if (loader == NULL)
1241 return NULL; /* error */
1242 if (loader != Py_None) {
1243 /* a loader was found */
1244 *p_loader = loader;
1245 return &importhookdescr;
1246 }
1247 Py_DECREF(loader);
1248 }
1249 /* no hook was successful, use builtin import */
1250 }
1251
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001252 if (len > 0 && buf[len-1] != SEP
1253#ifdef ALTSEP
1254 && buf[len-1] != ALTSEP
1255#endif
1256 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001257 buf[len++] = SEP;
Guido van Rossum215c3402000-11-13 17:26:32 +00001258 strcpy(buf+len, name);
1259 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001260
1261 /* Check for package import (buf holds a directory name,
1262 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001263#ifdef HAVE_STAT
Walter Dörwald3430d702002-06-17 10:43:59 +00001264 if (stat(buf, &statbuf) == 0 && /* it exists */
1265 S_ISDIR(statbuf.st_mode) && /* it's a directory */
1266 find_init_module(buf) && /* it has __init__.py */
1267 case_ok(buf, len, namelen, name)) { /* and case matches */
1268 Py_XDECREF(copy);
Tim Peterscab3f682001-04-29 22:21:25 +00001269 return &fd_package;
Walter Dörwald3430d702002-06-17 10:43:59 +00001270 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001271#else
1272 /* XXX How are you going to test for directories? */
Guido van Rossum48a680c2001-03-02 06:34:14 +00001273#ifdef RISCOS
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001274 if (isdir(buf) &&
1275 find_init_module(buf) &&
Walter Dörwald3430d702002-06-17 10:43:59 +00001276 case_ok(buf, len, namelen, name)) {
1277 Py_XDECREF(copy);
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001278 return &fd_package;
Walter Dörwald3430d702002-06-17 10:43:59 +00001279 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001280#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001281#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001282#if defined(PYOS_OS2)
1283 /* take a snapshot of the module spec for restoration
1284 * after the 8 character DLL hackery
1285 */
1286 saved_buf = strdup(buf);
1287 saved_len = len;
1288 saved_namelen = namelen;
1289#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001290 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001291#if defined(PYOS_OS2)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001292 /* OS/2 limits DLLs to 8 character names (w/o
1293 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001294 * so if the name is longer than that and its a
1295 * dynamically loaded module we're going to try,
1296 * truncate the name before trying
1297 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001298 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001299 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001300 const struct filedescr *scan;
1301 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001302 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001303 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001304 break;
1305 else
1306 scan++;
1307 }
1308 if (scan->suffix != NULL) {
1309 /* yes, so truncate the name */
1310 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001311 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001312 buf[len] = '\0';
1313 }
1314 }
1315#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001316 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001317 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001318 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001319 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001320 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001321 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001322 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001323 if (fp != NULL) {
1324 if (case_ok(buf, len, namelen, name))
1325 break;
1326 else { /* continue search */
1327 fclose(fp);
1328 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001329 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001330 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001331#if defined(PYOS_OS2)
1332 /* restore the saved snapshot */
1333 strcpy(buf, saved_buf);
1334 len = saved_len;
1335 namelen = saved_namelen;
1336#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001337 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001338#if defined(PYOS_OS2)
1339 /* don't need/want the module name snapshot anymore */
1340 if (saved_buf)
1341 {
1342 free(saved_buf);
1343 saved_buf = NULL;
1344 }
1345#endif
Walter Dörwald3430d702002-06-17 10:43:59 +00001346 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001347 if (fp != NULL)
1348 break;
1349 }
1350 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001351 PyErr_Format(PyExc_ImportError,
1352 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001353 return NULL;
1354 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001355 *p_fp = fp;
1356 return fdp;
1357}
1358
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001359/* Helpers for main.c
1360 * Find the source file corresponding to a named module
1361 */
1362struct filedescr *
1363_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1364 size_t buflen, FILE **p_fp, PyObject **p_loader)
1365{
1366 return find_module((char *) name, (char *) name, path,
1367 buf, buflen, p_fp, p_loader);
1368}
1369
1370PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1371{
1372 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1373}
1374
Tim Petersd1e87a82001-03-01 18:12:00 +00001375/* case_ok(char* buf, int len, int namelen, char* name)
1376 * The arguments here are tricky, best shown by example:
1377 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1378 * ^ ^ ^ ^
1379 * |--------------------- buf ---------------------|
1380 * |------------------- len ------------------|
1381 * |------ name -------|
1382 * |----- namelen -----|
1383 * buf is the full path, but len only counts up to (& exclusive of) the
1384 * extension. name is the module name, also exclusive of extension.
1385 *
1386 * We've already done a successful stat() or fopen() on buf, so know that
1387 * there's some match, possibly case-insensitive.
1388 *
Tim Peters50d8d372001-02-28 05:34:27 +00001389 * case_ok() is to return 1 if there's a case-sensitive match for
1390 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1391 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001392 *
Tim Peters50d8d372001-02-28 05:34:27 +00001393 * case_ok() is used to implement case-sensitive import semantics even
1394 * on platforms with case-insensitive filesystems. It's trivial to implement
1395 * for case-sensitive filesystems. It's pretty much a cross-platform
1396 * nightmare for systems with case-insensitive filesystems.
1397 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001398
Tim Peters50d8d372001-02-28 05:34:27 +00001399/* First we may need a pile of platform-specific header files; the sequence
1400 * of #if's here should match the sequence in the body of case_ok().
1401 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001402#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001403#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001404
Tim Peters50d8d372001-02-28 05:34:27 +00001405#elif defined(DJGPP)
1406#include <dir.h>
1407
Jason Tishler7961aa62005-05-20 00:56:54 +00001408#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001409#include <sys/types.h>
1410#include <dirent.h>
1411
Andrew MacIntyred9400542002-02-26 11:41:34 +00001412#elif defined(PYOS_OS2)
1413#define INCL_DOS
1414#define INCL_DOSERRORS
1415#define INCL_NOPMAPI
1416#include <os2.h>
1417
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001418#elif defined(RISCOS)
1419#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001420#endif
1421
Guido van Rossum0980bd91998-02-13 17:18:36 +00001422static int
Tim Peters50d8d372001-02-28 05:34:27 +00001423case_ok(char *buf, int len, int namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001424{
Tim Peters50d8d372001-02-28 05:34:27 +00001425/* Pick a platform-specific implementation; the sequence of #if's here should
1426 * match the sequence just above.
1427 */
1428
Jason Tishler7961aa62005-05-20 00:56:54 +00001429/* MS_WINDOWS */
1430#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001431 WIN32_FIND_DATA data;
1432 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001433
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001434 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001435 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001436
Guido van Rossum0980bd91998-02-13 17:18:36 +00001437 h = FindFirstFile(buf, &data);
1438 if (h == INVALID_HANDLE_VALUE) {
1439 PyErr_Format(PyExc_NameError,
1440 "Can't find file for module %.100s\n(filename %.300s)",
1441 name, buf);
1442 return 0;
1443 }
1444 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001445 return strncmp(data.cFileName, name, namelen) == 0;
1446
1447/* DJGPP */
1448#elif defined(DJGPP)
1449 struct ffblk ffblk;
1450 int done;
1451
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001452 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001453 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001454
1455 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1456 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001457 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001458 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001459 name, buf);
1460 return 0;
1461 }
Tim Peters50d8d372001-02-28 05:34:27 +00001462 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001463
Jason Tishler7961aa62005-05-20 00:56:54 +00001464/* new-fangled macintosh (macosx) or Cygwin */
1465#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001466 DIR *dirp;
1467 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001468 char dirname[MAXPATHLEN + 1];
1469 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001470
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001471 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001472 return 1;
1473
Tim Petersd1e87a82001-03-01 18:12:00 +00001474 /* Copy the dir component into dirname; substitute "." if empty */
1475 if (dirlen <= 0) {
1476 dirname[0] = '.';
1477 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001478 }
1479 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001480 assert(dirlen <= MAXPATHLEN);
1481 memcpy(dirname, buf, dirlen);
1482 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001483 }
1484 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001485 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001486 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001487 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001488 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001489 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001490#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001491 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001492#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001493 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001494#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001495 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001496 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001497 (void)closedir(dirp);
1498 return 1; /* Found */
1499 }
1500 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001501 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001502 }
Tim Peters430f5d42001-03-01 01:30:56 +00001503 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001504
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001505/* RISC OS */
1506#elif defined(RISCOS)
1507 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1508 char buf2[MAXPATHLEN+2];
1509 char *nameWithExt = buf+len-namelen;
1510 int canonlen;
1511 os_error *e;
1512
1513 if (Py_GETENV("PYTHONCASEOK") != NULL)
1514 return 1;
1515
1516 /* workaround:
1517 append wildcard, otherwise case of filename wouldn't be touched */
1518 strcpy(buf2, buf);
1519 strcat(buf2, "*");
1520
1521 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1522 canonlen = MAXPATHLEN+1-canonlen;
1523 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1524 return 0;
1525 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1526 return 1; /* match */
1527
1528 return 0;
1529
Andrew MacIntyred9400542002-02-26 11:41:34 +00001530/* OS/2 */
1531#elif defined(PYOS_OS2)
1532 HDIR hdir = 1;
1533 ULONG srchcnt = 1;
1534 FILEFINDBUF3 ffbuf;
1535 APIRET rc;
1536
1537 if (getenv("PYTHONCASEOK") != NULL)
1538 return 1;
1539
1540 rc = DosFindFirst(buf,
1541 &hdir,
1542 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1543 &ffbuf, sizeof(ffbuf),
1544 &srchcnt,
1545 FIL_STANDARD);
1546 if (rc != NO_ERROR)
1547 return 0;
1548 return strncmp(ffbuf.achName, name, namelen) == 0;
1549
Tim Peters50d8d372001-02-28 05:34:27 +00001550/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1551#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001552 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001553
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001554#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001555}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001556
Guido van Rossum0980bd91998-02-13 17:18:36 +00001557
Guido van Rossum197346f1997-10-31 18:38:52 +00001558#ifdef HAVE_STAT
1559/* Helper to look for __init__.py or __init__.py[co] in potential package */
1560static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001561find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001562{
Tim Peters0f9431f2001-07-05 03:47:53 +00001563 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001564 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001565 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001566 struct stat statbuf;
1567
Tim Peters0f9431f2001-07-05 03:47:53 +00001568/* For calling case_ok(buf, len, namelen, name):
1569 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1570 * ^ ^ ^ ^
1571 * |--------------------- buf ---------------------|
1572 * |------------------- len ------------------|
1573 * |------ name -------|
1574 * |----- namelen -----|
1575 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001576 if (save_len + 13 >= MAXPATHLEN)
1577 return 0;
1578 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001579 pname = buf + i;
1580 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001581 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001582 if (case_ok(buf,
1583 save_len + 9, /* len("/__init__") */
1584 8, /* len("__init__") */
1585 pname)) {
1586 buf[save_len] = '\0';
1587 return 1;
1588 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001589 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001590 i += strlen(pname);
1591 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001592 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001593 if (case_ok(buf,
1594 save_len + 9, /* len("/__init__") */
1595 8, /* len("__init__") */
1596 pname)) {
1597 buf[save_len] = '\0';
1598 return 1;
1599 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001600 }
1601 buf[save_len] = '\0';
1602 return 0;
1603}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001604
1605#else
1606
1607#ifdef RISCOS
1608static int
1609find_init_module(buf)
1610 char *buf;
1611{
1612 int save_len = strlen(buf);
1613 int i = save_len;
1614
1615 if (save_len + 13 >= MAXPATHLEN)
1616 return 0;
1617 buf[i++] = SEP;
1618 strcpy(buf+i, "__init__/py");
1619 if (isfile(buf)) {
1620 buf[save_len] = '\0';
1621 return 1;
1622 }
1623
1624 if (Py_OptimizeFlag)
1625 strcpy(buf+i, "o");
1626 else
1627 strcpy(buf+i, "c");
1628 if (isfile(buf)) {
1629 buf[save_len] = '\0';
1630 return 1;
1631 }
1632 buf[save_len] = '\0';
1633 return 0;
1634}
1635#endif /*RISCOS*/
1636
Guido van Rossum197346f1997-10-31 18:38:52 +00001637#endif /* HAVE_STAT */
1638
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001639
Tim Petersdbd9ba62000-07-09 03:09:57 +00001640static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001641
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001642/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001643 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001644
Guido van Rossum79f25d91997-04-29 20:08:16 +00001645static PyObject *
Just van Rossum52e14d62002-12-30 22:08:05 +00001646load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001647{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001648 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001649 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001650 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001651
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001652 /* First check that there's an open file (if we need one) */
1653 switch (type) {
1654 case PY_SOURCE:
1655 case PY_COMPILED:
1656 if (fp == NULL) {
1657 PyErr_Format(PyExc_ValueError,
1658 "file object required for import (type code %d)",
1659 type);
1660 return NULL;
1661 }
1662 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001663
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001664 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001665
1666 case PY_SOURCE:
1667 m = load_source_module(name, buf, fp);
1668 break;
1669
1670 case PY_COMPILED:
1671 m = load_compiled_module(name, buf, fp);
1672 break;
1673
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001674#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001675 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001676 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001677 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001678#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001679
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001680 case PKG_DIRECTORY:
1681 m = load_package(name, buf);
1682 break;
1683
1684 case C_BUILTIN:
1685 case PY_FROZEN:
Guido van Rossuma5568d31998-03-05 03:45:08 +00001686 if (buf != NULL && buf[0] != '\0')
1687 name = buf;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001688 if (type == C_BUILTIN)
1689 err = init_builtin(name);
1690 else
1691 err = PyImport_ImportFrozenModule(name);
1692 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001693 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001694 if (err == 0) {
1695 PyErr_Format(PyExc_ImportError,
1696 "Purported %s module %.200s not found",
1697 type == C_BUILTIN ?
1698 "builtin" : "frozen",
1699 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001700 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001701 }
1702 modules = PyImport_GetModuleDict();
1703 m = PyDict_GetItemString(modules, name);
1704 if (m == NULL) {
1705 PyErr_Format(
1706 PyExc_ImportError,
1707 "%s module %.200s not properly initialized",
1708 type == C_BUILTIN ?
1709 "builtin" : "frozen",
1710 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001711 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001712 }
1713 Py_INCREF(m);
1714 break;
1715
Just van Rossum52e14d62002-12-30 22:08:05 +00001716 case IMP_HOOK: {
1717 if (loader == NULL) {
1718 PyErr_SetString(PyExc_ImportError,
1719 "import hook without loader");
1720 return NULL;
1721 }
1722 m = PyObject_CallMethod(loader, "load_module", "s", name);
1723 break;
1724 }
1725
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001726 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001727 PyErr_Format(PyExc_ImportError,
1728 "Don't know how to import %.200s (type code %d)",
1729 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001730 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001731
1732 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001733
1734 return m;
1735}
1736
1737
1738/* Initialize a built-in module.
1739 Return 1 for succes, 0 if the module is not found, and -1 with
1740 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001741
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001742static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001743init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001744{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001745 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001746
Greg Ward201baee2001-10-04 14:52:06 +00001747 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001748 return 1;
1749
Guido van Rossum771c6c81997-10-31 18:37:24 +00001750 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001751 if (strcmp(name, p->name) == 0) {
1752 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001753 PyErr_Format(PyExc_ImportError,
1754 "Cannot re-init internal module %.200s",
1755 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001756 return -1;
1757 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001758 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001759 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001760 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001761 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001762 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001763 if (_PyImport_FixupExtension(name, name) == NULL)
1764 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001765 return 1;
1766 }
1767 }
1768 return 0;
1769}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001770
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001771
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001772/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001773
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001774static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001775find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001776{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001777 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001778
Guido van Rossum79f25d91997-04-29 20:08:16 +00001779 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001780 if (p->name == NULL)
1781 return NULL;
1782 if (strcmp(p->name, name) == 0)
1783 break;
1784 }
1785 return p;
1786}
1787
Guido van Rossum79f25d91997-04-29 20:08:16 +00001788static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001789get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001790{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001791 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001792 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001793
1794 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001795 PyErr_Format(PyExc_ImportError,
1796 "No such frozen object named %.200s",
1797 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001798 return NULL;
1799 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001800 if (p->code == NULL) {
1801 PyErr_Format(PyExc_ImportError,
1802 "Excluded frozen object named %.200s",
1803 name);
1804 return NULL;
1805 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001806 size = p->size;
1807 if (size < 0)
1808 size = -size;
1809 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001810}
1811
1812/* Initialize a frozen module.
1813 Return 1 for succes, 0 if the module is not found, and -1 with
1814 an exception set if the initialization failed.
1815 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001816
1817int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001818PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001819{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001820 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001821 PyObject *co;
1822 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001823 int ispackage;
1824 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001825
1826 if (p == NULL)
1827 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001828 if (p->code == NULL) {
1829 PyErr_Format(PyExc_ImportError,
1830 "Excluded frozen object named %.200s",
1831 name);
1832 return -1;
1833 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001834 size = p->size;
1835 ispackage = (size < 0);
1836 if (ispackage)
1837 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001838 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001839 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001840 name, ispackage ? " package" : "");
1841 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001842 if (co == NULL)
1843 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001844 if (!PyCode_Check(co)) {
1845 Py_DECREF(co);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001846 PyErr_Format(PyExc_TypeError,
1847 "frozen object %.200s is not a code object",
1848 name);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001849 return -1;
1850 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001851 if (ispackage) {
1852 /* Set __path__ to the package name */
1853 PyObject *d, *s;
1854 int err;
1855 m = PyImport_AddModule(name);
1856 if (m == NULL)
1857 return -1;
1858 d = PyModule_GetDict(m);
1859 s = PyString_InternFromString(name);
1860 if (s == NULL)
1861 return -1;
1862 err = PyDict_SetItemString(d, "__path__", s);
1863 Py_DECREF(s);
1864 if (err != 0)
1865 return err;
1866 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001867 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum79f25d91997-04-29 20:08:16 +00001868 Py_DECREF(co);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001869 if (m == NULL)
1870 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001871 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001872 return 1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001873}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001874
1875
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001876/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001877 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001878
Guido van Rossum79f25d91997-04-29 20:08:16 +00001879PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001880PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001881{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001882 PyObject *pname;
1883 PyObject *result;
1884
1885 pname = PyString_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00001886 if (pname == NULL)
1887 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001888 result = PyImport_Import(pname);
1889 Py_DECREF(pname);
1890 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001891}
1892
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001893/* Forward declarations for helper routines */
Tim Petersdbd9ba62000-07-09 03:09:57 +00001894static PyObject *get_parent(PyObject *globals, char *buf, int *p_buflen);
1895static PyObject *load_next(PyObject *mod, PyObject *altmod,
1896 char **p_name, char *buf, int *p_buflen);
1897static int mark_miss(char *name);
1898static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
1899 char *buf, int buflen, int recursive);
1900static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001901
1902/* The Magnum Opus of dotted-name import :-) */
1903
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001904static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001905import_module_ex(char *name, PyObject *globals, PyObject *locals,
1906 PyObject *fromlist)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001907{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001908 char buf[MAXPATHLEN+1];
1909 int buflen = 0;
1910 PyObject *parent, *head, *next, *tail;
1911
1912 parent = get_parent(globals, buf, &buflen);
1913 if (parent == NULL)
1914 return NULL;
1915
1916 head = load_next(parent, Py_None, &name, buf, &buflen);
1917 if (head == NULL)
1918 return NULL;
1919
1920 tail = head;
1921 Py_INCREF(tail);
1922 while (name) {
1923 next = load_next(tail, tail, &name, buf, &buflen);
1924 Py_DECREF(tail);
1925 if (next == NULL) {
1926 Py_DECREF(head);
1927 return NULL;
1928 }
1929 tail = next;
1930 }
1931
1932 if (fromlist != NULL) {
1933 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
1934 fromlist = NULL;
1935 }
1936
1937 if (fromlist == NULL) {
1938 Py_DECREF(tail);
1939 return head;
1940 }
1941
1942 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001943 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001944 Py_DECREF(tail);
1945 return NULL;
1946 }
1947
1948 return tail;
1949}
1950
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001951PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001952PyImport_ImportModuleEx(char *name, PyObject *globals, PyObject *locals,
1953 PyObject *fromlist)
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001954{
1955 PyObject *result;
1956 lock_import();
Guido van Rossumd65911b1998-03-03 22:33:27 +00001957 result = import_module_ex(name, globals, locals, fromlist);
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00001958 if (unlock_import() < 0) {
1959 Py_XDECREF(result);
1960 PyErr_SetString(PyExc_RuntimeError,
1961 "not holding the import lock");
1962 return NULL;
1963 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001964 return result;
1965}
1966
Fred Drake87590902004-05-28 20:21:36 +00001967/* Return the package that an import is being performed in. If globals comes
1968 from the module foo.bar.bat (not itself a package), this returns the
1969 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
1970 the package's entry in sys.modules is returned.
1971
1972 The *name* of the returned package is returned in buf, with the length of
1973 the name in *p_buflen.
1974
1975 If globals doesn't come from a package or a module in a package, or a
1976 corresponding entry is not found in sys.modules, Py_None is returned.
1977*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001978static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001979get_parent(PyObject *globals, char *buf, int *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001980{
1981 static PyObject *namestr = NULL;
1982 static PyObject *pathstr = NULL;
1983 PyObject *modname, *modpath, *modules, *parent;
1984
1985 if (globals == NULL || !PyDict_Check(globals))
1986 return Py_None;
1987
1988 if (namestr == NULL) {
1989 namestr = PyString_InternFromString("__name__");
1990 if (namestr == NULL)
1991 return NULL;
1992 }
1993 if (pathstr == NULL) {
1994 pathstr = PyString_InternFromString("__path__");
1995 if (pathstr == NULL)
1996 return NULL;
1997 }
1998
1999 *buf = '\0';
2000 *p_buflen = 0;
2001 modname = PyDict_GetItem(globals, namestr);
2002 if (modname == NULL || !PyString_Check(modname))
2003 return Py_None;
2004
2005 modpath = PyDict_GetItem(globals, pathstr);
2006 if (modpath != NULL) {
2007 int len = PyString_GET_SIZE(modname);
2008 if (len > MAXPATHLEN) {
2009 PyErr_SetString(PyExc_ValueError,
2010 "Module name too long");
2011 return NULL;
2012 }
2013 strcpy(buf, PyString_AS_STRING(modname));
2014 *p_buflen = len;
2015 }
2016 else {
2017 char *start = PyString_AS_STRING(modname);
2018 char *lastdot = strrchr(start, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002019 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002020 if (lastdot == NULL)
2021 return Py_None;
2022 len = lastdot - start;
2023 if (len >= MAXPATHLEN) {
2024 PyErr_SetString(PyExc_ValueError,
2025 "Module name too long");
2026 return NULL;
2027 }
2028 strncpy(buf, start, len);
2029 buf[len] = '\0';
2030 *p_buflen = len;
2031 }
2032
2033 modules = PyImport_GetModuleDict();
2034 parent = PyDict_GetItemString(modules, buf);
2035 if (parent == NULL)
2036 parent = Py_None;
2037 return parent;
2038 /* We expect, but can't guarantee, if parent != None, that:
2039 - parent.__name__ == buf
2040 - parent.__dict__ is globals
2041 If this is violated... Who cares? */
2042}
2043
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002044/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002045static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002046load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
2047 int *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002048{
2049 char *name = *p_name;
2050 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002051 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002052 char *p;
2053 PyObject *result;
2054
2055 if (dot == NULL) {
2056 *p_name = NULL;
2057 len = strlen(name);
2058 }
2059 else {
2060 *p_name = dot+1;
2061 len = dot-name;
2062 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002063 if (len == 0) {
2064 PyErr_SetString(PyExc_ValueError,
2065 "Empty module name");
2066 return NULL;
2067 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002068
2069 p = buf + *p_buflen;
2070 if (p != buf)
2071 *p++ = '.';
2072 if (p+len-buf >= MAXPATHLEN) {
2073 PyErr_SetString(PyExc_ValueError,
2074 "Module name too long");
2075 return NULL;
2076 }
2077 strncpy(p, name, len);
2078 p[len] = '\0';
2079 *p_buflen = p+len-buf;
2080
2081 result = import_submodule(mod, p, buf);
2082 if (result == Py_None && altmod != mod) {
2083 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002084 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002085 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002086 if (result != NULL && result != Py_None) {
2087 if (mark_miss(buf) != 0) {
2088 Py_DECREF(result);
2089 return NULL;
2090 }
2091 strncpy(buf, name, len);
2092 buf[len] = '\0';
2093 *p_buflen = len;
2094 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002095 }
2096 if (result == NULL)
2097 return NULL;
2098
2099 if (result == Py_None) {
2100 Py_DECREF(result);
2101 PyErr_Format(PyExc_ImportError,
2102 "No module named %.200s", name);
2103 return NULL;
2104 }
2105
2106 return result;
2107}
2108
2109static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002110mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002111{
2112 PyObject *modules = PyImport_GetModuleDict();
2113 return PyDict_SetItemString(modules, name, Py_None);
2114}
2115
2116static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002117ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, int buflen,
2118 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002119{
2120 int i;
2121
2122 if (!PyObject_HasAttrString(mod, "__path__"))
2123 return 1;
2124
2125 for (i = 0; ; i++) {
2126 PyObject *item = PySequence_GetItem(fromlist, i);
2127 int hasit;
2128 if (item == NULL) {
2129 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2130 PyErr_Clear();
2131 return 1;
2132 }
2133 return 0;
2134 }
2135 if (!PyString_Check(item)) {
2136 PyErr_SetString(PyExc_TypeError,
2137 "Item in ``from list'' not a string");
2138 Py_DECREF(item);
2139 return 0;
2140 }
2141 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002142 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002143 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002144 /* See if the package defines __all__ */
2145 if (recursive)
2146 continue; /* Avoid endless recursion */
2147 all = PyObject_GetAttrString(mod, "__all__");
2148 if (all == NULL)
2149 PyErr_Clear();
2150 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002151 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002152 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002153 if (!ret)
2154 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002155 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002156 continue;
2157 }
2158 hasit = PyObject_HasAttr(mod, item);
2159 if (!hasit) {
2160 char *subname = PyString_AS_STRING(item);
2161 PyObject *submod;
2162 char *p;
2163 if (buflen + strlen(subname) >= MAXPATHLEN) {
2164 PyErr_SetString(PyExc_ValueError,
2165 "Module name too long");
2166 Py_DECREF(item);
2167 return 0;
2168 }
2169 p = buf + buflen;
2170 *p++ = '.';
2171 strcpy(p, subname);
2172 submod = import_submodule(mod, subname, buf);
2173 Py_XDECREF(submod);
2174 if (submod == NULL) {
2175 Py_DECREF(item);
2176 return 0;
2177 }
2178 }
2179 Py_DECREF(item);
2180 }
2181
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002182 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002183}
2184
Neil Schemenauer00b09662003-06-16 21:03:07 +00002185static int
2186add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2187 PyObject *modules)
2188{
2189 if (mod == Py_None)
2190 return 1;
2191 /* Irrespective of the success of this load, make a
2192 reference to it in the parent package module. A copy gets
2193 saved in the modules dictionary under the full name, so get a
2194 reference from there, if need be. (The exception is when the
2195 load failed with a SyntaxError -- then there's no trace in
2196 sys.modules. In that case, of course, do nothing extra.) */
2197 if (submod == NULL) {
2198 submod = PyDict_GetItemString(modules, fullname);
2199 if (submod == NULL)
2200 return 1;
2201 }
2202 if (PyModule_Check(mod)) {
2203 /* We can't use setattr here since it can give a
2204 * spurious warning if the submodule name shadows a
2205 * builtin name */
2206 PyObject *dict = PyModule_GetDict(mod);
2207 if (!dict)
2208 return 0;
2209 if (PyDict_SetItemString(dict, subname, submod) < 0)
2210 return 0;
2211 }
2212 else {
2213 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2214 return 0;
2215 }
2216 return 1;
2217}
2218
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002219static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002220import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002221{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002222 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002223 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002224
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002225 /* Require:
2226 if mod == None: subname == fullname
2227 else: mod.__name__ + "." + subname == fullname
2228 */
2229
Tim Peters50d8d372001-02-28 05:34:27 +00002230 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002231 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002232 }
2233 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002234 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002235 char buf[MAXPATHLEN+1];
2236 struct filedescr *fdp;
2237 FILE *fp = NULL;
2238
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002239 if (mod == Py_None)
2240 path = NULL;
2241 else {
2242 path = PyObject_GetAttrString(mod, "__path__");
2243 if (path == NULL) {
2244 PyErr_Clear();
2245 Py_INCREF(Py_None);
2246 return Py_None;
2247 }
2248 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002249
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002250 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002251 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2252 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002253 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002254 if (fdp == NULL) {
2255 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2256 return NULL;
2257 PyErr_Clear();
2258 Py_INCREF(Py_None);
2259 return Py_None;
2260 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002261 m = load_module(fullname, fp, buf, fdp->type, loader);
2262 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002263 if (fp)
2264 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002265 if (!add_submodule(mod, m, fullname, subname, modules)) {
2266 Py_XDECREF(m);
2267 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002268 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002269 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002270
2271 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002272}
2273
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002274
2275/* Re-import a module of any kind and return its module object, WITH
2276 INCREMENTED REFERENCE COUNT */
2277
Guido van Rossum79f25d91997-04-29 20:08:16 +00002278PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002279PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002280{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002281 PyObject *modules = PyImport_GetModuleDict();
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002282 PyObject *path = NULL, *loader = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002283 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002284 char buf[MAXPATHLEN+1];
2285 struct filedescr *fdp;
2286 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002287 PyObject *newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002288
Guido van Rossum79f25d91997-04-29 20:08:16 +00002289 if (m == NULL || !PyModule_Check(m)) {
2290 PyErr_SetString(PyExc_TypeError,
2291 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002292 return NULL;
2293 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002294 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002295 if (name == NULL)
2296 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002297 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002298 PyErr_Format(PyExc_ImportError,
2299 "reload(): module %.200s not in sys.modules",
2300 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002301 return NULL;
2302 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002303 subname = strrchr(name, '.');
2304 if (subname == NULL)
2305 subname = name;
2306 else {
2307 PyObject *parentname, *parent;
2308 parentname = PyString_FromStringAndSize(name, (subname-name));
2309 if (parentname == NULL)
2310 return NULL;
2311 parent = PyDict_GetItem(modules, parentname);
2312 if (parent == NULL) {
2313 PyErr_Format(PyExc_ImportError,
2314 "reload(): parent %.200s not in sys.modules",
Georg Brandl0c55f292005-09-14 06:56:20 +00002315 PyString_AS_STRING(parentname));
2316 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002317 return NULL;
2318 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002319 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002320 subname++;
2321 path = PyObject_GetAttrString(parent, "__path__");
2322 if (path == NULL)
2323 PyErr_Clear();
2324 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002325 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002326 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002327 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002328
2329 if (fdp == NULL) {
2330 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002331 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002332 }
2333
2334 newm = load_module(name, fp, buf, fdp->type, loader);
2335 Py_XDECREF(loader);
2336
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002337 if (fp)
2338 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002339 if (newm == NULL) {
2340 /* load_module probably removed name from modules because of
2341 * the error. Put back the original module object. We're
2342 * going to return NULL in this case regardless of whether
2343 * replacing name succeeds, so the return value is ignored.
2344 */
2345 PyDict_SetItemString(modules, name, m);
2346 }
2347 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002348}
2349
2350
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002351/* Higher-level import emulator which emulates the "import" statement
2352 more accurately -- it invokes the __import__() function from the
2353 builtins of the current globals. This means that the import is
2354 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002355 environment, e.g. by "rexec".
2356 A dummy list ["__doc__"] is passed as the 4th argument so that
2357 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
2358 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002359
2360PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002361PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002362{
2363 static PyObject *silly_list = NULL;
2364 static PyObject *builtins_str = NULL;
2365 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002366 PyObject *globals = NULL;
2367 PyObject *import = NULL;
2368 PyObject *builtins = NULL;
2369 PyObject *r = NULL;
2370
2371 /* Initialize constant string objects */
2372 if (silly_list == NULL) {
2373 import_str = PyString_InternFromString("__import__");
2374 if (import_str == NULL)
2375 return NULL;
2376 builtins_str = PyString_InternFromString("__builtins__");
2377 if (builtins_str == NULL)
2378 return NULL;
2379 silly_list = Py_BuildValue("[s]", "__doc__");
2380 if (silly_list == NULL)
2381 return NULL;
2382 }
2383
2384 /* Get the builtins from current globals */
2385 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002386 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002387 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002388 builtins = PyObject_GetItem(globals, builtins_str);
2389 if (builtins == NULL)
2390 goto err;
2391 }
2392 else {
2393 /* No globals -- use standard builtins, and fake globals */
2394 PyErr_Clear();
2395
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002396 builtins = PyImport_ImportModuleEx("__builtin__",
2397 NULL, NULL, NULL);
2398 if (builtins == NULL)
2399 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002400 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2401 if (globals == NULL)
2402 goto err;
2403 }
2404
2405 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002406 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002407 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002408 if (import == NULL)
2409 PyErr_SetObject(PyExc_KeyError, import_str);
2410 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002411 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002412 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002413 if (import == NULL)
2414 goto err;
2415
2416 /* Call the _import__ function with the proper argument list */
2417 r = PyObject_CallFunction(import, "OOOO",
2418 module_name, globals, globals, silly_list);
2419
2420 err:
2421 Py_XDECREF(globals);
2422 Py_XDECREF(builtins);
2423 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002424
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002425 return r;
2426}
2427
2428
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002429/* Module 'imp' provides Python access to the primitives used for
2430 importing modules.
2431*/
2432
Guido van Rossum79f25d91997-04-29 20:08:16 +00002433static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002434imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002435{
2436 char buf[4];
2437
Guido van Rossum96774c12000-05-01 20:19:08 +00002438 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2439 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2440 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2441 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002442
Guido van Rossum79f25d91997-04-29 20:08:16 +00002443 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002444}
2445
Guido van Rossum79f25d91997-04-29 20:08:16 +00002446static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002447imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002448{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002449 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002450 struct filedescr *fdp;
2451
Guido van Rossum79f25d91997-04-29 20:08:16 +00002452 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002453 if (list == NULL)
2454 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002455 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2456 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002457 fdp->suffix, fdp->mode, fdp->type);
2458 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002459 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002460 return NULL;
2461 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002462 if (PyList_Append(list, item) < 0) {
2463 Py_DECREF(list);
2464 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002465 return NULL;
2466 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002467 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002468 }
2469 return list;
2470}
2471
Guido van Rossum79f25d91997-04-29 20:08:16 +00002472static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002473call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002474{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002475 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002476 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002477 struct filedescr *fdp;
2478 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002479 FILE *fp = NULL;
2480
2481 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002482 if (path == Py_None)
2483 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002484 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002485 if (fdp == NULL)
2486 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002487 if (fp != NULL) {
2488 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2489 if (fob == NULL) {
2490 fclose(fp);
2491 return NULL;
2492 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002493 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002494 else {
2495 fob = Py_None;
2496 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002497 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002498 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002499 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002500 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002501 return ret;
2502}
2503
Guido van Rossum79f25d91997-04-29 20:08:16 +00002504static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002505imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002506{
2507 char *name;
2508 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002509 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002510 return NULL;
2511 return call_find_module(name, path);
2512}
2513
2514static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002515imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002516{
2517 char *name;
2518 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002519 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002520 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002521 return NULL;
2522 ret = init_builtin(name);
2523 if (ret < 0)
2524 return NULL;
2525 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002526 Py_INCREF(Py_None);
2527 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002528 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002529 m = PyImport_AddModule(name);
2530 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002531 return m;
2532}
2533
Guido van Rossum79f25d91997-04-29 20:08:16 +00002534static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002535imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002536{
2537 char *name;
2538 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002539 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002540 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002541 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002542 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002543 if (ret < 0)
2544 return NULL;
2545 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002546 Py_INCREF(Py_None);
2547 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002548 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002549 m = PyImport_AddModule(name);
2550 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002551 return m;
2552}
2553
Guido van Rossum79f25d91997-04-29 20:08:16 +00002554static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002555imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002556{
2557 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002558
Guido van Rossum43713e52000-02-29 13:59:29 +00002559 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002560 return NULL;
2561 return get_frozen_object(name);
2562}
2563
Guido van Rossum79f25d91997-04-29 20:08:16 +00002564static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002565imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002566{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002567 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002568 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002569 return NULL;
Guido van Rossum50ee94f2002-04-09 18:00:58 +00002570 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002571}
2572
Guido van Rossum79f25d91997-04-29 20:08:16 +00002573static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002574imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002575{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002576 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002577 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002578 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002579 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002580 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00002581 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002582}
2583
2584static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002585get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002586{
2587 FILE *fp;
2588 if (fob == NULL) {
Tim Peters86c7d2f2004-08-01 23:24:21 +00002589 if (mode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002590 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002591 fp = fopen(pathname, mode);
2592 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002593 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002594 }
2595 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002596 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002597 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002598 PyErr_SetString(PyExc_ValueError,
2599 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002600 }
2601 return fp;
2602}
2603
Guido van Rossum79f25d91997-04-29 20:08:16 +00002604static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002605imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002606{
2607 char *name;
2608 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002609 PyObject *fob = NULL;
2610 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002611 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002612 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002613 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002614 return NULL;
2615 fp = get_file(pathname, fob, "rb");
2616 if (fp == NULL)
2617 return NULL;
2618 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002619 if (fob == NULL)
2620 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002621 return m;
2622}
2623
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002624#ifdef HAVE_DYNAMIC_LOADING
2625
Guido van Rossum79f25d91997-04-29 20:08:16 +00002626static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002627imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002628{
2629 char *name;
2630 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002631 PyObject *fob = NULL;
2632 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002633 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002634 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002635 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002636 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002637 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002638 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002639 if (fp == NULL)
2640 return NULL;
2641 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002642 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002643 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002644}
2645
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002646#endif /* HAVE_DYNAMIC_LOADING */
2647
Guido van Rossum79f25d91997-04-29 20:08:16 +00002648static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002649imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002650{
2651 char *name;
2652 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002653 PyObject *fob = NULL;
2654 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002655 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002656 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002657 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002658 return NULL;
2659 fp = get_file(pathname, fob, "r");
2660 if (fp == NULL)
2661 return NULL;
2662 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002663 if (fob == NULL)
2664 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002665 return m;
2666}
2667
Guido van Rossum79f25d91997-04-29 20:08:16 +00002668static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002669imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002670{
2671 char *name;
2672 PyObject *fob;
2673 char *pathname;
2674 char *suffix; /* Unused */
2675 char *mode;
2676 int type;
2677 FILE *fp;
2678
Guido van Rossum43713e52000-02-29 13:59:29 +00002679 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002680 &name, &fob, &pathname,
2681 &suffix, &mode, &type))
2682 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002683 if (*mode) {
2684 /* Mode must start with 'r' or 'U' and must not contain '+'.
2685 Implicit in this test is the assumption that the mode
2686 may contain other modifiers like 'b' or 't'. */
2687
2688 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002689 PyErr_Format(PyExc_ValueError,
2690 "invalid file open mode %.200s", mode);
2691 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002692 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002693 }
2694 if (fob == Py_None)
2695 fp = NULL;
2696 else {
2697 if (!PyFile_Check(fob)) {
2698 PyErr_SetString(PyExc_ValueError,
2699 "load_module arg#2 should be a file or None");
2700 return NULL;
2701 }
2702 fp = get_file(pathname, fob, mode);
2703 if (fp == NULL)
2704 return NULL;
2705 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002706 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002707}
2708
2709static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002710imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002711{
2712 char *name;
2713 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00002714 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002715 return NULL;
2716 return load_package(name, pathname);
2717}
2718
2719static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002720imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002721{
2722 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002723 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002724 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002725 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002726}
2727
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002728/* Doc strings */
2729
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002730PyDoc_STRVAR(doc_imp,
2731"This module provides the components needed to build your own\n\
2732__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002733
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002734PyDoc_STRVAR(doc_find_module,
2735"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002736Search for a module. If path is omitted or None, search for a\n\
2737built-in, frozen or special module and continue search in sys.path.\n\
2738The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002739package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002740
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002741PyDoc_STRVAR(doc_load_module,
2742"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002743Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002744The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002745
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002746PyDoc_STRVAR(doc_get_magic,
2747"get_magic() -> string\n\
2748Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002749
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002750PyDoc_STRVAR(doc_get_suffixes,
2751"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002752Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002753that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002754
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002755PyDoc_STRVAR(doc_new_module,
2756"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002757Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002758The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002759
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002760PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00002761"lock_held() -> boolean\n\
2762Return True if the import lock is currently held, else False.\n\
2763On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00002764
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002765PyDoc_STRVAR(doc_acquire_lock,
2766"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00002767Acquires the interpreter's import lock for the current thread.\n\
2768This lock should be used by import hooks to ensure thread-safety\n\
2769when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002770On platforms without threads, this function does nothing.");
2771
2772PyDoc_STRVAR(doc_release_lock,
2773"release_lock() -> None\n\
2774Release the interpreter's import lock.\n\
2775On platforms without threads, this function does nothing.");
2776
Guido van Rossum79f25d91997-04-29 20:08:16 +00002777static PyMethodDef imp_methods[] = {
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002778 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
2779 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
2780 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
2781 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
2782 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
2783 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
2784 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
2785 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002786 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00002787 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
2788 {"init_builtin", imp_init_builtin, METH_VARARGS},
2789 {"init_frozen", imp_init_frozen, METH_VARARGS},
2790 {"is_builtin", imp_is_builtin, METH_VARARGS},
2791 {"is_frozen", imp_is_frozen, METH_VARARGS},
2792 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002793#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00002794 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002795#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00002796 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00002797 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002798 {NULL, NULL} /* sentinel */
2799};
2800
Guido van Rossum1a8791e1998-08-04 22:46:29 +00002801static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002802setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002803{
2804 PyObject *v;
2805 int err;
2806
2807 v = PyInt_FromLong((long)value);
2808 err = PyDict_SetItemString(d, name, v);
2809 Py_XDECREF(v);
2810 return err;
2811}
2812
Jason Tishler6bc06ec2003-09-04 11:59:50 +00002813PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002814initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002815{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002816 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002817
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002818 m = Py_InitModule4("imp", imp_methods, doc_imp,
2819 NULL, PYTHON_API_VERSION);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002820 d = PyModule_GetDict(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002821
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002822 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
2823 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
2824 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
2825 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
2826 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
2827 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
2828 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
2829 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00002830 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00002831 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002832
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002833 failure:
2834 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002835}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002836
2837
Guido van Rossumb18618d2000-05-03 23:44:39 +00002838/* API for embedding applications that want to add their own entries
2839 to the table of built-in modules. This should normally be called
2840 *before* Py_Initialize(). When the table resize fails, -1 is
2841 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002842
2843 After a similar function by Just van Rossum. */
2844
2845int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002846PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002847{
2848 static struct _inittab *our_copy = NULL;
2849 struct _inittab *p;
2850 int i, n;
2851
2852 /* Count the number of entries in both tables */
2853 for (n = 0; newtab[n].name != NULL; n++)
2854 ;
2855 if (n == 0)
2856 return 0; /* Nothing to do */
2857 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
2858 ;
2859
2860 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00002861 p = our_copy;
2862 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002863 if (p == NULL)
2864 return -1;
2865
2866 /* Copy the tables into the new memory */
2867 if (our_copy != PyImport_Inittab)
2868 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
2869 PyImport_Inittab = our_copy = p;
2870 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
2871
2872 return 0;
2873}
2874
2875/* Shorthand to add a single entry given a name and a function */
2876
2877int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002878PyImport_AppendInittab(char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002879{
2880 struct _inittab newtab[2];
2881
2882 memset(newtab, '\0', sizeof newtab);
2883
2884 newtab[0].name = name;
2885 newtab[0].initfunc = initfunc;
2886
2887 return PyImport_ExtendInittab(newtab);
2888}