blob: 3df70a88a278b702a9178b54a7ee5035085a0095 [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)
Alexandre Vassalottiee936a22010-01-09 23:35:54 +000078 Python 2.7a0 62201 (introduce BUILD_SET)
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000079.
Tim Peters36515e22001-11-18 04:06:29 +000080*/
Alexandre Vassalottiee936a22010-01-09 23:35:54 +000081#define MAGIC (62201 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000082
Guido van Rossum96774c12000-05-01 20:19:08 +000083/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000084 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000085 compiler works which are enabled by command line switches. */
Christian Heimes61e45902008-03-27 10:35:52 +000086static long pyc_magic = MAGIC;
Guido van Rossum96774c12000-05-01 20:19:08 +000087
Guido van Rossum25ce5661997-08-02 03:10:38 +000088/* See _PyImport_FixupExtension() below */
89static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000090
Guido van Rossum771c6c81997-10-31 18:37:24 +000091/* This table is defined in config.c: */
92extern struct _inittab _PyImport_Inittab[];
93
94struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000095
Guido van Rossumed1170e1999-12-20 21:23:41 +000096/* these tables define the module suffixes that Python recognizes */
97struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +000098
99#ifdef RISCOS
100static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +0000101 {"/py", "U", PY_SOURCE},
Guido van Rossum48a680c2001-03-02 06:34:14 +0000102 {"/pyc", "rb", PY_COMPILED},
103 {0, 0}
104};
105#else
Guido van Rossumed1170e1999-12-20 21:23:41 +0000106static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +0000107 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000108#ifdef MS_WINDOWS
Jack Jansenc88da1f2002-05-28 10:58:19 +0000109 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000110#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000111 {".pyc", "rb", PY_COMPILED},
112 {0, 0}
113};
Guido van Rossum48a680c2001-03-02 06:34:14 +0000114#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000115
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000116
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000117/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000118
119void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000120_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000121{
Guido van Rossumed1170e1999-12-20 21:23:41 +0000122 const struct filedescr *scan;
123 struct filedescr *filetab;
124 int countD = 0;
125 int countS = 0;
126
127 /* prepare _PyImport_Filetab: copy entries from
128 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
129 */
Georg Brandladd36e52007-08-23 18:08:06 +0000130#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossumed1170e1999-12-20 21:23:41 +0000131 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
132 ++countD;
Georg Brandladd36e52007-08-23 18:08:06 +0000133#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000134 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
135 ++countS;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000136 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
Neal Norwitze1fdb322006-07-21 05:32:28 +0000137 if (filetab == NULL)
Neal Norwitz33722ae2006-07-21 07:59:02 +0000138 Py_FatalError("Can't initialize import file table.");
Georg Brandladd36e52007-08-23 18:08:06 +0000139#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossumed1170e1999-12-20 21:23:41 +0000140 memcpy(filetab, _PyImport_DynLoadFiletab,
141 countD * sizeof(struct filedescr));
Georg Brandladd36e52007-08-23 18:08:06 +0000142#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000143 memcpy(filetab + countD, _PyImport_StandardFiletab,
144 countS * sizeof(struct filedescr));
145 filetab[countD + countS].suffix = NULL;
146
147 _PyImport_Filetab = filetab;
148
Guido van Rossum0824f631997-03-11 18:37:35 +0000149 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000150 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
151 for (; filetab->suffix != NULL; filetab++) {
Guido van Rossum48a680c2001-03-02 06:34:14 +0000152#ifndef RISCOS
Guido van Rossumed1170e1999-12-20 21:23:41 +0000153 if (strcmp(filetab->suffix, ".pyc") == 0)
154 filetab->suffix = ".pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000155#else
156 if (strcmp(filetab->suffix, "/pyc") == 0)
157 filetab->suffix = "/pyo";
158#endif
Guido van Rossum0824f631997-03-11 18:37:35 +0000159 }
160 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000161
162 if (Py_UnicodeFlag) {
163 /* Fix the pyc_magic so that byte compiled code created
164 using the all-Unicode method doesn't interfere with
165 code created in normal operation mode. */
166 pyc_magic = MAGIC + 1;
167 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000168}
169
Guido van Rossum25ce5661997-08-02 03:10:38 +0000170void
Just van Rossum52e14d62002-12-30 22:08:05 +0000171_PyImportHooks_Init(void)
172{
173 PyObject *v, *path_hooks = NULL, *zimpimport;
174 int err = 0;
175
176 /* adding sys.path_hooks and sys.path_importer_cache, setting up
177 zipimport */
Nick Coghlan327a39b2007-11-18 11:56:28 +0000178 if (PyType_Ready(&PyNullImporter_Type) < 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000179 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000180
181 if (Py_VerboseFlag)
182 PySys_WriteStderr("# installing zipimport hook\n");
183
184 v = PyList_New(0);
185 if (v == NULL)
186 goto error;
187 err = PySys_SetObject("meta_path", v);
188 Py_DECREF(v);
189 if (err)
190 goto error;
191 v = PyDict_New();
192 if (v == NULL)
193 goto error;
194 err = PySys_SetObject("path_importer_cache", v);
195 Py_DECREF(v);
196 if (err)
197 goto error;
198 path_hooks = PyList_New(0);
199 if (path_hooks == NULL)
200 goto error;
201 err = PySys_SetObject("path_hooks", path_hooks);
202 if (err) {
203 error:
204 PyErr_Print();
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000205 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
206 "path_importer_cache, or NullImporter failed"
207 );
Just van Rossum52e14d62002-12-30 22:08:05 +0000208 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000209
Just van Rossum52e14d62002-12-30 22:08:05 +0000210 zimpimport = PyImport_ImportModule("zipimport");
211 if (zimpimport == NULL) {
212 PyErr_Clear(); /* No zip import module -- okay */
213 if (Py_VerboseFlag)
214 PySys_WriteStderr("# can't import zipimport\n");
215 }
216 else {
217 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
218 "zipimporter");
219 Py_DECREF(zimpimport);
220 if (zipimporter == NULL) {
221 PyErr_Clear(); /* No zipimporter object -- okay */
222 if (Py_VerboseFlag)
223 PySys_WriteStderr(
Fred Drake1e5fc552003-07-11 15:01:02 +0000224 "# can't import zipimport.zipimporter\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000225 }
226 else {
227 /* sys.path_hooks.append(zipimporter) */
228 err = PyList_Append(path_hooks, zipimporter);
229 Py_DECREF(zipimporter);
230 if (err)
231 goto error;
232 if (Py_VerboseFlag)
233 PySys_WriteStderr(
234 "# installed zipimport hook\n");
235 }
236 }
237 Py_DECREF(path_hooks);
238}
239
240void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000241_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000242{
243 Py_XDECREF(extensions);
244 extensions = NULL;
Barry Warsaw84294482000-10-03 16:02:05 +0000245 PyMem_DEL(_PyImport_Filetab);
246 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000247}
248
249
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000250/* Locking primitives to prevent parallel imports of the same module
251 in different threads to return with a partially loaded module.
252 These calls are serialized by the global interpreter lock. */
253
254#ifdef WITH_THREAD
255
Guido van Rossum49b56061998-10-01 20:42:43 +0000256#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000257
Guido van Rossum65d5b571998-12-21 19:32:43 +0000258static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000259static long import_lock_thread = -1;
260static int import_lock_level = 0;
261
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000262void
263_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000264{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000265 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000266 if (me == -1)
267 return; /* Too bad */
Neal Norwitze1fdb322006-07-21 05:32:28 +0000268 if (import_lock == NULL) {
Guido van Rossum65d5b571998-12-21 19:32:43 +0000269 import_lock = PyThread_allocate_lock();
Neal Norwitze1fdb322006-07-21 05:32:28 +0000270 if (import_lock == NULL)
271 return; /* Nothing much we can do. */
272 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000273 if (import_lock_thread == me) {
274 import_lock_level++;
275 return;
276 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000277 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
278 {
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000279 PyThreadState *tstate = PyEval_SaveThread();
Guido van Rossum65d5b571998-12-21 19:32:43 +0000280 PyThread_acquire_lock(import_lock, 1);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000281 PyEval_RestoreThread(tstate);
282 }
283 import_lock_thread = me;
284 import_lock_level = 1;
285}
286
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000287int
288_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000289{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000290 long me = PyThread_get_thread_ident();
Neal Norwitze1fdb322006-07-21 05:32:28 +0000291 if (me == -1 || import_lock == NULL)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000292 return 0; /* Too bad */
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000293 if (import_lock_thread != me)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000294 return -1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000295 import_lock_level--;
296 if (import_lock_level == 0) {
297 import_lock_thread = -1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000298 PyThread_release_lock(import_lock);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000299 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000300 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000301}
302
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000303/* This function used to be called from PyOS_AfterFork to ensure that newly
304 created child processes do not share locks with the parent, but for some
305 reason only on AIX systems. Instead of re-initializing the lock, we now
306 acquire the import lock around fork() calls. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000307
308void
309_PyImport_ReInitLock(void)
310{
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000311}
312
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000313#endif
314
Tim Peters69232342001-08-30 05:16:13 +0000315static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000316imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000317{
Tim Peters69232342001-08-30 05:16:13 +0000318#ifdef WITH_THREAD
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000319 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000320#else
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000321 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000322#endif
323}
324
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000325static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000326imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000327{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000328#ifdef WITH_THREAD
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000329 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000330#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000331 Py_INCREF(Py_None);
332 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000333}
334
335static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000336imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000337{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000338#ifdef WITH_THREAD
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000339 if (_PyImport_ReleaseLock() < 0) {
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000340 PyErr_SetString(PyExc_RuntimeError,
341 "not holding the import lock");
342 return NULL;
343 }
344#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000345 Py_INCREF(Py_None);
346 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000347}
348
Collin Winter276887b2007-03-12 16:11:39 +0000349static void
Neal Norwitz75c7c802007-03-13 05:31:38 +0000350imp_modules_reloading_clear(void)
Collin Winter276887b2007-03-12 16:11:39 +0000351{
352 PyInterpreterState *interp = PyThreadState_Get()->interp;
Neal Norwitz75c7c802007-03-13 05:31:38 +0000353 if (interp->modules_reloading != NULL)
354 PyDict_Clear(interp->modules_reloading);
Collin Winter276887b2007-03-12 16:11:39 +0000355}
356
Guido van Rossum25ce5661997-08-02 03:10:38 +0000357/* Helper for sys */
358
359PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000360PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000361{
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000362 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000363 if (interp->modules == NULL)
364 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
365 return interp->modules;
366}
367
Guido van Rossum3f5da241990-12-20 15:06:42 +0000368
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000369/* List of names to clear in sys */
370static char* sys_deletes[] = {
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000371 "path", "argv", "ps1", "ps2", "exitfunc",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000372 "exc_type", "exc_value", "exc_traceback",
373 "last_type", "last_value", "last_traceback",
Just van Rossum52e14d62002-12-30 22:08:05 +0000374 "path_hooks", "path_importer_cache", "meta_path",
Christian Heimes0d924432008-01-30 17:21:22 +0000375 /* misc stuff */
376 "flags", "float_info",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000377 NULL
378};
379
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000380static char* sys_files[] = {
381 "stdin", "__stdin__",
382 "stdout", "__stdout__",
383 "stderr", "__stderr__",
384 NULL
385};
386
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000387
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000388/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000389
Guido van Rossum3f5da241990-12-20 15:06:42 +0000390void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000391PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000392{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000393 Py_ssize_t pos, ndone;
Guido van Rossum758eec01998-01-19 21:58:26 +0000394 char *name;
395 PyObject *key, *value, *dict;
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000396 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000397 PyObject *modules = interp->modules;
398
399 if (modules == NULL)
400 return; /* Already done */
401
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000402 /* Delete some special variables first. These are common
403 places where user values hide and people complain when their
404 destructors fail. Since the modules containing them are
405 deleted *last* of all, they would come too late in the normal
406 destruction order. Sigh. */
407
408 value = PyDict_GetItemString(modules, "__builtin__");
409 if (value != NULL && PyModule_Check(value)) {
410 dict = PyModule_GetDict(value);
411 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000412 PySys_WriteStderr("# clear __builtin__._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000413 PyDict_SetItemString(dict, "_", Py_None);
414 }
415 value = PyDict_GetItemString(modules, "sys");
416 if (value != NULL && PyModule_Check(value)) {
417 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000418 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000419 dict = PyModule_GetDict(value);
420 for (p = sys_deletes; *p != NULL; p++) {
421 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000422 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000423 PyDict_SetItemString(dict, *p, Py_None);
424 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000425 for (p = sys_files; *p != NULL; p+=2) {
426 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000427 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000428 v = PyDict_GetItemString(dict, *(p+1));
429 if (v == NULL)
430 v = Py_None;
431 PyDict_SetItemString(dict, *p, v);
432 }
433 }
434
435 /* First, delete __main__ */
436 value = PyDict_GetItemString(modules, "__main__");
437 if (value != NULL && PyModule_Check(value)) {
438 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000439 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000440 _PyModule_Clear(value);
441 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000442 }
443
Guido van Rossum758eec01998-01-19 21:58:26 +0000444 /* The special treatment of __builtin__ here is because even
445 when it's not referenced as a module, its dictionary is
446 referenced by almost every module's __builtins__. Since
447 deleting a module clears its dictionary (even if there are
448 references left to it), we need to delete the __builtin__
449 module last. Likewise, we don't delete sys until the very
450 end because it is implicitly referenced (e.g. by print).
451
452 Also note that we 'delete' modules by replacing their entry
453 in the modules dict with None, rather than really deleting
454 them; this avoids a rehash of the modules dictionary and
455 also marks them as "non existent" so they won't be
456 re-imported. */
457
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000458 /* Next, repeatedly delete modules with a reference count of
Guido van Rossum758eec01998-01-19 21:58:26 +0000459 one (skipping __builtin__ and sys) and delete them */
460 do {
461 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000462 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000463 while (PyDict_Next(modules, &pos, &key, &value)) {
464 if (value->ob_refcnt != 1)
465 continue;
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000466 if (PyString_Check(key) && PyModule_Check(value)) {
467 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000468 if (strcmp(name, "__builtin__") == 0)
469 continue;
470 if (strcmp(name, "sys") == 0)
471 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000472 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000473 PySys_WriteStderr(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000474 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000475 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000476 PyDict_SetItem(modules, key, Py_None);
477 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000478 }
479 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000480 } while (ndone > 0);
481
Guido van Rossum758eec01998-01-19 21:58:26 +0000482 /* Next, delete all modules (still skipping __builtin__ and sys) */
483 pos = 0;
484 while (PyDict_Next(modules, &pos, &key, &value)) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000485 if (PyString_Check(key) && PyModule_Check(value)) {
486 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000487 if (strcmp(name, "__builtin__") == 0)
488 continue;
489 if (strcmp(name, "sys") == 0)
490 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000491 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000492 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000493 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000494 PyDict_SetItem(modules, key, Py_None);
495 }
496 }
497
498 /* Next, delete sys and __builtin__ (in that order) */
499 value = PyDict_GetItemString(modules, "sys");
500 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000501 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000502 PySys_WriteStderr("# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000503 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000504 PyDict_SetItemString(modules, "sys", Py_None);
505 }
506 value = PyDict_GetItemString(modules, "__builtin__");
507 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000508 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000509 PySys_WriteStderr("# cleanup __builtin__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000510 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000511 PyDict_SetItemString(modules, "__builtin__", Py_None);
512 }
513
514 /* Finally, clear and delete the modules directory */
515 PyDict_Clear(modules);
516 interp->modules = NULL;
517 Py_DECREF(modules);
Collin Winter276887b2007-03-12 16:11:39 +0000518 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000519}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000520
521
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000522/* Helper for pythonrun.c -- return magic number */
523
524long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000525PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000526{
Guido van Rossum96774c12000-05-01 20:19:08 +0000527 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000528}
529
530
Guido van Rossum25ce5661997-08-02 03:10:38 +0000531/* Magic for extension modules (built-in as well as dynamically
532 loaded). To prevent initializing an extension module more than
533 once, we keep a static dictionary 'extensions' keyed by module name
534 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000535 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000536 dictionary is stored by calling _PyImport_FixupExtension()
537 immediately after the module initialization function succeeds. A
538 copy can be retrieved from there by calling
539 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000540
Guido van Rossum79f25d91997-04-29 20:08:16 +0000541PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000542_PyImport_FixupExtension(char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000543{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000544 PyObject *modules, *mod, *dict, *copy;
545 if (extensions == NULL) {
546 extensions = PyDict_New();
547 if (extensions == NULL)
548 return NULL;
549 }
550 modules = PyImport_GetModuleDict();
551 mod = PyDict_GetItemString(modules, name);
552 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000553 PyErr_Format(PyExc_SystemError,
554 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000555 return NULL;
556 }
557 dict = PyModule_GetDict(mod);
558 if (dict == NULL)
559 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000560 copy = PyDict_Copy(dict);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000561 if (copy == NULL)
562 return NULL;
563 PyDict_SetItemString(extensions, filename, copy);
564 Py_DECREF(copy);
565 return copy;
566}
567
568PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000569_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000570{
Fred Drake9cd0efc2001-10-25 21:38:59 +0000571 PyObject *dict, *mod, *mdict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000572 if (extensions == NULL)
573 return NULL;
574 dict = PyDict_GetItemString(extensions, filename);
575 if (dict == NULL)
576 return NULL;
577 mod = PyImport_AddModule(name);
578 if (mod == NULL)
579 return NULL;
580 mdict = PyModule_GetDict(mod);
581 if (mdict == NULL)
582 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000583 if (PyDict_Update(mdict, dict))
Guido van Rossum25ce5661997-08-02 03:10:38 +0000584 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000585 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000586 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Guido van Rossum25ce5661997-08-02 03:10:38 +0000587 name, filename);
588 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000589}
590
591
592/* Get the module object corresponding to a module name.
593 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000594 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000595 Because the former action is most common, THIS DOES NOT RETURN A
596 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000597
Guido van Rossum79f25d91997-04-29 20:08:16 +0000598PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000599PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000600{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000601 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000602 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000603
Guido van Rossum25ce5661997-08-02 03:10:38 +0000604 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000605 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000606 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000607 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000608 if (m == NULL)
609 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000610 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000611 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000612 return NULL;
613 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000614 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000615
616 return m;
617}
618
Tim Peters1cd70172004-08-02 03:52:12 +0000619/* Remove name from sys.modules, if it's there. */
620static void
621_RemoveModule(const char *name)
622{
623 PyObject *modules = PyImport_GetModuleDict();
624 if (PyDict_GetItemString(modules, name) == NULL)
625 return;
626 if (PyDict_DelItemString(modules, name) < 0)
627 Py_FatalError("import: deleting existing key in"
628 "sys.modules failed");
629}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000630
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000631/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000632 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
633 * removed from sys.modules, to avoid leaving damaged module objects
634 * in sys.modules. The caller may wish to restore the original
635 * module object (if any) in this case; PyImport_ReloadModule is an
636 * example.
637 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000638PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000639PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000640{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000641 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
642}
643
644PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000645PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000646{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000647 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000648 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000649
Guido van Rossum79f25d91997-04-29 20:08:16 +0000650 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000651 if (m == NULL)
652 return NULL;
Jeremy Hyltonecd91292004-01-02 23:25:32 +0000653 /* If the module is being reloaded, we get the old module back
654 and re-use its dict to exec the new code. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000655 d = PyModule_GetDict(m);
656 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
657 if (PyDict_SetItemString(d, "__builtins__",
658 PyEval_GetBuiltins()) != 0)
Tim Peters1cd70172004-08-02 03:52:12 +0000659 goto error;
Guido van Rossum6135a871995-01-09 17:53:26 +0000660 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000661 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000662 v = NULL;
663 if (pathname != NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000664 v = PyString_FromString(pathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000665 if (v == NULL)
666 PyErr_Clear();
667 }
668 if (v == NULL) {
669 v = ((PyCodeObject *)co)->co_filename;
670 Py_INCREF(v);
671 }
672 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000673 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000674 Py_DECREF(v);
675
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000676 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000677 if (v == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000678 goto error;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000679 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000680
Guido van Rossum25ce5661997-08-02 03:10:38 +0000681 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000682 PyErr_Format(PyExc_ImportError,
683 "Loaded module %.200s not found in sys.modules",
684 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000685 return NULL;
686 }
687
Guido van Rossum79f25d91997-04-29 20:08:16 +0000688 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000689
690 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000691
692 error:
693 _RemoveModule(name);
694 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000695}
696
697
698/* Given a pathname for a Python source file, fill a buffer with the
699 pathname for the corresponding compiled file. Return the pathname
700 for the compiled file, or NULL if there's no space in the buffer.
701 Doesn't set an exception. */
702
703static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000704make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000705{
Tim Petersc1731372001-08-04 08:12:36 +0000706 size_t len = strlen(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000707 if (len+2 > buflen)
708 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000709
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000710#ifdef MS_WINDOWS
Tim Petersc1731372001-08-04 08:12:36 +0000711 /* Treat .pyw as if it were .py. The case of ".pyw" must match
712 that used in _PyImport_StandardFiletab. */
713 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
714 --len; /* pretend 'w' isn't there */
715#endif
716 memcpy(buf, pathname, len);
717 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
718 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000719
720 return buf;
721}
722
723
724/* Given a pathname for a Python source file, its time of last
725 modification, and a pathname for a compiled file, check whether the
726 compiled file represents the same version of the source. If so,
727 return a FILE pointer for the compiled file, positioned just after
728 the header; if not, return NULL.
729 Doesn't set an exception. */
730
731static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000732check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000733{
734 FILE *fp;
735 long magic;
736 long pyc_mtime;
737
738 fp = fopen(cpathname, "rb");
739 if (fp == NULL)
740 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000741 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000742 if (magic != pyc_magic) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000743 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000744 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000745 fclose(fp);
746 return NULL;
747 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000748 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000749 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000750 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000751 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000752 fclose(fp);
753 return NULL;
754 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000755 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000756 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000757 return fp;
758}
759
760
761/* Read a code object from a file and check it for validity */
762
Guido van Rossum79f25d91997-04-29 20:08:16 +0000763static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000764read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000765{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000766 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000767
Tim Petersd9b9ac82001-01-28 00:27:39 +0000768 co = PyMarshal_ReadLastObjectFromFile(fp);
Armin Rigo01ab2792004-03-26 15:09:27 +0000769 if (co == NULL)
770 return NULL;
771 if (!PyCode_Check(co)) {
772 PyErr_Format(PyExc_ImportError,
773 "Non-code object in %.200s", cpathname);
774 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000775 return NULL;
776 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000777 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000778}
779
780
781/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000782 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000783
Guido van Rossum79f25d91997-04-29 20:08:16 +0000784static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000785load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000786{
787 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000788 PyCodeObject *co;
789 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000790
Guido van Rossum79f25d91997-04-29 20:08:16 +0000791 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000792 if (magic != pyc_magic) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000793 PyErr_Format(PyExc_ImportError,
794 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000795 return NULL;
796 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000798 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000799 if (co == NULL)
800 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000801 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000802 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000803 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000804 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000805 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000806
807 return m;
808}
809
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000810/* Parse a source file and return the corresponding code object */
811
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000813parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000814{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000815 PyCodeObject *co = NULL;
816 mod_ty mod;
Christian Heimes3c608332008-03-26 22:01:37 +0000817 PyCompilerFlags flags;
Neal Norwitz2a399b02006-09-11 04:28:16 +0000818 PyArena *arena = PyArena_New();
819 if (arena == NULL)
820 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000821
Christian Heimes7f23d862008-03-26 22:51:58 +0000822 flags.cf_flags = 0;
823
Christian Heimes3c608332008-03-26 22:01:37 +0000824 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, &flags,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000825 NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000826 if (mod) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000827 co = PyAST_Compile(mod, pathname, NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000828 }
Neal Norwitz2a399b02006-09-11 04:28:16 +0000829 PyArena_Free(arena);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000830 return co;
831}
832
833
Guido van Rossum55a83382000-09-20 20:31:38 +0000834/* Helper to open a bytecode file for writing in exclusive mode */
835
836static FILE *
Christian Heimes40346852008-02-23 17:52:07 +0000837open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +0000838{
839#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
840 /* Use O_EXCL to avoid a race condition when another process tries to
841 write the same file. When that happens, our open() call fails,
842 which is just fine (since it's only a cache).
843 XXX If the file exists and is writable but the directory is not
844 writable, the file will never be written. Oh well.
845 */
846 int fd;
847 (void) unlink(filename);
Tim Peters42c83af2000-09-29 04:03:10 +0000848 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
849#ifdef O_BINARY
850 |O_BINARY /* necessary for Windows */
851#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000852#ifdef __VMS
Christian Heimes40346852008-02-23 17:52:07 +0000853 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000854#else
Christian Heimes40346852008-02-23 17:52:07 +0000855 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000856#endif
Martin v. Löwis18e16552006-02-15 17:27:45 +0000857 );
Guido van Rossum55a83382000-09-20 20:31:38 +0000858 if (fd < 0)
859 return NULL;
860 return fdopen(fd, "wb");
861#else
862 /* Best we can do -- on Windows this can't happen anyway */
863 return fopen(filename, "wb");
864#endif
865}
866
867
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000868/* Write a compiled module to a file, placing the time of last
869 modification of its source into the header.
870 Errors are ignored, if a write error occurs an attempt is made to
871 remove the file. */
872
873static void
Christian Heimes40346852008-02-23 17:52:07 +0000874write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000875{
876 FILE *fp;
Christian Heimes40346852008-02-23 17:52:07 +0000877 time_t mtime = srcstat->st_mtime;
R. David Murray3310a102009-07-07 09:54:16 +0000878#ifdef MS_WINDOWS /* since Windows uses different permissions */
879 mode_t mode = srcstat->st_mode & ~S_IEXEC;
880#else
R. David Murray23a736a2009-07-07 01:06:13 +0000881 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
882#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000883
Christian Heimes40346852008-02-23 17:52:07 +0000884 fp = open_exclusive(cpathname, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000885 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000886 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000887 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000888 "# can't create %s\n", cpathname);
889 return;
890 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000891 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000892 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000893 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
894 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000895 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000896 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000897 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000898 /* Don't keep partial file */
899 fclose(fp);
900 (void) unlink(cpathname);
901 return;
902 }
903 /* Now write the true mtime */
904 fseek(fp, 4L, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000905 assert(mtime < LONG_MAX);
Martin v. Löwis725507b2006-03-07 12:08:51 +0000906 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000907 fflush(fp);
908 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000909 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000910 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000911}
912
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000913static void
914update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
915{
916 PyObject *constants, *tmp;
917 Py_ssize_t i, n;
918
919 if (!_PyString_Eq(co->co_filename, oldname))
920 return;
921
922 tmp = co->co_filename;
923 co->co_filename = newname;
924 Py_INCREF(co->co_filename);
925 Py_DECREF(tmp);
926
927 constants = co->co_consts;
928 n = PyTuple_GET_SIZE(constants);
929 for (i = 0; i < n; i++) {
930 tmp = PyTuple_GET_ITEM(constants, i);
931 if (PyCode_Check(tmp))
932 update_code_filenames((PyCodeObject *)tmp,
933 oldname, newname);
934 }
935}
936
937static int
938update_compiled_module(PyCodeObject *co, char *pathname)
939{
940 PyObject *oldname, *newname;
941
942 if (strcmp(PyString_AsString(co->co_filename), pathname) == 0)
943 return 0;
944
945 newname = PyString_FromString(pathname);
946 if (newname == NULL)
947 return -1;
948
949 oldname = co->co_filename;
950 Py_INCREF(oldname);
951 update_code_filenames(co, oldname, newname);
952 Py_DECREF(oldname);
953 Py_DECREF(newname);
954 return 1;
955}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000956
957/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000958 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
959 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000960
Guido van Rossum79f25d91997-04-29 20:08:16 +0000961static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000962load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000963{
Christian Heimes40346852008-02-23 17:52:07 +0000964 struct stat st;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000965 FILE *fpc;
966 char buf[MAXPATHLEN+1];
967 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968 PyCodeObject *co;
969 PyObject *m;
Christian Heimes40346852008-02-23 17:52:07 +0000970
971 if (fstat(fileno(fp), &st) != 0) {
Neal Norwitz708e51a2005-10-03 04:48:15 +0000972 PyErr_Format(PyExc_RuntimeError,
Christian Heimes40346852008-02-23 17:52:07 +0000973 "unable to get file status from '%s'",
Neal Norwitz708e51a2005-10-03 04:48:15 +0000974 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +0000975 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +0000976 }
Fred Drake4c82b232000-06-30 16:18:57 +0000977#if SIZEOF_TIME_T > 4
978 /* Python's .pyc timestamp handling presumes that the timestamp fits
979 in 4 bytes. This will be fine until sometime in the year 2038,
980 when a 4-byte signed time_t will overflow.
981 */
Christian Heimes40346852008-02-23 17:52:07 +0000982 if (st.st_mtime >> 32) {
Fred Drake4c82b232000-06-30 16:18:57 +0000983 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +0000984 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +0000985 return NULL;
986 }
987#endif
Tim Peters36515e22001-11-18 04:06:29 +0000988 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +0000989 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000990 if (cpathname != NULL &&
Christian Heimes40346852008-02-23 17:52:07 +0000991 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000992 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000993 fclose(fpc);
994 if (co == NULL)
995 return NULL;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000996 if (update_compiled_module(co, pathname) < 0)
997 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000998 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000999 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001000 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +00001001 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001002 }
1003 else {
1004 co = parse_source_module(pathname, fp);
1005 if (co == NULL)
1006 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001007 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001008 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001009 name, pathname);
Georg Brandl2da0fce2008-01-07 17:09:35 +00001010 if (cpathname) {
1011 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1012 if (ro == NULL || !PyObject_IsTrue(ro))
Christian Heimes40346852008-02-23 17:52:07 +00001013 write_compiled_module(co, cpathname, &st);
Georg Brandl2da0fce2008-01-07 17:09:35 +00001014 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001015 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +00001016 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001017 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001018
1019 return m;
1020}
1021
1022
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001023/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001024static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1025static struct filedescr *find_module(char *, char *, PyObject *,
1026 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001027static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001028
1029/* Load a package and return its module object WITH INCREMENTED
1030 REFERENCE COUNT */
1031
1032static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001033load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001034{
Tim Peters1cd70172004-08-02 03:52:12 +00001035 PyObject *m, *d;
1036 PyObject *file = NULL;
1037 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001038 int err;
1039 char buf[MAXPATHLEN+1];
1040 FILE *fp = NULL;
1041 struct filedescr *fdp;
1042
1043 m = PyImport_AddModule(name);
1044 if (m == NULL)
1045 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001046 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001047 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001048 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001049 d = PyModule_GetDict(m);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001050 file = PyString_FromString(pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001051 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +00001052 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001053 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +00001054 if (path == NULL)
1055 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001056 err = PyDict_SetItemString(d, "__file__", file);
1057 if (err == 0)
1058 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +00001059 if (err != 0)
1060 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001061 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00001062 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001063 if (fdp == NULL) {
1064 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1065 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +00001066 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001067 }
1068 else
1069 m = NULL;
1070 goto cleanup;
1071 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001072 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001073 if (fp != NULL)
1074 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00001075 goto cleanup;
1076
1077 error:
1078 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001079 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001080 Py_XDECREF(path);
1081 Py_XDECREF(file);
1082 return m;
1083}
1084
1085
1086/* Helper to test for built-in module */
1087
1088static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001089is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001090{
1091 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +00001092 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1093 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1094 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001095 return -1;
1096 else
1097 return 1;
1098 }
1099 }
1100 return 0;
1101}
1102
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001103
Just van Rossum52e14d62002-12-30 22:08:05 +00001104/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1105 possibly by fetching it from the path_importer_cache dict. If it
Brett Cannon94b69f62006-09-28 22:10:14 +00001106 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001107 that can handle the path item. Return None if no hook could;
1108 this tells our caller it should fall back to the builtin
1109 import mechanism. Cache the result in path_importer_cache.
1110 Returns a borrowed reference. */
1111
1112static PyObject *
1113get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1114 PyObject *p)
1115{
1116 PyObject *importer;
Martin v. Löwis725507b2006-03-07 12:08:51 +00001117 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001118
1119 /* These conditions are the caller's responsibility: */
1120 assert(PyList_Check(path_hooks));
1121 assert(PyDict_Check(path_importer_cache));
1122
1123 nhooks = PyList_Size(path_hooks);
1124 if (nhooks < 0)
1125 return NULL; /* Shouldn't happen */
1126
1127 importer = PyDict_GetItem(path_importer_cache, p);
1128 if (importer != NULL)
1129 return importer;
1130
1131 /* set path_importer_cache[p] to None to avoid recursion */
1132 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1133 return NULL;
1134
1135 for (j = 0; j < nhooks; j++) {
1136 PyObject *hook = PyList_GetItem(path_hooks, j);
1137 if (hook == NULL)
1138 return NULL;
Georg Brandl684fd0c2006-05-25 19:15:31 +00001139 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
Just van Rossum52e14d62002-12-30 22:08:05 +00001140 if (importer != NULL)
1141 break;
1142
1143 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1144 return NULL;
1145 }
1146 PyErr_Clear();
1147 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001148 if (importer == NULL) {
1149 importer = PyObject_CallFunctionObjArgs(
Nick Coghlan327a39b2007-11-18 11:56:28 +00001150 (PyObject *)&PyNullImporter_Type, p, NULL
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001151 );
1152 if (importer == NULL) {
1153 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1154 PyErr_Clear();
1155 return Py_None;
1156 }
1157 }
1158 }
1159 if (importer != NULL) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001160 int err = PyDict_SetItem(path_importer_cache, p, importer);
1161 Py_DECREF(importer);
1162 if (err != 0)
1163 return NULL;
1164 }
1165 return importer;
1166}
1167
Nick Coghlan327a39b2007-11-18 11:56:28 +00001168PyAPI_FUNC(PyObject *)
1169PyImport_GetImporter(PyObject *path) {
1170 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
1171
1172 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1173 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1174 importer = get_path_importer(path_importer_cache,
1175 path_hooks, path);
1176 }
1177 }
1178 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1179 return importer;
1180}
1181
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001182/* Search the path (default sys.path) for a module. Return the
1183 corresponding filedescr struct, and (via return arguments) the
1184 pathname and an open file. Return NULL if the module is not found. */
1185
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001186#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001187extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001188 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001189#endif
1190
Martin v. Löwis18e16552006-02-15 17:27:45 +00001191static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001192static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001193static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001194
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001195static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001196find_module(char *fullname, char *subname, PyObject *path, char *buf,
1197 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001198{
Martin v. Löwis725507b2006-03-07 12:08:51 +00001199 Py_ssize_t i, npath;
Fred Drake4c82b232000-06-30 16:18:57 +00001200 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001201 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001202 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001203 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001204 PyObject *path_hooks, *path_importer_cache;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001205#ifndef RISCOS
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001206 struct stat statbuf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001207#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001208 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1209 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1210 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001211 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001212#if defined(PYOS_OS2)
1213 size_t saved_len;
1214 size_t saved_namelen;
1215 char *saved_buf = NULL;
1216#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001217 if (p_loader != NULL)
1218 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001219
Just van Rossum52e14d62002-12-30 22:08:05 +00001220 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001221 PyErr_SetString(PyExc_OverflowError,
1222 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001223 return NULL;
1224 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001225 strcpy(name, subname);
1226
1227 /* sys.meta_path import hook */
1228 if (p_loader != NULL) {
1229 PyObject *meta_path;
1230
1231 meta_path = PySys_GetObject("meta_path");
1232 if (meta_path == NULL || !PyList_Check(meta_path)) {
1233 PyErr_SetString(PyExc_ImportError,
1234 "sys.meta_path must be a list of "
1235 "import hooks");
1236 return NULL;
1237 }
1238 Py_INCREF(meta_path); /* zap guard */
1239 npath = PyList_Size(meta_path);
1240 for (i = 0; i < npath; i++) {
1241 PyObject *loader;
1242 PyObject *hook = PyList_GetItem(meta_path, i);
1243 loader = PyObject_CallMethod(hook, "find_module",
1244 "sO", fullname,
1245 path != NULL ?
1246 path : Py_None);
1247 if (loader == NULL) {
1248 Py_DECREF(meta_path);
1249 return NULL; /* true error */
1250 }
1251 if (loader != Py_None) {
1252 /* a loader was found */
1253 *p_loader = loader;
1254 Py_DECREF(meta_path);
1255 return &importhookdescr;
1256 }
1257 Py_DECREF(loader);
1258 }
1259 Py_DECREF(meta_path);
1260 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001261
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001262 if (path != NULL && PyString_Check(path)) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001263 /* The only type of submodule allowed inside a "frozen"
1264 package are other frozen modules or packages. */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001265 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
Guido van Rossum0506a431998-08-11 15:07:39 +00001266 PyErr_SetString(PyExc_ImportError,
1267 "full frozen module name too long");
1268 return NULL;
1269 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001270 strcpy(buf, PyString_AsString(path));
Guido van Rossum0506a431998-08-11 15:07:39 +00001271 strcat(buf, ".");
1272 strcat(buf, name);
1273 strcpy(name, buf);
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001274 if (find_frozen(name) != NULL) {
1275 strcpy(buf, name);
1276 return &fd_frozen;
1277 }
1278 PyErr_Format(PyExc_ImportError,
1279 "No frozen submodule named %.200s", name);
1280 return NULL;
Guido van Rossum0506a431998-08-11 15:07:39 +00001281 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001282 if (path == NULL) {
1283 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001284 strcpy(buf, name);
1285 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001286 }
Greg Ward201baee2001-10-04 14:52:06 +00001287 if ((find_frozen(name)) != NULL) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001288 strcpy(buf, name);
1289 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001290 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001291
Guido van Rossumac279101996-08-22 23:10:58 +00001292#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001293 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1294 if (fp != NULL) {
1295 *p_fp = fp;
1296 return fdp;
1297 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001298#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001299 path = PySys_GetObject("path");
1300 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001301 if (path == NULL || !PyList_Check(path)) {
1302 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001303 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001304 return NULL;
1305 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001306
1307 path_hooks = PySys_GetObject("path_hooks");
1308 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1309 PyErr_SetString(PyExc_ImportError,
1310 "sys.path_hooks must be a list of "
1311 "import hooks");
1312 return NULL;
1313 }
1314 path_importer_cache = PySys_GetObject("path_importer_cache");
1315 if (path_importer_cache == NULL ||
1316 !PyDict_Check(path_importer_cache)) {
1317 PyErr_SetString(PyExc_ImportError,
1318 "sys.path_importer_cache must be a dict");
1319 return NULL;
1320 }
1321
Guido van Rossum79f25d91997-04-29 20:08:16 +00001322 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001323 namelen = strlen(name);
1324 for (i = 0; i < npath; i++) {
Walter Dörwald3430d702002-06-17 10:43:59 +00001325 PyObject *copy = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001326 PyObject *v = PyList_GetItem(path, i);
Neal Norwitz3cb31ac2006-08-13 18:10:47 +00001327 if (!v)
1328 return NULL;
Walter Dörwald3430d702002-06-17 10:43:59 +00001329#ifdef Py_USING_UNICODE
1330 if (PyUnicode_Check(v)) {
1331 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1332 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1333 if (copy == NULL)
1334 return NULL;
1335 v = copy;
1336 }
1337 else
1338#endif
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001339 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001340 continue;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001341 len = PyString_GET_SIZE(v);
Walter Dörwald3430d702002-06-17 10:43:59 +00001342 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1343 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001344 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001345 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001346 strcpy(buf, PyString_AS_STRING(v));
Walter Dörwald3430d702002-06-17 10:43:59 +00001347 if (strlen(buf) != len) {
1348 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001349 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001350 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001351
1352 /* sys.path_hooks import hook */
1353 if (p_loader != NULL) {
1354 PyObject *importer;
1355
1356 importer = get_path_importer(path_importer_cache,
1357 path_hooks, v);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001358 if (importer == NULL) {
1359 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001360 return NULL;
Neal Norwitza4df11d2006-07-06 04:28:59 +00001361 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001362 /* Note: importer is a borrowed reference */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001363 if (importer != Py_None) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001364 PyObject *loader;
1365 loader = PyObject_CallMethod(importer,
1366 "find_module",
1367 "s", fullname);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001368 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001369 if (loader == NULL)
1370 return NULL; /* error */
1371 if (loader != Py_None) {
1372 /* a loader was found */
1373 *p_loader = loader;
1374 return &importhookdescr;
1375 }
1376 Py_DECREF(loader);
Georg Brandlf4ef1162006-05-26 18:03:31 +00001377 continue;
Just van Rossum52e14d62002-12-30 22:08:05 +00001378 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001379 }
Georg Brandlf4ef1162006-05-26 18:03:31 +00001380 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001381
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001382 if (len > 0 && buf[len-1] != SEP
1383#ifdef ALTSEP
1384 && buf[len-1] != ALTSEP
1385#endif
1386 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001387 buf[len++] = SEP;
Guido van Rossum215c3402000-11-13 17:26:32 +00001388 strcpy(buf+len, name);
1389 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001390
1391 /* Check for package import (buf holds a directory name,
1392 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001393#ifdef HAVE_STAT
Walter Dörwald3430d702002-06-17 10:43:59 +00001394 if (stat(buf, &statbuf) == 0 && /* it exists */
1395 S_ISDIR(statbuf.st_mode) && /* it's a directory */
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001396 case_ok(buf, len, namelen, name)) { /* case matches */
1397 if (find_init_module(buf)) { /* and has __init__.py */
1398 Py_XDECREF(copy);
1399 return &fd_package;
1400 }
1401 else {
1402 char warnstr[MAXPATHLEN+80];
1403 sprintf(warnstr, "Not importing directory "
1404 "'%.*s': missing __init__.py",
1405 MAXPATHLEN, buf);
1406 if (PyErr_Warn(PyExc_ImportWarning,
1407 warnstr)) {
1408 Py_XDECREF(copy);
1409 return NULL;
1410 }
1411 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001412 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001413#else
1414 /* XXX How are you going to test for directories? */
Guido van Rossum48a680c2001-03-02 06:34:14 +00001415#ifdef RISCOS
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001416 if (isdir(buf) &&
Walter Dörwald3430d702002-06-17 10:43:59 +00001417 case_ok(buf, len, namelen, name)) {
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001418 if (find_init_module(buf)) {
1419 Py_XDECREF(copy);
1420 return &fd_package;
1421 }
1422 else {
1423 char warnstr[MAXPATHLEN+80];
1424 sprintf(warnstr, "Not importing directory "
1425 "'%.*s': missing __init__.py",
1426 MAXPATHLEN, buf);
1427 if (PyErr_Warn(PyExc_ImportWarning,
1428 warnstr)) {
1429 Py_XDECREF(copy);
1430 return NULL;
1431 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001432 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001433#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001434#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001435#if defined(PYOS_OS2)
1436 /* take a snapshot of the module spec for restoration
1437 * after the 8 character DLL hackery
1438 */
1439 saved_buf = strdup(buf);
1440 saved_len = len;
1441 saved_namelen = namelen;
1442#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001443 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Georg Brandladd36e52007-08-23 18:08:06 +00001444#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001445 /* OS/2 limits DLLs to 8 character names (w/o
1446 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001447 * so if the name is longer than that and its a
1448 * dynamically loaded module we're going to try,
1449 * truncate the name before trying
1450 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001451 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001452 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001453 const struct filedescr *scan;
1454 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001455 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001456 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001457 break;
1458 else
1459 scan++;
1460 }
1461 if (scan->suffix != NULL) {
1462 /* yes, so truncate the name */
1463 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001464 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001465 buf[len] = '\0';
1466 }
1467 }
1468#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001469 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001470 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001471 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001472 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001473 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001474 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001475 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001476 if (fp != NULL) {
1477 if (case_ok(buf, len, namelen, name))
1478 break;
1479 else { /* continue search */
1480 fclose(fp);
1481 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001482 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001483 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001484#if defined(PYOS_OS2)
1485 /* restore the saved snapshot */
1486 strcpy(buf, saved_buf);
1487 len = saved_len;
1488 namelen = saved_namelen;
1489#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001490 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001491#if defined(PYOS_OS2)
1492 /* don't need/want the module name snapshot anymore */
1493 if (saved_buf)
1494 {
1495 free(saved_buf);
1496 saved_buf = NULL;
1497 }
1498#endif
Walter Dörwald3430d702002-06-17 10:43:59 +00001499 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001500 if (fp != NULL)
1501 break;
1502 }
1503 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001504 PyErr_Format(PyExc_ImportError,
1505 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001506 return NULL;
1507 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001508 *p_fp = fp;
1509 return fdp;
1510}
1511
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001512/* Helpers for main.c
1513 * Find the source file corresponding to a named module
1514 */
1515struct filedescr *
1516_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1517 size_t buflen, FILE **p_fp, PyObject **p_loader)
1518{
1519 return find_module((char *) name, (char *) name, path,
1520 buf, buflen, p_fp, p_loader);
1521}
1522
1523PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1524{
1525 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1526}
1527
Martin v. Löwis18e16552006-02-15 17:27:45 +00001528/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001529 * The arguments here are tricky, best shown by example:
1530 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1531 * ^ ^ ^ ^
1532 * |--------------------- buf ---------------------|
1533 * |------------------- len ------------------|
1534 * |------ name -------|
1535 * |----- namelen -----|
1536 * buf is the full path, but len only counts up to (& exclusive of) the
1537 * extension. name is the module name, also exclusive of extension.
1538 *
1539 * We've already done a successful stat() or fopen() on buf, so know that
1540 * there's some match, possibly case-insensitive.
1541 *
Tim Peters50d8d372001-02-28 05:34:27 +00001542 * case_ok() is to return 1 if there's a case-sensitive match for
1543 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1544 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001545 *
Tim Peters50d8d372001-02-28 05:34:27 +00001546 * case_ok() is used to implement case-sensitive import semantics even
1547 * on platforms with case-insensitive filesystems. It's trivial to implement
1548 * for case-sensitive filesystems. It's pretty much a cross-platform
1549 * nightmare for systems with case-insensitive filesystems.
1550 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001551
Tim Peters50d8d372001-02-28 05:34:27 +00001552/* First we may need a pile of platform-specific header files; the sequence
1553 * of #if's here should match the sequence in the body of case_ok().
1554 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001555#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001556#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001557
Tim Peters50d8d372001-02-28 05:34:27 +00001558#elif defined(DJGPP)
1559#include <dir.h>
1560
Jason Tishler7961aa62005-05-20 00:56:54 +00001561#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001562#include <sys/types.h>
1563#include <dirent.h>
1564
Andrew MacIntyred9400542002-02-26 11:41:34 +00001565#elif defined(PYOS_OS2)
1566#define INCL_DOS
1567#define INCL_DOSERRORS
1568#define INCL_NOPMAPI
1569#include <os2.h>
1570
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001571#elif defined(RISCOS)
1572#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001573#endif
1574
Guido van Rossum0980bd91998-02-13 17:18:36 +00001575static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001576case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001577{
Tim Peters50d8d372001-02-28 05:34:27 +00001578/* Pick a platform-specific implementation; the sequence of #if's here should
1579 * match the sequence just above.
1580 */
1581
Jason Tishler7961aa62005-05-20 00:56:54 +00001582/* MS_WINDOWS */
1583#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001584 WIN32_FIND_DATA data;
1585 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001586
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001587 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001588 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001589
Guido van Rossum0980bd91998-02-13 17:18:36 +00001590 h = FindFirstFile(buf, &data);
1591 if (h == INVALID_HANDLE_VALUE) {
1592 PyErr_Format(PyExc_NameError,
1593 "Can't find file for module %.100s\n(filename %.300s)",
1594 name, buf);
1595 return 0;
1596 }
1597 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001598 return strncmp(data.cFileName, name, namelen) == 0;
1599
1600/* DJGPP */
1601#elif defined(DJGPP)
1602 struct ffblk ffblk;
1603 int done;
1604
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001605 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001606 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001607
1608 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1609 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001610 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001611 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001612 name, buf);
1613 return 0;
1614 }
Tim Peters50d8d372001-02-28 05:34:27 +00001615 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001616
Jason Tishler7961aa62005-05-20 00:56:54 +00001617/* new-fangled macintosh (macosx) or Cygwin */
1618#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001619 DIR *dirp;
1620 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001621 char dirname[MAXPATHLEN + 1];
1622 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001623
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001624 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001625 return 1;
1626
Tim Petersd1e87a82001-03-01 18:12:00 +00001627 /* Copy the dir component into dirname; substitute "." if empty */
1628 if (dirlen <= 0) {
1629 dirname[0] = '.';
1630 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001631 }
1632 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001633 assert(dirlen <= MAXPATHLEN);
1634 memcpy(dirname, buf, dirlen);
1635 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001636 }
1637 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001638 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001639 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001640 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001641 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001642 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001643#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001644 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001645#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001646 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001647#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001648 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001649 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001650 (void)closedir(dirp);
1651 return 1; /* Found */
1652 }
1653 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001654 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001655 }
Tim Peters430f5d42001-03-01 01:30:56 +00001656 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001657
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001658/* RISC OS */
1659#elif defined(RISCOS)
1660 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1661 char buf2[MAXPATHLEN+2];
1662 char *nameWithExt = buf+len-namelen;
1663 int canonlen;
1664 os_error *e;
1665
1666 if (Py_GETENV("PYTHONCASEOK") != NULL)
1667 return 1;
1668
1669 /* workaround:
1670 append wildcard, otherwise case of filename wouldn't be touched */
1671 strcpy(buf2, buf);
1672 strcat(buf2, "*");
1673
1674 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1675 canonlen = MAXPATHLEN+1-canonlen;
1676 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1677 return 0;
1678 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1679 return 1; /* match */
1680
1681 return 0;
1682
Andrew MacIntyred9400542002-02-26 11:41:34 +00001683/* OS/2 */
1684#elif defined(PYOS_OS2)
1685 HDIR hdir = 1;
1686 ULONG srchcnt = 1;
1687 FILEFINDBUF3 ffbuf;
1688 APIRET rc;
1689
Georg Brandlaed6c662008-01-07 17:25:53 +00001690 if (Py_GETENV("PYTHONCASEOK") != NULL)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001691 return 1;
1692
1693 rc = DosFindFirst(buf,
1694 &hdir,
1695 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1696 &ffbuf, sizeof(ffbuf),
1697 &srchcnt,
1698 FIL_STANDARD);
1699 if (rc != NO_ERROR)
1700 return 0;
1701 return strncmp(ffbuf.achName, name, namelen) == 0;
1702
Tim Peters50d8d372001-02-28 05:34:27 +00001703/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1704#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001705 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001706
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001707#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001708}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001709
Guido van Rossum0980bd91998-02-13 17:18:36 +00001710
Guido van Rossum197346f1997-10-31 18:38:52 +00001711#ifdef HAVE_STAT
1712/* Helper to look for __init__.py or __init__.py[co] in potential package */
1713static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001714find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001715{
Tim Peters0f9431f2001-07-05 03:47:53 +00001716 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001717 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001718 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001719 struct stat statbuf;
1720
Tim Peters0f9431f2001-07-05 03:47:53 +00001721/* For calling case_ok(buf, len, namelen, name):
1722 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1723 * ^ ^ ^ ^
1724 * |--------------------- buf ---------------------|
1725 * |------------------- len ------------------|
1726 * |------ name -------|
1727 * |----- namelen -----|
1728 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001729 if (save_len + 13 >= MAXPATHLEN)
1730 return 0;
1731 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001732 pname = buf + i;
1733 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001734 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001735 if (case_ok(buf,
1736 save_len + 9, /* len("/__init__") */
1737 8, /* len("__init__") */
1738 pname)) {
1739 buf[save_len] = '\0';
1740 return 1;
1741 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001742 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001743 i += strlen(pname);
1744 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001745 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001746 if (case_ok(buf,
1747 save_len + 9, /* len("/__init__") */
1748 8, /* len("__init__") */
1749 pname)) {
1750 buf[save_len] = '\0';
1751 return 1;
1752 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001753 }
1754 buf[save_len] = '\0';
1755 return 0;
1756}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001757
1758#else
1759
1760#ifdef RISCOS
1761static int
1762find_init_module(buf)
1763 char *buf;
1764{
1765 int save_len = strlen(buf);
1766 int i = save_len;
1767
1768 if (save_len + 13 >= MAXPATHLEN)
1769 return 0;
1770 buf[i++] = SEP;
1771 strcpy(buf+i, "__init__/py");
1772 if (isfile(buf)) {
1773 buf[save_len] = '\0';
1774 return 1;
1775 }
1776
1777 if (Py_OptimizeFlag)
1778 strcpy(buf+i, "o");
1779 else
1780 strcpy(buf+i, "c");
1781 if (isfile(buf)) {
1782 buf[save_len] = '\0';
1783 return 1;
1784 }
1785 buf[save_len] = '\0';
1786 return 0;
1787}
1788#endif /*RISCOS*/
1789
Guido van Rossum197346f1997-10-31 18:38:52 +00001790#endif /* HAVE_STAT */
1791
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001792
Tim Petersdbd9ba62000-07-09 03:09:57 +00001793static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001794
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001795/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001796 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001797
Guido van Rossum79f25d91997-04-29 20:08:16 +00001798static PyObject *
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001799load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001800{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001801 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001802 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001803 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001804
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001805 /* First check that there's an open file (if we need one) */
1806 switch (type) {
1807 case PY_SOURCE:
1808 case PY_COMPILED:
1809 if (fp == NULL) {
1810 PyErr_Format(PyExc_ValueError,
1811 "file object required for import (type code %d)",
1812 type);
1813 return NULL;
1814 }
1815 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001816
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001817 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001818
1819 case PY_SOURCE:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001820 m = load_source_module(name, pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001821 break;
1822
1823 case PY_COMPILED:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001824 m = load_compiled_module(name, pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001825 break;
1826
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001827#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001828 case C_EXTENSION:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001829 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001830 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001831#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001832
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001833 case PKG_DIRECTORY:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001834 m = load_package(name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001835 break;
1836
1837 case C_BUILTIN:
1838 case PY_FROZEN:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001839 if (pathname != NULL && pathname[0] != '\0')
1840 name = pathname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001841 if (type == C_BUILTIN)
1842 err = init_builtin(name);
1843 else
1844 err = PyImport_ImportFrozenModule(name);
1845 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001846 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001847 if (err == 0) {
1848 PyErr_Format(PyExc_ImportError,
1849 "Purported %s module %.200s not found",
1850 type == C_BUILTIN ?
1851 "builtin" : "frozen",
1852 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001853 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001854 }
1855 modules = PyImport_GetModuleDict();
1856 m = PyDict_GetItemString(modules, name);
1857 if (m == NULL) {
1858 PyErr_Format(
1859 PyExc_ImportError,
1860 "%s module %.200s not properly initialized",
1861 type == C_BUILTIN ?
1862 "builtin" : "frozen",
1863 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001864 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001865 }
1866 Py_INCREF(m);
1867 break;
1868
Just van Rossum52e14d62002-12-30 22:08:05 +00001869 case IMP_HOOK: {
1870 if (loader == NULL) {
1871 PyErr_SetString(PyExc_ImportError,
1872 "import hook without loader");
1873 return NULL;
1874 }
1875 m = PyObject_CallMethod(loader, "load_module", "s", name);
1876 break;
1877 }
1878
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001879 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001880 PyErr_Format(PyExc_ImportError,
1881 "Don't know how to import %.200s (type code %d)",
1882 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001883 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001884
1885 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001886
1887 return m;
1888}
1889
1890
1891/* Initialize a built-in module.
Brett Cannon5a9aa4f2006-10-03 21:58:55 +00001892 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001893 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001894
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001895static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001896init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001897{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001898 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001899
Greg Ward201baee2001-10-04 14:52:06 +00001900 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001901 return 1;
1902
Guido van Rossum771c6c81997-10-31 18:37:24 +00001903 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001904 if (strcmp(name, p->name) == 0) {
1905 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001906 PyErr_Format(PyExc_ImportError,
1907 "Cannot re-init internal module %.200s",
1908 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001909 return -1;
1910 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001911 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001912 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001913 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001914 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001915 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001916 if (_PyImport_FixupExtension(name, name) == NULL)
1917 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001918 return 1;
1919 }
1920 }
1921 return 0;
1922}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001923
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001924
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001925/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001926
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001927static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001928find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001929{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001930 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001931
Guido van Rossum79f25d91997-04-29 20:08:16 +00001932 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001933 if (p->name == NULL)
1934 return NULL;
1935 if (strcmp(p->name, name) == 0)
1936 break;
1937 }
1938 return p;
1939}
1940
Guido van Rossum79f25d91997-04-29 20:08:16 +00001941static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001942get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001943{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001944 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001945 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001946
1947 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001948 PyErr_Format(PyExc_ImportError,
1949 "No such frozen object named %.200s",
1950 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001951 return NULL;
1952 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001953 if (p->code == NULL) {
1954 PyErr_Format(PyExc_ImportError,
1955 "Excluded frozen object named %.200s",
1956 name);
1957 return NULL;
1958 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001959 size = p->size;
1960 if (size < 0)
1961 size = -size;
1962 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001963}
1964
1965/* Initialize a frozen module.
1966 Return 1 for succes, 0 if the module is not found, and -1 with
1967 an exception set if the initialization failed.
1968 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001969
1970int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001971PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001972{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001973 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001974 PyObject *co;
1975 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001976 int ispackage;
1977 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001978
1979 if (p == NULL)
1980 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001981 if (p->code == NULL) {
1982 PyErr_Format(PyExc_ImportError,
1983 "Excluded frozen object named %.200s",
1984 name);
1985 return -1;
1986 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001987 size = p->size;
1988 ispackage = (size < 0);
1989 if (ispackage)
1990 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001991 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001992 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001993 name, ispackage ? " package" : "");
1994 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001995 if (co == NULL)
1996 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001997 if (!PyCode_Check(co)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001998 PyErr_Format(PyExc_TypeError,
1999 "frozen object %.200s is not a code object",
2000 name);
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002001 goto err_return;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002002 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00002003 if (ispackage) {
2004 /* Set __path__ to the package name */
2005 PyObject *d, *s;
2006 int err;
2007 m = PyImport_AddModule(name);
2008 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002009 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002010 d = PyModule_GetDict(m);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002011 s = PyString_InternFromString(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00002012 if (s == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002013 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002014 err = PyDict_SetItemString(d, "__path__", s);
2015 Py_DECREF(s);
2016 if (err != 0)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002017 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002018 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00002019 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002020 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002021 goto err_return;
2022 Py_DECREF(co);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002023 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002024 return 1;
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002025err_return:
2026 Py_DECREF(co);
2027 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002028}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002029
2030
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002031/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002032 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002033
Guido van Rossum79f25d91997-04-29 20:08:16 +00002034PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002035PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002036{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002037 PyObject *pname;
2038 PyObject *result;
2039
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002040 pname = PyString_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00002041 if (pname == NULL)
2042 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002043 result = PyImport_Import(pname);
2044 Py_DECREF(pname);
2045 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002046}
2047
Christian Heimes000a0742008-01-03 22:16:32 +00002048/* Import a module without blocking
2049 *
2050 * At first it tries to fetch the module from sys.modules. If the module was
2051 * never loaded before it loads it with PyImport_ImportModule() unless another
2052 * thread holds the import lock. In the latter case the function raises an
2053 * ImportError instead of blocking.
2054 *
2055 * Returns the module object with incremented ref count.
2056 */
2057PyObject *
2058PyImport_ImportModuleNoBlock(const char *name)
2059{
2060 PyObject *result;
2061 PyObject *modules;
2062 long me;
2063
2064 /* Try to get the module from sys.modules[name] */
2065 modules = PyImport_GetModuleDict();
2066 if (modules == NULL)
2067 return NULL;
2068
2069 result = PyDict_GetItemString(modules, name);
2070 if (result != NULL) {
2071 Py_INCREF(result);
2072 return result;
2073 }
2074 else {
2075 PyErr_Clear();
2076 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002077#ifdef WITH_THREAD
Christian Heimes000a0742008-01-03 22:16:32 +00002078 /* check the import lock
2079 * me might be -1 but I ignore the error here, the lock function
2080 * takes care of the problem */
2081 me = PyThread_get_thread_ident();
2082 if (import_lock_thread == -1 || import_lock_thread == me) {
2083 /* no thread or me is holding the lock */
2084 return PyImport_ImportModule(name);
2085 }
2086 else {
2087 PyErr_Format(PyExc_ImportError,
2088 "Failed to import %.200s because the import lock"
2089 "is held by another thread.",
2090 name);
2091 return NULL;
2092 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002093#else
2094 return PyImport_ImportModule(name);
2095#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002096}
2097
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002098/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002099static PyObject *get_parent(PyObject *globals, char *buf,
2100 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002101static PyObject *load_next(PyObject *mod, PyObject *altmod,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002102 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002103static int mark_miss(char *name);
2104static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002105 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002106static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002107
2108/* The Magnum Opus of dotted-name import :-) */
2109
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002110static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002111import_module_level(char *name, PyObject *globals, PyObject *locals,
2112 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002113{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002114 char buf[MAXPATHLEN+1];
Martin v. Löwis18e16552006-02-15 17:27:45 +00002115 Py_ssize_t buflen = 0;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002116 PyObject *parent, *head, *next, *tail;
2117
Christian Heimes3403f152008-01-09 19:56:33 +00002118 if (strchr(name, '/') != NULL
2119#ifdef MS_WINDOWS
2120 || strchr(name, '\\') != NULL
2121#endif
2122 ) {
2123 PyErr_SetString(PyExc_ImportError,
2124 "Import by filename is not supported.");
2125 return NULL;
2126 }
2127
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002128 parent = get_parent(globals, buf, &buflen, level);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002129 if (parent == NULL)
2130 return NULL;
2131
2132 head = load_next(parent, Py_None, &name, buf, &buflen);
2133 if (head == NULL)
2134 return NULL;
2135
2136 tail = head;
2137 Py_INCREF(tail);
2138 while (name) {
2139 next = load_next(tail, tail, &name, buf, &buflen);
2140 Py_DECREF(tail);
2141 if (next == NULL) {
2142 Py_DECREF(head);
2143 return NULL;
2144 }
2145 tail = next;
2146 }
Thomas Wouters8ddab272006-04-04 16:17:02 +00002147 if (tail == Py_None) {
2148 /* If tail is Py_None, both get_parent and load_next found
2149 an empty module name: someone called __import__("") or
2150 doctored faulty bytecode */
Thomas Wouters4bdaa272006-04-05 13:39:37 +00002151 Py_DECREF(tail);
2152 Py_DECREF(head);
Thomas Wouters8ddab272006-04-04 16:17:02 +00002153 PyErr_SetString(PyExc_ValueError,
2154 "Empty module name");
2155 return NULL;
2156 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002157
2158 if (fromlist != NULL) {
2159 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2160 fromlist = NULL;
2161 }
2162
2163 if (fromlist == NULL) {
2164 Py_DECREF(tail);
2165 return head;
2166 }
2167
2168 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002169 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002170 Py_DECREF(tail);
2171 return NULL;
2172 }
2173
2174 return tail;
2175}
2176
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002177PyObject *
2178PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2179 PyObject *fromlist, int level)
2180{
2181 PyObject *result;
Thomas Woutersc4dcb382009-09-16 19:55:54 +00002182 _PyImport_AcquireLock();
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002183 result = import_module_level(name, globals, locals, fromlist, level);
Thomas Woutersc4dcb382009-09-16 19:55:54 +00002184 if (_PyImport_ReleaseLock() < 0) {
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002185 Py_XDECREF(result);
2186 PyErr_SetString(PyExc_RuntimeError,
2187 "not holding the import lock");
2188 return NULL;
2189 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002190 return result;
2191}
2192
Fred Drake87590902004-05-28 20:21:36 +00002193/* Return the package that an import is being performed in. If globals comes
2194 from the module foo.bar.bat (not itself a package), this returns the
2195 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Georg Brandl5f6861d2006-05-28 21:57:35 +00002196 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002197
2198 The *name* of the returned package is returned in buf, with the length of
2199 the name in *p_buflen.
2200
2201 If globals doesn't come from a package or a module in a package, or a
2202 corresponding entry is not found in sys.modules, Py_None is returned.
2203*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002204static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002205get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002206{
2207 static PyObject *namestr = NULL;
2208 static PyObject *pathstr = NULL;
Nick Coghlanef01d822007-12-03 12:55:17 +00002209 static PyObject *pkgstr = NULL;
2210 PyObject *pkgname, *modname, *modpath, *modules, *parent;
Nick Coghlanb028f502008-07-13 14:52:36 +00002211 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002212
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002213 if (globals == NULL || !PyDict_Check(globals) || !level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002214 return Py_None;
2215
2216 if (namestr == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002217 namestr = PyString_InternFromString("__name__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002218 if (namestr == NULL)
2219 return NULL;
2220 }
2221 if (pathstr == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002222 pathstr = PyString_InternFromString("__path__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002223 if (pathstr == NULL)
2224 return NULL;
2225 }
Nick Coghlanef01d822007-12-03 12:55:17 +00002226 if (pkgstr == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002227 pkgstr = PyString_InternFromString("__package__");
Nick Coghlanef01d822007-12-03 12:55:17 +00002228 if (pkgstr == NULL)
2229 return NULL;
2230 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002231
2232 *buf = '\0';
2233 *p_buflen = 0;
Nick Coghlanef01d822007-12-03 12:55:17 +00002234 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002235
Nick Coghlanef01d822007-12-03 12:55:17 +00002236 if ((pkgname != NULL) && (pkgname != Py_None)) {
2237 /* __package__ is set, so use it */
2238 Py_ssize_t len;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002239 if (!PyString_Check(pkgname)) {
Nick Coghlanef01d822007-12-03 12:55:17 +00002240 PyErr_SetString(PyExc_ValueError,
2241 "__package__ set to non-string");
2242 return NULL;
2243 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002244 len = PyString_GET_SIZE(pkgname);
Nick Coghlanef01d822007-12-03 12:55:17 +00002245 if (len == 0) {
2246 if (level > 0) {
2247 PyErr_SetString(PyExc_ValueError,
2248 "Attempted relative import in non-package");
2249 return NULL;
2250 }
2251 return Py_None;
2252 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002253 if (len > MAXPATHLEN) {
2254 PyErr_SetString(PyExc_ValueError,
Nick Coghlanef01d822007-12-03 12:55:17 +00002255 "Package name too long");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002256 return NULL;
2257 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002258 strcpy(buf, PyString_AS_STRING(pkgname));
Nick Coghlanef01d822007-12-03 12:55:17 +00002259 } else {
2260 /* __package__ not set, so figure it out and set it */
2261 modname = PyDict_GetItem(globals, namestr);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002262 if (modname == NULL || !PyString_Check(modname))
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002263 return Py_None;
Nick Coghlanef01d822007-12-03 12:55:17 +00002264
2265 modpath = PyDict_GetItem(globals, pathstr);
2266 if (modpath != NULL) {
2267 /* __path__ is set, so modname is already the package name */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002268 Py_ssize_t len = PyString_GET_SIZE(modname);
Nick Coghlanef01d822007-12-03 12:55:17 +00002269 int error;
2270 if (len > MAXPATHLEN) {
2271 PyErr_SetString(PyExc_ValueError,
2272 "Module name too long");
2273 return NULL;
2274 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002275 strcpy(buf, PyString_AS_STRING(modname));
Nick Coghlanef01d822007-12-03 12:55:17 +00002276 error = PyDict_SetItem(globals, pkgstr, modname);
2277 if (error) {
2278 PyErr_SetString(PyExc_ValueError,
2279 "Could not set __package__");
2280 return NULL;
2281 }
2282 } else {
2283 /* Normal module, so work out the package name if any */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002284 char *start = PyString_AS_STRING(modname);
Nick Coghlanef01d822007-12-03 12:55:17 +00002285 char *lastdot = strrchr(start, '.');
2286 size_t len;
2287 int error;
2288 if (lastdot == NULL && level > 0) {
2289 PyErr_SetString(PyExc_ValueError,
2290 "Attempted relative import in non-package");
2291 return NULL;
2292 }
2293 if (lastdot == NULL) {
2294 error = PyDict_SetItem(globals, pkgstr, Py_None);
2295 if (error) {
2296 PyErr_SetString(PyExc_ValueError,
2297 "Could not set __package__");
2298 return NULL;
2299 }
2300 return Py_None;
2301 }
2302 len = lastdot - start;
2303 if (len >= MAXPATHLEN) {
2304 PyErr_SetString(PyExc_ValueError,
2305 "Module name too long");
2306 return NULL;
2307 }
2308 strncpy(buf, start, len);
2309 buf[len] = '\0';
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002310 pkgname = PyString_FromString(buf);
Nick Coghlanef01d822007-12-03 12:55:17 +00002311 if (pkgname == NULL) {
2312 return NULL;
2313 }
2314 error = PyDict_SetItem(globals, pkgstr, pkgname);
2315 Py_DECREF(pkgname);
2316 if (error) {
2317 PyErr_SetString(PyExc_ValueError,
2318 "Could not set __package__");
2319 return NULL;
2320 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002321 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002322 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002323 while (--level > 0) {
2324 char *dot = strrchr(buf, '.');
2325 if (dot == NULL) {
2326 PyErr_SetString(PyExc_ValueError,
Georg Brandl98775df2006-09-06 06:09:31 +00002327 "Attempted relative import beyond "
2328 "toplevel package");
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002329 return NULL;
2330 }
2331 *dot = '\0';
2332 }
2333 *p_buflen = strlen(buf);
2334
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002335 modules = PyImport_GetModuleDict();
2336 parent = PyDict_GetItemString(modules, buf);
Nick Coghlanb028f502008-07-13 14:52:36 +00002337 if (parent == NULL) {
2338 if (orig_level < 1) {
2339 PyObject *err_msg = PyString_FromFormat(
2340 "Parent module '%.200s' not found "
2341 "while handling absolute import", buf);
2342 if (err_msg == NULL) {
2343 return NULL;
2344 }
2345 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2346 PyString_AsString(err_msg), 1)) {
2347 *buf = '\0';
2348 *p_buflen = 0;
2349 parent = Py_None;
2350 }
2351 Py_DECREF(err_msg);
2352 } else {
2353 PyErr_Format(PyExc_SystemError,
2354 "Parent module '%.200s' not loaded, "
2355 "cannot perform relative import", buf);
2356 }
2357 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002358 return parent;
2359 /* We expect, but can't guarantee, if parent != None, that:
2360 - parent.__name__ == buf
2361 - parent.__dict__ is globals
2362 If this is violated... Who cares? */
2363}
2364
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002365/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002366static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002367load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002368 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002369{
2370 char *name = *p_name;
2371 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002372 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002373 char *p;
2374 PyObject *result;
2375
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002376 if (strlen(name) == 0) {
Thomas Wouters8ddab272006-04-04 16:17:02 +00002377 /* completely empty module name should only happen in
2378 'from . import' (or '__import__("")')*/
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002379 Py_INCREF(mod);
2380 *p_name = NULL;
2381 return mod;
2382 }
2383
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002384 if (dot == NULL) {
2385 *p_name = NULL;
2386 len = strlen(name);
2387 }
2388 else {
2389 *p_name = dot+1;
2390 len = dot-name;
2391 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002392 if (len == 0) {
2393 PyErr_SetString(PyExc_ValueError,
2394 "Empty module name");
2395 return NULL;
2396 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002397
2398 p = buf + *p_buflen;
2399 if (p != buf)
2400 *p++ = '.';
2401 if (p+len-buf >= MAXPATHLEN) {
2402 PyErr_SetString(PyExc_ValueError,
2403 "Module name too long");
2404 return NULL;
2405 }
2406 strncpy(p, name, len);
2407 p[len] = '\0';
2408 *p_buflen = p+len-buf;
2409
2410 result = import_submodule(mod, p, buf);
2411 if (result == Py_None && altmod != mod) {
2412 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002413 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002414 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002415 if (result != NULL && result != Py_None) {
2416 if (mark_miss(buf) != 0) {
2417 Py_DECREF(result);
2418 return NULL;
2419 }
2420 strncpy(buf, name, len);
2421 buf[len] = '\0';
2422 *p_buflen = len;
2423 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002424 }
2425 if (result == NULL)
2426 return NULL;
2427
2428 if (result == Py_None) {
2429 Py_DECREF(result);
2430 PyErr_Format(PyExc_ImportError,
2431 "No module named %.200s", name);
2432 return NULL;
2433 }
2434
2435 return result;
2436}
2437
2438static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002439mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002440{
2441 PyObject *modules = PyImport_GetModuleDict();
2442 return PyDict_SetItemString(modules, name, Py_None);
2443}
2444
2445static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002446ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002447 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002448{
2449 int i;
2450
2451 if (!PyObject_HasAttrString(mod, "__path__"))
2452 return 1;
2453
2454 for (i = 0; ; i++) {
2455 PyObject *item = PySequence_GetItem(fromlist, i);
2456 int hasit;
2457 if (item == NULL) {
2458 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2459 PyErr_Clear();
2460 return 1;
2461 }
2462 return 0;
2463 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002464 if (!PyString_Check(item)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002465 PyErr_SetString(PyExc_TypeError,
2466 "Item in ``from list'' not a string");
2467 Py_DECREF(item);
2468 return 0;
2469 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002470 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002471 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002472 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002473 /* See if the package defines __all__ */
2474 if (recursive)
2475 continue; /* Avoid endless recursion */
2476 all = PyObject_GetAttrString(mod, "__all__");
2477 if (all == NULL)
2478 PyErr_Clear();
2479 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002480 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002481 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002482 if (!ret)
2483 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002484 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002485 continue;
2486 }
2487 hasit = PyObject_HasAttr(mod, item);
2488 if (!hasit) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002489 char *subname = PyString_AS_STRING(item);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002490 PyObject *submod;
2491 char *p;
2492 if (buflen + strlen(subname) >= MAXPATHLEN) {
2493 PyErr_SetString(PyExc_ValueError,
2494 "Module name too long");
2495 Py_DECREF(item);
2496 return 0;
2497 }
2498 p = buf + buflen;
2499 *p++ = '.';
2500 strcpy(p, subname);
2501 submod = import_submodule(mod, subname, buf);
2502 Py_XDECREF(submod);
2503 if (submod == NULL) {
2504 Py_DECREF(item);
2505 return 0;
2506 }
2507 }
2508 Py_DECREF(item);
2509 }
2510
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002511 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002512}
2513
Neil Schemenauer00b09662003-06-16 21:03:07 +00002514static int
2515add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2516 PyObject *modules)
2517{
2518 if (mod == Py_None)
2519 return 1;
2520 /* Irrespective of the success of this load, make a
2521 reference to it in the parent package module. A copy gets
2522 saved in the modules dictionary under the full name, so get a
2523 reference from there, if need be. (The exception is when the
2524 load failed with a SyntaxError -- then there's no trace in
2525 sys.modules. In that case, of course, do nothing extra.) */
2526 if (submod == NULL) {
2527 submod = PyDict_GetItemString(modules, fullname);
2528 if (submod == NULL)
2529 return 1;
2530 }
2531 if (PyModule_Check(mod)) {
2532 /* We can't use setattr here since it can give a
2533 * spurious warning if the submodule name shadows a
2534 * builtin name */
2535 PyObject *dict = PyModule_GetDict(mod);
2536 if (!dict)
2537 return 0;
2538 if (PyDict_SetItemString(dict, subname, submod) < 0)
2539 return 0;
2540 }
2541 else {
2542 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2543 return 0;
2544 }
2545 return 1;
2546}
2547
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002548static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002549import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002550{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002551 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002552 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002553
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002554 /* Require:
2555 if mod == None: subname == fullname
2556 else: mod.__name__ + "." + subname == fullname
2557 */
2558
Tim Peters50d8d372001-02-28 05:34:27 +00002559 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002560 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002561 }
2562 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002563 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002564 char buf[MAXPATHLEN+1];
2565 struct filedescr *fdp;
2566 FILE *fp = NULL;
2567
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002568 if (mod == Py_None)
2569 path = NULL;
2570 else {
2571 path = PyObject_GetAttrString(mod, "__path__");
2572 if (path == NULL) {
2573 PyErr_Clear();
2574 Py_INCREF(Py_None);
2575 return Py_None;
2576 }
2577 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002578
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002579 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002580 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2581 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002582 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002583 if (fdp == NULL) {
2584 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2585 return NULL;
2586 PyErr_Clear();
2587 Py_INCREF(Py_None);
2588 return Py_None;
2589 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002590 m = load_module(fullname, fp, buf, fdp->type, loader);
2591 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002592 if (fp)
2593 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002594 if (!add_submodule(mod, m, fullname, subname, modules)) {
2595 Py_XDECREF(m);
2596 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002597 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002598 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002599
2600 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002601}
2602
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002603
2604/* Re-import a module of any kind and return its module object, WITH
2605 INCREMENTED REFERENCE COUNT */
2606
Guido van Rossum79f25d91997-04-29 20:08:16 +00002607PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002608PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002609{
Collin Winter47c52a82007-03-13 23:02:15 +00002610 PyInterpreterState *interp = PyThreadState_Get()->interp;
2611 PyObject *modules_reloading = interp->modules_reloading;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002612 PyObject *modules = PyImport_GetModuleDict();
Collin Winter276887b2007-03-12 16:11:39 +00002613 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002614 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002615 char buf[MAXPATHLEN+1];
2616 struct filedescr *fdp;
2617 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002618 PyObject *newm;
Collin Winter47c52a82007-03-13 23:02:15 +00002619
2620 if (modules_reloading == NULL) {
2621 Py_FatalError("PyImport_ReloadModule: "
Neal Norwitz2fca81c2007-05-30 04:53:41 +00002622 "no modules_reloading dictionary!");
Collin Winter47c52a82007-03-13 23:02:15 +00002623 return NULL;
2624 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002625
Guido van Rossum79f25d91997-04-29 20:08:16 +00002626 if (m == NULL || !PyModule_Check(m)) {
2627 PyErr_SetString(PyExc_TypeError,
2628 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002629 return NULL;
2630 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002631 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002632 if (name == NULL)
2633 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002634 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002635 PyErr_Format(PyExc_ImportError,
2636 "reload(): module %.200s not in sys.modules",
2637 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002638 return NULL;
2639 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002640 existing_m = PyDict_GetItemString(modules_reloading, name);
2641 if (existing_m != NULL) {
2642 /* Due to a recursive reload, this module is already
2643 being reloaded. */
2644 Py_INCREF(existing_m);
2645 return existing_m;
Collin Winter276887b2007-03-12 16:11:39 +00002646 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002647 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2648 return NULL;
Collin Winter276887b2007-03-12 16:11:39 +00002649
Guido van Rossum222ef561997-09-06 19:41:09 +00002650 subname = strrchr(name, '.');
2651 if (subname == NULL)
2652 subname = name;
2653 else {
2654 PyObject *parentname, *parent;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002655 parentname = PyString_FromStringAndSize(name, (subname-name));
Collin Winter276887b2007-03-12 16:11:39 +00002656 if (parentname == NULL) {
2657 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002658 return NULL;
Neal Norwitz75c7c802007-03-13 05:31:38 +00002659 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002660 parent = PyDict_GetItem(modules, parentname);
2661 if (parent == NULL) {
2662 PyErr_Format(PyExc_ImportError,
2663 "reload(): parent %.200s not in sys.modules",
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002664 PyString_AS_STRING(parentname));
Georg Brandl0c55f292005-09-14 06:56:20 +00002665 Py_DECREF(parentname);
Neal Norwitz2fca81c2007-05-30 04:53:41 +00002666 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002667 return NULL;
2668 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002669 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002670 subname++;
2671 path = PyObject_GetAttrString(parent, "__path__");
2672 if (path == NULL)
2673 PyErr_Clear();
2674 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002675 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002676 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002677 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002678
2679 if (fdp == NULL) {
2680 Py_XDECREF(loader);
Collin Winter276887b2007-03-12 16:11:39 +00002681 imp_modules_reloading_clear();
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002682 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002683 }
2684
2685 newm = load_module(name, fp, buf, fdp->type, loader);
2686 Py_XDECREF(loader);
2687
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002688 if (fp)
2689 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002690 if (newm == NULL) {
2691 /* load_module probably removed name from modules because of
2692 * the error. Put back the original module object. We're
2693 * going to return NULL in this case regardless of whether
2694 * replacing name succeeds, so the return value is ignored.
2695 */
2696 PyDict_SetItemString(modules, name, m);
2697 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002698 imp_modules_reloading_clear();
Tim Peters1cd70172004-08-02 03:52:12 +00002699 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002700}
2701
2702
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002703/* Higher-level import emulator which emulates the "import" statement
2704 more accurately -- it invokes the __import__() function from the
2705 builtins of the current globals. This means that the import is
2706 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002707 environment, e.g. by "rexec".
2708 A dummy list ["__doc__"] is passed as the 4th argument so that
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002709 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00002710 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002711
2712PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002713PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002714{
2715 static PyObject *silly_list = NULL;
2716 static PyObject *builtins_str = NULL;
2717 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002718 PyObject *globals = NULL;
2719 PyObject *import = NULL;
2720 PyObject *builtins = NULL;
2721 PyObject *r = NULL;
2722
2723 /* Initialize constant string objects */
2724 if (silly_list == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002725 import_str = PyString_InternFromString("__import__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002726 if (import_str == NULL)
2727 return NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002728 builtins_str = PyString_InternFromString("__builtins__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002729 if (builtins_str == NULL)
2730 return NULL;
2731 silly_list = Py_BuildValue("[s]", "__doc__");
2732 if (silly_list == NULL)
2733 return NULL;
2734 }
2735
2736 /* Get the builtins from current globals */
2737 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002738 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002739 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002740 builtins = PyObject_GetItem(globals, builtins_str);
2741 if (builtins == NULL)
2742 goto err;
2743 }
2744 else {
2745 /* No globals -- use standard builtins, and fake globals */
2746 PyErr_Clear();
2747
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002748 builtins = PyImport_ImportModuleLevel("__builtin__",
2749 NULL, NULL, NULL, 0);
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002750 if (builtins == NULL)
2751 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002752 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2753 if (globals == NULL)
2754 goto err;
2755 }
2756
2757 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002758 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002759 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002760 if (import == NULL)
2761 PyErr_SetObject(PyExc_KeyError, import_str);
2762 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002763 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002764 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002765 if (import == NULL)
2766 goto err;
2767
Christian Heimes000a0742008-01-03 22:16:32 +00002768 /* Call the __import__ function with the proper argument list
2769 * Always use absolute import here. */
2770 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2771 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002772
2773 err:
2774 Py_XDECREF(globals);
2775 Py_XDECREF(builtins);
2776 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002777
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002778 return r;
2779}
2780
2781
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002782/* Module 'imp' provides Python access to the primitives used for
2783 importing modules.
2784*/
2785
Guido van Rossum79f25d91997-04-29 20:08:16 +00002786static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002787imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002788{
2789 char buf[4];
2790
Guido van Rossum96774c12000-05-01 20:19:08 +00002791 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2792 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2793 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2794 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002795
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002796 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002797}
2798
Guido van Rossum79f25d91997-04-29 20:08:16 +00002799static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002800imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002801{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002802 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002803 struct filedescr *fdp;
2804
Guido van Rossum79f25d91997-04-29 20:08:16 +00002805 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002806 if (list == NULL)
2807 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002808 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2809 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002810 fdp->suffix, fdp->mode, fdp->type);
2811 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002812 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002813 return NULL;
2814 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002815 if (PyList_Append(list, item) < 0) {
2816 Py_DECREF(list);
2817 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002818 return NULL;
2819 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002820 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002821 }
2822 return list;
2823}
2824
Guido van Rossum79f25d91997-04-29 20:08:16 +00002825static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002826call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002827{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002828 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002829 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002830 struct filedescr *fdp;
2831 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002832 FILE *fp = NULL;
2833
2834 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002835 if (path == Py_None)
2836 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002837 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002838 if (fdp == NULL)
2839 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002840 if (fp != NULL) {
2841 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2842 if (fob == NULL) {
2843 fclose(fp);
2844 return NULL;
2845 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002846 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002847 else {
2848 fob = Py_None;
2849 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002850 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002851 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002852 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002853 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002854 return ret;
2855}
2856
Guido van Rossum79f25d91997-04-29 20:08:16 +00002857static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002858imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002859{
2860 char *name;
2861 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002862 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002863 return NULL;
2864 return call_find_module(name, path);
2865}
2866
2867static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002868imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002869{
2870 char *name;
2871 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002872 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002873 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002874 return NULL;
2875 ret = init_builtin(name);
2876 if (ret < 0)
2877 return NULL;
2878 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002879 Py_INCREF(Py_None);
2880 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002881 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002882 m = PyImport_AddModule(name);
2883 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002884 return m;
2885}
2886
Guido van Rossum79f25d91997-04-29 20:08:16 +00002887static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002888imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002889{
2890 char *name;
2891 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002892 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002893 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002894 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002895 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002896 if (ret < 0)
2897 return NULL;
2898 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002899 Py_INCREF(Py_None);
2900 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002901 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002902 m = PyImport_AddModule(name);
2903 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002904 return m;
2905}
2906
Guido van Rossum79f25d91997-04-29 20:08:16 +00002907static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002908imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002909{
2910 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002911
Guido van Rossum43713e52000-02-29 13:59:29 +00002912 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002913 return NULL;
2914 return get_frozen_object(name);
2915}
2916
Guido van Rossum79f25d91997-04-29 20:08:16 +00002917static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002918imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002919{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002920 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002921 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002922 return NULL;
Guido van Rossum50ee94f2002-04-09 18:00:58 +00002923 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002924}
2925
Guido van Rossum79f25d91997-04-29 20:08:16 +00002926static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002927imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002928{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002929 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002930 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002931 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002932 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002933 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00002934 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002935}
2936
2937static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002938get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002939{
2940 FILE *fp;
2941 if (fob == NULL) {
Tim Peters86c7d2f2004-08-01 23:24:21 +00002942 if (mode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002943 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002944 fp = fopen(pathname, mode);
2945 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002946 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002947 }
2948 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002949 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002950 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002951 PyErr_SetString(PyExc_ValueError,
2952 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002953 }
2954 return fp;
2955}
2956
Guido van Rossum79f25d91997-04-29 20:08:16 +00002957static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002958imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002959{
2960 char *name;
2961 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002962 PyObject *fob = NULL;
2963 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002964 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002965 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002966 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002967 return NULL;
2968 fp = get_file(pathname, fob, "rb");
2969 if (fp == NULL)
2970 return NULL;
2971 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002972 if (fob == NULL)
2973 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002974 return m;
2975}
2976
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002977#ifdef HAVE_DYNAMIC_LOADING
2978
Guido van Rossum79f25d91997-04-29 20:08:16 +00002979static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002980imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002981{
2982 char *name;
2983 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002984 PyObject *fob = NULL;
2985 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002986 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002987 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002988 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002989 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002990 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002991 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002992 if (fp == NULL)
2993 return NULL;
2994 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002995 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002996 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002997}
2998
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002999#endif /* HAVE_DYNAMIC_LOADING */
3000
Guido van Rossum79f25d91997-04-29 20:08:16 +00003001static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003002imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003003{
3004 char *name;
3005 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003006 PyObject *fob = NULL;
3007 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003008 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00003009 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00003010 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003011 return NULL;
3012 fp = get_file(pathname, fob, "r");
3013 if (fp == NULL)
3014 return NULL;
3015 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003016 if (fob == NULL)
3017 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003018 return m;
3019}
3020
Guido van Rossum79f25d91997-04-29 20:08:16 +00003021static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003022imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003023{
3024 char *name;
3025 PyObject *fob;
3026 char *pathname;
3027 char *suffix; /* Unused */
3028 char *mode;
3029 int type;
3030 FILE *fp;
3031
Guido van Rossum43713e52000-02-29 13:59:29 +00003032 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003033 &name, &fob, &pathname,
3034 &suffix, &mode, &type))
3035 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003036 if (*mode) {
3037 /* Mode must start with 'r' or 'U' and must not contain '+'.
3038 Implicit in this test is the assumption that the mode
3039 may contain other modifiers like 'b' or 't'. */
3040
3041 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00003042 PyErr_Format(PyExc_ValueError,
3043 "invalid file open mode %.200s", mode);
3044 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003045 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003046 }
3047 if (fob == Py_None)
3048 fp = NULL;
3049 else {
3050 if (!PyFile_Check(fob)) {
3051 PyErr_SetString(PyExc_ValueError,
3052 "load_module arg#2 should be a file or None");
3053 return NULL;
3054 }
3055 fp = get_file(pathname, fob, mode);
3056 if (fp == NULL)
3057 return NULL;
3058 }
Just van Rossum52e14d62002-12-30 22:08:05 +00003059 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003060}
3061
3062static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003063imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003064{
3065 char *name;
3066 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00003067 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003068 return NULL;
3069 return load_package(name, pathname);
3070}
3071
3072static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003073imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003074{
3075 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00003076 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003077 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003078 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003079}
3080
Brett Cannon3aa2a492008-08-06 22:28:09 +00003081static PyObject *
3082imp_reload(PyObject *self, PyObject *v)
3083{
3084 return PyImport_ReloadModule(v);
3085}
3086
3087
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003088/* Doc strings */
3089
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003090PyDoc_STRVAR(doc_imp,
3091"This module provides the components needed to build your own\n\
3092__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003093
Brett Cannon3aa2a492008-08-06 22:28:09 +00003094PyDoc_STRVAR(doc_reload,
3095"reload(module) -> module\n\
3096\n\
3097Reload the module. The module must have been successfully imported before.");
3098
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003099PyDoc_STRVAR(doc_find_module,
3100"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003101Search for a module. If path is omitted or None, search for a\n\
3102built-in, frozen or special module and continue search in sys.path.\n\
3103The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003104package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003105
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003106PyDoc_STRVAR(doc_load_module,
3107"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003108Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003109The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003110
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003111PyDoc_STRVAR(doc_get_magic,
3112"get_magic() -> string\n\
3113Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003114
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003115PyDoc_STRVAR(doc_get_suffixes,
3116"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003117Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003118that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003119
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003120PyDoc_STRVAR(doc_new_module,
3121"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003122Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003123The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003124
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003125PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003126"lock_held() -> boolean\n\
3127Return True if the import lock is currently held, else False.\n\
3128On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003129
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003130PyDoc_STRVAR(doc_acquire_lock,
3131"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003132Acquires the interpreter's import lock for the current thread.\n\
3133This lock should be used by import hooks to ensure thread-safety\n\
3134when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003135On platforms without threads, this function does nothing.");
3136
3137PyDoc_STRVAR(doc_release_lock,
3138"release_lock() -> None\n\
3139Release the interpreter's import lock.\n\
3140On platforms without threads, this function does nothing.");
3141
Guido van Rossum79f25d91997-04-29 20:08:16 +00003142static PyMethodDef imp_methods[] = {
Brett Cannon3aa2a492008-08-06 22:28:09 +00003143 {"reload", imp_reload, METH_O, doc_reload},
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003144 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3145 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3146 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3147 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3148 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3149 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3150 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3151 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003152 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00003153 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3154 {"init_builtin", imp_init_builtin, METH_VARARGS},
3155 {"init_frozen", imp_init_frozen, METH_VARARGS},
3156 {"is_builtin", imp_is_builtin, METH_VARARGS},
3157 {"is_frozen", imp_is_frozen, METH_VARARGS},
3158 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003159#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00003160 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003161#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00003162 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00003163 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003164 {NULL, NULL} /* sentinel */
3165};
3166
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003167static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003168setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003169{
3170 PyObject *v;
3171 int err;
3172
3173 v = PyInt_FromLong((long)value);
3174 err = PyDict_SetItemString(d, name, v);
3175 Py_XDECREF(v);
3176 return err;
3177}
3178
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003179typedef struct {
3180 PyObject_HEAD
3181} NullImporter;
3182
3183static int
3184NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3185{
3186 char *path;
Christian Heimescea681b2007-11-07 17:50:54 +00003187 Py_ssize_t pathlen;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003188
3189 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3190 return -1;
3191
3192 if (!PyArg_ParseTuple(args, "s:NullImporter",
3193 &path))
3194 return -1;
3195
Christian Heimescea681b2007-11-07 17:50:54 +00003196 pathlen = strlen(path);
3197 if (pathlen == 0) {
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003198 PyErr_SetString(PyExc_ImportError, "empty pathname");
3199 return -1;
3200 } else {
3201#ifndef RISCOS
Kristján Valur Jónsson3b2a6b82009-01-09 20:10:59 +00003202#ifndef MS_WINDOWS
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003203 struct stat statbuf;
3204 int rv;
3205
3206 rv = stat(path, &statbuf);
3207 if (rv == 0) {
3208 /* it exists */
3209 if (S_ISDIR(statbuf.st_mode)) {
3210 /* it's a directory */
3211 PyErr_SetString(PyExc_ImportError,
3212 "existing directory");
3213 return -1;
3214 }
3215 }
Kristján Valur Jónsson3b2a6b82009-01-09 20:10:59 +00003216#else /* MS_WINDOWS */
3217 DWORD rv;
3218 /* see issue1293 and issue3677:
3219 * stat() on Windows doesn't recognise paths like
3220 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
3221 */
3222 rv = GetFileAttributesA(path);
3223 if (rv != INVALID_FILE_ATTRIBUTES) {
3224 /* it exists */
3225 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
3226 /* it's a directory */
3227 PyErr_SetString(PyExc_ImportError,
3228 "existing directory");
3229 return -1;
3230 }
3231 }
3232#endif
3233#else /* RISCOS */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003234 if (object_exists(path)) {
3235 /* it exists */
3236 if (isdir(path)) {
3237 /* it's a directory */
3238 PyErr_SetString(PyExc_ImportError,
3239 "existing directory");
3240 return -1;
3241 }
3242 }
3243#endif
3244 }
3245 return 0;
3246}
3247
3248static PyObject *
3249NullImporter_find_module(NullImporter *self, PyObject *args)
3250{
3251 Py_RETURN_NONE;
3252}
3253
3254static PyMethodDef NullImporter_methods[] = {
3255 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3256 "Always return None"
3257 },
3258 {NULL} /* Sentinel */
3259};
3260
3261
Nick Coghlan327a39b2007-11-18 11:56:28 +00003262PyTypeObject PyNullImporter_Type = {
Martin v. Löwis68192102007-07-21 06:55:02 +00003263 PyVarObject_HEAD_INIT(NULL, 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003264 "imp.NullImporter", /*tp_name*/
3265 sizeof(NullImporter), /*tp_basicsize*/
3266 0, /*tp_itemsize*/
3267 0, /*tp_dealloc*/
3268 0, /*tp_print*/
3269 0, /*tp_getattr*/
3270 0, /*tp_setattr*/
3271 0, /*tp_compare*/
3272 0, /*tp_repr*/
3273 0, /*tp_as_number*/
3274 0, /*tp_as_sequence*/
3275 0, /*tp_as_mapping*/
3276 0, /*tp_hash */
3277 0, /*tp_call*/
3278 0, /*tp_str*/
3279 0, /*tp_getattro*/
3280 0, /*tp_setattro*/
3281 0, /*tp_as_buffer*/
3282 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3283 "Null importer object", /* tp_doc */
3284 0, /* tp_traverse */
3285 0, /* tp_clear */
3286 0, /* tp_richcompare */
3287 0, /* tp_weaklistoffset */
3288 0, /* tp_iter */
3289 0, /* tp_iternext */
3290 NullImporter_methods, /* tp_methods */
3291 0, /* tp_members */
3292 0, /* tp_getset */
3293 0, /* tp_base */
3294 0, /* tp_dict */
3295 0, /* tp_descr_get */
3296 0, /* tp_descr_set */
3297 0, /* tp_dictoffset */
3298 (initproc)NullImporter_init, /* tp_init */
3299 0, /* tp_alloc */
3300 PyType_GenericNew /* tp_new */
3301};
3302
3303
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003304PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003305initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003306{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003307 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003308
Nick Coghlan327a39b2007-11-18 11:56:28 +00003309 if (PyType_Ready(&PyNullImporter_Type) < 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003310 goto failure;
3311
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003312 m = Py_InitModule4("imp", imp_methods, doc_imp,
3313 NULL, PYTHON_API_VERSION);
Neal Norwitz1ac754f2006-01-19 06:09:39 +00003314 if (m == NULL)
3315 goto failure;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003316 d = PyModule_GetDict(m);
Neal Norwitz3cb31ac2006-08-13 18:10:47 +00003317 if (d == NULL)
3318 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003319
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003320 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3321 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3322 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3323 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3324 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3325 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3326 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3327 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00003328 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00003329 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003330
Nick Coghlan327a39b2007-11-18 11:56:28 +00003331 Py_INCREF(&PyNullImporter_Type);
3332 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003333 failure:
3334 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003335}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003336
3337
Guido van Rossumb18618d2000-05-03 23:44:39 +00003338/* API for embedding applications that want to add their own entries
3339 to the table of built-in modules. This should normally be called
3340 *before* Py_Initialize(). When the table resize fails, -1 is
3341 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003342
3343 After a similar function by Just van Rossum. */
3344
3345int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003346PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003347{
3348 static struct _inittab *our_copy = NULL;
3349 struct _inittab *p;
3350 int i, n;
3351
3352 /* Count the number of entries in both tables */
3353 for (n = 0; newtab[n].name != NULL; n++)
3354 ;
3355 if (n == 0)
3356 return 0; /* Nothing to do */
3357 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3358 ;
3359
3360 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00003361 p = our_copy;
3362 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003363 if (p == NULL)
3364 return -1;
3365
3366 /* Copy the tables into the new memory */
3367 if (our_copy != PyImport_Inittab)
3368 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3369 PyImport_Inittab = our_copy = p;
3370 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3371
3372 return 0;
3373}
3374
3375/* Shorthand to add a single entry given a name and a function */
3376
3377int
Brett Cannonc4f90eb2009-04-02 03:17:39 +00003378PyImport_AppendInittab(const char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003379{
3380 struct _inittab newtab[2];
3381
3382 memset(newtab, '\0', sizeof newtab);
3383
Brett Cannon238cedc2009-04-02 03:34:53 +00003384 newtab[0].name = (char *)name;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003385 newtab[0].initfunc = initfunc;
3386
3387 return PyImport_ExtendInittab(newtab);
3388}
Anthony Baxterac6bd462006-04-13 02:06:09 +00003389
3390#ifdef __cplusplus
3391}
3392#endif