blob: 055f0810041fba1bcd1e0ac3b9b2bc1e35e9599c [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"
Kristján Valur Jónsson67387fb2007-04-25 00:17:39 +00007#undef Yield /* undefine macro conflicting with winbase.h */
Neal Norwitzadb69fc2005-12-17 20:54:49 +00008#include "pyarena.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00009#include "pythonrun.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000010#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000011#include "marshal.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000012#include "code.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000013#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000014#include "eval.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000015#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000016#include "importdl.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000017
Guido van Rossum55a83382000-09-20 20:31:38 +000018#ifdef HAVE_FCNTL_H
19#include <fcntl.h>
20#endif
Anthony Baxterac6bd462006-04-13 02:06:09 +000021#ifdef __cplusplus
22extern "C" {
23#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000024
Christian Heimes5e8e6d22008-02-23 23:59:45 +000025#ifdef MS_WINDOWS
26/* for stat.st_mode */
27typedef unsigned short mode_t;
28#endif
29
Guido van Rossum21d335e1993-10-15 13:01:11 +000030
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000031/* Magic word to reject .pyc files generated by other Python versions.
32 It should change for each incompatible change to the bytecode.
33
34 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000035 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000036 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000037
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000038 The magic numbers must be spaced apart atleast 2 values, as the
39 -U interpeter flag will cause MAGIC+1 being used. They have been
40 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000041
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000042 There were a variety of old schemes for setting the magic number.
43 The current working scheme is to increment the previous value by
44 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000045
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000046 Known values:
47 Python 1.5: 20121
48 Python 1.5.1: 20121
49 Python 1.5.2: 20121
Skip Montanaro4ec3c262006-03-25 14:12:03 +000050 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000051 Python 2.0: 50823
52 Python 2.0.1: 50823
53 Python 2.1: 60202
54 Python 2.1.1: 60202
55 Python 2.1.2: 60202
56 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000057 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000058 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000059 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000060 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000061 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000062 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000063 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000064 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000065 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000066 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Neal Norwitz0d62a062006-07-30 06:53:31 +000067 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
68 Python 2.5b3: 62111 (fix wrong code: x += yield)
Neal Norwitz9a70f952006-08-04 05:12:19 +000069 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
70 storing constants that should have been removed)
Neal Norwitzdac090d2006-09-05 03:53:08 +000071 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
Raymond Hettingereffde122007-12-18 18:26:18 +000072 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)
Nick Coghlan7af53be2008-03-07 14:13:28 +000073 Python 2.6a1: 62161 (WITH_CLEANUP optimization)
Antoine Pitroud0c35152008-12-17 00:38:28 +000074 Python 2.7a0: 62171 (optimize list comprehensions/change LIST_APPEND)
Jeffrey Yasskin68d68522009-02-28 19:03:21 +000075 Python 2.7a0: 62181 (optimize conditional branches:
76 introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE)
Benjamin Peterson1880d8b2009-05-25 13:13:44 +000077 Python 2.7a0 62191 (introduce SETUP_WITH)
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000078.
Tim Peters36515e22001-11-18 04:06:29 +000079*/
Benjamin Peterson1880d8b2009-05-25 13:13:44 +000080#define MAGIC (62191 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000081
Guido van Rossum96774c12000-05-01 20:19:08 +000082/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000083 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000084 compiler works which are enabled by command line switches. */
Christian Heimes61e45902008-03-27 10:35:52 +000085static long pyc_magic = MAGIC;
Guido van Rossum96774c12000-05-01 20:19:08 +000086
Guido van Rossum25ce5661997-08-02 03:10:38 +000087/* See _PyImport_FixupExtension() below */
88static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000089
Guido van Rossum771c6c81997-10-31 18:37:24 +000090/* This table is defined in config.c: */
91extern struct _inittab _PyImport_Inittab[];
92
93struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000094
Guido van Rossumed1170e1999-12-20 21:23:41 +000095/* these tables define the module suffixes that Python recognizes */
96struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +000097
98#ifdef RISCOS
99static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +0000100 {"/py", "U", PY_SOURCE},
Guido van Rossum48a680c2001-03-02 06:34:14 +0000101 {"/pyc", "rb", PY_COMPILED},
102 {0, 0}
103};
104#else
Guido van Rossumed1170e1999-12-20 21:23:41 +0000105static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +0000106 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000107#ifdef MS_WINDOWS
Jack Jansenc88da1f2002-05-28 10:58:19 +0000108 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000109#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000110 {".pyc", "rb", PY_COMPILED},
111 {0, 0}
112};
Guido van Rossum48a680c2001-03-02 06:34:14 +0000113#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000114
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000115
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000116/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000117
118void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000119_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000120{
Guido van Rossumed1170e1999-12-20 21:23:41 +0000121 const struct filedescr *scan;
122 struct filedescr *filetab;
123 int countD = 0;
124 int countS = 0;
125
126 /* prepare _PyImport_Filetab: copy entries from
127 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
128 */
Georg Brandladd36e52007-08-23 18:08:06 +0000129#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossumed1170e1999-12-20 21:23:41 +0000130 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
131 ++countD;
Georg Brandladd36e52007-08-23 18:08:06 +0000132#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000133 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
134 ++countS;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000135 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
Neal Norwitze1fdb322006-07-21 05:32:28 +0000136 if (filetab == NULL)
Neal Norwitz33722ae2006-07-21 07:59:02 +0000137 Py_FatalError("Can't initialize import file table.");
Georg Brandladd36e52007-08-23 18:08:06 +0000138#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossumed1170e1999-12-20 21:23:41 +0000139 memcpy(filetab, _PyImport_DynLoadFiletab,
140 countD * sizeof(struct filedescr));
Georg Brandladd36e52007-08-23 18:08:06 +0000141#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000142 memcpy(filetab + countD, _PyImport_StandardFiletab,
143 countS * sizeof(struct filedescr));
144 filetab[countD + countS].suffix = NULL;
145
146 _PyImport_Filetab = filetab;
147
Guido van Rossum0824f631997-03-11 18:37:35 +0000148 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000149 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
150 for (; filetab->suffix != NULL; filetab++) {
Guido van Rossum48a680c2001-03-02 06:34:14 +0000151#ifndef RISCOS
Guido van Rossumed1170e1999-12-20 21:23:41 +0000152 if (strcmp(filetab->suffix, ".pyc") == 0)
153 filetab->suffix = ".pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000154#else
155 if (strcmp(filetab->suffix, "/pyc") == 0)
156 filetab->suffix = "/pyo";
157#endif
Guido van Rossum0824f631997-03-11 18:37:35 +0000158 }
159 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000160
161 if (Py_UnicodeFlag) {
162 /* Fix the pyc_magic so that byte compiled code created
163 using the all-Unicode method doesn't interfere with
164 code created in normal operation mode. */
165 pyc_magic = MAGIC + 1;
166 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000167}
168
Guido van Rossum25ce5661997-08-02 03:10:38 +0000169void
Just van Rossum52e14d62002-12-30 22:08:05 +0000170_PyImportHooks_Init(void)
171{
172 PyObject *v, *path_hooks = NULL, *zimpimport;
173 int err = 0;
174
175 /* adding sys.path_hooks and sys.path_importer_cache, setting up
176 zipimport */
Nick Coghlan327a39b2007-11-18 11:56:28 +0000177 if (PyType_Ready(&PyNullImporter_Type) < 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000178 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000179
180 if (Py_VerboseFlag)
181 PySys_WriteStderr("# installing zipimport hook\n");
182
183 v = PyList_New(0);
184 if (v == NULL)
185 goto error;
186 err = PySys_SetObject("meta_path", v);
187 Py_DECREF(v);
188 if (err)
189 goto error;
190 v = PyDict_New();
191 if (v == NULL)
192 goto error;
193 err = PySys_SetObject("path_importer_cache", v);
194 Py_DECREF(v);
195 if (err)
196 goto error;
197 path_hooks = PyList_New(0);
198 if (path_hooks == NULL)
199 goto error;
200 err = PySys_SetObject("path_hooks", path_hooks);
201 if (err) {
202 error:
203 PyErr_Print();
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000204 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
205 "path_importer_cache, or NullImporter failed"
206 );
Just van Rossum52e14d62002-12-30 22:08:05 +0000207 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000208
Just van Rossum52e14d62002-12-30 22:08:05 +0000209 zimpimport = PyImport_ImportModule("zipimport");
210 if (zimpimport == NULL) {
211 PyErr_Clear(); /* No zip import module -- okay */
212 if (Py_VerboseFlag)
213 PySys_WriteStderr("# can't import zipimport\n");
214 }
215 else {
216 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
217 "zipimporter");
218 Py_DECREF(zimpimport);
219 if (zipimporter == NULL) {
220 PyErr_Clear(); /* No zipimporter object -- okay */
221 if (Py_VerboseFlag)
222 PySys_WriteStderr(
Fred Drake1e5fc552003-07-11 15:01:02 +0000223 "# can't import zipimport.zipimporter\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000224 }
225 else {
226 /* sys.path_hooks.append(zipimporter) */
227 err = PyList_Append(path_hooks, zipimporter);
228 Py_DECREF(zipimporter);
229 if (err)
230 goto error;
231 if (Py_VerboseFlag)
232 PySys_WriteStderr(
233 "# installed zipimport hook\n");
234 }
235 }
236 Py_DECREF(path_hooks);
237}
238
239void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000240_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000241{
242 Py_XDECREF(extensions);
243 extensions = NULL;
Barry Warsaw84294482000-10-03 16:02:05 +0000244 PyMem_DEL(_PyImport_Filetab);
245 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000246}
247
248
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000249/* Locking primitives to prevent parallel imports of the same module
250 in different threads to return with a partially loaded module.
251 These calls are serialized by the global interpreter lock. */
252
253#ifdef WITH_THREAD
254
Guido van Rossum49b56061998-10-01 20:42:43 +0000255#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000256
Guido van Rossum65d5b571998-12-21 19:32:43 +0000257static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000258static long import_lock_thread = -1;
259static int import_lock_level = 0;
260
261static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000262lock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000263{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000264 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000265 if (me == -1)
266 return; /* Too bad */
Neal Norwitze1fdb322006-07-21 05:32:28 +0000267 if (import_lock == NULL) {
Guido van Rossum65d5b571998-12-21 19:32:43 +0000268 import_lock = PyThread_allocate_lock();
Neal Norwitze1fdb322006-07-21 05:32:28 +0000269 if (import_lock == NULL)
270 return; /* Nothing much we can do. */
271 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000272 if (import_lock_thread == me) {
273 import_lock_level++;
274 return;
275 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000276 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
277 {
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000278 PyThreadState *tstate = PyEval_SaveThread();
Guido van Rossum65d5b571998-12-21 19:32:43 +0000279 PyThread_acquire_lock(import_lock, 1);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000280 PyEval_RestoreThread(tstate);
281 }
282 import_lock_thread = me;
283 import_lock_level = 1;
284}
285
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000286static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000287unlock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000288{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000289 long me = PyThread_get_thread_ident();
Neal Norwitze1fdb322006-07-21 05:32:28 +0000290 if (me == -1 || import_lock == NULL)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000291 return 0; /* Too bad */
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000292 if (import_lock_thread != me)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000293 return -1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000294 import_lock_level--;
295 if (import_lock_level == 0) {
296 import_lock_thread = -1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000297 PyThread_release_lock(import_lock);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000298 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000299 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000300}
301
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000302/* This function is called from PyOS_AfterFork to ensure that newly
303 created child processes do not share locks with the parent. */
304
305void
306_PyImport_ReInitLock(void)
307{
308#ifdef _AIX
309 if (import_lock != NULL)
310 import_lock = PyThread_allocate_lock();
311#endif
312}
313
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000314#else
315
316#define lock_import()
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000317#define unlock_import() 0
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000318
319#endif
320
Tim Peters69232342001-08-30 05:16:13 +0000321static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000322imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000323{
Tim Peters69232342001-08-30 05:16:13 +0000324#ifdef WITH_THREAD
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000325 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000326#else
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000327 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000328#endif
329}
330
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000331static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000332imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000333{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000334#ifdef WITH_THREAD
335 lock_import();
336#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000337 Py_INCREF(Py_None);
338 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000339}
340
341static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000342imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000343{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000344#ifdef WITH_THREAD
345 if (unlock_import() < 0) {
346 PyErr_SetString(PyExc_RuntimeError,
347 "not holding the import lock");
348 return NULL;
349 }
350#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000351 Py_INCREF(Py_None);
352 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000353}
354
Collin Winter276887b2007-03-12 16:11:39 +0000355static void
Neal Norwitz75c7c802007-03-13 05:31:38 +0000356imp_modules_reloading_clear(void)
Collin Winter276887b2007-03-12 16:11:39 +0000357{
358 PyInterpreterState *interp = PyThreadState_Get()->interp;
Neal Norwitz75c7c802007-03-13 05:31:38 +0000359 if (interp->modules_reloading != NULL)
360 PyDict_Clear(interp->modules_reloading);
Collin Winter276887b2007-03-12 16:11:39 +0000361}
362
Guido van Rossum25ce5661997-08-02 03:10:38 +0000363/* Helper for sys */
364
365PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000366PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000367{
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000368 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000369 if (interp->modules == NULL)
370 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
371 return interp->modules;
372}
373
Guido van Rossum3f5da241990-12-20 15:06:42 +0000374
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000375/* List of names to clear in sys */
376static char* sys_deletes[] = {
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000377 "path", "argv", "ps1", "ps2", "exitfunc",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000378 "exc_type", "exc_value", "exc_traceback",
379 "last_type", "last_value", "last_traceback",
Just van Rossum52e14d62002-12-30 22:08:05 +0000380 "path_hooks", "path_importer_cache", "meta_path",
Christian Heimes0d924432008-01-30 17:21:22 +0000381 /* misc stuff */
382 "flags", "float_info",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000383 NULL
384};
385
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000386static char* sys_files[] = {
387 "stdin", "__stdin__",
388 "stdout", "__stdout__",
389 "stderr", "__stderr__",
390 NULL
391};
392
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000393
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000394/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000395
Guido van Rossum3f5da241990-12-20 15:06:42 +0000396void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000397PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000398{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000399 Py_ssize_t pos, ndone;
Guido van Rossum758eec01998-01-19 21:58:26 +0000400 char *name;
401 PyObject *key, *value, *dict;
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000402 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000403 PyObject *modules = interp->modules;
404
405 if (modules == NULL)
406 return; /* Already done */
407
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000408 /* Delete some special variables first. These are common
409 places where user values hide and people complain when their
410 destructors fail. Since the modules containing them are
411 deleted *last* of all, they would come too late in the normal
412 destruction order. Sigh. */
413
414 value = PyDict_GetItemString(modules, "__builtin__");
415 if (value != NULL && PyModule_Check(value)) {
416 dict = PyModule_GetDict(value);
417 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000418 PySys_WriteStderr("# clear __builtin__._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000419 PyDict_SetItemString(dict, "_", Py_None);
420 }
421 value = PyDict_GetItemString(modules, "sys");
422 if (value != NULL && PyModule_Check(value)) {
423 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000424 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000425 dict = PyModule_GetDict(value);
426 for (p = sys_deletes; *p != NULL; p++) {
427 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000428 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000429 PyDict_SetItemString(dict, *p, Py_None);
430 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000431 for (p = sys_files; *p != NULL; p+=2) {
432 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000433 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000434 v = PyDict_GetItemString(dict, *(p+1));
435 if (v == NULL)
436 v = Py_None;
437 PyDict_SetItemString(dict, *p, v);
438 }
439 }
440
441 /* First, delete __main__ */
442 value = PyDict_GetItemString(modules, "__main__");
443 if (value != NULL && PyModule_Check(value)) {
444 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000445 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000446 _PyModule_Clear(value);
447 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000448 }
449
Guido van Rossum758eec01998-01-19 21:58:26 +0000450 /* The special treatment of __builtin__ here is because even
451 when it's not referenced as a module, its dictionary is
452 referenced by almost every module's __builtins__. Since
453 deleting a module clears its dictionary (even if there are
454 references left to it), we need to delete the __builtin__
455 module last. Likewise, we don't delete sys until the very
456 end because it is implicitly referenced (e.g. by print).
457
458 Also note that we 'delete' modules by replacing their entry
459 in the modules dict with None, rather than really deleting
460 them; this avoids a rehash of the modules dictionary and
461 also marks them as "non existent" so they won't be
462 re-imported. */
463
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000464 /* Next, repeatedly delete modules with a reference count of
Guido van Rossum758eec01998-01-19 21:58:26 +0000465 one (skipping __builtin__ and sys) and delete them */
466 do {
467 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000468 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000469 while (PyDict_Next(modules, &pos, &key, &value)) {
470 if (value->ob_refcnt != 1)
471 continue;
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000472 if (PyString_Check(key) && PyModule_Check(value)) {
473 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000474 if (strcmp(name, "__builtin__") == 0)
475 continue;
476 if (strcmp(name, "sys") == 0)
477 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000478 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000479 PySys_WriteStderr(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000480 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000481 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000482 PyDict_SetItem(modules, key, Py_None);
483 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000484 }
485 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000486 } while (ndone > 0);
487
Guido van Rossum758eec01998-01-19 21:58:26 +0000488 /* Next, delete all modules (still skipping __builtin__ and sys) */
489 pos = 0;
490 while (PyDict_Next(modules, &pos, &key, &value)) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000491 if (PyString_Check(key) && PyModule_Check(value)) {
492 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000493 if (strcmp(name, "__builtin__") == 0)
494 continue;
495 if (strcmp(name, "sys") == 0)
496 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000497 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000498 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000499 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000500 PyDict_SetItem(modules, key, Py_None);
501 }
502 }
503
504 /* Next, delete sys and __builtin__ (in that order) */
505 value = PyDict_GetItemString(modules, "sys");
506 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000507 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000508 PySys_WriteStderr("# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000509 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000510 PyDict_SetItemString(modules, "sys", Py_None);
511 }
512 value = PyDict_GetItemString(modules, "__builtin__");
513 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000514 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000515 PySys_WriteStderr("# cleanup __builtin__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000516 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000517 PyDict_SetItemString(modules, "__builtin__", Py_None);
518 }
519
520 /* Finally, clear and delete the modules directory */
521 PyDict_Clear(modules);
522 interp->modules = NULL;
523 Py_DECREF(modules);
Collin Winter276887b2007-03-12 16:11:39 +0000524 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000525}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000526
527
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000528/* Helper for pythonrun.c -- return magic number */
529
530long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000531PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000532{
Guido van Rossum96774c12000-05-01 20:19:08 +0000533 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000534}
535
536
Guido van Rossum25ce5661997-08-02 03:10:38 +0000537/* Magic for extension modules (built-in as well as dynamically
538 loaded). To prevent initializing an extension module more than
539 once, we keep a static dictionary 'extensions' keyed by module name
540 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000541 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000542 dictionary is stored by calling _PyImport_FixupExtension()
543 immediately after the module initialization function succeeds. A
544 copy can be retrieved from there by calling
545 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000546
Guido van Rossum79f25d91997-04-29 20:08:16 +0000547PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000548_PyImport_FixupExtension(char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000549{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000550 PyObject *modules, *mod, *dict, *copy;
551 if (extensions == NULL) {
552 extensions = PyDict_New();
553 if (extensions == NULL)
554 return NULL;
555 }
556 modules = PyImport_GetModuleDict();
557 mod = PyDict_GetItemString(modules, name);
558 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000559 PyErr_Format(PyExc_SystemError,
560 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000561 return NULL;
562 }
563 dict = PyModule_GetDict(mod);
564 if (dict == NULL)
565 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000566 copy = PyDict_Copy(dict);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000567 if (copy == NULL)
568 return NULL;
569 PyDict_SetItemString(extensions, filename, copy);
570 Py_DECREF(copy);
571 return copy;
572}
573
574PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000575_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000576{
Fred Drake9cd0efc2001-10-25 21:38:59 +0000577 PyObject *dict, *mod, *mdict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000578 if (extensions == NULL)
579 return NULL;
580 dict = PyDict_GetItemString(extensions, filename);
581 if (dict == NULL)
582 return NULL;
583 mod = PyImport_AddModule(name);
584 if (mod == NULL)
585 return NULL;
586 mdict = PyModule_GetDict(mod);
587 if (mdict == NULL)
588 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000589 if (PyDict_Update(mdict, dict))
Guido van Rossum25ce5661997-08-02 03:10:38 +0000590 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000591 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000592 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Guido van Rossum25ce5661997-08-02 03:10:38 +0000593 name, filename);
594 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000595}
596
597
598/* Get the module object corresponding to a module name.
599 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000600 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000601 Because the former action is most common, THIS DOES NOT RETURN A
602 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000603
Guido van Rossum79f25d91997-04-29 20:08:16 +0000604PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000605PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +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;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000609
Guido van Rossum25ce5661997-08-02 03:10:38 +0000610 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000611 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000612 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000613 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000614 if (m == NULL)
615 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000616 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000617 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000618 return NULL;
619 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000620 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000621
622 return m;
623}
624
Tim Peters1cd70172004-08-02 03:52:12 +0000625/* Remove name from sys.modules, if it's there. */
626static void
627_RemoveModule(const char *name)
628{
629 PyObject *modules = PyImport_GetModuleDict();
630 if (PyDict_GetItemString(modules, name) == NULL)
631 return;
632 if (PyDict_DelItemString(modules, name) < 0)
633 Py_FatalError("import: deleting existing key in"
634 "sys.modules failed");
635}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000636
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000637/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000638 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
639 * removed from sys.modules, to avoid leaving damaged module objects
640 * in sys.modules. The caller may wish to restore the original
641 * module object (if any) in this case; PyImport_ReloadModule is an
642 * example.
643 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000644PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000645PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000646{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000647 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
648}
649
650PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000651PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000652{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000653 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000654 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000655
Guido van Rossum79f25d91997-04-29 20:08:16 +0000656 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000657 if (m == NULL)
658 return NULL;
Jeremy Hyltonecd91292004-01-02 23:25:32 +0000659 /* If the module is being reloaded, we get the old module back
660 and re-use its dict to exec the new code. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000661 d = PyModule_GetDict(m);
662 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
663 if (PyDict_SetItemString(d, "__builtins__",
664 PyEval_GetBuiltins()) != 0)
Tim Peters1cd70172004-08-02 03:52:12 +0000665 goto error;
Guido van Rossum6135a871995-01-09 17:53:26 +0000666 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000667 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000668 v = NULL;
669 if (pathname != NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000670 v = PyString_FromString(pathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000671 if (v == NULL)
672 PyErr_Clear();
673 }
674 if (v == NULL) {
675 v = ((PyCodeObject *)co)->co_filename;
676 Py_INCREF(v);
677 }
678 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000679 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000680 Py_DECREF(v);
681
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000682 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000683 if (v == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000684 goto error;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000685 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000686
Guido van Rossum25ce5661997-08-02 03:10:38 +0000687 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000688 PyErr_Format(PyExc_ImportError,
689 "Loaded module %.200s not found in sys.modules",
690 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000691 return NULL;
692 }
693
Guido van Rossum79f25d91997-04-29 20:08:16 +0000694 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000695
696 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000697
698 error:
699 _RemoveModule(name);
700 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000701}
702
703
704/* Given a pathname for a Python source file, fill a buffer with the
705 pathname for the corresponding compiled file. Return the pathname
706 for the compiled file, or NULL if there's no space in the buffer.
707 Doesn't set an exception. */
708
709static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000710make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000711{
Tim Petersc1731372001-08-04 08:12:36 +0000712 size_t len = strlen(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000713 if (len+2 > buflen)
714 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000715
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000716#ifdef MS_WINDOWS
Tim Petersc1731372001-08-04 08:12:36 +0000717 /* Treat .pyw as if it were .py. The case of ".pyw" must match
718 that used in _PyImport_StandardFiletab. */
719 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
720 --len; /* pretend 'w' isn't there */
721#endif
722 memcpy(buf, pathname, len);
723 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
724 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000725
726 return buf;
727}
728
729
730/* Given a pathname for a Python source file, its time of last
731 modification, and a pathname for a compiled file, check whether the
732 compiled file represents the same version of the source. If so,
733 return a FILE pointer for the compiled file, positioned just after
734 the header; if not, return NULL.
735 Doesn't set an exception. */
736
737static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000738check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000739{
740 FILE *fp;
741 long magic;
742 long pyc_mtime;
743
744 fp = fopen(cpathname, "rb");
745 if (fp == NULL)
746 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000747 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000748 if (magic != pyc_magic) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000750 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000751 fclose(fp);
752 return NULL;
753 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000754 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000755 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000757 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000758 fclose(fp);
759 return NULL;
760 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000761 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000762 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000763 return fp;
764}
765
766
767/* Read a code object from a file and check it for validity */
768
Guido van Rossum79f25d91997-04-29 20:08:16 +0000769static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000770read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000771{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000772 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000773
Tim Petersd9b9ac82001-01-28 00:27:39 +0000774 co = PyMarshal_ReadLastObjectFromFile(fp);
Armin Rigo01ab2792004-03-26 15:09:27 +0000775 if (co == NULL)
776 return NULL;
777 if (!PyCode_Check(co)) {
778 PyErr_Format(PyExc_ImportError,
779 "Non-code object in %.200s", cpathname);
780 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000781 return NULL;
782 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000783 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000784}
785
786
787/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000788 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000789
Guido van Rossum79f25d91997-04-29 20:08:16 +0000790static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000791load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000792{
793 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000794 PyCodeObject *co;
795 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000796
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000798 if (magic != pyc_magic) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000799 PyErr_Format(PyExc_ImportError,
800 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000801 return NULL;
802 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000803 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000804 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000805 if (co == NULL)
806 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000807 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000808 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000809 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000810 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000811 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000812
813 return m;
814}
815
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000816/* Parse a source file and return the corresponding code object */
817
Guido van Rossum79f25d91997-04-29 20:08:16 +0000818static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000819parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000820{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000821 PyCodeObject *co = NULL;
822 mod_ty mod;
Christian Heimes3c608332008-03-26 22:01:37 +0000823 PyCompilerFlags flags;
Neal Norwitz2a399b02006-09-11 04:28:16 +0000824 PyArena *arena = PyArena_New();
825 if (arena == NULL)
826 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000827
Christian Heimes7f23d862008-03-26 22:51:58 +0000828 flags.cf_flags = 0;
829
Christian Heimes3c608332008-03-26 22:01:37 +0000830 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, &flags,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000831 NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000832 if (mod) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000833 co = PyAST_Compile(mod, pathname, NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000834 }
Neal Norwitz2a399b02006-09-11 04:28:16 +0000835 PyArena_Free(arena);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000836 return co;
837}
838
839
Guido van Rossum55a83382000-09-20 20:31:38 +0000840/* Helper to open a bytecode file for writing in exclusive mode */
841
842static FILE *
Christian Heimes40346852008-02-23 17:52:07 +0000843open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +0000844{
845#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
846 /* Use O_EXCL to avoid a race condition when another process tries to
847 write the same file. When that happens, our open() call fails,
848 which is just fine (since it's only a cache).
849 XXX If the file exists and is writable but the directory is not
850 writable, the file will never be written. Oh well.
851 */
852 int fd;
853 (void) unlink(filename);
Tim Peters42c83af2000-09-29 04:03:10 +0000854 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
855#ifdef O_BINARY
856 |O_BINARY /* necessary for Windows */
857#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000858#ifdef __VMS
Christian Heimes40346852008-02-23 17:52:07 +0000859 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000860#else
Christian Heimes40346852008-02-23 17:52:07 +0000861 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000862#endif
Martin v. Löwis18e16552006-02-15 17:27:45 +0000863 );
Guido van Rossum55a83382000-09-20 20:31:38 +0000864 if (fd < 0)
865 return NULL;
866 return fdopen(fd, "wb");
867#else
868 /* Best we can do -- on Windows this can't happen anyway */
869 return fopen(filename, "wb");
870#endif
871}
872
873
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000874/* Write a compiled module to a file, placing the time of last
875 modification of its source into the header.
876 Errors are ignored, if a write error occurs an attempt is made to
877 remove the file. */
878
879static void
Christian Heimes40346852008-02-23 17:52:07 +0000880write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000881{
882 FILE *fp;
Christian Heimes40346852008-02-23 17:52:07 +0000883 time_t mtime = srcstat->st_mtime;
R. David Murray3310a102009-07-07 09:54:16 +0000884#ifdef MS_WINDOWS /* since Windows uses different permissions */
885 mode_t mode = srcstat->st_mode & ~S_IEXEC;
886#else
R. David Murray23a736a2009-07-07 01:06:13 +0000887 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
888#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000889
Christian Heimes40346852008-02-23 17:52:07 +0000890 fp = open_exclusive(cpathname, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000891 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000892 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000893 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000894 "# can't create %s\n", cpathname);
895 return;
896 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000897 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000898 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000899 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
900 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000901 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000902 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000903 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000904 /* Don't keep partial file */
905 fclose(fp);
906 (void) unlink(cpathname);
907 return;
908 }
909 /* Now write the true mtime */
910 fseek(fp, 4L, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000911 assert(mtime < LONG_MAX);
Martin v. Löwis725507b2006-03-07 12:08:51 +0000912 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000913 fflush(fp);
914 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000915 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000916 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000917}
918
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000919static void
920update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
921{
922 PyObject *constants, *tmp;
923 Py_ssize_t i, n;
924
925 if (!_PyString_Eq(co->co_filename, oldname))
926 return;
927
928 tmp = co->co_filename;
929 co->co_filename = newname;
930 Py_INCREF(co->co_filename);
931 Py_DECREF(tmp);
932
933 constants = co->co_consts;
934 n = PyTuple_GET_SIZE(constants);
935 for (i = 0; i < n; i++) {
936 tmp = PyTuple_GET_ITEM(constants, i);
937 if (PyCode_Check(tmp))
938 update_code_filenames((PyCodeObject *)tmp,
939 oldname, newname);
940 }
941}
942
943static int
944update_compiled_module(PyCodeObject *co, char *pathname)
945{
946 PyObject *oldname, *newname;
947
948 if (strcmp(PyString_AsString(co->co_filename), pathname) == 0)
949 return 0;
950
951 newname = PyString_FromString(pathname);
952 if (newname == NULL)
953 return -1;
954
955 oldname = co->co_filename;
956 Py_INCREF(oldname);
957 update_code_filenames(co, oldname, newname);
958 Py_DECREF(oldname);
959 Py_DECREF(newname);
960 return 1;
961}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000962
963/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000964 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
965 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000966
Guido van Rossum79f25d91997-04-29 20:08:16 +0000967static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000968load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000969{
Christian Heimes40346852008-02-23 17:52:07 +0000970 struct stat st;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000971 FILE *fpc;
972 char buf[MAXPATHLEN+1];
973 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000974 PyCodeObject *co;
975 PyObject *m;
Christian Heimes40346852008-02-23 17:52:07 +0000976
977 if (fstat(fileno(fp), &st) != 0) {
Neal Norwitz708e51a2005-10-03 04:48:15 +0000978 PyErr_Format(PyExc_RuntimeError,
Christian Heimes40346852008-02-23 17:52:07 +0000979 "unable to get file status from '%s'",
Neal Norwitz708e51a2005-10-03 04:48:15 +0000980 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +0000981 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +0000982 }
Fred Drake4c82b232000-06-30 16:18:57 +0000983#if SIZEOF_TIME_T > 4
984 /* Python's .pyc timestamp handling presumes that the timestamp fits
985 in 4 bytes. This will be fine until sometime in the year 2038,
986 when a 4-byte signed time_t will overflow.
987 */
Christian Heimes40346852008-02-23 17:52:07 +0000988 if (st.st_mtime >> 32) {
Fred Drake4c82b232000-06-30 16:18:57 +0000989 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +0000990 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +0000991 return NULL;
992 }
993#endif
Tim Peters36515e22001-11-18 04:06:29 +0000994 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +0000995 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000996 if (cpathname != NULL &&
Christian Heimes40346852008-02-23 17:52:07 +0000997 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000998 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000999 fclose(fpc);
1000 if (co == NULL)
1001 return NULL;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +00001002 if (update_compiled_module(co, pathname) < 0)
1003 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001004 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001005 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001006 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +00001007 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001008 }
1009 else {
1010 co = parse_source_module(pathname, fp);
1011 if (co == NULL)
1012 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001013 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001014 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001015 name, pathname);
Georg Brandl2da0fce2008-01-07 17:09:35 +00001016 if (cpathname) {
1017 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1018 if (ro == NULL || !PyObject_IsTrue(ro))
Christian Heimes40346852008-02-23 17:52:07 +00001019 write_compiled_module(co, cpathname, &st);
Georg Brandl2da0fce2008-01-07 17:09:35 +00001020 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001021 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +00001022 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001023 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001024
1025 return m;
1026}
1027
1028
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001029/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001030static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1031static struct filedescr *find_module(char *, char *, PyObject *,
1032 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001033static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001034
1035/* Load a package and return its module object WITH INCREMENTED
1036 REFERENCE COUNT */
1037
1038static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001039load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001040{
Tim Peters1cd70172004-08-02 03:52:12 +00001041 PyObject *m, *d;
1042 PyObject *file = NULL;
1043 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001044 int err;
1045 char buf[MAXPATHLEN+1];
1046 FILE *fp = NULL;
1047 struct filedescr *fdp;
1048
1049 m = PyImport_AddModule(name);
1050 if (m == NULL)
1051 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001052 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001053 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001054 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001055 d = PyModule_GetDict(m);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001056 file = PyString_FromString(pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001057 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +00001058 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001059 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +00001060 if (path == NULL)
1061 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001062 err = PyDict_SetItemString(d, "__file__", file);
1063 if (err == 0)
1064 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +00001065 if (err != 0)
1066 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001067 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00001068 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001069 if (fdp == NULL) {
1070 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1071 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +00001072 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001073 }
1074 else
1075 m = NULL;
1076 goto cleanup;
1077 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001078 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001079 if (fp != NULL)
1080 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00001081 goto cleanup;
1082
1083 error:
1084 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001085 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001086 Py_XDECREF(path);
1087 Py_XDECREF(file);
1088 return m;
1089}
1090
1091
1092/* Helper to test for built-in module */
1093
1094static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001095is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001096{
1097 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +00001098 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1099 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1100 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001101 return -1;
1102 else
1103 return 1;
1104 }
1105 }
1106 return 0;
1107}
1108
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001109
Just van Rossum52e14d62002-12-30 22:08:05 +00001110/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1111 possibly by fetching it from the path_importer_cache dict. If it
Brett Cannon94b69f62006-09-28 22:10:14 +00001112 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001113 that can handle the path item. Return None if no hook could;
1114 this tells our caller it should fall back to the builtin
1115 import mechanism. Cache the result in path_importer_cache.
1116 Returns a borrowed reference. */
1117
1118static PyObject *
1119get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1120 PyObject *p)
1121{
1122 PyObject *importer;
Martin v. Löwis725507b2006-03-07 12:08:51 +00001123 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001124
1125 /* These conditions are the caller's responsibility: */
1126 assert(PyList_Check(path_hooks));
1127 assert(PyDict_Check(path_importer_cache));
1128
1129 nhooks = PyList_Size(path_hooks);
1130 if (nhooks < 0)
1131 return NULL; /* Shouldn't happen */
1132
1133 importer = PyDict_GetItem(path_importer_cache, p);
1134 if (importer != NULL)
1135 return importer;
1136
1137 /* set path_importer_cache[p] to None to avoid recursion */
1138 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1139 return NULL;
1140
1141 for (j = 0; j < nhooks; j++) {
1142 PyObject *hook = PyList_GetItem(path_hooks, j);
1143 if (hook == NULL)
1144 return NULL;
Georg Brandl684fd0c2006-05-25 19:15:31 +00001145 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
Just van Rossum52e14d62002-12-30 22:08:05 +00001146 if (importer != NULL)
1147 break;
1148
1149 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1150 return NULL;
1151 }
1152 PyErr_Clear();
1153 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001154 if (importer == NULL) {
1155 importer = PyObject_CallFunctionObjArgs(
Nick Coghlan327a39b2007-11-18 11:56:28 +00001156 (PyObject *)&PyNullImporter_Type, p, NULL
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001157 );
1158 if (importer == NULL) {
1159 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1160 PyErr_Clear();
1161 return Py_None;
1162 }
1163 }
1164 }
1165 if (importer != NULL) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001166 int err = PyDict_SetItem(path_importer_cache, p, importer);
1167 Py_DECREF(importer);
1168 if (err != 0)
1169 return NULL;
1170 }
1171 return importer;
1172}
1173
Nick Coghlan327a39b2007-11-18 11:56:28 +00001174PyAPI_FUNC(PyObject *)
1175PyImport_GetImporter(PyObject *path) {
1176 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
1177
1178 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1179 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1180 importer = get_path_importer(path_importer_cache,
1181 path_hooks, path);
1182 }
1183 }
1184 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1185 return importer;
1186}
1187
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001188/* Search the path (default sys.path) for a module. Return the
1189 corresponding filedescr struct, and (via return arguments) the
1190 pathname and an open file. Return NULL if the module is not found. */
1191
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001192#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001193extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001194 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001195#endif
1196
Martin v. Löwis18e16552006-02-15 17:27:45 +00001197static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001198static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001199static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001200
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001201static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001202find_module(char *fullname, char *subname, PyObject *path, char *buf,
1203 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001204{
Martin v. Löwis725507b2006-03-07 12:08:51 +00001205 Py_ssize_t i, npath;
Fred Drake4c82b232000-06-30 16:18:57 +00001206 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001207 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001208 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001209 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001210 PyObject *path_hooks, *path_importer_cache;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001211#ifndef RISCOS
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001212 struct stat statbuf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001213#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001214 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1215 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1216 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001217 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001218#if defined(PYOS_OS2)
1219 size_t saved_len;
1220 size_t saved_namelen;
1221 char *saved_buf = NULL;
1222#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001223 if (p_loader != NULL)
1224 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001225
Just van Rossum52e14d62002-12-30 22:08:05 +00001226 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001227 PyErr_SetString(PyExc_OverflowError,
1228 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001229 return NULL;
1230 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001231 strcpy(name, subname);
1232
1233 /* sys.meta_path import hook */
1234 if (p_loader != NULL) {
1235 PyObject *meta_path;
1236
1237 meta_path = PySys_GetObject("meta_path");
1238 if (meta_path == NULL || !PyList_Check(meta_path)) {
1239 PyErr_SetString(PyExc_ImportError,
1240 "sys.meta_path must be a list of "
1241 "import hooks");
1242 return NULL;
1243 }
1244 Py_INCREF(meta_path); /* zap guard */
1245 npath = PyList_Size(meta_path);
1246 for (i = 0; i < npath; i++) {
1247 PyObject *loader;
1248 PyObject *hook = PyList_GetItem(meta_path, i);
1249 loader = PyObject_CallMethod(hook, "find_module",
1250 "sO", fullname,
1251 path != NULL ?
1252 path : Py_None);
1253 if (loader == NULL) {
1254 Py_DECREF(meta_path);
1255 return NULL; /* true error */
1256 }
1257 if (loader != Py_None) {
1258 /* a loader was found */
1259 *p_loader = loader;
1260 Py_DECREF(meta_path);
1261 return &importhookdescr;
1262 }
1263 Py_DECREF(loader);
1264 }
1265 Py_DECREF(meta_path);
1266 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001267
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001268 if (path != NULL && PyString_Check(path)) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001269 /* The only type of submodule allowed inside a "frozen"
1270 package are other frozen modules or packages. */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001271 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
Guido van Rossum0506a431998-08-11 15:07:39 +00001272 PyErr_SetString(PyExc_ImportError,
1273 "full frozen module name too long");
1274 return NULL;
1275 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001276 strcpy(buf, PyString_AsString(path));
Guido van Rossum0506a431998-08-11 15:07:39 +00001277 strcat(buf, ".");
1278 strcat(buf, name);
1279 strcpy(name, buf);
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001280 if (find_frozen(name) != NULL) {
1281 strcpy(buf, name);
1282 return &fd_frozen;
1283 }
1284 PyErr_Format(PyExc_ImportError,
1285 "No frozen submodule named %.200s", name);
1286 return NULL;
Guido van Rossum0506a431998-08-11 15:07:39 +00001287 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001288 if (path == NULL) {
1289 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001290 strcpy(buf, name);
1291 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001292 }
Greg Ward201baee2001-10-04 14:52:06 +00001293 if ((find_frozen(name)) != NULL) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001294 strcpy(buf, name);
1295 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001296 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001297
Guido van Rossumac279101996-08-22 23:10:58 +00001298#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001299 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1300 if (fp != NULL) {
1301 *p_fp = fp;
1302 return fdp;
1303 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001304#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001305 path = PySys_GetObject("path");
1306 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001307 if (path == NULL || !PyList_Check(path)) {
1308 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001309 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001310 return NULL;
1311 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001312
1313 path_hooks = PySys_GetObject("path_hooks");
1314 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1315 PyErr_SetString(PyExc_ImportError,
1316 "sys.path_hooks must be a list of "
1317 "import hooks");
1318 return NULL;
1319 }
1320 path_importer_cache = PySys_GetObject("path_importer_cache");
1321 if (path_importer_cache == NULL ||
1322 !PyDict_Check(path_importer_cache)) {
1323 PyErr_SetString(PyExc_ImportError,
1324 "sys.path_importer_cache must be a dict");
1325 return NULL;
1326 }
1327
Guido van Rossum79f25d91997-04-29 20:08:16 +00001328 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001329 namelen = strlen(name);
1330 for (i = 0; i < npath; i++) {
Walter Dörwald3430d702002-06-17 10:43:59 +00001331 PyObject *copy = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001332 PyObject *v = PyList_GetItem(path, i);
Neal Norwitz3cb31ac2006-08-13 18:10:47 +00001333 if (!v)
1334 return NULL;
Walter Dörwald3430d702002-06-17 10:43:59 +00001335#ifdef Py_USING_UNICODE
1336 if (PyUnicode_Check(v)) {
1337 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1338 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1339 if (copy == NULL)
1340 return NULL;
1341 v = copy;
1342 }
1343 else
1344#endif
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001345 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001346 continue;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001347 len = PyString_GET_SIZE(v);
Walter Dörwald3430d702002-06-17 10:43:59 +00001348 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1349 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001350 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001351 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001352 strcpy(buf, PyString_AS_STRING(v));
Walter Dörwald3430d702002-06-17 10:43:59 +00001353 if (strlen(buf) != len) {
1354 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001355 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001356 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001357
1358 /* sys.path_hooks import hook */
1359 if (p_loader != NULL) {
1360 PyObject *importer;
1361
1362 importer = get_path_importer(path_importer_cache,
1363 path_hooks, v);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001364 if (importer == NULL) {
1365 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001366 return NULL;
Neal Norwitza4df11d2006-07-06 04:28:59 +00001367 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001368 /* Note: importer is a borrowed reference */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001369 if (importer != Py_None) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001370 PyObject *loader;
1371 loader = PyObject_CallMethod(importer,
1372 "find_module",
1373 "s", fullname);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001374 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001375 if (loader == NULL)
1376 return NULL; /* error */
1377 if (loader != Py_None) {
1378 /* a loader was found */
1379 *p_loader = loader;
1380 return &importhookdescr;
1381 }
1382 Py_DECREF(loader);
Georg Brandlf4ef1162006-05-26 18:03:31 +00001383 continue;
Just van Rossum52e14d62002-12-30 22:08:05 +00001384 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001385 }
Georg Brandlf4ef1162006-05-26 18:03:31 +00001386 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001387
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001388 if (len > 0 && buf[len-1] != SEP
1389#ifdef ALTSEP
1390 && buf[len-1] != ALTSEP
1391#endif
1392 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001393 buf[len++] = SEP;
Guido van Rossum215c3402000-11-13 17:26:32 +00001394 strcpy(buf+len, name);
1395 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001396
1397 /* Check for package import (buf holds a directory name,
1398 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001399#ifdef HAVE_STAT
Walter Dörwald3430d702002-06-17 10:43:59 +00001400 if (stat(buf, &statbuf) == 0 && /* it exists */
1401 S_ISDIR(statbuf.st_mode) && /* it's a directory */
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001402 case_ok(buf, len, namelen, name)) { /* case matches */
1403 if (find_init_module(buf)) { /* and has __init__.py */
1404 Py_XDECREF(copy);
1405 return &fd_package;
1406 }
1407 else {
1408 char warnstr[MAXPATHLEN+80];
1409 sprintf(warnstr, "Not importing directory "
1410 "'%.*s': missing __init__.py",
1411 MAXPATHLEN, buf);
1412 if (PyErr_Warn(PyExc_ImportWarning,
1413 warnstr)) {
1414 Py_XDECREF(copy);
1415 return NULL;
1416 }
1417 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001418 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001419#else
1420 /* XXX How are you going to test for directories? */
Guido van Rossum48a680c2001-03-02 06:34:14 +00001421#ifdef RISCOS
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001422 if (isdir(buf) &&
Walter Dörwald3430d702002-06-17 10:43:59 +00001423 case_ok(buf, len, namelen, name)) {
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001424 if (find_init_module(buf)) {
1425 Py_XDECREF(copy);
1426 return &fd_package;
1427 }
1428 else {
1429 char warnstr[MAXPATHLEN+80];
1430 sprintf(warnstr, "Not importing directory "
1431 "'%.*s': missing __init__.py",
1432 MAXPATHLEN, buf);
1433 if (PyErr_Warn(PyExc_ImportWarning,
1434 warnstr)) {
1435 Py_XDECREF(copy);
1436 return NULL;
1437 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001438 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001439#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001440#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001441#if defined(PYOS_OS2)
1442 /* take a snapshot of the module spec for restoration
1443 * after the 8 character DLL hackery
1444 */
1445 saved_buf = strdup(buf);
1446 saved_len = len;
1447 saved_namelen = namelen;
1448#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001449 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Georg Brandladd36e52007-08-23 18:08:06 +00001450#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001451 /* OS/2 limits DLLs to 8 character names (w/o
1452 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001453 * so if the name is longer than that and its a
1454 * dynamically loaded module we're going to try,
1455 * truncate the name before trying
1456 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001457 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001458 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001459 const struct filedescr *scan;
1460 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001461 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001462 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001463 break;
1464 else
1465 scan++;
1466 }
1467 if (scan->suffix != NULL) {
1468 /* yes, so truncate the name */
1469 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001470 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001471 buf[len] = '\0';
1472 }
1473 }
1474#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001475 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001476 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001477 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001478 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001479 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001480 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001481 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001482 if (fp != NULL) {
1483 if (case_ok(buf, len, namelen, name))
1484 break;
1485 else { /* continue search */
1486 fclose(fp);
1487 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001488 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001489 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001490#if defined(PYOS_OS2)
1491 /* restore the saved snapshot */
1492 strcpy(buf, saved_buf);
1493 len = saved_len;
1494 namelen = saved_namelen;
1495#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001496 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001497#if defined(PYOS_OS2)
1498 /* don't need/want the module name snapshot anymore */
1499 if (saved_buf)
1500 {
1501 free(saved_buf);
1502 saved_buf = NULL;
1503 }
1504#endif
Walter Dörwald3430d702002-06-17 10:43:59 +00001505 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001506 if (fp != NULL)
1507 break;
1508 }
1509 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001510 PyErr_Format(PyExc_ImportError,
1511 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001512 return NULL;
1513 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001514 *p_fp = fp;
1515 return fdp;
1516}
1517
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001518/* Helpers for main.c
1519 * Find the source file corresponding to a named module
1520 */
1521struct filedescr *
1522_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1523 size_t buflen, FILE **p_fp, PyObject **p_loader)
1524{
1525 return find_module((char *) name, (char *) name, path,
1526 buf, buflen, p_fp, p_loader);
1527}
1528
1529PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1530{
1531 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1532}
1533
Martin v. Löwis18e16552006-02-15 17:27:45 +00001534/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001535 * The arguments here are tricky, best shown by example:
1536 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1537 * ^ ^ ^ ^
1538 * |--------------------- buf ---------------------|
1539 * |------------------- len ------------------|
1540 * |------ name -------|
1541 * |----- namelen -----|
1542 * buf is the full path, but len only counts up to (& exclusive of) the
1543 * extension. name is the module name, also exclusive of extension.
1544 *
1545 * We've already done a successful stat() or fopen() on buf, so know that
1546 * there's some match, possibly case-insensitive.
1547 *
Tim Peters50d8d372001-02-28 05:34:27 +00001548 * case_ok() is to return 1 if there's a case-sensitive match for
1549 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1550 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001551 *
Tim Peters50d8d372001-02-28 05:34:27 +00001552 * case_ok() is used to implement case-sensitive import semantics even
1553 * on platforms with case-insensitive filesystems. It's trivial to implement
1554 * for case-sensitive filesystems. It's pretty much a cross-platform
1555 * nightmare for systems with case-insensitive filesystems.
1556 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001557
Tim Peters50d8d372001-02-28 05:34:27 +00001558/* First we may need a pile of platform-specific header files; the sequence
1559 * of #if's here should match the sequence in the body of case_ok().
1560 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001561#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001562#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001563
Tim Peters50d8d372001-02-28 05:34:27 +00001564#elif defined(DJGPP)
1565#include <dir.h>
1566
Jason Tishler7961aa62005-05-20 00:56:54 +00001567#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001568#include <sys/types.h>
1569#include <dirent.h>
1570
Andrew MacIntyred9400542002-02-26 11:41:34 +00001571#elif defined(PYOS_OS2)
1572#define INCL_DOS
1573#define INCL_DOSERRORS
1574#define INCL_NOPMAPI
1575#include <os2.h>
1576
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001577#elif defined(RISCOS)
1578#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001579#endif
1580
Guido van Rossum0980bd91998-02-13 17:18:36 +00001581static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001582case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001583{
Tim Peters50d8d372001-02-28 05:34:27 +00001584/* Pick a platform-specific implementation; the sequence of #if's here should
1585 * match the sequence just above.
1586 */
1587
Jason Tishler7961aa62005-05-20 00:56:54 +00001588/* MS_WINDOWS */
1589#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001590 WIN32_FIND_DATA data;
1591 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001592
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001593 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001594 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001595
Guido van Rossum0980bd91998-02-13 17:18:36 +00001596 h = FindFirstFile(buf, &data);
1597 if (h == INVALID_HANDLE_VALUE) {
1598 PyErr_Format(PyExc_NameError,
1599 "Can't find file for module %.100s\n(filename %.300s)",
1600 name, buf);
1601 return 0;
1602 }
1603 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001604 return strncmp(data.cFileName, name, namelen) == 0;
1605
1606/* DJGPP */
1607#elif defined(DJGPP)
1608 struct ffblk ffblk;
1609 int done;
1610
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001611 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001612 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001613
1614 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1615 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001616 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001617 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001618 name, buf);
1619 return 0;
1620 }
Tim Peters50d8d372001-02-28 05:34:27 +00001621 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001622
Jason Tishler7961aa62005-05-20 00:56:54 +00001623/* new-fangled macintosh (macosx) or Cygwin */
1624#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001625 DIR *dirp;
1626 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001627 char dirname[MAXPATHLEN + 1];
1628 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001629
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001630 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001631 return 1;
1632
Tim Petersd1e87a82001-03-01 18:12:00 +00001633 /* Copy the dir component into dirname; substitute "." if empty */
1634 if (dirlen <= 0) {
1635 dirname[0] = '.';
1636 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001637 }
1638 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001639 assert(dirlen <= MAXPATHLEN);
1640 memcpy(dirname, buf, dirlen);
1641 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001642 }
1643 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001644 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001645 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001646 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001647 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001648 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001649#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001650 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001651#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001652 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001653#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001654 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001655 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001656 (void)closedir(dirp);
1657 return 1; /* Found */
1658 }
1659 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001660 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001661 }
Tim Peters430f5d42001-03-01 01:30:56 +00001662 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001663
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001664/* RISC OS */
1665#elif defined(RISCOS)
1666 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1667 char buf2[MAXPATHLEN+2];
1668 char *nameWithExt = buf+len-namelen;
1669 int canonlen;
1670 os_error *e;
1671
1672 if (Py_GETENV("PYTHONCASEOK") != NULL)
1673 return 1;
1674
1675 /* workaround:
1676 append wildcard, otherwise case of filename wouldn't be touched */
1677 strcpy(buf2, buf);
1678 strcat(buf2, "*");
1679
1680 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1681 canonlen = MAXPATHLEN+1-canonlen;
1682 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1683 return 0;
1684 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1685 return 1; /* match */
1686
1687 return 0;
1688
Andrew MacIntyred9400542002-02-26 11:41:34 +00001689/* OS/2 */
1690#elif defined(PYOS_OS2)
1691 HDIR hdir = 1;
1692 ULONG srchcnt = 1;
1693 FILEFINDBUF3 ffbuf;
1694 APIRET rc;
1695
Georg Brandlaed6c662008-01-07 17:25:53 +00001696 if (Py_GETENV("PYTHONCASEOK") != NULL)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001697 return 1;
1698
1699 rc = DosFindFirst(buf,
1700 &hdir,
1701 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1702 &ffbuf, sizeof(ffbuf),
1703 &srchcnt,
1704 FIL_STANDARD);
1705 if (rc != NO_ERROR)
1706 return 0;
1707 return strncmp(ffbuf.achName, name, namelen) == 0;
1708
Tim Peters50d8d372001-02-28 05:34:27 +00001709/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1710#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001711 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001712
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001713#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001714}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001715
Guido van Rossum0980bd91998-02-13 17:18:36 +00001716
Guido van Rossum197346f1997-10-31 18:38:52 +00001717#ifdef HAVE_STAT
1718/* Helper to look for __init__.py or __init__.py[co] in potential package */
1719static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001720find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001721{
Tim Peters0f9431f2001-07-05 03:47:53 +00001722 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001723 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001724 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001725 struct stat statbuf;
1726
Tim Peters0f9431f2001-07-05 03:47:53 +00001727/* For calling case_ok(buf, len, namelen, name):
1728 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1729 * ^ ^ ^ ^
1730 * |--------------------- buf ---------------------|
1731 * |------------------- len ------------------|
1732 * |------ name -------|
1733 * |----- namelen -----|
1734 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001735 if (save_len + 13 >= MAXPATHLEN)
1736 return 0;
1737 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001738 pname = buf + i;
1739 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001740 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001741 if (case_ok(buf,
1742 save_len + 9, /* len("/__init__") */
1743 8, /* len("__init__") */
1744 pname)) {
1745 buf[save_len] = '\0';
1746 return 1;
1747 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001748 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001749 i += strlen(pname);
1750 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001751 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001752 if (case_ok(buf,
1753 save_len + 9, /* len("/__init__") */
1754 8, /* len("__init__") */
1755 pname)) {
1756 buf[save_len] = '\0';
1757 return 1;
1758 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001759 }
1760 buf[save_len] = '\0';
1761 return 0;
1762}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001763
1764#else
1765
1766#ifdef RISCOS
1767static int
1768find_init_module(buf)
1769 char *buf;
1770{
1771 int save_len = strlen(buf);
1772 int i = save_len;
1773
1774 if (save_len + 13 >= MAXPATHLEN)
1775 return 0;
1776 buf[i++] = SEP;
1777 strcpy(buf+i, "__init__/py");
1778 if (isfile(buf)) {
1779 buf[save_len] = '\0';
1780 return 1;
1781 }
1782
1783 if (Py_OptimizeFlag)
1784 strcpy(buf+i, "o");
1785 else
1786 strcpy(buf+i, "c");
1787 if (isfile(buf)) {
1788 buf[save_len] = '\0';
1789 return 1;
1790 }
1791 buf[save_len] = '\0';
1792 return 0;
1793}
1794#endif /*RISCOS*/
1795
Guido van Rossum197346f1997-10-31 18:38:52 +00001796#endif /* HAVE_STAT */
1797
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001798
Tim Petersdbd9ba62000-07-09 03:09:57 +00001799static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001800
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001801/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001802 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001803
Guido van Rossum79f25d91997-04-29 20:08:16 +00001804static PyObject *
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001805load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001806{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001807 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001808 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001809 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001810
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001811 /* First check that there's an open file (if we need one) */
1812 switch (type) {
1813 case PY_SOURCE:
1814 case PY_COMPILED:
1815 if (fp == NULL) {
1816 PyErr_Format(PyExc_ValueError,
1817 "file object required for import (type code %d)",
1818 type);
1819 return NULL;
1820 }
1821 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001822
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001823 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001824
1825 case PY_SOURCE:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001826 m = load_source_module(name, pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001827 break;
1828
1829 case PY_COMPILED:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001830 m = load_compiled_module(name, pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001831 break;
1832
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001833#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001834 case C_EXTENSION:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001835 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001836 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001837#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001838
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001839 case PKG_DIRECTORY:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001840 m = load_package(name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001841 break;
1842
1843 case C_BUILTIN:
1844 case PY_FROZEN:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001845 if (pathname != NULL && pathname[0] != '\0')
1846 name = pathname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001847 if (type == C_BUILTIN)
1848 err = init_builtin(name);
1849 else
1850 err = PyImport_ImportFrozenModule(name);
1851 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001852 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001853 if (err == 0) {
1854 PyErr_Format(PyExc_ImportError,
1855 "Purported %s module %.200s not found",
1856 type == C_BUILTIN ?
1857 "builtin" : "frozen",
1858 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001859 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001860 }
1861 modules = PyImport_GetModuleDict();
1862 m = PyDict_GetItemString(modules, name);
1863 if (m == NULL) {
1864 PyErr_Format(
1865 PyExc_ImportError,
1866 "%s module %.200s not properly initialized",
1867 type == C_BUILTIN ?
1868 "builtin" : "frozen",
1869 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001870 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001871 }
1872 Py_INCREF(m);
1873 break;
1874
Just van Rossum52e14d62002-12-30 22:08:05 +00001875 case IMP_HOOK: {
1876 if (loader == NULL) {
1877 PyErr_SetString(PyExc_ImportError,
1878 "import hook without loader");
1879 return NULL;
1880 }
1881 m = PyObject_CallMethod(loader, "load_module", "s", name);
1882 break;
1883 }
1884
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001885 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001886 PyErr_Format(PyExc_ImportError,
1887 "Don't know how to import %.200s (type code %d)",
1888 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001889 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001890
1891 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001892
1893 return m;
1894}
1895
1896
1897/* Initialize a built-in module.
Brett Cannon5a9aa4f2006-10-03 21:58:55 +00001898 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001899 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001900
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001901static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001902init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001903{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001904 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001905
Greg Ward201baee2001-10-04 14:52:06 +00001906 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001907 return 1;
1908
Guido van Rossum771c6c81997-10-31 18:37:24 +00001909 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001910 if (strcmp(name, p->name) == 0) {
1911 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001912 PyErr_Format(PyExc_ImportError,
1913 "Cannot re-init internal module %.200s",
1914 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001915 return -1;
1916 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001917 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001918 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001919 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001920 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001921 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001922 if (_PyImport_FixupExtension(name, name) == NULL)
1923 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001924 return 1;
1925 }
1926 }
1927 return 0;
1928}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001929
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001930
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001931/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001932
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001933static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001934find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001935{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001936 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001937
Guido van Rossum79f25d91997-04-29 20:08:16 +00001938 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001939 if (p->name == NULL)
1940 return NULL;
1941 if (strcmp(p->name, name) == 0)
1942 break;
1943 }
1944 return p;
1945}
1946
Guido van Rossum79f25d91997-04-29 20:08:16 +00001947static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001948get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001949{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001950 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001951 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001952
1953 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001954 PyErr_Format(PyExc_ImportError,
1955 "No such frozen object named %.200s",
1956 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001957 return NULL;
1958 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001959 if (p->code == NULL) {
1960 PyErr_Format(PyExc_ImportError,
1961 "Excluded frozen object named %.200s",
1962 name);
1963 return NULL;
1964 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001965 size = p->size;
1966 if (size < 0)
1967 size = -size;
1968 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001969}
1970
1971/* Initialize a frozen module.
1972 Return 1 for succes, 0 if the module is not found, and -1 with
1973 an exception set if the initialization failed.
1974 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001975
1976int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001977PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001978{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001979 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001980 PyObject *co;
1981 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001982 int ispackage;
1983 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001984
1985 if (p == NULL)
1986 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001987 if (p->code == NULL) {
1988 PyErr_Format(PyExc_ImportError,
1989 "Excluded frozen object named %.200s",
1990 name);
1991 return -1;
1992 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001993 size = p->size;
1994 ispackage = (size < 0);
1995 if (ispackage)
1996 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001997 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001998 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001999 name, ispackage ? " package" : "");
2000 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002001 if (co == NULL)
2002 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002003 if (!PyCode_Check(co)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002004 PyErr_Format(PyExc_TypeError,
2005 "frozen object %.200s is not a code object",
2006 name);
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002007 goto err_return;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002008 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00002009 if (ispackage) {
2010 /* Set __path__ to the package name */
2011 PyObject *d, *s;
2012 int err;
2013 m = PyImport_AddModule(name);
2014 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002015 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002016 d = PyModule_GetDict(m);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002017 s = PyString_InternFromString(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00002018 if (s == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002019 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002020 err = PyDict_SetItemString(d, "__path__", s);
2021 Py_DECREF(s);
2022 if (err != 0)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002023 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002024 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00002025 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002026 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002027 goto err_return;
2028 Py_DECREF(co);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002029 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002030 return 1;
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002031err_return:
2032 Py_DECREF(co);
2033 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002034}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002035
2036
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002037/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002038 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002039
Guido van Rossum79f25d91997-04-29 20:08:16 +00002040PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002041PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002042{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002043 PyObject *pname;
2044 PyObject *result;
2045
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002046 pname = PyString_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00002047 if (pname == NULL)
2048 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002049 result = PyImport_Import(pname);
2050 Py_DECREF(pname);
2051 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002052}
2053
Christian Heimes000a0742008-01-03 22:16:32 +00002054/* Import a module without blocking
2055 *
2056 * At first it tries to fetch the module from sys.modules. If the module was
2057 * never loaded before it loads it with PyImport_ImportModule() unless another
2058 * thread holds the import lock. In the latter case the function raises an
2059 * ImportError instead of blocking.
2060 *
2061 * Returns the module object with incremented ref count.
2062 */
2063PyObject *
2064PyImport_ImportModuleNoBlock(const char *name)
2065{
2066 PyObject *result;
2067 PyObject *modules;
2068 long me;
2069
2070 /* Try to get the module from sys.modules[name] */
2071 modules = PyImport_GetModuleDict();
2072 if (modules == NULL)
2073 return NULL;
2074
2075 result = PyDict_GetItemString(modules, name);
2076 if (result != NULL) {
2077 Py_INCREF(result);
2078 return result;
2079 }
2080 else {
2081 PyErr_Clear();
2082 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002083#ifdef WITH_THREAD
Christian Heimes000a0742008-01-03 22:16:32 +00002084 /* check the import lock
2085 * me might be -1 but I ignore the error here, the lock function
2086 * takes care of the problem */
2087 me = PyThread_get_thread_ident();
2088 if (import_lock_thread == -1 || import_lock_thread == me) {
2089 /* no thread or me is holding the lock */
2090 return PyImport_ImportModule(name);
2091 }
2092 else {
2093 PyErr_Format(PyExc_ImportError,
2094 "Failed to import %.200s because the import lock"
2095 "is held by another thread.",
2096 name);
2097 return NULL;
2098 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002099#else
2100 return PyImport_ImportModule(name);
2101#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002102}
2103
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002104/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002105static PyObject *get_parent(PyObject *globals, char *buf,
2106 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002107static PyObject *load_next(PyObject *mod, PyObject *altmod,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002108 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002109static int mark_miss(char *name);
2110static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002111 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002112static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002113
2114/* The Magnum Opus of dotted-name import :-) */
2115
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002116static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002117import_module_level(char *name, PyObject *globals, PyObject *locals,
2118 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002119{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002120 char buf[MAXPATHLEN+1];
Martin v. Löwis18e16552006-02-15 17:27:45 +00002121 Py_ssize_t buflen = 0;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002122 PyObject *parent, *head, *next, *tail;
2123
Christian Heimes3403f152008-01-09 19:56:33 +00002124 if (strchr(name, '/') != NULL
2125#ifdef MS_WINDOWS
2126 || strchr(name, '\\') != NULL
2127#endif
2128 ) {
2129 PyErr_SetString(PyExc_ImportError,
2130 "Import by filename is not supported.");
2131 return NULL;
2132 }
2133
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002134 parent = get_parent(globals, buf, &buflen, level);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002135 if (parent == NULL)
2136 return NULL;
2137
2138 head = load_next(parent, Py_None, &name, buf, &buflen);
2139 if (head == NULL)
2140 return NULL;
2141
2142 tail = head;
2143 Py_INCREF(tail);
2144 while (name) {
2145 next = load_next(tail, tail, &name, buf, &buflen);
2146 Py_DECREF(tail);
2147 if (next == NULL) {
2148 Py_DECREF(head);
2149 return NULL;
2150 }
2151 tail = next;
2152 }
Thomas Wouters8ddab272006-04-04 16:17:02 +00002153 if (tail == Py_None) {
2154 /* If tail is Py_None, both get_parent and load_next found
2155 an empty module name: someone called __import__("") or
2156 doctored faulty bytecode */
Thomas Wouters4bdaa272006-04-05 13:39:37 +00002157 Py_DECREF(tail);
2158 Py_DECREF(head);
Thomas Wouters8ddab272006-04-04 16:17:02 +00002159 PyErr_SetString(PyExc_ValueError,
2160 "Empty module name");
2161 return NULL;
2162 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002163
2164 if (fromlist != NULL) {
2165 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2166 fromlist = NULL;
2167 }
2168
2169 if (fromlist == NULL) {
2170 Py_DECREF(tail);
2171 return head;
2172 }
2173
2174 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002175 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002176 Py_DECREF(tail);
2177 return NULL;
2178 }
2179
2180 return tail;
2181}
2182
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002183PyObject *
2184PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2185 PyObject *fromlist, int level)
2186{
2187 PyObject *result;
2188 lock_import();
2189 result = import_module_level(name, globals, locals, fromlist, level);
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002190 if (unlock_import() < 0) {
2191 Py_XDECREF(result);
2192 PyErr_SetString(PyExc_RuntimeError,
2193 "not holding the import lock");
2194 return NULL;
2195 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002196 return result;
2197}
2198
Fred Drake87590902004-05-28 20:21:36 +00002199/* Return the package that an import is being performed in. If globals comes
2200 from the module foo.bar.bat (not itself a package), this returns the
2201 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Georg Brandl5f6861d2006-05-28 21:57:35 +00002202 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002203
2204 The *name* of the returned package is returned in buf, with the length of
2205 the name in *p_buflen.
2206
2207 If globals doesn't come from a package or a module in a package, or a
2208 corresponding entry is not found in sys.modules, Py_None is returned.
2209*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002210static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002211get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002212{
2213 static PyObject *namestr = NULL;
2214 static PyObject *pathstr = NULL;
Nick Coghlanef01d822007-12-03 12:55:17 +00002215 static PyObject *pkgstr = NULL;
2216 PyObject *pkgname, *modname, *modpath, *modules, *parent;
Nick Coghlanb028f502008-07-13 14:52:36 +00002217 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002218
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002219 if (globals == NULL || !PyDict_Check(globals) || !level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002220 return Py_None;
2221
2222 if (namestr == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002223 namestr = PyString_InternFromString("__name__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002224 if (namestr == NULL)
2225 return NULL;
2226 }
2227 if (pathstr == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002228 pathstr = PyString_InternFromString("__path__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002229 if (pathstr == NULL)
2230 return NULL;
2231 }
Nick Coghlanef01d822007-12-03 12:55:17 +00002232 if (pkgstr == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002233 pkgstr = PyString_InternFromString("__package__");
Nick Coghlanef01d822007-12-03 12:55:17 +00002234 if (pkgstr == NULL)
2235 return NULL;
2236 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002237
2238 *buf = '\0';
2239 *p_buflen = 0;
Nick Coghlanef01d822007-12-03 12:55:17 +00002240 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002241
Nick Coghlanef01d822007-12-03 12:55:17 +00002242 if ((pkgname != NULL) && (pkgname != Py_None)) {
2243 /* __package__ is set, so use it */
2244 Py_ssize_t len;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002245 if (!PyString_Check(pkgname)) {
Nick Coghlanef01d822007-12-03 12:55:17 +00002246 PyErr_SetString(PyExc_ValueError,
2247 "__package__ set to non-string");
2248 return NULL;
2249 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002250 len = PyString_GET_SIZE(pkgname);
Nick Coghlanef01d822007-12-03 12:55:17 +00002251 if (len == 0) {
2252 if (level > 0) {
2253 PyErr_SetString(PyExc_ValueError,
2254 "Attempted relative import in non-package");
2255 return NULL;
2256 }
2257 return Py_None;
2258 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002259 if (len > MAXPATHLEN) {
2260 PyErr_SetString(PyExc_ValueError,
Nick Coghlanef01d822007-12-03 12:55:17 +00002261 "Package name too long");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002262 return NULL;
2263 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002264 strcpy(buf, PyString_AS_STRING(pkgname));
Nick Coghlanef01d822007-12-03 12:55:17 +00002265 } else {
2266 /* __package__ not set, so figure it out and set it */
2267 modname = PyDict_GetItem(globals, namestr);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002268 if (modname == NULL || !PyString_Check(modname))
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002269 return Py_None;
Nick Coghlanef01d822007-12-03 12:55:17 +00002270
2271 modpath = PyDict_GetItem(globals, pathstr);
2272 if (modpath != NULL) {
2273 /* __path__ is set, so modname is already the package name */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002274 Py_ssize_t len = PyString_GET_SIZE(modname);
Nick Coghlanef01d822007-12-03 12:55:17 +00002275 int error;
2276 if (len > MAXPATHLEN) {
2277 PyErr_SetString(PyExc_ValueError,
2278 "Module name too long");
2279 return NULL;
2280 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002281 strcpy(buf, PyString_AS_STRING(modname));
Nick Coghlanef01d822007-12-03 12:55:17 +00002282 error = PyDict_SetItem(globals, pkgstr, modname);
2283 if (error) {
2284 PyErr_SetString(PyExc_ValueError,
2285 "Could not set __package__");
2286 return NULL;
2287 }
2288 } else {
2289 /* Normal module, so work out the package name if any */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002290 char *start = PyString_AS_STRING(modname);
Nick Coghlanef01d822007-12-03 12:55:17 +00002291 char *lastdot = strrchr(start, '.');
2292 size_t len;
2293 int error;
2294 if (lastdot == NULL && level > 0) {
2295 PyErr_SetString(PyExc_ValueError,
2296 "Attempted relative import in non-package");
2297 return NULL;
2298 }
2299 if (lastdot == NULL) {
2300 error = PyDict_SetItem(globals, pkgstr, Py_None);
2301 if (error) {
2302 PyErr_SetString(PyExc_ValueError,
2303 "Could not set __package__");
2304 return NULL;
2305 }
2306 return Py_None;
2307 }
2308 len = lastdot - start;
2309 if (len >= MAXPATHLEN) {
2310 PyErr_SetString(PyExc_ValueError,
2311 "Module name too long");
2312 return NULL;
2313 }
2314 strncpy(buf, start, len);
2315 buf[len] = '\0';
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002316 pkgname = PyString_FromString(buf);
Nick Coghlanef01d822007-12-03 12:55:17 +00002317 if (pkgname == NULL) {
2318 return NULL;
2319 }
2320 error = PyDict_SetItem(globals, pkgstr, pkgname);
2321 Py_DECREF(pkgname);
2322 if (error) {
2323 PyErr_SetString(PyExc_ValueError,
2324 "Could not set __package__");
2325 return NULL;
2326 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002327 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002328 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002329 while (--level > 0) {
2330 char *dot = strrchr(buf, '.');
2331 if (dot == NULL) {
2332 PyErr_SetString(PyExc_ValueError,
Georg Brandl98775df2006-09-06 06:09:31 +00002333 "Attempted relative import beyond "
2334 "toplevel package");
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002335 return NULL;
2336 }
2337 *dot = '\0';
2338 }
2339 *p_buflen = strlen(buf);
2340
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002341 modules = PyImport_GetModuleDict();
2342 parent = PyDict_GetItemString(modules, buf);
Nick Coghlanb028f502008-07-13 14:52:36 +00002343 if (parent == NULL) {
2344 if (orig_level < 1) {
2345 PyObject *err_msg = PyString_FromFormat(
2346 "Parent module '%.200s' not found "
2347 "while handling absolute import", buf);
2348 if (err_msg == NULL) {
2349 return NULL;
2350 }
2351 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2352 PyString_AsString(err_msg), 1)) {
2353 *buf = '\0';
2354 *p_buflen = 0;
2355 parent = Py_None;
2356 }
2357 Py_DECREF(err_msg);
2358 } else {
2359 PyErr_Format(PyExc_SystemError,
2360 "Parent module '%.200s' not loaded, "
2361 "cannot perform relative import", buf);
2362 }
2363 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002364 return parent;
2365 /* We expect, but can't guarantee, if parent != None, that:
2366 - parent.__name__ == buf
2367 - parent.__dict__ is globals
2368 If this is violated... Who cares? */
2369}
2370
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002371/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002372static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002373load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002374 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002375{
2376 char *name = *p_name;
2377 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002378 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002379 char *p;
2380 PyObject *result;
2381
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002382 if (strlen(name) == 0) {
Thomas Wouters8ddab272006-04-04 16:17:02 +00002383 /* completely empty module name should only happen in
2384 'from . import' (or '__import__("")')*/
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002385 Py_INCREF(mod);
2386 *p_name = NULL;
2387 return mod;
2388 }
2389
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002390 if (dot == NULL) {
2391 *p_name = NULL;
2392 len = strlen(name);
2393 }
2394 else {
2395 *p_name = dot+1;
2396 len = dot-name;
2397 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002398 if (len == 0) {
2399 PyErr_SetString(PyExc_ValueError,
2400 "Empty module name");
2401 return NULL;
2402 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002403
2404 p = buf + *p_buflen;
2405 if (p != buf)
2406 *p++ = '.';
2407 if (p+len-buf >= MAXPATHLEN) {
2408 PyErr_SetString(PyExc_ValueError,
2409 "Module name too long");
2410 return NULL;
2411 }
2412 strncpy(p, name, len);
2413 p[len] = '\0';
2414 *p_buflen = p+len-buf;
2415
2416 result = import_submodule(mod, p, buf);
2417 if (result == Py_None && altmod != mod) {
2418 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002419 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002420 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002421 if (result != NULL && result != Py_None) {
2422 if (mark_miss(buf) != 0) {
2423 Py_DECREF(result);
2424 return NULL;
2425 }
2426 strncpy(buf, name, len);
2427 buf[len] = '\0';
2428 *p_buflen = len;
2429 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002430 }
2431 if (result == NULL)
2432 return NULL;
2433
2434 if (result == Py_None) {
2435 Py_DECREF(result);
2436 PyErr_Format(PyExc_ImportError,
2437 "No module named %.200s", name);
2438 return NULL;
2439 }
2440
2441 return result;
2442}
2443
2444static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002445mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002446{
2447 PyObject *modules = PyImport_GetModuleDict();
2448 return PyDict_SetItemString(modules, name, Py_None);
2449}
2450
2451static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002452ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002453 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002454{
2455 int i;
2456
2457 if (!PyObject_HasAttrString(mod, "__path__"))
2458 return 1;
2459
2460 for (i = 0; ; i++) {
2461 PyObject *item = PySequence_GetItem(fromlist, i);
2462 int hasit;
2463 if (item == NULL) {
2464 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2465 PyErr_Clear();
2466 return 1;
2467 }
2468 return 0;
2469 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002470 if (!PyString_Check(item)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002471 PyErr_SetString(PyExc_TypeError,
2472 "Item in ``from list'' not a string");
2473 Py_DECREF(item);
2474 return 0;
2475 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002476 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002477 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002478 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002479 /* See if the package defines __all__ */
2480 if (recursive)
2481 continue; /* Avoid endless recursion */
2482 all = PyObject_GetAttrString(mod, "__all__");
2483 if (all == NULL)
2484 PyErr_Clear();
2485 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002486 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002487 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002488 if (!ret)
2489 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002490 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002491 continue;
2492 }
2493 hasit = PyObject_HasAttr(mod, item);
2494 if (!hasit) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002495 char *subname = PyString_AS_STRING(item);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002496 PyObject *submod;
2497 char *p;
2498 if (buflen + strlen(subname) >= MAXPATHLEN) {
2499 PyErr_SetString(PyExc_ValueError,
2500 "Module name too long");
2501 Py_DECREF(item);
2502 return 0;
2503 }
2504 p = buf + buflen;
2505 *p++ = '.';
2506 strcpy(p, subname);
2507 submod = import_submodule(mod, subname, buf);
2508 Py_XDECREF(submod);
2509 if (submod == NULL) {
2510 Py_DECREF(item);
2511 return 0;
2512 }
2513 }
2514 Py_DECREF(item);
2515 }
2516
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002517 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002518}
2519
Neil Schemenauer00b09662003-06-16 21:03:07 +00002520static int
2521add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2522 PyObject *modules)
2523{
2524 if (mod == Py_None)
2525 return 1;
2526 /* Irrespective of the success of this load, make a
2527 reference to it in the parent package module. A copy gets
2528 saved in the modules dictionary under the full name, so get a
2529 reference from there, if need be. (The exception is when the
2530 load failed with a SyntaxError -- then there's no trace in
2531 sys.modules. In that case, of course, do nothing extra.) */
2532 if (submod == NULL) {
2533 submod = PyDict_GetItemString(modules, fullname);
2534 if (submod == NULL)
2535 return 1;
2536 }
2537 if (PyModule_Check(mod)) {
2538 /* We can't use setattr here since it can give a
2539 * spurious warning if the submodule name shadows a
2540 * builtin name */
2541 PyObject *dict = PyModule_GetDict(mod);
2542 if (!dict)
2543 return 0;
2544 if (PyDict_SetItemString(dict, subname, submod) < 0)
2545 return 0;
2546 }
2547 else {
2548 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2549 return 0;
2550 }
2551 return 1;
2552}
2553
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002554static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002555import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002556{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002557 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002558 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002559
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002560 /* Require:
2561 if mod == None: subname == fullname
2562 else: mod.__name__ + "." + subname == fullname
2563 */
2564
Tim Peters50d8d372001-02-28 05:34:27 +00002565 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002566 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002567 }
2568 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002569 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002570 char buf[MAXPATHLEN+1];
2571 struct filedescr *fdp;
2572 FILE *fp = NULL;
2573
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002574 if (mod == Py_None)
2575 path = NULL;
2576 else {
2577 path = PyObject_GetAttrString(mod, "__path__");
2578 if (path == NULL) {
2579 PyErr_Clear();
2580 Py_INCREF(Py_None);
2581 return Py_None;
2582 }
2583 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002584
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002585 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002586 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2587 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002588 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002589 if (fdp == NULL) {
2590 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2591 return NULL;
2592 PyErr_Clear();
2593 Py_INCREF(Py_None);
2594 return Py_None;
2595 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002596 m = load_module(fullname, fp, buf, fdp->type, loader);
2597 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002598 if (fp)
2599 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002600 if (!add_submodule(mod, m, fullname, subname, modules)) {
2601 Py_XDECREF(m);
2602 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002603 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002604 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002605
2606 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002607}
2608
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002609
2610/* Re-import a module of any kind and return its module object, WITH
2611 INCREMENTED REFERENCE COUNT */
2612
Guido van Rossum79f25d91997-04-29 20:08:16 +00002613PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002614PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002615{
Collin Winter47c52a82007-03-13 23:02:15 +00002616 PyInterpreterState *interp = PyThreadState_Get()->interp;
2617 PyObject *modules_reloading = interp->modules_reloading;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002618 PyObject *modules = PyImport_GetModuleDict();
Collin Winter276887b2007-03-12 16:11:39 +00002619 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002620 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002621 char buf[MAXPATHLEN+1];
2622 struct filedescr *fdp;
2623 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002624 PyObject *newm;
Collin Winter47c52a82007-03-13 23:02:15 +00002625
2626 if (modules_reloading == NULL) {
2627 Py_FatalError("PyImport_ReloadModule: "
Neal Norwitz2fca81c2007-05-30 04:53:41 +00002628 "no modules_reloading dictionary!");
Collin Winter47c52a82007-03-13 23:02:15 +00002629 return NULL;
2630 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002631
Guido van Rossum79f25d91997-04-29 20:08:16 +00002632 if (m == NULL || !PyModule_Check(m)) {
2633 PyErr_SetString(PyExc_TypeError,
2634 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002635 return NULL;
2636 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002637 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002638 if (name == NULL)
2639 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002640 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002641 PyErr_Format(PyExc_ImportError,
2642 "reload(): module %.200s not in sys.modules",
2643 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002644 return NULL;
2645 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002646 existing_m = PyDict_GetItemString(modules_reloading, name);
2647 if (existing_m != NULL) {
2648 /* Due to a recursive reload, this module is already
2649 being reloaded. */
2650 Py_INCREF(existing_m);
2651 return existing_m;
Collin Winter276887b2007-03-12 16:11:39 +00002652 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002653 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2654 return NULL;
Collin Winter276887b2007-03-12 16:11:39 +00002655
Guido van Rossum222ef561997-09-06 19:41:09 +00002656 subname = strrchr(name, '.');
2657 if (subname == NULL)
2658 subname = name;
2659 else {
2660 PyObject *parentname, *parent;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002661 parentname = PyString_FromStringAndSize(name, (subname-name));
Collin Winter276887b2007-03-12 16:11:39 +00002662 if (parentname == NULL) {
2663 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002664 return NULL;
Neal Norwitz75c7c802007-03-13 05:31:38 +00002665 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002666 parent = PyDict_GetItem(modules, parentname);
2667 if (parent == NULL) {
2668 PyErr_Format(PyExc_ImportError,
2669 "reload(): parent %.200s not in sys.modules",
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002670 PyString_AS_STRING(parentname));
Georg Brandl0c55f292005-09-14 06:56:20 +00002671 Py_DECREF(parentname);
Neal Norwitz2fca81c2007-05-30 04:53:41 +00002672 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002673 return NULL;
2674 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002675 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002676 subname++;
2677 path = PyObject_GetAttrString(parent, "__path__");
2678 if (path == NULL)
2679 PyErr_Clear();
2680 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002681 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002682 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002683 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002684
2685 if (fdp == NULL) {
2686 Py_XDECREF(loader);
Collin Winter276887b2007-03-12 16:11:39 +00002687 imp_modules_reloading_clear();
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002688 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002689 }
2690
2691 newm = load_module(name, fp, buf, fdp->type, loader);
2692 Py_XDECREF(loader);
2693
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002694 if (fp)
2695 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002696 if (newm == NULL) {
2697 /* load_module probably removed name from modules because of
2698 * the error. Put back the original module object. We're
2699 * going to return NULL in this case regardless of whether
2700 * replacing name succeeds, so the return value is ignored.
2701 */
2702 PyDict_SetItemString(modules, name, m);
2703 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002704 imp_modules_reloading_clear();
Tim Peters1cd70172004-08-02 03:52:12 +00002705 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002706}
2707
2708
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002709/* Higher-level import emulator which emulates the "import" statement
2710 more accurately -- it invokes the __import__() function from the
2711 builtins of the current globals. This means that the import is
2712 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002713 environment, e.g. by "rexec".
2714 A dummy list ["__doc__"] is passed as the 4th argument so that
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002715 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00002716 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002717
2718PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002719PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002720{
2721 static PyObject *silly_list = NULL;
2722 static PyObject *builtins_str = NULL;
2723 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002724 PyObject *globals = NULL;
2725 PyObject *import = NULL;
2726 PyObject *builtins = NULL;
2727 PyObject *r = NULL;
2728
2729 /* Initialize constant string objects */
2730 if (silly_list == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002731 import_str = PyString_InternFromString("__import__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002732 if (import_str == NULL)
2733 return NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002734 builtins_str = PyString_InternFromString("__builtins__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002735 if (builtins_str == NULL)
2736 return NULL;
2737 silly_list = Py_BuildValue("[s]", "__doc__");
2738 if (silly_list == NULL)
2739 return NULL;
2740 }
2741
2742 /* Get the builtins from current globals */
2743 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002744 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002745 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002746 builtins = PyObject_GetItem(globals, builtins_str);
2747 if (builtins == NULL)
2748 goto err;
2749 }
2750 else {
2751 /* No globals -- use standard builtins, and fake globals */
2752 PyErr_Clear();
2753
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002754 builtins = PyImport_ImportModuleLevel("__builtin__",
2755 NULL, NULL, NULL, 0);
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002756 if (builtins == NULL)
2757 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002758 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2759 if (globals == NULL)
2760 goto err;
2761 }
2762
2763 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002764 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002765 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002766 if (import == NULL)
2767 PyErr_SetObject(PyExc_KeyError, import_str);
2768 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002769 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002770 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002771 if (import == NULL)
2772 goto err;
2773
Christian Heimes000a0742008-01-03 22:16:32 +00002774 /* Call the __import__ function with the proper argument list
2775 * Always use absolute import here. */
2776 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2777 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002778
2779 err:
2780 Py_XDECREF(globals);
2781 Py_XDECREF(builtins);
2782 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002783
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002784 return r;
2785}
2786
2787
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002788/* Module 'imp' provides Python access to the primitives used for
2789 importing modules.
2790*/
2791
Guido van Rossum79f25d91997-04-29 20:08:16 +00002792static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002793imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002794{
2795 char buf[4];
2796
Guido van Rossum96774c12000-05-01 20:19:08 +00002797 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2798 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2799 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2800 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002801
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002802 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002803}
2804
Guido van Rossum79f25d91997-04-29 20:08:16 +00002805static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002806imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002807{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002808 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002809 struct filedescr *fdp;
2810
Guido van Rossum79f25d91997-04-29 20:08:16 +00002811 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002812 if (list == NULL)
2813 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002814 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2815 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002816 fdp->suffix, fdp->mode, fdp->type);
2817 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002818 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002819 return NULL;
2820 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002821 if (PyList_Append(list, item) < 0) {
2822 Py_DECREF(list);
2823 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002824 return NULL;
2825 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002826 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002827 }
2828 return list;
2829}
2830
Guido van Rossum79f25d91997-04-29 20:08:16 +00002831static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002832call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002833{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002834 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002835 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002836 struct filedescr *fdp;
2837 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002838 FILE *fp = NULL;
2839
2840 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002841 if (path == Py_None)
2842 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002843 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002844 if (fdp == NULL)
2845 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002846 if (fp != NULL) {
2847 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2848 if (fob == NULL) {
2849 fclose(fp);
2850 return NULL;
2851 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002852 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002853 else {
2854 fob = Py_None;
2855 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002856 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002857 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002858 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002859 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002860 return ret;
2861}
2862
Guido van Rossum79f25d91997-04-29 20:08:16 +00002863static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002864imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002865{
2866 char *name;
2867 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002868 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002869 return NULL;
2870 return call_find_module(name, path);
2871}
2872
2873static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002874imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002875{
2876 char *name;
2877 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002878 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002879 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002880 return NULL;
2881 ret = init_builtin(name);
2882 if (ret < 0)
2883 return NULL;
2884 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002885 Py_INCREF(Py_None);
2886 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002887 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002888 m = PyImport_AddModule(name);
2889 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002890 return m;
2891}
2892
Guido van Rossum79f25d91997-04-29 20:08:16 +00002893static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002894imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002895{
2896 char *name;
2897 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002898 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002899 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002900 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002901 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002902 if (ret < 0)
2903 return NULL;
2904 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002905 Py_INCREF(Py_None);
2906 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002907 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002908 m = PyImport_AddModule(name);
2909 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002910 return m;
2911}
2912
Guido van Rossum79f25d91997-04-29 20:08:16 +00002913static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002914imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002915{
2916 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002917
Guido van Rossum43713e52000-02-29 13:59:29 +00002918 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002919 return NULL;
2920 return get_frozen_object(name);
2921}
2922
Guido van Rossum79f25d91997-04-29 20:08:16 +00002923static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002924imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002925{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002926 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002927 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002928 return NULL;
Guido van Rossum50ee94f2002-04-09 18:00:58 +00002929 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002930}
2931
Guido van Rossum79f25d91997-04-29 20:08:16 +00002932static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002933imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002934{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002935 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002936 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002937 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002938 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002939 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00002940 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002941}
2942
2943static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002944get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002945{
2946 FILE *fp;
2947 if (fob == NULL) {
Tim Peters86c7d2f2004-08-01 23:24:21 +00002948 if (mode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002949 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002950 fp = fopen(pathname, mode);
2951 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002952 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002953 }
2954 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002955 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002956 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002957 PyErr_SetString(PyExc_ValueError,
2958 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002959 }
2960 return fp;
2961}
2962
Guido van Rossum79f25d91997-04-29 20:08:16 +00002963static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002964imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002965{
2966 char *name;
2967 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002968 PyObject *fob = NULL;
2969 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002970 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002971 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002972 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002973 return NULL;
2974 fp = get_file(pathname, fob, "rb");
2975 if (fp == NULL)
2976 return NULL;
2977 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002978 if (fob == NULL)
2979 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002980 return m;
2981}
2982
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002983#ifdef HAVE_DYNAMIC_LOADING
2984
Guido van Rossum79f25d91997-04-29 20:08:16 +00002985static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002986imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002987{
2988 char *name;
2989 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002990 PyObject *fob = NULL;
2991 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002992 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002993 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002994 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002995 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002996 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002997 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002998 if (fp == NULL)
2999 return NULL;
3000 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00003001 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00003002 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003003}
3004
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003005#endif /* HAVE_DYNAMIC_LOADING */
3006
Guido van Rossum79f25d91997-04-29 20:08:16 +00003007static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003008imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003009{
3010 char *name;
3011 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003012 PyObject *fob = NULL;
3013 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003014 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00003015 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00003016 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003017 return NULL;
3018 fp = get_file(pathname, fob, "r");
3019 if (fp == NULL)
3020 return NULL;
3021 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003022 if (fob == NULL)
3023 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003024 return m;
3025}
3026
Guido van Rossum79f25d91997-04-29 20:08:16 +00003027static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003028imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003029{
3030 char *name;
3031 PyObject *fob;
3032 char *pathname;
3033 char *suffix; /* Unused */
3034 char *mode;
3035 int type;
3036 FILE *fp;
3037
Guido van Rossum43713e52000-02-29 13:59:29 +00003038 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003039 &name, &fob, &pathname,
3040 &suffix, &mode, &type))
3041 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003042 if (*mode) {
3043 /* Mode must start with 'r' or 'U' and must not contain '+'.
3044 Implicit in this test is the assumption that the mode
3045 may contain other modifiers like 'b' or 't'. */
3046
3047 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00003048 PyErr_Format(PyExc_ValueError,
3049 "invalid file open mode %.200s", mode);
3050 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003051 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003052 }
3053 if (fob == Py_None)
3054 fp = NULL;
3055 else {
3056 if (!PyFile_Check(fob)) {
3057 PyErr_SetString(PyExc_ValueError,
3058 "load_module arg#2 should be a file or None");
3059 return NULL;
3060 }
3061 fp = get_file(pathname, fob, mode);
3062 if (fp == NULL)
3063 return NULL;
3064 }
Just van Rossum52e14d62002-12-30 22:08:05 +00003065 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003066}
3067
3068static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003069imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003070{
3071 char *name;
3072 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00003073 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003074 return NULL;
3075 return load_package(name, pathname);
3076}
3077
3078static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003079imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003080{
3081 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00003082 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003083 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003084 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003085}
3086
Brett Cannon3aa2a492008-08-06 22:28:09 +00003087static PyObject *
3088imp_reload(PyObject *self, PyObject *v)
3089{
3090 return PyImport_ReloadModule(v);
3091}
3092
3093
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003094/* Doc strings */
3095
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003096PyDoc_STRVAR(doc_imp,
3097"This module provides the components needed to build your own\n\
3098__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003099
Brett Cannon3aa2a492008-08-06 22:28:09 +00003100PyDoc_STRVAR(doc_reload,
3101"reload(module) -> module\n\
3102\n\
3103Reload the module. The module must have been successfully imported before.");
3104
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003105PyDoc_STRVAR(doc_find_module,
3106"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003107Search for a module. If path is omitted or None, search for a\n\
3108built-in, frozen or special module and continue search in sys.path.\n\
3109The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003110package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003111
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003112PyDoc_STRVAR(doc_load_module,
3113"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003114Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003115The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003116
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003117PyDoc_STRVAR(doc_get_magic,
3118"get_magic() -> string\n\
3119Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003120
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003121PyDoc_STRVAR(doc_get_suffixes,
3122"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003123Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003124that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003125
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003126PyDoc_STRVAR(doc_new_module,
3127"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003128Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003129The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003130
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003131PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003132"lock_held() -> boolean\n\
3133Return True if the import lock is currently held, else False.\n\
3134On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003135
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003136PyDoc_STRVAR(doc_acquire_lock,
3137"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003138Acquires the interpreter's import lock for the current thread.\n\
3139This lock should be used by import hooks to ensure thread-safety\n\
3140when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003141On platforms without threads, this function does nothing.");
3142
3143PyDoc_STRVAR(doc_release_lock,
3144"release_lock() -> None\n\
3145Release the interpreter's import lock.\n\
3146On platforms without threads, this function does nothing.");
3147
Guido van Rossum79f25d91997-04-29 20:08:16 +00003148static PyMethodDef imp_methods[] = {
Brett Cannon3aa2a492008-08-06 22:28:09 +00003149 {"reload", imp_reload, METH_O, doc_reload},
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003150 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3151 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3152 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3153 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3154 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3155 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3156 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3157 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003158 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00003159 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3160 {"init_builtin", imp_init_builtin, METH_VARARGS},
3161 {"init_frozen", imp_init_frozen, METH_VARARGS},
3162 {"is_builtin", imp_is_builtin, METH_VARARGS},
3163 {"is_frozen", imp_is_frozen, METH_VARARGS},
3164 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003165#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00003166 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003167#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00003168 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00003169 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003170 {NULL, NULL} /* sentinel */
3171};
3172
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003173static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003174setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003175{
3176 PyObject *v;
3177 int err;
3178
3179 v = PyInt_FromLong((long)value);
3180 err = PyDict_SetItemString(d, name, v);
3181 Py_XDECREF(v);
3182 return err;
3183}
3184
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003185typedef struct {
3186 PyObject_HEAD
3187} NullImporter;
3188
3189static int
3190NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3191{
3192 char *path;
Christian Heimescea681b2007-11-07 17:50:54 +00003193 Py_ssize_t pathlen;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003194
3195 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3196 return -1;
3197
3198 if (!PyArg_ParseTuple(args, "s:NullImporter",
3199 &path))
3200 return -1;
3201
Christian Heimescea681b2007-11-07 17:50:54 +00003202 pathlen = strlen(path);
3203 if (pathlen == 0) {
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003204 PyErr_SetString(PyExc_ImportError, "empty pathname");
3205 return -1;
3206 } else {
3207#ifndef RISCOS
Kristján Valur Jónsson3b2a6b82009-01-09 20:10:59 +00003208#ifndef MS_WINDOWS
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003209 struct stat statbuf;
3210 int rv;
3211
3212 rv = stat(path, &statbuf);
3213 if (rv == 0) {
3214 /* it exists */
3215 if (S_ISDIR(statbuf.st_mode)) {
3216 /* it's a directory */
3217 PyErr_SetString(PyExc_ImportError,
3218 "existing directory");
3219 return -1;
3220 }
3221 }
Kristján Valur Jónsson3b2a6b82009-01-09 20:10:59 +00003222#else /* MS_WINDOWS */
3223 DWORD rv;
3224 /* see issue1293 and issue3677:
3225 * stat() on Windows doesn't recognise paths like
3226 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
3227 */
3228 rv = GetFileAttributesA(path);
3229 if (rv != INVALID_FILE_ATTRIBUTES) {
3230 /* it exists */
3231 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
3232 /* it's a directory */
3233 PyErr_SetString(PyExc_ImportError,
3234 "existing directory");
3235 return -1;
3236 }
3237 }
3238#endif
3239#else /* RISCOS */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003240 if (object_exists(path)) {
3241 /* it exists */
3242 if (isdir(path)) {
3243 /* it's a directory */
3244 PyErr_SetString(PyExc_ImportError,
3245 "existing directory");
3246 return -1;
3247 }
3248 }
3249#endif
3250 }
3251 return 0;
3252}
3253
3254static PyObject *
3255NullImporter_find_module(NullImporter *self, PyObject *args)
3256{
3257 Py_RETURN_NONE;
3258}
3259
3260static PyMethodDef NullImporter_methods[] = {
3261 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3262 "Always return None"
3263 },
3264 {NULL} /* Sentinel */
3265};
3266
3267
Nick Coghlan327a39b2007-11-18 11:56:28 +00003268PyTypeObject PyNullImporter_Type = {
Martin v. Löwis68192102007-07-21 06:55:02 +00003269 PyVarObject_HEAD_INIT(NULL, 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003270 "imp.NullImporter", /*tp_name*/
3271 sizeof(NullImporter), /*tp_basicsize*/
3272 0, /*tp_itemsize*/
3273 0, /*tp_dealloc*/
3274 0, /*tp_print*/
3275 0, /*tp_getattr*/
3276 0, /*tp_setattr*/
3277 0, /*tp_compare*/
3278 0, /*tp_repr*/
3279 0, /*tp_as_number*/
3280 0, /*tp_as_sequence*/
3281 0, /*tp_as_mapping*/
3282 0, /*tp_hash */
3283 0, /*tp_call*/
3284 0, /*tp_str*/
3285 0, /*tp_getattro*/
3286 0, /*tp_setattro*/
3287 0, /*tp_as_buffer*/
3288 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3289 "Null importer object", /* tp_doc */
3290 0, /* tp_traverse */
3291 0, /* tp_clear */
3292 0, /* tp_richcompare */
3293 0, /* tp_weaklistoffset */
3294 0, /* tp_iter */
3295 0, /* tp_iternext */
3296 NullImporter_methods, /* tp_methods */
3297 0, /* tp_members */
3298 0, /* tp_getset */
3299 0, /* tp_base */
3300 0, /* tp_dict */
3301 0, /* tp_descr_get */
3302 0, /* tp_descr_set */
3303 0, /* tp_dictoffset */
3304 (initproc)NullImporter_init, /* tp_init */
3305 0, /* tp_alloc */
3306 PyType_GenericNew /* tp_new */
3307};
3308
3309
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003310PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003311initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003312{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003313 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003314
Nick Coghlan327a39b2007-11-18 11:56:28 +00003315 if (PyType_Ready(&PyNullImporter_Type) < 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003316 goto failure;
3317
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003318 m = Py_InitModule4("imp", imp_methods, doc_imp,
3319 NULL, PYTHON_API_VERSION);
Neal Norwitz1ac754f2006-01-19 06:09:39 +00003320 if (m == NULL)
3321 goto failure;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003322 d = PyModule_GetDict(m);
Neal Norwitz3cb31ac2006-08-13 18:10:47 +00003323 if (d == NULL)
3324 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003325
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003326 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3327 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3328 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3329 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3330 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3331 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3332 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3333 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00003334 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00003335 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003336
Nick Coghlan327a39b2007-11-18 11:56:28 +00003337 Py_INCREF(&PyNullImporter_Type);
3338 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003339 failure:
3340 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003341}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003342
3343
Guido van Rossumb18618d2000-05-03 23:44:39 +00003344/* API for embedding applications that want to add their own entries
3345 to the table of built-in modules. This should normally be called
3346 *before* Py_Initialize(). When the table resize fails, -1 is
3347 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003348
3349 After a similar function by Just van Rossum. */
3350
3351int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003352PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003353{
3354 static struct _inittab *our_copy = NULL;
3355 struct _inittab *p;
3356 int i, n;
3357
3358 /* Count the number of entries in both tables */
3359 for (n = 0; newtab[n].name != NULL; n++)
3360 ;
3361 if (n == 0)
3362 return 0; /* Nothing to do */
3363 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3364 ;
3365
3366 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00003367 p = our_copy;
3368 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003369 if (p == NULL)
3370 return -1;
3371
3372 /* Copy the tables into the new memory */
3373 if (our_copy != PyImport_Inittab)
3374 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3375 PyImport_Inittab = our_copy = p;
3376 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3377
3378 return 0;
3379}
3380
3381/* Shorthand to add a single entry given a name and a function */
3382
3383int
Brett Cannonc4f90eb2009-04-02 03:17:39 +00003384PyImport_AppendInittab(const char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003385{
3386 struct _inittab newtab[2];
3387
3388 memset(newtab, '\0', sizeof newtab);
3389
Brett Cannon238cedc2009-04-02 03:34:53 +00003390 newtab[0].name = (char *)name;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003391 newtab[0].initfunc = initfunc;
3392
3393 return PyImport_ExtendInittab(newtab);
3394}
Anthony Baxterac6bd462006-04-13 02:06:09 +00003395
3396#ifdef __cplusplus
3397}
3398#endif