blob: 46a1acc6a269fffcd097ea45130d702ca2d8265b [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 Murray23a736a2009-07-07 01:06:13 +0000884#ifndef MS_WINDOWS
885 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
886#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000887
Christian Heimes40346852008-02-23 17:52:07 +0000888 fp = open_exclusive(cpathname, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000889 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000890 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000891 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000892 "# can't create %s\n", cpathname);
893 return;
894 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000895 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000896 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000897 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
898 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000899 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000900 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000901 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000902 /* Don't keep partial file */
903 fclose(fp);
904 (void) unlink(cpathname);
905 return;
906 }
907 /* Now write the true mtime */
908 fseek(fp, 4L, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000909 assert(mtime < LONG_MAX);
Martin v. Löwis725507b2006-03-07 12:08:51 +0000910 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000911 fflush(fp);
912 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000913 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000914 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000915}
916
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000917static void
918update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
919{
920 PyObject *constants, *tmp;
921 Py_ssize_t i, n;
922
923 if (!_PyString_Eq(co->co_filename, oldname))
924 return;
925
926 tmp = co->co_filename;
927 co->co_filename = newname;
928 Py_INCREF(co->co_filename);
929 Py_DECREF(tmp);
930
931 constants = co->co_consts;
932 n = PyTuple_GET_SIZE(constants);
933 for (i = 0; i < n; i++) {
934 tmp = PyTuple_GET_ITEM(constants, i);
935 if (PyCode_Check(tmp))
936 update_code_filenames((PyCodeObject *)tmp,
937 oldname, newname);
938 }
939}
940
941static int
942update_compiled_module(PyCodeObject *co, char *pathname)
943{
944 PyObject *oldname, *newname;
945
946 if (strcmp(PyString_AsString(co->co_filename), pathname) == 0)
947 return 0;
948
949 newname = PyString_FromString(pathname);
950 if (newname == NULL)
951 return -1;
952
953 oldname = co->co_filename;
954 Py_INCREF(oldname);
955 update_code_filenames(co, oldname, newname);
956 Py_DECREF(oldname);
957 Py_DECREF(newname);
958 return 1;
959}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000960
961/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000962 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
963 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000964
Guido van Rossum79f25d91997-04-29 20:08:16 +0000965static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000966load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000967{
Christian Heimes40346852008-02-23 17:52:07 +0000968 struct stat st;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000969 FILE *fpc;
970 char buf[MAXPATHLEN+1];
971 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000972 PyCodeObject *co;
973 PyObject *m;
Christian Heimes40346852008-02-23 17:52:07 +0000974
975 if (fstat(fileno(fp), &st) != 0) {
Neal Norwitz708e51a2005-10-03 04:48:15 +0000976 PyErr_Format(PyExc_RuntimeError,
Christian Heimes40346852008-02-23 17:52:07 +0000977 "unable to get file status from '%s'",
Neal Norwitz708e51a2005-10-03 04:48:15 +0000978 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +0000979 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +0000980 }
Fred Drake4c82b232000-06-30 16:18:57 +0000981#if SIZEOF_TIME_T > 4
982 /* Python's .pyc timestamp handling presumes that the timestamp fits
983 in 4 bytes. This will be fine until sometime in the year 2038,
984 when a 4-byte signed time_t will overflow.
985 */
Christian Heimes40346852008-02-23 17:52:07 +0000986 if (st.st_mtime >> 32) {
Fred Drake4c82b232000-06-30 16:18:57 +0000987 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +0000988 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +0000989 return NULL;
990 }
991#endif
Tim Peters36515e22001-11-18 04:06:29 +0000992 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +0000993 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000994 if (cpathname != NULL &&
Christian Heimes40346852008-02-23 17:52:07 +0000995 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000996 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000997 fclose(fpc);
998 if (co == NULL)
999 return NULL;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +00001000 if (update_compiled_module(co, pathname) < 0)
1001 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001002 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001003 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001004 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +00001005 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001006 }
1007 else {
1008 co = parse_source_module(pathname, fp);
1009 if (co == NULL)
1010 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001011 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001012 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001013 name, pathname);
Georg Brandl2da0fce2008-01-07 17:09:35 +00001014 if (cpathname) {
1015 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1016 if (ro == NULL || !PyObject_IsTrue(ro))
Christian Heimes40346852008-02-23 17:52:07 +00001017 write_compiled_module(co, cpathname, &st);
Georg Brandl2da0fce2008-01-07 17:09:35 +00001018 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001019 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +00001020 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001021 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001022
1023 return m;
1024}
1025
1026
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001027/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001028static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1029static struct filedescr *find_module(char *, char *, PyObject *,
1030 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001031static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001032
1033/* Load a package and return its module object WITH INCREMENTED
1034 REFERENCE COUNT */
1035
1036static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001037load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001038{
Tim Peters1cd70172004-08-02 03:52:12 +00001039 PyObject *m, *d;
1040 PyObject *file = NULL;
1041 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001042 int err;
1043 char buf[MAXPATHLEN+1];
1044 FILE *fp = NULL;
1045 struct filedescr *fdp;
1046
1047 m = PyImport_AddModule(name);
1048 if (m == NULL)
1049 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001050 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001051 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001052 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001053 d = PyModule_GetDict(m);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001054 file = PyString_FromString(pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001055 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +00001056 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001057 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +00001058 if (path == NULL)
1059 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001060 err = PyDict_SetItemString(d, "__file__", file);
1061 if (err == 0)
1062 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +00001063 if (err != 0)
1064 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001065 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00001066 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001067 if (fdp == NULL) {
1068 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1069 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +00001070 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001071 }
1072 else
1073 m = NULL;
1074 goto cleanup;
1075 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001076 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001077 if (fp != NULL)
1078 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00001079 goto cleanup;
1080
1081 error:
1082 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001083 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001084 Py_XDECREF(path);
1085 Py_XDECREF(file);
1086 return m;
1087}
1088
1089
1090/* Helper to test for built-in module */
1091
1092static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001093is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001094{
1095 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +00001096 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1097 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1098 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001099 return -1;
1100 else
1101 return 1;
1102 }
1103 }
1104 return 0;
1105}
1106
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001107
Just van Rossum52e14d62002-12-30 22:08:05 +00001108/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1109 possibly by fetching it from the path_importer_cache dict. If it
Brett Cannon94b69f62006-09-28 22:10:14 +00001110 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001111 that can handle the path item. Return None if no hook could;
1112 this tells our caller it should fall back to the builtin
1113 import mechanism. Cache the result in path_importer_cache.
1114 Returns a borrowed reference. */
1115
1116static PyObject *
1117get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1118 PyObject *p)
1119{
1120 PyObject *importer;
Martin v. Löwis725507b2006-03-07 12:08:51 +00001121 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001122
1123 /* These conditions are the caller's responsibility: */
1124 assert(PyList_Check(path_hooks));
1125 assert(PyDict_Check(path_importer_cache));
1126
1127 nhooks = PyList_Size(path_hooks);
1128 if (nhooks < 0)
1129 return NULL; /* Shouldn't happen */
1130
1131 importer = PyDict_GetItem(path_importer_cache, p);
1132 if (importer != NULL)
1133 return importer;
1134
1135 /* set path_importer_cache[p] to None to avoid recursion */
1136 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1137 return NULL;
1138
1139 for (j = 0; j < nhooks; j++) {
1140 PyObject *hook = PyList_GetItem(path_hooks, j);
1141 if (hook == NULL)
1142 return NULL;
Georg Brandl684fd0c2006-05-25 19:15:31 +00001143 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
Just van Rossum52e14d62002-12-30 22:08:05 +00001144 if (importer != NULL)
1145 break;
1146
1147 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1148 return NULL;
1149 }
1150 PyErr_Clear();
1151 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001152 if (importer == NULL) {
1153 importer = PyObject_CallFunctionObjArgs(
Nick Coghlan327a39b2007-11-18 11:56:28 +00001154 (PyObject *)&PyNullImporter_Type, p, NULL
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001155 );
1156 if (importer == NULL) {
1157 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1158 PyErr_Clear();
1159 return Py_None;
1160 }
1161 }
1162 }
1163 if (importer != NULL) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001164 int err = PyDict_SetItem(path_importer_cache, p, importer);
1165 Py_DECREF(importer);
1166 if (err != 0)
1167 return NULL;
1168 }
1169 return importer;
1170}
1171
Nick Coghlan327a39b2007-11-18 11:56:28 +00001172PyAPI_FUNC(PyObject *)
1173PyImport_GetImporter(PyObject *path) {
1174 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
1175
1176 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1177 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1178 importer = get_path_importer(path_importer_cache,
1179 path_hooks, path);
1180 }
1181 }
1182 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1183 return importer;
1184}
1185
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001186/* Search the path (default sys.path) for a module. Return the
1187 corresponding filedescr struct, and (via return arguments) the
1188 pathname and an open file. Return NULL if the module is not found. */
1189
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001190#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001191extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001192 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001193#endif
1194
Martin v. Löwis18e16552006-02-15 17:27:45 +00001195static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001196static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001197static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001198
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001199static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001200find_module(char *fullname, char *subname, PyObject *path, char *buf,
1201 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001202{
Martin v. Löwis725507b2006-03-07 12:08:51 +00001203 Py_ssize_t i, npath;
Fred Drake4c82b232000-06-30 16:18:57 +00001204 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001205 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001206 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001207 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001208 PyObject *path_hooks, *path_importer_cache;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001209#ifndef RISCOS
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001210 struct stat statbuf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001211#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001212 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1213 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1214 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001215 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001216#if defined(PYOS_OS2)
1217 size_t saved_len;
1218 size_t saved_namelen;
1219 char *saved_buf = NULL;
1220#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001221 if (p_loader != NULL)
1222 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001223
Just van Rossum52e14d62002-12-30 22:08:05 +00001224 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001225 PyErr_SetString(PyExc_OverflowError,
1226 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001227 return NULL;
1228 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001229 strcpy(name, subname);
1230
1231 /* sys.meta_path import hook */
1232 if (p_loader != NULL) {
1233 PyObject *meta_path;
1234
1235 meta_path = PySys_GetObject("meta_path");
1236 if (meta_path == NULL || !PyList_Check(meta_path)) {
1237 PyErr_SetString(PyExc_ImportError,
1238 "sys.meta_path must be a list of "
1239 "import hooks");
1240 return NULL;
1241 }
1242 Py_INCREF(meta_path); /* zap guard */
1243 npath = PyList_Size(meta_path);
1244 for (i = 0; i < npath; i++) {
1245 PyObject *loader;
1246 PyObject *hook = PyList_GetItem(meta_path, i);
1247 loader = PyObject_CallMethod(hook, "find_module",
1248 "sO", fullname,
1249 path != NULL ?
1250 path : Py_None);
1251 if (loader == NULL) {
1252 Py_DECREF(meta_path);
1253 return NULL; /* true error */
1254 }
1255 if (loader != Py_None) {
1256 /* a loader was found */
1257 *p_loader = loader;
1258 Py_DECREF(meta_path);
1259 return &importhookdescr;
1260 }
1261 Py_DECREF(loader);
1262 }
1263 Py_DECREF(meta_path);
1264 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001265
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001266 if (path != NULL && PyString_Check(path)) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001267 /* The only type of submodule allowed inside a "frozen"
1268 package are other frozen modules or packages. */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001269 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
Guido van Rossum0506a431998-08-11 15:07:39 +00001270 PyErr_SetString(PyExc_ImportError,
1271 "full frozen module name too long");
1272 return NULL;
1273 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001274 strcpy(buf, PyString_AsString(path));
Guido van Rossum0506a431998-08-11 15:07:39 +00001275 strcat(buf, ".");
1276 strcat(buf, name);
1277 strcpy(name, buf);
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001278 if (find_frozen(name) != NULL) {
1279 strcpy(buf, name);
1280 return &fd_frozen;
1281 }
1282 PyErr_Format(PyExc_ImportError,
1283 "No frozen submodule named %.200s", name);
1284 return NULL;
Guido van Rossum0506a431998-08-11 15:07:39 +00001285 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001286 if (path == NULL) {
1287 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001288 strcpy(buf, name);
1289 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001290 }
Greg Ward201baee2001-10-04 14:52:06 +00001291 if ((find_frozen(name)) != NULL) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001292 strcpy(buf, name);
1293 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001294 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001295
Guido van Rossumac279101996-08-22 23:10:58 +00001296#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001297 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1298 if (fp != NULL) {
1299 *p_fp = fp;
1300 return fdp;
1301 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001302#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001303 path = PySys_GetObject("path");
1304 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001305 if (path == NULL || !PyList_Check(path)) {
1306 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001307 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001308 return NULL;
1309 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001310
1311 path_hooks = PySys_GetObject("path_hooks");
1312 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1313 PyErr_SetString(PyExc_ImportError,
1314 "sys.path_hooks must be a list of "
1315 "import hooks");
1316 return NULL;
1317 }
1318 path_importer_cache = PySys_GetObject("path_importer_cache");
1319 if (path_importer_cache == NULL ||
1320 !PyDict_Check(path_importer_cache)) {
1321 PyErr_SetString(PyExc_ImportError,
1322 "sys.path_importer_cache must be a dict");
1323 return NULL;
1324 }
1325
Guido van Rossum79f25d91997-04-29 20:08:16 +00001326 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001327 namelen = strlen(name);
1328 for (i = 0; i < npath; i++) {
Walter Dörwald3430d702002-06-17 10:43:59 +00001329 PyObject *copy = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001330 PyObject *v = PyList_GetItem(path, i);
Neal Norwitz3cb31ac2006-08-13 18:10:47 +00001331 if (!v)
1332 return NULL;
Walter Dörwald3430d702002-06-17 10:43:59 +00001333#ifdef Py_USING_UNICODE
1334 if (PyUnicode_Check(v)) {
1335 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1336 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1337 if (copy == NULL)
1338 return NULL;
1339 v = copy;
1340 }
1341 else
1342#endif
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001343 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001344 continue;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001345 len = PyString_GET_SIZE(v);
Walter Dörwald3430d702002-06-17 10:43:59 +00001346 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1347 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001348 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001349 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001350 strcpy(buf, PyString_AS_STRING(v));
Walter Dörwald3430d702002-06-17 10:43:59 +00001351 if (strlen(buf) != len) {
1352 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001353 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001354 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001355
1356 /* sys.path_hooks import hook */
1357 if (p_loader != NULL) {
1358 PyObject *importer;
1359
1360 importer = get_path_importer(path_importer_cache,
1361 path_hooks, v);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001362 if (importer == NULL) {
1363 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001364 return NULL;
Neal Norwitza4df11d2006-07-06 04:28:59 +00001365 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001366 /* Note: importer is a borrowed reference */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001367 if (importer != Py_None) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001368 PyObject *loader;
1369 loader = PyObject_CallMethod(importer,
1370 "find_module",
1371 "s", fullname);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001372 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001373 if (loader == NULL)
1374 return NULL; /* error */
1375 if (loader != Py_None) {
1376 /* a loader was found */
1377 *p_loader = loader;
1378 return &importhookdescr;
1379 }
1380 Py_DECREF(loader);
Georg Brandlf4ef1162006-05-26 18:03:31 +00001381 continue;
Just van Rossum52e14d62002-12-30 22:08:05 +00001382 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001383 }
Georg Brandlf4ef1162006-05-26 18:03:31 +00001384 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001385
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001386 if (len > 0 && buf[len-1] != SEP
1387#ifdef ALTSEP
1388 && buf[len-1] != ALTSEP
1389#endif
1390 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001391 buf[len++] = SEP;
Guido van Rossum215c3402000-11-13 17:26:32 +00001392 strcpy(buf+len, name);
1393 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001394
1395 /* Check for package import (buf holds a directory name,
1396 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001397#ifdef HAVE_STAT
Walter Dörwald3430d702002-06-17 10:43:59 +00001398 if (stat(buf, &statbuf) == 0 && /* it exists */
1399 S_ISDIR(statbuf.st_mode) && /* it's a directory */
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001400 case_ok(buf, len, namelen, name)) { /* case matches */
1401 if (find_init_module(buf)) { /* and has __init__.py */
1402 Py_XDECREF(copy);
1403 return &fd_package;
1404 }
1405 else {
1406 char warnstr[MAXPATHLEN+80];
1407 sprintf(warnstr, "Not importing directory "
1408 "'%.*s': missing __init__.py",
1409 MAXPATHLEN, buf);
1410 if (PyErr_Warn(PyExc_ImportWarning,
1411 warnstr)) {
1412 Py_XDECREF(copy);
1413 return NULL;
1414 }
1415 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001416 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001417#else
1418 /* XXX How are you going to test for directories? */
Guido van Rossum48a680c2001-03-02 06:34:14 +00001419#ifdef RISCOS
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001420 if (isdir(buf) &&
Walter Dörwald3430d702002-06-17 10:43:59 +00001421 case_ok(buf, len, namelen, name)) {
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001422 if (find_init_module(buf)) {
1423 Py_XDECREF(copy);
1424 return &fd_package;
1425 }
1426 else {
1427 char warnstr[MAXPATHLEN+80];
1428 sprintf(warnstr, "Not importing directory "
1429 "'%.*s': missing __init__.py",
1430 MAXPATHLEN, buf);
1431 if (PyErr_Warn(PyExc_ImportWarning,
1432 warnstr)) {
1433 Py_XDECREF(copy);
1434 return NULL;
1435 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001436 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001437#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001438#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001439#if defined(PYOS_OS2)
1440 /* take a snapshot of the module spec for restoration
1441 * after the 8 character DLL hackery
1442 */
1443 saved_buf = strdup(buf);
1444 saved_len = len;
1445 saved_namelen = namelen;
1446#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001447 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Georg Brandladd36e52007-08-23 18:08:06 +00001448#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001449 /* OS/2 limits DLLs to 8 character names (w/o
1450 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001451 * so if the name is longer than that and its a
1452 * dynamically loaded module we're going to try,
1453 * truncate the name before trying
1454 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001455 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001456 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001457 const struct filedescr *scan;
1458 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001459 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001460 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001461 break;
1462 else
1463 scan++;
1464 }
1465 if (scan->suffix != NULL) {
1466 /* yes, so truncate the name */
1467 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001468 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001469 buf[len] = '\0';
1470 }
1471 }
1472#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001473 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001474 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001475 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001476 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001477 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001478 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001479 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001480 if (fp != NULL) {
1481 if (case_ok(buf, len, namelen, name))
1482 break;
1483 else { /* continue search */
1484 fclose(fp);
1485 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001486 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001487 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001488#if defined(PYOS_OS2)
1489 /* restore the saved snapshot */
1490 strcpy(buf, saved_buf);
1491 len = saved_len;
1492 namelen = saved_namelen;
1493#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001494 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001495#if defined(PYOS_OS2)
1496 /* don't need/want the module name snapshot anymore */
1497 if (saved_buf)
1498 {
1499 free(saved_buf);
1500 saved_buf = NULL;
1501 }
1502#endif
Walter Dörwald3430d702002-06-17 10:43:59 +00001503 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001504 if (fp != NULL)
1505 break;
1506 }
1507 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001508 PyErr_Format(PyExc_ImportError,
1509 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001510 return NULL;
1511 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001512 *p_fp = fp;
1513 return fdp;
1514}
1515
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001516/* Helpers for main.c
1517 * Find the source file corresponding to a named module
1518 */
1519struct filedescr *
1520_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1521 size_t buflen, FILE **p_fp, PyObject **p_loader)
1522{
1523 return find_module((char *) name, (char *) name, path,
1524 buf, buflen, p_fp, p_loader);
1525}
1526
1527PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1528{
1529 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1530}
1531
Martin v. Löwis18e16552006-02-15 17:27:45 +00001532/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001533 * The arguments here are tricky, best shown by example:
1534 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1535 * ^ ^ ^ ^
1536 * |--------------------- buf ---------------------|
1537 * |------------------- len ------------------|
1538 * |------ name -------|
1539 * |----- namelen -----|
1540 * buf is the full path, but len only counts up to (& exclusive of) the
1541 * extension. name is the module name, also exclusive of extension.
1542 *
1543 * We've already done a successful stat() or fopen() on buf, so know that
1544 * there's some match, possibly case-insensitive.
1545 *
Tim Peters50d8d372001-02-28 05:34:27 +00001546 * case_ok() is to return 1 if there's a case-sensitive match for
1547 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1548 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001549 *
Tim Peters50d8d372001-02-28 05:34:27 +00001550 * case_ok() is used to implement case-sensitive import semantics even
1551 * on platforms with case-insensitive filesystems. It's trivial to implement
1552 * for case-sensitive filesystems. It's pretty much a cross-platform
1553 * nightmare for systems with case-insensitive filesystems.
1554 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001555
Tim Peters50d8d372001-02-28 05:34:27 +00001556/* First we may need a pile of platform-specific header files; the sequence
1557 * of #if's here should match the sequence in the body of case_ok().
1558 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001559#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001560#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001561
Tim Peters50d8d372001-02-28 05:34:27 +00001562#elif defined(DJGPP)
1563#include <dir.h>
1564
Jason Tishler7961aa62005-05-20 00:56:54 +00001565#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001566#include <sys/types.h>
1567#include <dirent.h>
1568
Andrew MacIntyred9400542002-02-26 11:41:34 +00001569#elif defined(PYOS_OS2)
1570#define INCL_DOS
1571#define INCL_DOSERRORS
1572#define INCL_NOPMAPI
1573#include <os2.h>
1574
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001575#elif defined(RISCOS)
1576#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001577#endif
1578
Guido van Rossum0980bd91998-02-13 17:18:36 +00001579static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001580case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001581{
Tim Peters50d8d372001-02-28 05:34:27 +00001582/* Pick a platform-specific implementation; the sequence of #if's here should
1583 * match the sequence just above.
1584 */
1585
Jason Tishler7961aa62005-05-20 00:56:54 +00001586/* MS_WINDOWS */
1587#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001588 WIN32_FIND_DATA data;
1589 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001590
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001591 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001592 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001593
Guido van Rossum0980bd91998-02-13 17:18:36 +00001594 h = FindFirstFile(buf, &data);
1595 if (h == INVALID_HANDLE_VALUE) {
1596 PyErr_Format(PyExc_NameError,
1597 "Can't find file for module %.100s\n(filename %.300s)",
1598 name, buf);
1599 return 0;
1600 }
1601 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001602 return strncmp(data.cFileName, name, namelen) == 0;
1603
1604/* DJGPP */
1605#elif defined(DJGPP)
1606 struct ffblk ffblk;
1607 int done;
1608
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001609 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001610 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001611
1612 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1613 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001614 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001615 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001616 name, buf);
1617 return 0;
1618 }
Tim Peters50d8d372001-02-28 05:34:27 +00001619 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001620
Jason Tishler7961aa62005-05-20 00:56:54 +00001621/* new-fangled macintosh (macosx) or Cygwin */
1622#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001623 DIR *dirp;
1624 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001625 char dirname[MAXPATHLEN + 1];
1626 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001627
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001628 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001629 return 1;
1630
Tim Petersd1e87a82001-03-01 18:12:00 +00001631 /* Copy the dir component into dirname; substitute "." if empty */
1632 if (dirlen <= 0) {
1633 dirname[0] = '.';
1634 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001635 }
1636 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001637 assert(dirlen <= MAXPATHLEN);
1638 memcpy(dirname, buf, dirlen);
1639 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001640 }
1641 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001642 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001643 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001644 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001645 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001646 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001647#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001648 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001649#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001650 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001651#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001652 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001653 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001654 (void)closedir(dirp);
1655 return 1; /* Found */
1656 }
1657 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001658 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001659 }
Tim Peters430f5d42001-03-01 01:30:56 +00001660 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001661
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001662/* RISC OS */
1663#elif defined(RISCOS)
1664 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1665 char buf2[MAXPATHLEN+2];
1666 char *nameWithExt = buf+len-namelen;
1667 int canonlen;
1668 os_error *e;
1669
1670 if (Py_GETENV("PYTHONCASEOK") != NULL)
1671 return 1;
1672
1673 /* workaround:
1674 append wildcard, otherwise case of filename wouldn't be touched */
1675 strcpy(buf2, buf);
1676 strcat(buf2, "*");
1677
1678 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1679 canonlen = MAXPATHLEN+1-canonlen;
1680 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1681 return 0;
1682 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1683 return 1; /* match */
1684
1685 return 0;
1686
Andrew MacIntyred9400542002-02-26 11:41:34 +00001687/* OS/2 */
1688#elif defined(PYOS_OS2)
1689 HDIR hdir = 1;
1690 ULONG srchcnt = 1;
1691 FILEFINDBUF3 ffbuf;
1692 APIRET rc;
1693
Georg Brandlaed6c662008-01-07 17:25:53 +00001694 if (Py_GETENV("PYTHONCASEOK") != NULL)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001695 return 1;
1696
1697 rc = DosFindFirst(buf,
1698 &hdir,
1699 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1700 &ffbuf, sizeof(ffbuf),
1701 &srchcnt,
1702 FIL_STANDARD);
1703 if (rc != NO_ERROR)
1704 return 0;
1705 return strncmp(ffbuf.achName, name, namelen) == 0;
1706
Tim Peters50d8d372001-02-28 05:34:27 +00001707/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1708#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001709 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001710
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001711#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001712}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001713
Guido van Rossum0980bd91998-02-13 17:18:36 +00001714
Guido van Rossum197346f1997-10-31 18:38:52 +00001715#ifdef HAVE_STAT
1716/* Helper to look for __init__.py or __init__.py[co] in potential package */
1717static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001718find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001719{
Tim Peters0f9431f2001-07-05 03:47:53 +00001720 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001721 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001722 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001723 struct stat statbuf;
1724
Tim Peters0f9431f2001-07-05 03:47:53 +00001725/* For calling case_ok(buf, len, namelen, name):
1726 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1727 * ^ ^ ^ ^
1728 * |--------------------- buf ---------------------|
1729 * |------------------- len ------------------|
1730 * |------ name -------|
1731 * |----- namelen -----|
1732 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001733 if (save_len + 13 >= MAXPATHLEN)
1734 return 0;
1735 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001736 pname = buf + i;
1737 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001738 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001739 if (case_ok(buf,
1740 save_len + 9, /* len("/__init__") */
1741 8, /* len("__init__") */
1742 pname)) {
1743 buf[save_len] = '\0';
1744 return 1;
1745 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001746 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001747 i += strlen(pname);
1748 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001749 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001750 if (case_ok(buf,
1751 save_len + 9, /* len("/__init__") */
1752 8, /* len("__init__") */
1753 pname)) {
1754 buf[save_len] = '\0';
1755 return 1;
1756 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001757 }
1758 buf[save_len] = '\0';
1759 return 0;
1760}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001761
1762#else
1763
1764#ifdef RISCOS
1765static int
1766find_init_module(buf)
1767 char *buf;
1768{
1769 int save_len = strlen(buf);
1770 int i = save_len;
1771
1772 if (save_len + 13 >= MAXPATHLEN)
1773 return 0;
1774 buf[i++] = SEP;
1775 strcpy(buf+i, "__init__/py");
1776 if (isfile(buf)) {
1777 buf[save_len] = '\0';
1778 return 1;
1779 }
1780
1781 if (Py_OptimizeFlag)
1782 strcpy(buf+i, "o");
1783 else
1784 strcpy(buf+i, "c");
1785 if (isfile(buf)) {
1786 buf[save_len] = '\0';
1787 return 1;
1788 }
1789 buf[save_len] = '\0';
1790 return 0;
1791}
1792#endif /*RISCOS*/
1793
Guido van Rossum197346f1997-10-31 18:38:52 +00001794#endif /* HAVE_STAT */
1795
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001796
Tim Petersdbd9ba62000-07-09 03:09:57 +00001797static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001798
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001799/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001800 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001801
Guido van Rossum79f25d91997-04-29 20:08:16 +00001802static PyObject *
Just van Rossum52e14d62002-12-30 22:08:05 +00001803load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001804{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001805 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001806 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001807 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001808
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001809 /* First check that there's an open file (if we need one) */
1810 switch (type) {
1811 case PY_SOURCE:
1812 case PY_COMPILED:
1813 if (fp == NULL) {
1814 PyErr_Format(PyExc_ValueError,
1815 "file object required for import (type code %d)",
1816 type);
1817 return NULL;
1818 }
1819 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001820
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001821 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001822
1823 case PY_SOURCE:
1824 m = load_source_module(name, buf, fp);
1825 break;
1826
1827 case PY_COMPILED:
1828 m = load_compiled_module(name, buf, fp);
1829 break;
1830
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001831#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001832 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001833 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001834 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001835#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001836
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001837 case PKG_DIRECTORY:
1838 m = load_package(name, buf);
1839 break;
1840
1841 case C_BUILTIN:
1842 case PY_FROZEN:
Guido van Rossuma5568d31998-03-05 03:45:08 +00001843 if (buf != NULL && buf[0] != '\0')
1844 name = buf;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001845 if (type == C_BUILTIN)
1846 err = init_builtin(name);
1847 else
1848 err = PyImport_ImportFrozenModule(name);
1849 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001850 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001851 if (err == 0) {
1852 PyErr_Format(PyExc_ImportError,
1853 "Purported %s module %.200s not found",
1854 type == C_BUILTIN ?
1855 "builtin" : "frozen",
1856 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001857 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001858 }
1859 modules = PyImport_GetModuleDict();
1860 m = PyDict_GetItemString(modules, name);
1861 if (m == NULL) {
1862 PyErr_Format(
1863 PyExc_ImportError,
1864 "%s module %.200s not properly initialized",
1865 type == C_BUILTIN ?
1866 "builtin" : "frozen",
1867 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001868 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001869 }
1870 Py_INCREF(m);
1871 break;
1872
Just van Rossum52e14d62002-12-30 22:08:05 +00001873 case IMP_HOOK: {
1874 if (loader == NULL) {
1875 PyErr_SetString(PyExc_ImportError,
1876 "import hook without loader");
1877 return NULL;
1878 }
1879 m = PyObject_CallMethod(loader, "load_module", "s", name);
1880 break;
1881 }
1882
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001883 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001884 PyErr_Format(PyExc_ImportError,
1885 "Don't know how to import %.200s (type code %d)",
1886 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001887 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001888
1889 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001890
1891 return m;
1892}
1893
1894
1895/* Initialize a built-in module.
Brett Cannon5a9aa4f2006-10-03 21:58:55 +00001896 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001897 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001898
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001899static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001900init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001901{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001902 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001903
Greg Ward201baee2001-10-04 14:52:06 +00001904 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001905 return 1;
1906
Guido van Rossum771c6c81997-10-31 18:37:24 +00001907 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001908 if (strcmp(name, p->name) == 0) {
1909 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001910 PyErr_Format(PyExc_ImportError,
1911 "Cannot re-init internal module %.200s",
1912 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001913 return -1;
1914 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001915 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001916 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001917 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001918 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001919 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001920 if (_PyImport_FixupExtension(name, name) == NULL)
1921 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001922 return 1;
1923 }
1924 }
1925 return 0;
1926}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001927
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001928
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001929/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001930
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001931static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001932find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001933{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001934 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001935
Guido van Rossum79f25d91997-04-29 20:08:16 +00001936 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001937 if (p->name == NULL)
1938 return NULL;
1939 if (strcmp(p->name, name) == 0)
1940 break;
1941 }
1942 return p;
1943}
1944
Guido van Rossum79f25d91997-04-29 20:08:16 +00001945static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001946get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001947{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001948 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001949 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001950
1951 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001952 PyErr_Format(PyExc_ImportError,
1953 "No such frozen object named %.200s",
1954 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001955 return NULL;
1956 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001957 if (p->code == NULL) {
1958 PyErr_Format(PyExc_ImportError,
1959 "Excluded frozen object named %.200s",
1960 name);
1961 return NULL;
1962 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001963 size = p->size;
1964 if (size < 0)
1965 size = -size;
1966 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001967}
1968
1969/* Initialize a frozen module.
1970 Return 1 for succes, 0 if the module is not found, and -1 with
1971 an exception set if the initialization failed.
1972 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001973
1974int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001975PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001976{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001977 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001978 PyObject *co;
1979 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001980 int ispackage;
1981 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001982
1983 if (p == NULL)
1984 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001985 if (p->code == NULL) {
1986 PyErr_Format(PyExc_ImportError,
1987 "Excluded frozen object named %.200s",
1988 name);
1989 return -1;
1990 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001991 size = p->size;
1992 ispackage = (size < 0);
1993 if (ispackage)
1994 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001995 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001996 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001997 name, ispackage ? " package" : "");
1998 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001999 if (co == NULL)
2000 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002001 if (!PyCode_Check(co)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002002 PyErr_Format(PyExc_TypeError,
2003 "frozen object %.200s is not a code object",
2004 name);
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002005 goto err_return;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002006 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00002007 if (ispackage) {
2008 /* Set __path__ to the package name */
2009 PyObject *d, *s;
2010 int err;
2011 m = PyImport_AddModule(name);
2012 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002013 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002014 d = PyModule_GetDict(m);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002015 s = PyString_InternFromString(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00002016 if (s == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002017 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002018 err = PyDict_SetItemString(d, "__path__", s);
2019 Py_DECREF(s);
2020 if (err != 0)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002021 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002022 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00002023 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002024 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002025 goto err_return;
2026 Py_DECREF(co);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002027 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002028 return 1;
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002029err_return:
2030 Py_DECREF(co);
2031 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002032}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002033
2034
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002035/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002036 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002037
Guido van Rossum79f25d91997-04-29 20:08:16 +00002038PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002039PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002040{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002041 PyObject *pname;
2042 PyObject *result;
2043
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002044 pname = PyString_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00002045 if (pname == NULL)
2046 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002047 result = PyImport_Import(pname);
2048 Py_DECREF(pname);
2049 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002050}
2051
Christian Heimes000a0742008-01-03 22:16:32 +00002052/* Import a module without blocking
2053 *
2054 * At first it tries to fetch the module from sys.modules. If the module was
2055 * never loaded before it loads it with PyImport_ImportModule() unless another
2056 * thread holds the import lock. In the latter case the function raises an
2057 * ImportError instead of blocking.
2058 *
2059 * Returns the module object with incremented ref count.
2060 */
2061PyObject *
2062PyImport_ImportModuleNoBlock(const char *name)
2063{
2064 PyObject *result;
2065 PyObject *modules;
2066 long me;
2067
2068 /* Try to get the module from sys.modules[name] */
2069 modules = PyImport_GetModuleDict();
2070 if (modules == NULL)
2071 return NULL;
2072
2073 result = PyDict_GetItemString(modules, name);
2074 if (result != NULL) {
2075 Py_INCREF(result);
2076 return result;
2077 }
2078 else {
2079 PyErr_Clear();
2080 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002081#ifdef WITH_THREAD
Christian Heimes000a0742008-01-03 22:16:32 +00002082 /* check the import lock
2083 * me might be -1 but I ignore the error here, the lock function
2084 * takes care of the problem */
2085 me = PyThread_get_thread_ident();
2086 if (import_lock_thread == -1 || import_lock_thread == me) {
2087 /* no thread or me is holding the lock */
2088 return PyImport_ImportModule(name);
2089 }
2090 else {
2091 PyErr_Format(PyExc_ImportError,
2092 "Failed to import %.200s because the import lock"
2093 "is held by another thread.",
2094 name);
2095 return NULL;
2096 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002097#else
2098 return PyImport_ImportModule(name);
2099#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002100}
2101
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002102/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002103static PyObject *get_parent(PyObject *globals, char *buf,
2104 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002105static PyObject *load_next(PyObject *mod, PyObject *altmod,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002106 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002107static int mark_miss(char *name);
2108static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002109 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002110static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002111
2112/* The Magnum Opus of dotted-name import :-) */
2113
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002114static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002115import_module_level(char *name, PyObject *globals, PyObject *locals,
2116 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002117{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002118 char buf[MAXPATHLEN+1];
Martin v. Löwis18e16552006-02-15 17:27:45 +00002119 Py_ssize_t buflen = 0;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002120 PyObject *parent, *head, *next, *tail;
2121
Christian Heimes3403f152008-01-09 19:56:33 +00002122 if (strchr(name, '/') != NULL
2123#ifdef MS_WINDOWS
2124 || strchr(name, '\\') != NULL
2125#endif
2126 ) {
2127 PyErr_SetString(PyExc_ImportError,
2128 "Import by filename is not supported.");
2129 return NULL;
2130 }
2131
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002132 parent = get_parent(globals, buf, &buflen, level);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002133 if (parent == NULL)
2134 return NULL;
2135
2136 head = load_next(parent, Py_None, &name, buf, &buflen);
2137 if (head == NULL)
2138 return NULL;
2139
2140 tail = head;
2141 Py_INCREF(tail);
2142 while (name) {
2143 next = load_next(tail, tail, &name, buf, &buflen);
2144 Py_DECREF(tail);
2145 if (next == NULL) {
2146 Py_DECREF(head);
2147 return NULL;
2148 }
2149 tail = next;
2150 }
Thomas Wouters8ddab272006-04-04 16:17:02 +00002151 if (tail == Py_None) {
2152 /* If tail is Py_None, both get_parent and load_next found
2153 an empty module name: someone called __import__("") or
2154 doctored faulty bytecode */
Thomas Wouters4bdaa272006-04-05 13:39:37 +00002155 Py_DECREF(tail);
2156 Py_DECREF(head);
Thomas Wouters8ddab272006-04-04 16:17:02 +00002157 PyErr_SetString(PyExc_ValueError,
2158 "Empty module name");
2159 return NULL;
2160 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002161
2162 if (fromlist != NULL) {
2163 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2164 fromlist = NULL;
2165 }
2166
2167 if (fromlist == NULL) {
2168 Py_DECREF(tail);
2169 return head;
2170 }
2171
2172 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002173 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002174 Py_DECREF(tail);
2175 return NULL;
2176 }
2177
2178 return tail;
2179}
2180
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002181PyObject *
2182PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2183 PyObject *fromlist, int level)
2184{
2185 PyObject *result;
2186 lock_import();
2187 result = import_module_level(name, globals, locals, fromlist, level);
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002188 if (unlock_import() < 0) {
2189 Py_XDECREF(result);
2190 PyErr_SetString(PyExc_RuntimeError,
2191 "not holding the import lock");
2192 return NULL;
2193 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002194 return result;
2195}
2196
Fred Drake87590902004-05-28 20:21:36 +00002197/* Return the package that an import is being performed in. If globals comes
2198 from the module foo.bar.bat (not itself a package), this returns the
2199 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Georg Brandl5f6861d2006-05-28 21:57:35 +00002200 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002201
2202 The *name* of the returned package is returned in buf, with the length of
2203 the name in *p_buflen.
2204
2205 If globals doesn't come from a package or a module in a package, or a
2206 corresponding entry is not found in sys.modules, Py_None is returned.
2207*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002208static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002209get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002210{
2211 static PyObject *namestr = NULL;
2212 static PyObject *pathstr = NULL;
Nick Coghlanef01d822007-12-03 12:55:17 +00002213 static PyObject *pkgstr = NULL;
2214 PyObject *pkgname, *modname, *modpath, *modules, *parent;
Nick Coghlanb028f502008-07-13 14:52:36 +00002215 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002216
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002217 if (globals == NULL || !PyDict_Check(globals) || !level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002218 return Py_None;
2219
2220 if (namestr == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002221 namestr = PyString_InternFromString("__name__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002222 if (namestr == NULL)
2223 return NULL;
2224 }
2225 if (pathstr == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002226 pathstr = PyString_InternFromString("__path__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002227 if (pathstr == NULL)
2228 return NULL;
2229 }
Nick Coghlanef01d822007-12-03 12:55:17 +00002230 if (pkgstr == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002231 pkgstr = PyString_InternFromString("__package__");
Nick Coghlanef01d822007-12-03 12:55:17 +00002232 if (pkgstr == NULL)
2233 return NULL;
2234 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002235
2236 *buf = '\0';
2237 *p_buflen = 0;
Nick Coghlanef01d822007-12-03 12:55:17 +00002238 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002239
Nick Coghlanef01d822007-12-03 12:55:17 +00002240 if ((pkgname != NULL) && (pkgname != Py_None)) {
2241 /* __package__ is set, so use it */
2242 Py_ssize_t len;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002243 if (!PyString_Check(pkgname)) {
Nick Coghlanef01d822007-12-03 12:55:17 +00002244 PyErr_SetString(PyExc_ValueError,
2245 "__package__ set to non-string");
2246 return NULL;
2247 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002248 len = PyString_GET_SIZE(pkgname);
Nick Coghlanef01d822007-12-03 12:55:17 +00002249 if (len == 0) {
2250 if (level > 0) {
2251 PyErr_SetString(PyExc_ValueError,
2252 "Attempted relative import in non-package");
2253 return NULL;
2254 }
2255 return Py_None;
2256 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002257 if (len > MAXPATHLEN) {
2258 PyErr_SetString(PyExc_ValueError,
Nick Coghlanef01d822007-12-03 12:55:17 +00002259 "Package name too long");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002260 return NULL;
2261 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002262 strcpy(buf, PyString_AS_STRING(pkgname));
Nick Coghlanef01d822007-12-03 12:55:17 +00002263 } else {
2264 /* __package__ not set, so figure it out and set it */
2265 modname = PyDict_GetItem(globals, namestr);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002266 if (modname == NULL || !PyString_Check(modname))
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002267 return Py_None;
Nick Coghlanef01d822007-12-03 12:55:17 +00002268
2269 modpath = PyDict_GetItem(globals, pathstr);
2270 if (modpath != NULL) {
2271 /* __path__ is set, so modname is already the package name */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002272 Py_ssize_t len = PyString_GET_SIZE(modname);
Nick Coghlanef01d822007-12-03 12:55:17 +00002273 int error;
2274 if (len > MAXPATHLEN) {
2275 PyErr_SetString(PyExc_ValueError,
2276 "Module name too long");
2277 return NULL;
2278 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002279 strcpy(buf, PyString_AS_STRING(modname));
Nick Coghlanef01d822007-12-03 12:55:17 +00002280 error = PyDict_SetItem(globals, pkgstr, modname);
2281 if (error) {
2282 PyErr_SetString(PyExc_ValueError,
2283 "Could not set __package__");
2284 return NULL;
2285 }
2286 } else {
2287 /* Normal module, so work out the package name if any */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002288 char *start = PyString_AS_STRING(modname);
Nick Coghlanef01d822007-12-03 12:55:17 +00002289 char *lastdot = strrchr(start, '.');
2290 size_t len;
2291 int error;
2292 if (lastdot == NULL && level > 0) {
2293 PyErr_SetString(PyExc_ValueError,
2294 "Attempted relative import in non-package");
2295 return NULL;
2296 }
2297 if (lastdot == NULL) {
2298 error = PyDict_SetItem(globals, pkgstr, Py_None);
2299 if (error) {
2300 PyErr_SetString(PyExc_ValueError,
2301 "Could not set __package__");
2302 return NULL;
2303 }
2304 return Py_None;
2305 }
2306 len = lastdot - start;
2307 if (len >= MAXPATHLEN) {
2308 PyErr_SetString(PyExc_ValueError,
2309 "Module name too long");
2310 return NULL;
2311 }
2312 strncpy(buf, start, len);
2313 buf[len] = '\0';
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002314 pkgname = PyString_FromString(buf);
Nick Coghlanef01d822007-12-03 12:55:17 +00002315 if (pkgname == NULL) {
2316 return NULL;
2317 }
2318 error = PyDict_SetItem(globals, pkgstr, pkgname);
2319 Py_DECREF(pkgname);
2320 if (error) {
2321 PyErr_SetString(PyExc_ValueError,
2322 "Could not set __package__");
2323 return NULL;
2324 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002325 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002326 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002327 while (--level > 0) {
2328 char *dot = strrchr(buf, '.');
2329 if (dot == NULL) {
2330 PyErr_SetString(PyExc_ValueError,
Georg Brandl98775df2006-09-06 06:09:31 +00002331 "Attempted relative import beyond "
2332 "toplevel package");
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002333 return NULL;
2334 }
2335 *dot = '\0';
2336 }
2337 *p_buflen = strlen(buf);
2338
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002339 modules = PyImport_GetModuleDict();
2340 parent = PyDict_GetItemString(modules, buf);
Nick Coghlanb028f502008-07-13 14:52:36 +00002341 if (parent == NULL) {
2342 if (orig_level < 1) {
2343 PyObject *err_msg = PyString_FromFormat(
2344 "Parent module '%.200s' not found "
2345 "while handling absolute import", buf);
2346 if (err_msg == NULL) {
2347 return NULL;
2348 }
2349 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2350 PyString_AsString(err_msg), 1)) {
2351 *buf = '\0';
2352 *p_buflen = 0;
2353 parent = Py_None;
2354 }
2355 Py_DECREF(err_msg);
2356 } else {
2357 PyErr_Format(PyExc_SystemError,
2358 "Parent module '%.200s' not loaded, "
2359 "cannot perform relative import", buf);
2360 }
2361 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002362 return parent;
2363 /* We expect, but can't guarantee, if parent != None, that:
2364 - parent.__name__ == buf
2365 - parent.__dict__ is globals
2366 If this is violated... Who cares? */
2367}
2368
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002369/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002370static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002371load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002372 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002373{
2374 char *name = *p_name;
2375 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002376 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002377 char *p;
2378 PyObject *result;
2379
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002380 if (strlen(name) == 0) {
Thomas Wouters8ddab272006-04-04 16:17:02 +00002381 /* completely empty module name should only happen in
2382 'from . import' (or '__import__("")')*/
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002383 Py_INCREF(mod);
2384 *p_name = NULL;
2385 return mod;
2386 }
2387
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002388 if (dot == NULL) {
2389 *p_name = NULL;
2390 len = strlen(name);
2391 }
2392 else {
2393 *p_name = dot+1;
2394 len = dot-name;
2395 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002396 if (len == 0) {
2397 PyErr_SetString(PyExc_ValueError,
2398 "Empty module name");
2399 return NULL;
2400 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002401
2402 p = buf + *p_buflen;
2403 if (p != buf)
2404 *p++ = '.';
2405 if (p+len-buf >= MAXPATHLEN) {
2406 PyErr_SetString(PyExc_ValueError,
2407 "Module name too long");
2408 return NULL;
2409 }
2410 strncpy(p, name, len);
2411 p[len] = '\0';
2412 *p_buflen = p+len-buf;
2413
2414 result = import_submodule(mod, p, buf);
2415 if (result == Py_None && altmod != mod) {
2416 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002417 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002418 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002419 if (result != NULL && result != Py_None) {
2420 if (mark_miss(buf) != 0) {
2421 Py_DECREF(result);
2422 return NULL;
2423 }
2424 strncpy(buf, name, len);
2425 buf[len] = '\0';
2426 *p_buflen = len;
2427 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002428 }
2429 if (result == NULL)
2430 return NULL;
2431
2432 if (result == Py_None) {
2433 Py_DECREF(result);
2434 PyErr_Format(PyExc_ImportError,
2435 "No module named %.200s", name);
2436 return NULL;
2437 }
2438
2439 return result;
2440}
2441
2442static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002443mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002444{
2445 PyObject *modules = PyImport_GetModuleDict();
2446 return PyDict_SetItemString(modules, name, Py_None);
2447}
2448
2449static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002450ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002451 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002452{
2453 int i;
2454
2455 if (!PyObject_HasAttrString(mod, "__path__"))
2456 return 1;
2457
2458 for (i = 0; ; i++) {
2459 PyObject *item = PySequence_GetItem(fromlist, i);
2460 int hasit;
2461 if (item == NULL) {
2462 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2463 PyErr_Clear();
2464 return 1;
2465 }
2466 return 0;
2467 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002468 if (!PyString_Check(item)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002469 PyErr_SetString(PyExc_TypeError,
2470 "Item in ``from list'' not a string");
2471 Py_DECREF(item);
2472 return 0;
2473 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002474 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002475 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002476 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002477 /* See if the package defines __all__ */
2478 if (recursive)
2479 continue; /* Avoid endless recursion */
2480 all = PyObject_GetAttrString(mod, "__all__");
2481 if (all == NULL)
2482 PyErr_Clear();
2483 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002484 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002485 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002486 if (!ret)
2487 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002488 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002489 continue;
2490 }
2491 hasit = PyObject_HasAttr(mod, item);
2492 if (!hasit) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002493 char *subname = PyString_AS_STRING(item);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002494 PyObject *submod;
2495 char *p;
2496 if (buflen + strlen(subname) >= MAXPATHLEN) {
2497 PyErr_SetString(PyExc_ValueError,
2498 "Module name too long");
2499 Py_DECREF(item);
2500 return 0;
2501 }
2502 p = buf + buflen;
2503 *p++ = '.';
2504 strcpy(p, subname);
2505 submod = import_submodule(mod, subname, buf);
2506 Py_XDECREF(submod);
2507 if (submod == NULL) {
2508 Py_DECREF(item);
2509 return 0;
2510 }
2511 }
2512 Py_DECREF(item);
2513 }
2514
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002515 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002516}
2517
Neil Schemenauer00b09662003-06-16 21:03:07 +00002518static int
2519add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2520 PyObject *modules)
2521{
2522 if (mod == Py_None)
2523 return 1;
2524 /* Irrespective of the success of this load, make a
2525 reference to it in the parent package module. A copy gets
2526 saved in the modules dictionary under the full name, so get a
2527 reference from there, if need be. (The exception is when the
2528 load failed with a SyntaxError -- then there's no trace in
2529 sys.modules. In that case, of course, do nothing extra.) */
2530 if (submod == NULL) {
2531 submod = PyDict_GetItemString(modules, fullname);
2532 if (submod == NULL)
2533 return 1;
2534 }
2535 if (PyModule_Check(mod)) {
2536 /* We can't use setattr here since it can give a
2537 * spurious warning if the submodule name shadows a
2538 * builtin name */
2539 PyObject *dict = PyModule_GetDict(mod);
2540 if (!dict)
2541 return 0;
2542 if (PyDict_SetItemString(dict, subname, submod) < 0)
2543 return 0;
2544 }
2545 else {
2546 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2547 return 0;
2548 }
2549 return 1;
2550}
2551
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002552static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002553import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002554{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002555 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002556 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002557
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002558 /* Require:
2559 if mod == None: subname == fullname
2560 else: mod.__name__ + "." + subname == fullname
2561 */
2562
Tim Peters50d8d372001-02-28 05:34:27 +00002563 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002564 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002565 }
2566 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002567 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002568 char buf[MAXPATHLEN+1];
2569 struct filedescr *fdp;
2570 FILE *fp = NULL;
2571
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002572 if (mod == Py_None)
2573 path = NULL;
2574 else {
2575 path = PyObject_GetAttrString(mod, "__path__");
2576 if (path == NULL) {
2577 PyErr_Clear();
2578 Py_INCREF(Py_None);
2579 return Py_None;
2580 }
2581 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002582
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002583 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002584 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2585 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002586 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002587 if (fdp == NULL) {
2588 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2589 return NULL;
2590 PyErr_Clear();
2591 Py_INCREF(Py_None);
2592 return Py_None;
2593 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002594 m = load_module(fullname, fp, buf, fdp->type, loader);
2595 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002596 if (fp)
2597 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002598 if (!add_submodule(mod, m, fullname, subname, modules)) {
2599 Py_XDECREF(m);
2600 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002601 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002602 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002603
2604 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002605}
2606
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002607
2608/* Re-import a module of any kind and return its module object, WITH
2609 INCREMENTED REFERENCE COUNT */
2610
Guido van Rossum79f25d91997-04-29 20:08:16 +00002611PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002612PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002613{
Collin Winter47c52a82007-03-13 23:02:15 +00002614 PyInterpreterState *interp = PyThreadState_Get()->interp;
2615 PyObject *modules_reloading = interp->modules_reloading;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002616 PyObject *modules = PyImport_GetModuleDict();
Collin Winter276887b2007-03-12 16:11:39 +00002617 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002618 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002619 char buf[MAXPATHLEN+1];
2620 struct filedescr *fdp;
2621 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002622 PyObject *newm;
Collin Winter47c52a82007-03-13 23:02:15 +00002623
2624 if (modules_reloading == NULL) {
2625 Py_FatalError("PyImport_ReloadModule: "
Neal Norwitz2fca81c2007-05-30 04:53:41 +00002626 "no modules_reloading dictionary!");
Collin Winter47c52a82007-03-13 23:02:15 +00002627 return NULL;
2628 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002629
Guido van Rossum79f25d91997-04-29 20:08:16 +00002630 if (m == NULL || !PyModule_Check(m)) {
2631 PyErr_SetString(PyExc_TypeError,
2632 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002633 return NULL;
2634 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002635 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002636 if (name == NULL)
2637 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002638 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002639 PyErr_Format(PyExc_ImportError,
2640 "reload(): module %.200s not in sys.modules",
2641 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002642 return NULL;
2643 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002644 existing_m = PyDict_GetItemString(modules_reloading, name);
2645 if (existing_m != NULL) {
2646 /* Due to a recursive reload, this module is already
2647 being reloaded. */
2648 Py_INCREF(existing_m);
2649 return existing_m;
Collin Winter276887b2007-03-12 16:11:39 +00002650 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002651 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2652 return NULL;
Collin Winter276887b2007-03-12 16:11:39 +00002653
Guido van Rossum222ef561997-09-06 19:41:09 +00002654 subname = strrchr(name, '.');
2655 if (subname == NULL)
2656 subname = name;
2657 else {
2658 PyObject *parentname, *parent;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002659 parentname = PyString_FromStringAndSize(name, (subname-name));
Collin Winter276887b2007-03-12 16:11:39 +00002660 if (parentname == NULL) {
2661 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002662 return NULL;
Neal Norwitz75c7c802007-03-13 05:31:38 +00002663 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002664 parent = PyDict_GetItem(modules, parentname);
2665 if (parent == NULL) {
2666 PyErr_Format(PyExc_ImportError,
2667 "reload(): parent %.200s not in sys.modules",
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002668 PyString_AS_STRING(parentname));
Georg Brandl0c55f292005-09-14 06:56:20 +00002669 Py_DECREF(parentname);
Neal Norwitz2fca81c2007-05-30 04:53:41 +00002670 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002671 return NULL;
2672 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002673 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002674 subname++;
2675 path = PyObject_GetAttrString(parent, "__path__");
2676 if (path == NULL)
2677 PyErr_Clear();
2678 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002679 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002680 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002681 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002682
2683 if (fdp == NULL) {
2684 Py_XDECREF(loader);
Collin Winter276887b2007-03-12 16:11:39 +00002685 imp_modules_reloading_clear();
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002686 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002687 }
2688
2689 newm = load_module(name, fp, buf, fdp->type, loader);
2690 Py_XDECREF(loader);
2691
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002692 if (fp)
2693 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002694 if (newm == NULL) {
2695 /* load_module probably removed name from modules because of
2696 * the error. Put back the original module object. We're
2697 * going to return NULL in this case regardless of whether
2698 * replacing name succeeds, so the return value is ignored.
2699 */
2700 PyDict_SetItemString(modules, name, m);
2701 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002702 imp_modules_reloading_clear();
Tim Peters1cd70172004-08-02 03:52:12 +00002703 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002704}
2705
2706
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002707/* Higher-level import emulator which emulates the "import" statement
2708 more accurately -- it invokes the __import__() function from the
2709 builtins of the current globals. This means that the import is
2710 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002711 environment, e.g. by "rexec".
2712 A dummy list ["__doc__"] is passed as the 4th argument so that
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002713 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00002714 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002715
2716PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002717PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002718{
2719 static PyObject *silly_list = NULL;
2720 static PyObject *builtins_str = NULL;
2721 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002722 PyObject *globals = NULL;
2723 PyObject *import = NULL;
2724 PyObject *builtins = NULL;
2725 PyObject *r = NULL;
2726
2727 /* Initialize constant string objects */
2728 if (silly_list == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002729 import_str = PyString_InternFromString("__import__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002730 if (import_str == NULL)
2731 return NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002732 builtins_str = PyString_InternFromString("__builtins__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002733 if (builtins_str == NULL)
2734 return NULL;
2735 silly_list = Py_BuildValue("[s]", "__doc__");
2736 if (silly_list == NULL)
2737 return NULL;
2738 }
2739
2740 /* Get the builtins from current globals */
2741 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002742 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002743 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002744 builtins = PyObject_GetItem(globals, builtins_str);
2745 if (builtins == NULL)
2746 goto err;
2747 }
2748 else {
2749 /* No globals -- use standard builtins, and fake globals */
2750 PyErr_Clear();
2751
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002752 builtins = PyImport_ImportModuleLevel("__builtin__",
2753 NULL, NULL, NULL, 0);
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002754 if (builtins == NULL)
2755 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002756 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2757 if (globals == NULL)
2758 goto err;
2759 }
2760
2761 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002762 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002763 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002764 if (import == NULL)
2765 PyErr_SetObject(PyExc_KeyError, import_str);
2766 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002767 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002768 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002769 if (import == NULL)
2770 goto err;
2771
Christian Heimes000a0742008-01-03 22:16:32 +00002772 /* Call the __import__ function with the proper argument list
2773 * Always use absolute import here. */
2774 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2775 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002776
2777 err:
2778 Py_XDECREF(globals);
2779 Py_XDECREF(builtins);
2780 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002781
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002782 return r;
2783}
2784
2785
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002786/* Module 'imp' provides Python access to the primitives used for
2787 importing modules.
2788*/
2789
Guido van Rossum79f25d91997-04-29 20:08:16 +00002790static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002791imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002792{
2793 char buf[4];
2794
Guido van Rossum96774c12000-05-01 20:19:08 +00002795 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2796 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2797 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2798 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002799
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002800 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002801}
2802
Guido van Rossum79f25d91997-04-29 20:08:16 +00002803static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002804imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002805{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002806 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002807 struct filedescr *fdp;
2808
Guido van Rossum79f25d91997-04-29 20:08:16 +00002809 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002810 if (list == NULL)
2811 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002812 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2813 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002814 fdp->suffix, fdp->mode, fdp->type);
2815 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002816 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002817 return NULL;
2818 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002819 if (PyList_Append(list, item) < 0) {
2820 Py_DECREF(list);
2821 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002822 return NULL;
2823 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002824 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002825 }
2826 return list;
2827}
2828
Guido van Rossum79f25d91997-04-29 20:08:16 +00002829static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002830call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002831{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002832 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002833 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002834 struct filedescr *fdp;
2835 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002836 FILE *fp = NULL;
2837
2838 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002839 if (path == Py_None)
2840 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002841 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002842 if (fdp == NULL)
2843 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002844 if (fp != NULL) {
2845 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2846 if (fob == NULL) {
2847 fclose(fp);
2848 return NULL;
2849 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002850 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002851 else {
2852 fob = Py_None;
2853 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002854 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002855 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002856 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002857 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002858 return ret;
2859}
2860
Guido van Rossum79f25d91997-04-29 20:08:16 +00002861static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002862imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002863{
2864 char *name;
2865 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002866 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002867 return NULL;
2868 return call_find_module(name, path);
2869}
2870
2871static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002872imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002873{
2874 char *name;
2875 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002876 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002877 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002878 return NULL;
2879 ret = init_builtin(name);
2880 if (ret < 0)
2881 return NULL;
2882 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002883 Py_INCREF(Py_None);
2884 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002885 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002886 m = PyImport_AddModule(name);
2887 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002888 return m;
2889}
2890
Guido van Rossum79f25d91997-04-29 20:08:16 +00002891static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002892imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002893{
2894 char *name;
2895 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002896 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002897 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002898 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002899 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002900 if (ret < 0)
2901 return NULL;
2902 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002903 Py_INCREF(Py_None);
2904 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002905 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002906 m = PyImport_AddModule(name);
2907 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002908 return m;
2909}
2910
Guido van Rossum79f25d91997-04-29 20:08:16 +00002911static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002912imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002913{
2914 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002915
Guido van Rossum43713e52000-02-29 13:59:29 +00002916 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002917 return NULL;
2918 return get_frozen_object(name);
2919}
2920
Guido van Rossum79f25d91997-04-29 20:08:16 +00002921static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002922imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002923{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002924 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002925 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002926 return NULL;
Guido van Rossum50ee94f2002-04-09 18:00:58 +00002927 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002928}
2929
Guido van Rossum79f25d91997-04-29 20:08:16 +00002930static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002931imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002932{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002933 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002934 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002935 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002936 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002937 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00002938 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002939}
2940
2941static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002942get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002943{
2944 FILE *fp;
2945 if (fob == NULL) {
Tim Peters86c7d2f2004-08-01 23:24:21 +00002946 if (mode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002947 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002948 fp = fopen(pathname, mode);
2949 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002950 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002951 }
2952 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002953 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002954 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002955 PyErr_SetString(PyExc_ValueError,
2956 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002957 }
2958 return fp;
2959}
2960
Guido van Rossum79f25d91997-04-29 20:08:16 +00002961static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002962imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002963{
2964 char *name;
2965 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002966 PyObject *fob = NULL;
2967 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002968 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002969 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002970 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002971 return NULL;
2972 fp = get_file(pathname, fob, "rb");
2973 if (fp == NULL)
2974 return NULL;
2975 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002976 if (fob == NULL)
2977 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002978 return m;
2979}
2980
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002981#ifdef HAVE_DYNAMIC_LOADING
2982
Guido van Rossum79f25d91997-04-29 20:08:16 +00002983static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002984imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002985{
2986 char *name;
2987 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002988 PyObject *fob = NULL;
2989 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002990 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002991 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002992 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002993 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002994 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002995 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002996 if (fp == NULL)
2997 return NULL;
2998 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002999 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00003000 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003001}
3002
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003003#endif /* HAVE_DYNAMIC_LOADING */
3004
Guido van Rossum79f25d91997-04-29 20:08:16 +00003005static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003006imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003007{
3008 char *name;
3009 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003010 PyObject *fob = NULL;
3011 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003012 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00003013 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00003014 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003015 return NULL;
3016 fp = get_file(pathname, fob, "r");
3017 if (fp == NULL)
3018 return NULL;
3019 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003020 if (fob == NULL)
3021 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003022 return m;
3023}
3024
Guido van Rossum79f25d91997-04-29 20:08:16 +00003025static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003026imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003027{
3028 char *name;
3029 PyObject *fob;
3030 char *pathname;
3031 char *suffix; /* Unused */
3032 char *mode;
3033 int type;
3034 FILE *fp;
3035
Guido van Rossum43713e52000-02-29 13:59:29 +00003036 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003037 &name, &fob, &pathname,
3038 &suffix, &mode, &type))
3039 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003040 if (*mode) {
3041 /* Mode must start with 'r' or 'U' and must not contain '+'.
3042 Implicit in this test is the assumption that the mode
3043 may contain other modifiers like 'b' or 't'. */
3044
3045 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00003046 PyErr_Format(PyExc_ValueError,
3047 "invalid file open mode %.200s", mode);
3048 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003049 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003050 }
3051 if (fob == Py_None)
3052 fp = NULL;
3053 else {
3054 if (!PyFile_Check(fob)) {
3055 PyErr_SetString(PyExc_ValueError,
3056 "load_module arg#2 should be a file or None");
3057 return NULL;
3058 }
3059 fp = get_file(pathname, fob, mode);
3060 if (fp == NULL)
3061 return NULL;
3062 }
Just van Rossum52e14d62002-12-30 22:08:05 +00003063 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003064}
3065
3066static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003067imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003068{
3069 char *name;
3070 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00003071 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003072 return NULL;
3073 return load_package(name, pathname);
3074}
3075
3076static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003077imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003078{
3079 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00003080 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003081 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003082 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003083}
3084
Brett Cannon3aa2a492008-08-06 22:28:09 +00003085static PyObject *
3086imp_reload(PyObject *self, PyObject *v)
3087{
3088 return PyImport_ReloadModule(v);
3089}
3090
3091
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003092/* Doc strings */
3093
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003094PyDoc_STRVAR(doc_imp,
3095"This module provides the components needed to build your own\n\
3096__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003097
Brett Cannon3aa2a492008-08-06 22:28:09 +00003098PyDoc_STRVAR(doc_reload,
3099"reload(module) -> module\n\
3100\n\
3101Reload the module. The module must have been successfully imported before.");
3102
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003103PyDoc_STRVAR(doc_find_module,
3104"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003105Search for a module. If path is omitted or None, search for a\n\
3106built-in, frozen or special module and continue search in sys.path.\n\
3107The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003108package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003109
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003110PyDoc_STRVAR(doc_load_module,
3111"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003112Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003113The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003114
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003115PyDoc_STRVAR(doc_get_magic,
3116"get_magic() -> string\n\
3117Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003118
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003119PyDoc_STRVAR(doc_get_suffixes,
3120"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003121Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003122that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003123
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003124PyDoc_STRVAR(doc_new_module,
3125"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003126Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003127The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003128
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003129PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003130"lock_held() -> boolean\n\
3131Return True if the import lock is currently held, else False.\n\
3132On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003133
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003134PyDoc_STRVAR(doc_acquire_lock,
3135"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003136Acquires the interpreter's import lock for the current thread.\n\
3137This lock should be used by import hooks to ensure thread-safety\n\
3138when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003139On platforms without threads, this function does nothing.");
3140
3141PyDoc_STRVAR(doc_release_lock,
3142"release_lock() -> None\n\
3143Release the interpreter's import lock.\n\
3144On platforms without threads, this function does nothing.");
3145
Guido van Rossum79f25d91997-04-29 20:08:16 +00003146static PyMethodDef imp_methods[] = {
Brett Cannon3aa2a492008-08-06 22:28:09 +00003147 {"reload", imp_reload, METH_O, doc_reload},
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003148 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3149 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3150 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3151 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3152 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3153 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3154 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3155 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003156 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00003157 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3158 {"init_builtin", imp_init_builtin, METH_VARARGS},
3159 {"init_frozen", imp_init_frozen, METH_VARARGS},
3160 {"is_builtin", imp_is_builtin, METH_VARARGS},
3161 {"is_frozen", imp_is_frozen, METH_VARARGS},
3162 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003163#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00003164 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003165#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00003166 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00003167 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003168 {NULL, NULL} /* sentinel */
3169};
3170
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003171static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003172setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003173{
3174 PyObject *v;
3175 int err;
3176
3177 v = PyInt_FromLong((long)value);
3178 err = PyDict_SetItemString(d, name, v);
3179 Py_XDECREF(v);
3180 return err;
3181}
3182
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003183typedef struct {
3184 PyObject_HEAD
3185} NullImporter;
3186
3187static int
3188NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3189{
3190 char *path;
Christian Heimescea681b2007-11-07 17:50:54 +00003191 Py_ssize_t pathlen;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003192
3193 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3194 return -1;
3195
3196 if (!PyArg_ParseTuple(args, "s:NullImporter",
3197 &path))
3198 return -1;
3199
Christian Heimescea681b2007-11-07 17:50:54 +00003200 pathlen = strlen(path);
3201 if (pathlen == 0) {
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003202 PyErr_SetString(PyExc_ImportError, "empty pathname");
3203 return -1;
3204 } else {
3205#ifndef RISCOS
Kristján Valur Jónsson3b2a6b82009-01-09 20:10:59 +00003206#ifndef MS_WINDOWS
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003207 struct stat statbuf;
3208 int rv;
3209
3210 rv = stat(path, &statbuf);
3211 if (rv == 0) {
3212 /* it exists */
3213 if (S_ISDIR(statbuf.st_mode)) {
3214 /* it's a directory */
3215 PyErr_SetString(PyExc_ImportError,
3216 "existing directory");
3217 return -1;
3218 }
3219 }
Kristján Valur Jónsson3b2a6b82009-01-09 20:10:59 +00003220#else /* MS_WINDOWS */
3221 DWORD rv;
3222 /* see issue1293 and issue3677:
3223 * stat() on Windows doesn't recognise paths like
3224 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
3225 */
3226 rv = GetFileAttributesA(path);
3227 if (rv != INVALID_FILE_ATTRIBUTES) {
3228 /* it exists */
3229 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
3230 /* it's a directory */
3231 PyErr_SetString(PyExc_ImportError,
3232 "existing directory");
3233 return -1;
3234 }
3235 }
3236#endif
3237#else /* RISCOS */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003238 if (object_exists(path)) {
3239 /* it exists */
3240 if (isdir(path)) {
3241 /* it's a directory */
3242 PyErr_SetString(PyExc_ImportError,
3243 "existing directory");
3244 return -1;
3245 }
3246 }
3247#endif
3248 }
3249 return 0;
3250}
3251
3252static PyObject *
3253NullImporter_find_module(NullImporter *self, PyObject *args)
3254{
3255 Py_RETURN_NONE;
3256}
3257
3258static PyMethodDef NullImporter_methods[] = {
3259 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3260 "Always return None"
3261 },
3262 {NULL} /* Sentinel */
3263};
3264
3265
Nick Coghlan327a39b2007-11-18 11:56:28 +00003266PyTypeObject PyNullImporter_Type = {
Martin v. Löwis68192102007-07-21 06:55:02 +00003267 PyVarObject_HEAD_INIT(NULL, 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003268 "imp.NullImporter", /*tp_name*/
3269 sizeof(NullImporter), /*tp_basicsize*/
3270 0, /*tp_itemsize*/
3271 0, /*tp_dealloc*/
3272 0, /*tp_print*/
3273 0, /*tp_getattr*/
3274 0, /*tp_setattr*/
3275 0, /*tp_compare*/
3276 0, /*tp_repr*/
3277 0, /*tp_as_number*/
3278 0, /*tp_as_sequence*/
3279 0, /*tp_as_mapping*/
3280 0, /*tp_hash */
3281 0, /*tp_call*/
3282 0, /*tp_str*/
3283 0, /*tp_getattro*/
3284 0, /*tp_setattro*/
3285 0, /*tp_as_buffer*/
3286 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3287 "Null importer object", /* tp_doc */
3288 0, /* tp_traverse */
3289 0, /* tp_clear */
3290 0, /* tp_richcompare */
3291 0, /* tp_weaklistoffset */
3292 0, /* tp_iter */
3293 0, /* tp_iternext */
3294 NullImporter_methods, /* tp_methods */
3295 0, /* tp_members */
3296 0, /* tp_getset */
3297 0, /* tp_base */
3298 0, /* tp_dict */
3299 0, /* tp_descr_get */
3300 0, /* tp_descr_set */
3301 0, /* tp_dictoffset */
3302 (initproc)NullImporter_init, /* tp_init */
3303 0, /* tp_alloc */
3304 PyType_GenericNew /* tp_new */
3305};
3306
3307
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003308PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003309initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003310{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003311 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003312
Nick Coghlan327a39b2007-11-18 11:56:28 +00003313 if (PyType_Ready(&PyNullImporter_Type) < 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003314 goto failure;
3315
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003316 m = Py_InitModule4("imp", imp_methods, doc_imp,
3317 NULL, PYTHON_API_VERSION);
Neal Norwitz1ac754f2006-01-19 06:09:39 +00003318 if (m == NULL)
3319 goto failure;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003320 d = PyModule_GetDict(m);
Neal Norwitz3cb31ac2006-08-13 18:10:47 +00003321 if (d == NULL)
3322 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003323
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003324 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3325 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3326 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3327 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3328 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3329 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3330 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3331 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00003332 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00003333 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003334
Nick Coghlan327a39b2007-11-18 11:56:28 +00003335 Py_INCREF(&PyNullImporter_Type);
3336 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003337 failure:
3338 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003339}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003340
3341
Guido van Rossumb18618d2000-05-03 23:44:39 +00003342/* API for embedding applications that want to add their own entries
3343 to the table of built-in modules. This should normally be called
3344 *before* Py_Initialize(). When the table resize fails, -1 is
3345 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003346
3347 After a similar function by Just van Rossum. */
3348
3349int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003350PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003351{
3352 static struct _inittab *our_copy = NULL;
3353 struct _inittab *p;
3354 int i, n;
3355
3356 /* Count the number of entries in both tables */
3357 for (n = 0; newtab[n].name != NULL; n++)
3358 ;
3359 if (n == 0)
3360 return 0; /* Nothing to do */
3361 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3362 ;
3363
3364 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00003365 p = our_copy;
3366 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003367 if (p == NULL)
3368 return -1;
3369
3370 /* Copy the tables into the new memory */
3371 if (our_copy != PyImport_Inittab)
3372 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3373 PyImport_Inittab = our_copy = p;
3374 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3375
3376 return 0;
3377}
3378
3379/* Shorthand to add a single entry given a name and a function */
3380
3381int
Brett Cannonc4f90eb2009-04-02 03:17:39 +00003382PyImport_AppendInittab(const char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003383{
3384 struct _inittab newtab[2];
3385
3386 memset(newtab, '\0', sizeof newtab);
3387
Brett Cannon238cedc2009-04-02 03:34:53 +00003388 newtab[0].name = (char *)name;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003389 newtab[0].initfunc = initfunc;
3390
3391 return PyImport_ExtendInittab(newtab);
3392}
Anthony Baxterac6bd462006-04-13 02:06:09 +00003393
3394#ifdef __cplusplus
3395}
3396#endif