blob: c25c4f0345e4f40fafa2db6bd61214c6ba0470a9 [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)
Alexandre Vassalottib6465472010-01-11 22:36:12 +000079 Python 2.7a0 62211 (introduce MAP_ADD and SET_ADD)
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000080.
Tim Peters36515e22001-11-18 04:06:29 +000081*/
Alexandre Vassalottib6465472010-01-11 22:36:12 +000082#define MAGIC (62211 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000083
Guido van Rossum96774c12000-05-01 20:19:08 +000084/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000085 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000086 compiler works which are enabled by command line switches. */
Christian Heimes61e45902008-03-27 10:35:52 +000087static long pyc_magic = MAGIC;
Guido van Rossum96774c12000-05-01 20:19:08 +000088
Guido van Rossum25ce5661997-08-02 03:10:38 +000089/* See _PyImport_FixupExtension() below */
90static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000091
Guido van Rossum771c6c81997-10-31 18:37:24 +000092/* This table is defined in config.c: */
93extern struct _inittab _PyImport_Inittab[];
94
95struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000096
Guido van Rossumed1170e1999-12-20 21:23:41 +000097/* these tables define the module suffixes that Python recognizes */
98struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +000099
100#ifdef RISCOS
101static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +0000102 {"/py", "U", PY_SOURCE},
Guido van Rossum48a680c2001-03-02 06:34:14 +0000103 {"/pyc", "rb", PY_COMPILED},
104 {0, 0}
105};
106#else
Guido van Rossumed1170e1999-12-20 21:23:41 +0000107static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +0000108 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000109#ifdef MS_WINDOWS
Jack Jansenc88da1f2002-05-28 10:58:19 +0000110 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000111#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000112 {".pyc", "rb", PY_COMPILED},
113 {0, 0}
114};
Guido van Rossum48a680c2001-03-02 06:34:14 +0000115#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000116
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000117
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000118/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000119
120void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000121_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000122{
Guido van Rossumed1170e1999-12-20 21:23:41 +0000123 const struct filedescr *scan;
124 struct filedescr *filetab;
125 int countD = 0;
126 int countS = 0;
127
128 /* prepare _PyImport_Filetab: copy entries from
129 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
130 */
Georg Brandladd36e52007-08-23 18:08:06 +0000131#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossumed1170e1999-12-20 21:23:41 +0000132 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
133 ++countD;
Georg Brandladd36e52007-08-23 18:08:06 +0000134#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000135 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
136 ++countS;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000137 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
Neal Norwitze1fdb322006-07-21 05:32:28 +0000138 if (filetab == NULL)
Neal Norwitz33722ae2006-07-21 07:59:02 +0000139 Py_FatalError("Can't initialize import file table.");
Georg Brandladd36e52007-08-23 18:08:06 +0000140#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossumed1170e1999-12-20 21:23:41 +0000141 memcpy(filetab, _PyImport_DynLoadFiletab,
142 countD * sizeof(struct filedescr));
Georg Brandladd36e52007-08-23 18:08:06 +0000143#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000144 memcpy(filetab + countD, _PyImport_StandardFiletab,
145 countS * sizeof(struct filedescr));
146 filetab[countD + countS].suffix = NULL;
147
148 _PyImport_Filetab = filetab;
149
Guido van Rossum0824f631997-03-11 18:37:35 +0000150 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000151 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
152 for (; filetab->suffix != NULL; filetab++) {
Guido van Rossum48a680c2001-03-02 06:34:14 +0000153#ifndef RISCOS
Guido van Rossumed1170e1999-12-20 21:23:41 +0000154 if (strcmp(filetab->suffix, ".pyc") == 0)
155 filetab->suffix = ".pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000156#else
157 if (strcmp(filetab->suffix, "/pyc") == 0)
158 filetab->suffix = "/pyo";
159#endif
Guido van Rossum0824f631997-03-11 18:37:35 +0000160 }
161 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000162
163 if (Py_UnicodeFlag) {
164 /* Fix the pyc_magic so that byte compiled code created
165 using the all-Unicode method doesn't interfere with
166 code created in normal operation mode. */
167 pyc_magic = MAGIC + 1;
168 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000169}
170
Guido van Rossum25ce5661997-08-02 03:10:38 +0000171void
Just van Rossum52e14d62002-12-30 22:08:05 +0000172_PyImportHooks_Init(void)
173{
174 PyObject *v, *path_hooks = NULL, *zimpimport;
175 int err = 0;
176
177 /* adding sys.path_hooks and sys.path_importer_cache, setting up
178 zipimport */
Nick Coghlan327a39b2007-11-18 11:56:28 +0000179 if (PyType_Ready(&PyNullImporter_Type) < 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000180 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000181
182 if (Py_VerboseFlag)
183 PySys_WriteStderr("# installing zipimport hook\n");
184
185 v = PyList_New(0);
186 if (v == NULL)
187 goto error;
188 err = PySys_SetObject("meta_path", v);
189 Py_DECREF(v);
190 if (err)
191 goto error;
192 v = PyDict_New();
193 if (v == NULL)
194 goto error;
195 err = PySys_SetObject("path_importer_cache", v);
196 Py_DECREF(v);
197 if (err)
198 goto error;
199 path_hooks = PyList_New(0);
200 if (path_hooks == NULL)
201 goto error;
202 err = PySys_SetObject("path_hooks", path_hooks);
203 if (err) {
204 error:
205 PyErr_Print();
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000206 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
207 "path_importer_cache, or NullImporter failed"
208 );
Just van Rossum52e14d62002-12-30 22:08:05 +0000209 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000210
Just van Rossum52e14d62002-12-30 22:08:05 +0000211 zimpimport = PyImport_ImportModule("zipimport");
212 if (zimpimport == NULL) {
213 PyErr_Clear(); /* No zip import module -- okay */
214 if (Py_VerboseFlag)
215 PySys_WriteStderr("# can't import zipimport\n");
216 }
217 else {
218 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
219 "zipimporter");
220 Py_DECREF(zimpimport);
221 if (zipimporter == NULL) {
222 PyErr_Clear(); /* No zipimporter object -- okay */
223 if (Py_VerboseFlag)
224 PySys_WriteStderr(
Fred Drake1e5fc552003-07-11 15:01:02 +0000225 "# can't import zipimport.zipimporter\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000226 }
227 else {
228 /* sys.path_hooks.append(zipimporter) */
229 err = PyList_Append(path_hooks, zipimporter);
230 Py_DECREF(zipimporter);
231 if (err)
232 goto error;
233 if (Py_VerboseFlag)
234 PySys_WriteStderr(
235 "# installed zipimport hook\n");
236 }
237 }
238 Py_DECREF(path_hooks);
239}
240
241void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000242_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000243{
244 Py_XDECREF(extensions);
245 extensions = NULL;
Barry Warsaw84294482000-10-03 16:02:05 +0000246 PyMem_DEL(_PyImport_Filetab);
247 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000248}
249
250
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000251/* Locking primitives to prevent parallel imports of the same module
252 in different threads to return with a partially loaded module.
253 These calls are serialized by the global interpreter lock. */
254
255#ifdef WITH_THREAD
256
Guido van Rossum49b56061998-10-01 20:42:43 +0000257#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000258
Guido van Rossum65d5b571998-12-21 19:32:43 +0000259static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000260static long import_lock_thread = -1;
261static int import_lock_level = 0;
262
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000263void
264_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000265{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000266 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000267 if (me == -1)
268 return; /* Too bad */
Neal Norwitze1fdb322006-07-21 05:32:28 +0000269 if (import_lock == NULL) {
Guido van Rossum65d5b571998-12-21 19:32:43 +0000270 import_lock = PyThread_allocate_lock();
Neal Norwitze1fdb322006-07-21 05:32:28 +0000271 if (import_lock == NULL)
272 return; /* Nothing much we can do. */
273 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000274 if (import_lock_thread == me) {
275 import_lock_level++;
276 return;
277 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000278 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
279 {
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000280 PyThreadState *tstate = PyEval_SaveThread();
Guido van Rossum65d5b571998-12-21 19:32:43 +0000281 PyThread_acquire_lock(import_lock, 1);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000282 PyEval_RestoreThread(tstate);
283 }
284 import_lock_thread = me;
285 import_lock_level = 1;
286}
287
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000288int
289_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000290{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000291 long me = PyThread_get_thread_ident();
Neal Norwitze1fdb322006-07-21 05:32:28 +0000292 if (me == -1 || import_lock == NULL)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000293 return 0; /* Too bad */
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000294 if (import_lock_thread != me)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000295 return -1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000296 import_lock_level--;
297 if (import_lock_level == 0) {
298 import_lock_thread = -1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000299 PyThread_release_lock(import_lock);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000300 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000301 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000302}
303
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000304/* This function used to be called from PyOS_AfterFork to ensure that newly
305 created child processes do not share locks with the parent, but for some
306 reason only on AIX systems. Instead of re-initializing the lock, we now
307 acquire the import lock around fork() calls. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000308
309void
310_PyImport_ReInitLock(void)
311{
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000312}
313
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000314#endif
315
Tim Peters69232342001-08-30 05:16:13 +0000316static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000317imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000318{
Tim Peters69232342001-08-30 05:16:13 +0000319#ifdef WITH_THREAD
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000320 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000321#else
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000322 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000323#endif
324}
325
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000326static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000327imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000328{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000329#ifdef WITH_THREAD
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000330 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000331#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000332 Py_INCREF(Py_None);
333 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000334}
335
336static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000337imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000338{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000339#ifdef WITH_THREAD
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000340 if (_PyImport_ReleaseLock() < 0) {
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000341 PyErr_SetString(PyExc_RuntimeError,
342 "not holding the import lock");
343 return NULL;
344 }
345#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000346 Py_INCREF(Py_None);
347 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000348}
349
Collin Winter276887b2007-03-12 16:11:39 +0000350static void
Neal Norwitz75c7c802007-03-13 05:31:38 +0000351imp_modules_reloading_clear(void)
Collin Winter276887b2007-03-12 16:11:39 +0000352{
353 PyInterpreterState *interp = PyThreadState_Get()->interp;
Neal Norwitz75c7c802007-03-13 05:31:38 +0000354 if (interp->modules_reloading != NULL)
355 PyDict_Clear(interp->modules_reloading);
Collin Winter276887b2007-03-12 16:11:39 +0000356}
357
Guido van Rossum25ce5661997-08-02 03:10:38 +0000358/* Helper for sys */
359
360PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000361PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000362{
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000363 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000364 if (interp->modules == NULL)
365 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
366 return interp->modules;
367}
368
Guido van Rossum3f5da241990-12-20 15:06:42 +0000369
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000370/* List of names to clear in sys */
371static char* sys_deletes[] = {
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000372 "path", "argv", "ps1", "ps2", "exitfunc",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000373 "exc_type", "exc_value", "exc_traceback",
374 "last_type", "last_value", "last_traceback",
Just van Rossum52e14d62002-12-30 22:08:05 +0000375 "path_hooks", "path_importer_cache", "meta_path",
Christian Heimes0d924432008-01-30 17:21:22 +0000376 /* misc stuff */
377 "flags", "float_info",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000378 NULL
379};
380
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000381static char* sys_files[] = {
382 "stdin", "__stdin__",
383 "stdout", "__stdout__",
384 "stderr", "__stderr__",
385 NULL
386};
387
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000388
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000389/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000390
Guido van Rossum3f5da241990-12-20 15:06:42 +0000391void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000392PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000393{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000394 Py_ssize_t pos, ndone;
Guido van Rossum758eec01998-01-19 21:58:26 +0000395 char *name;
396 PyObject *key, *value, *dict;
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000397 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000398 PyObject *modules = interp->modules;
399
400 if (modules == NULL)
401 return; /* Already done */
402
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000403 /* Delete some special variables first. These are common
404 places where user values hide and people complain when their
405 destructors fail. Since the modules containing them are
406 deleted *last* of all, they would come too late in the normal
407 destruction order. Sigh. */
408
409 value = PyDict_GetItemString(modules, "__builtin__");
410 if (value != NULL && PyModule_Check(value)) {
411 dict = PyModule_GetDict(value);
412 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000413 PySys_WriteStderr("# clear __builtin__._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000414 PyDict_SetItemString(dict, "_", Py_None);
415 }
416 value = PyDict_GetItemString(modules, "sys");
417 if (value != NULL && PyModule_Check(value)) {
418 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000419 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000420 dict = PyModule_GetDict(value);
421 for (p = sys_deletes; *p != NULL; p++) {
422 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000423 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000424 PyDict_SetItemString(dict, *p, Py_None);
425 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000426 for (p = sys_files; *p != NULL; p+=2) {
427 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000428 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000429 v = PyDict_GetItemString(dict, *(p+1));
430 if (v == NULL)
431 v = Py_None;
432 PyDict_SetItemString(dict, *p, v);
433 }
434 }
435
436 /* First, delete __main__ */
437 value = PyDict_GetItemString(modules, "__main__");
438 if (value != NULL && PyModule_Check(value)) {
439 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000440 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000441 _PyModule_Clear(value);
442 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000443 }
444
Guido van Rossum758eec01998-01-19 21:58:26 +0000445 /* The special treatment of __builtin__ here is because even
446 when it's not referenced as a module, its dictionary is
447 referenced by almost every module's __builtins__. Since
448 deleting a module clears its dictionary (even if there are
449 references left to it), we need to delete the __builtin__
450 module last. Likewise, we don't delete sys until the very
451 end because it is implicitly referenced (e.g. by print).
452
453 Also note that we 'delete' modules by replacing their entry
454 in the modules dict with None, rather than really deleting
455 them; this avoids a rehash of the modules dictionary and
456 also marks them as "non existent" so they won't be
457 re-imported. */
458
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000459 /* Next, repeatedly delete modules with a reference count of
Guido van Rossum758eec01998-01-19 21:58:26 +0000460 one (skipping __builtin__ and sys) and delete them */
461 do {
462 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000463 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000464 while (PyDict_Next(modules, &pos, &key, &value)) {
465 if (value->ob_refcnt != 1)
466 continue;
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000467 if (PyString_Check(key) && PyModule_Check(value)) {
468 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000469 if (strcmp(name, "__builtin__") == 0)
470 continue;
471 if (strcmp(name, "sys") == 0)
472 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000473 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000474 PySys_WriteStderr(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000475 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000476 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000477 PyDict_SetItem(modules, key, Py_None);
478 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000479 }
480 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000481 } while (ndone > 0);
482
Guido van Rossum758eec01998-01-19 21:58:26 +0000483 /* Next, delete all modules (still skipping __builtin__ and sys) */
484 pos = 0;
485 while (PyDict_Next(modules, &pos, &key, &value)) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000486 if (PyString_Check(key) && PyModule_Check(value)) {
487 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000488 if (strcmp(name, "__builtin__") == 0)
489 continue;
490 if (strcmp(name, "sys") == 0)
491 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000492 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000493 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000494 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000495 PyDict_SetItem(modules, key, Py_None);
496 }
497 }
498
499 /* Next, delete sys and __builtin__ (in that order) */
500 value = PyDict_GetItemString(modules, "sys");
501 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000502 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000503 PySys_WriteStderr("# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000504 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000505 PyDict_SetItemString(modules, "sys", Py_None);
506 }
507 value = PyDict_GetItemString(modules, "__builtin__");
508 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000509 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000510 PySys_WriteStderr("# cleanup __builtin__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000511 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000512 PyDict_SetItemString(modules, "__builtin__", Py_None);
513 }
514
515 /* Finally, clear and delete the modules directory */
516 PyDict_Clear(modules);
517 interp->modules = NULL;
518 Py_DECREF(modules);
Collin Winter276887b2007-03-12 16:11:39 +0000519 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000520}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000521
522
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000523/* Helper for pythonrun.c -- return magic number */
524
525long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000526PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000527{
Guido van Rossum96774c12000-05-01 20:19:08 +0000528 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000529}
530
531
Guido van Rossum25ce5661997-08-02 03:10:38 +0000532/* Magic for extension modules (built-in as well as dynamically
533 loaded). To prevent initializing an extension module more than
534 once, we keep a static dictionary 'extensions' keyed by module name
535 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000536 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000537 dictionary is stored by calling _PyImport_FixupExtension()
538 immediately after the module initialization function succeeds. A
539 copy can be retrieved from there by calling
540 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000541
Guido van Rossum79f25d91997-04-29 20:08:16 +0000542PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000543_PyImport_FixupExtension(char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000544{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000545 PyObject *modules, *mod, *dict, *copy;
546 if (extensions == NULL) {
547 extensions = PyDict_New();
548 if (extensions == NULL)
549 return NULL;
550 }
551 modules = PyImport_GetModuleDict();
552 mod = PyDict_GetItemString(modules, name);
553 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000554 PyErr_Format(PyExc_SystemError,
555 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000556 return NULL;
557 }
558 dict = PyModule_GetDict(mod);
559 if (dict == NULL)
560 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000561 copy = PyDict_Copy(dict);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000562 if (copy == NULL)
563 return NULL;
564 PyDict_SetItemString(extensions, filename, copy);
565 Py_DECREF(copy);
566 return copy;
567}
568
569PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000570_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000571{
Fred Drake9cd0efc2001-10-25 21:38:59 +0000572 PyObject *dict, *mod, *mdict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000573 if (extensions == NULL)
574 return NULL;
575 dict = PyDict_GetItemString(extensions, filename);
576 if (dict == NULL)
577 return NULL;
578 mod = PyImport_AddModule(name);
579 if (mod == NULL)
580 return NULL;
581 mdict = PyModule_GetDict(mod);
582 if (mdict == NULL)
583 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000584 if (PyDict_Update(mdict, dict))
Guido van Rossum25ce5661997-08-02 03:10:38 +0000585 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000586 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000587 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Guido van Rossum25ce5661997-08-02 03:10:38 +0000588 name, filename);
589 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000590}
591
592
593/* Get the module object corresponding to a module name.
594 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000595 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000596 Because the former action is most common, THIS DOES NOT RETURN A
597 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000598
Guido van Rossum79f25d91997-04-29 20:08:16 +0000599PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000600PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000601{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000602 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000603 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000604
Guido van Rossum25ce5661997-08-02 03:10:38 +0000605 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000606 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000607 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000608 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000609 if (m == NULL)
610 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000611 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000612 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000613 return NULL;
614 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000615 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000616
617 return m;
618}
619
Tim Peters1cd70172004-08-02 03:52:12 +0000620/* Remove name from sys.modules, if it's there. */
621static void
622_RemoveModule(const char *name)
623{
624 PyObject *modules = PyImport_GetModuleDict();
625 if (PyDict_GetItemString(modules, name) == NULL)
626 return;
627 if (PyDict_DelItemString(modules, name) < 0)
628 Py_FatalError("import: deleting existing key in"
629 "sys.modules failed");
630}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000631
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000632/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000633 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
634 * removed from sys.modules, to avoid leaving damaged module objects
635 * in sys.modules. The caller may wish to restore the original
636 * module object (if any) in this case; PyImport_ReloadModule is an
637 * example.
638 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000639PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000640PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000641{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000642 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
643}
644
645PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000646PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000647{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000648 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000649 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000650
Guido van Rossum79f25d91997-04-29 20:08:16 +0000651 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000652 if (m == NULL)
653 return NULL;
Jeremy Hyltonecd91292004-01-02 23:25:32 +0000654 /* If the module is being reloaded, we get the old module back
655 and re-use its dict to exec the new code. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000656 d = PyModule_GetDict(m);
657 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
658 if (PyDict_SetItemString(d, "__builtins__",
659 PyEval_GetBuiltins()) != 0)
Tim Peters1cd70172004-08-02 03:52:12 +0000660 goto error;
Guido van Rossum6135a871995-01-09 17:53:26 +0000661 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000662 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000663 v = NULL;
664 if (pathname != NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000665 v = PyString_FromString(pathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000666 if (v == NULL)
667 PyErr_Clear();
668 }
669 if (v == NULL) {
670 v = ((PyCodeObject *)co)->co_filename;
671 Py_INCREF(v);
672 }
673 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000674 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000675 Py_DECREF(v);
676
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000677 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000678 if (v == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000679 goto error;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000680 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000681
Guido van Rossum25ce5661997-08-02 03:10:38 +0000682 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000683 PyErr_Format(PyExc_ImportError,
684 "Loaded module %.200s not found in sys.modules",
685 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000686 return NULL;
687 }
688
Guido van Rossum79f25d91997-04-29 20:08:16 +0000689 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000690
691 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000692
693 error:
694 _RemoveModule(name);
695 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000696}
697
698
699/* Given a pathname for a Python source file, fill a buffer with the
700 pathname for the corresponding compiled file. Return the pathname
701 for the compiled file, or NULL if there's no space in the buffer.
702 Doesn't set an exception. */
703
704static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000705make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000706{
Tim Petersc1731372001-08-04 08:12:36 +0000707 size_t len = strlen(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000708 if (len+2 > buflen)
709 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000710
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000711#ifdef MS_WINDOWS
Tim Petersc1731372001-08-04 08:12:36 +0000712 /* Treat .pyw as if it were .py. The case of ".pyw" must match
713 that used in _PyImport_StandardFiletab. */
714 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
715 --len; /* pretend 'w' isn't there */
716#endif
717 memcpy(buf, pathname, len);
718 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
719 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000720
721 return buf;
722}
723
724
725/* Given a pathname for a Python source file, its time of last
726 modification, and a pathname for a compiled file, check whether the
727 compiled file represents the same version of the source. If so,
728 return a FILE pointer for the compiled file, positioned just after
729 the header; if not, return NULL.
730 Doesn't set an exception. */
731
732static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000733check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000734{
735 FILE *fp;
736 long magic;
737 long pyc_mtime;
738
739 fp = fopen(cpathname, "rb");
740 if (fp == NULL)
741 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000742 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000743 if (magic != pyc_magic) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000745 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000746 fclose(fp);
747 return NULL;
748 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000750 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000752 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000753 fclose(fp);
754 return NULL;
755 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000757 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000758 return fp;
759}
760
761
762/* Read a code object from a file and check it for validity */
763
Guido van Rossum79f25d91997-04-29 20:08:16 +0000764static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000765read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000766{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000767 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000768
Tim Petersd9b9ac82001-01-28 00:27:39 +0000769 co = PyMarshal_ReadLastObjectFromFile(fp);
Armin Rigo01ab2792004-03-26 15:09:27 +0000770 if (co == NULL)
771 return NULL;
772 if (!PyCode_Check(co)) {
773 PyErr_Format(PyExc_ImportError,
774 "Non-code object in %.200s", cpathname);
775 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000776 return NULL;
777 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000778 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000779}
780
781
782/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000783 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000784
Guido van Rossum79f25d91997-04-29 20:08:16 +0000785static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000786load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000787{
788 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000789 PyCodeObject *co;
790 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000791
Guido van Rossum79f25d91997-04-29 20:08:16 +0000792 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000793 if (magic != pyc_magic) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000794 PyErr_Format(PyExc_ImportError,
795 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000796 return NULL;
797 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000798 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000799 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000800 if (co == NULL)
801 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000802 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000803 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000804 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000805 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000806 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000807
808 return m;
809}
810
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000811/* Parse a source file and return the corresponding code object */
812
Guido van Rossum79f25d91997-04-29 20:08:16 +0000813static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000814parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000815{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000816 PyCodeObject *co = NULL;
817 mod_ty mod;
Christian Heimes3c608332008-03-26 22:01:37 +0000818 PyCompilerFlags flags;
Neal Norwitz2a399b02006-09-11 04:28:16 +0000819 PyArena *arena = PyArena_New();
820 if (arena == NULL)
821 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000822
Christian Heimes7f23d862008-03-26 22:51:58 +0000823 flags.cf_flags = 0;
824
Christian Heimes3c608332008-03-26 22:01:37 +0000825 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, &flags,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000826 NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000827 if (mod) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000828 co = PyAST_Compile(mod, pathname, NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000829 }
Neal Norwitz2a399b02006-09-11 04:28:16 +0000830 PyArena_Free(arena);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000831 return co;
832}
833
834
Guido van Rossum55a83382000-09-20 20:31:38 +0000835/* Helper to open a bytecode file for writing in exclusive mode */
836
837static FILE *
Christian Heimes40346852008-02-23 17:52:07 +0000838open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +0000839{
840#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
841 /* Use O_EXCL to avoid a race condition when another process tries to
842 write the same file. When that happens, our open() call fails,
843 which is just fine (since it's only a cache).
844 XXX If the file exists and is writable but the directory is not
845 writable, the file will never be written. Oh well.
846 */
847 int fd;
848 (void) unlink(filename);
Tim Peters42c83af2000-09-29 04:03:10 +0000849 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
850#ifdef O_BINARY
851 |O_BINARY /* necessary for Windows */
852#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000853#ifdef __VMS
Christian Heimes40346852008-02-23 17:52:07 +0000854 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000855#else
Christian Heimes40346852008-02-23 17:52:07 +0000856 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000857#endif
Martin v. Löwis18e16552006-02-15 17:27:45 +0000858 );
Guido van Rossum55a83382000-09-20 20:31:38 +0000859 if (fd < 0)
860 return NULL;
861 return fdopen(fd, "wb");
862#else
863 /* Best we can do -- on Windows this can't happen anyway */
864 return fopen(filename, "wb");
865#endif
866}
867
868
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000869/* Write a compiled module to a file, placing the time of last
870 modification of its source into the header.
871 Errors are ignored, if a write error occurs an attempt is made to
872 remove the file. */
873
874static void
Christian Heimes40346852008-02-23 17:52:07 +0000875write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000876{
877 FILE *fp;
Christian Heimes40346852008-02-23 17:52:07 +0000878 time_t mtime = srcstat->st_mtime;
R. David Murray3310a102009-07-07 09:54:16 +0000879#ifdef MS_WINDOWS /* since Windows uses different permissions */
880 mode_t mode = srcstat->st_mode & ~S_IEXEC;
881#else
R. David Murray23a736a2009-07-07 01:06:13 +0000882 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
883#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000884
Christian Heimes40346852008-02-23 17:52:07 +0000885 fp = open_exclusive(cpathname, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000886 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000887 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000888 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000889 "# can't create %s\n", cpathname);
890 return;
891 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000892 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000893 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000894 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
895 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000896 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000897 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000898 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000899 /* Don't keep partial file */
900 fclose(fp);
901 (void) unlink(cpathname);
902 return;
903 }
904 /* Now write the true mtime */
905 fseek(fp, 4L, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000906 assert(mtime < LONG_MAX);
Martin v. Löwis725507b2006-03-07 12:08:51 +0000907 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000908 fflush(fp);
909 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000911 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000912}
913
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000914static void
915update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
916{
917 PyObject *constants, *tmp;
918 Py_ssize_t i, n;
919
920 if (!_PyString_Eq(co->co_filename, oldname))
921 return;
922
923 tmp = co->co_filename;
924 co->co_filename = newname;
925 Py_INCREF(co->co_filename);
926 Py_DECREF(tmp);
927
928 constants = co->co_consts;
929 n = PyTuple_GET_SIZE(constants);
930 for (i = 0; i < n; i++) {
931 tmp = PyTuple_GET_ITEM(constants, i);
932 if (PyCode_Check(tmp))
933 update_code_filenames((PyCodeObject *)tmp,
934 oldname, newname);
935 }
936}
937
938static int
939update_compiled_module(PyCodeObject *co, char *pathname)
940{
941 PyObject *oldname, *newname;
942
943 if (strcmp(PyString_AsString(co->co_filename), pathname) == 0)
944 return 0;
945
946 newname = PyString_FromString(pathname);
947 if (newname == NULL)
948 return -1;
949
950 oldname = co->co_filename;
951 Py_INCREF(oldname);
952 update_code_filenames(co, oldname, newname);
953 Py_DECREF(oldname);
954 Py_DECREF(newname);
955 return 1;
956}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000957
958/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000959 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
960 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000961
Guido van Rossum79f25d91997-04-29 20:08:16 +0000962static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000963load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000964{
Christian Heimes40346852008-02-23 17:52:07 +0000965 struct stat st;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000966 FILE *fpc;
967 char buf[MAXPATHLEN+1];
968 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000969 PyCodeObject *co;
970 PyObject *m;
Christian Heimes40346852008-02-23 17:52:07 +0000971
972 if (fstat(fileno(fp), &st) != 0) {
Neal Norwitz708e51a2005-10-03 04:48:15 +0000973 PyErr_Format(PyExc_RuntimeError,
Christian Heimes40346852008-02-23 17:52:07 +0000974 "unable to get file status from '%s'",
Neal Norwitz708e51a2005-10-03 04:48:15 +0000975 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +0000976 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +0000977 }
Fred Drake4c82b232000-06-30 16:18:57 +0000978#if SIZEOF_TIME_T > 4
979 /* Python's .pyc timestamp handling presumes that the timestamp fits
980 in 4 bytes. This will be fine until sometime in the year 2038,
981 when a 4-byte signed time_t will overflow.
982 */
Christian Heimes40346852008-02-23 17:52:07 +0000983 if (st.st_mtime >> 32) {
Fred Drake4c82b232000-06-30 16:18:57 +0000984 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +0000985 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +0000986 return NULL;
987 }
988#endif
Tim Peters36515e22001-11-18 04:06:29 +0000989 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +0000990 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000991 if (cpathname != NULL &&
Christian Heimes40346852008-02-23 17:52:07 +0000992 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000993 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000994 fclose(fpc);
995 if (co == NULL)
996 return NULL;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000997 if (update_compiled_module(co, pathname) < 0)
998 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000999 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001000 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001001 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +00001002 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001003 }
1004 else {
1005 co = parse_source_module(pathname, fp);
1006 if (co == NULL)
1007 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001008 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001009 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001010 name, pathname);
Georg Brandl2da0fce2008-01-07 17:09:35 +00001011 if (cpathname) {
1012 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1013 if (ro == NULL || !PyObject_IsTrue(ro))
Christian Heimes40346852008-02-23 17:52:07 +00001014 write_compiled_module(co, cpathname, &st);
Georg Brandl2da0fce2008-01-07 17:09:35 +00001015 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001016 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +00001017 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001018 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001019
1020 return m;
1021}
1022
1023
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001024/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001025static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1026static struct filedescr *find_module(char *, char *, PyObject *,
1027 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001028static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001029
1030/* Load a package and return its module object WITH INCREMENTED
1031 REFERENCE COUNT */
1032
1033static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001034load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001035{
Tim Peters1cd70172004-08-02 03:52:12 +00001036 PyObject *m, *d;
1037 PyObject *file = NULL;
1038 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001039 int err;
1040 char buf[MAXPATHLEN+1];
1041 FILE *fp = NULL;
1042 struct filedescr *fdp;
1043
1044 m = PyImport_AddModule(name);
1045 if (m == NULL)
1046 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001047 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001048 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001049 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001050 d = PyModule_GetDict(m);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001051 file = PyString_FromString(pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001052 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +00001053 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001054 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +00001055 if (path == NULL)
1056 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001057 err = PyDict_SetItemString(d, "__file__", file);
1058 if (err == 0)
1059 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +00001060 if (err != 0)
1061 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001062 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00001063 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001064 if (fdp == NULL) {
1065 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1066 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +00001067 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001068 }
1069 else
1070 m = NULL;
1071 goto cleanup;
1072 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001073 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001074 if (fp != NULL)
1075 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00001076 goto cleanup;
1077
1078 error:
1079 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001080 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001081 Py_XDECREF(path);
1082 Py_XDECREF(file);
1083 return m;
1084}
1085
1086
1087/* Helper to test for built-in module */
1088
1089static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001090is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001091{
1092 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +00001093 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1094 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1095 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001096 return -1;
1097 else
1098 return 1;
1099 }
1100 }
1101 return 0;
1102}
1103
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001104
Just van Rossum52e14d62002-12-30 22:08:05 +00001105/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1106 possibly by fetching it from the path_importer_cache dict. If it
Brett Cannon94b69f62006-09-28 22:10:14 +00001107 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001108 that can handle the path item. Return None if no hook could;
1109 this tells our caller it should fall back to the builtin
1110 import mechanism. Cache the result in path_importer_cache.
1111 Returns a borrowed reference. */
1112
1113static PyObject *
1114get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1115 PyObject *p)
1116{
1117 PyObject *importer;
Martin v. Löwis725507b2006-03-07 12:08:51 +00001118 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001119
1120 /* These conditions are the caller's responsibility: */
1121 assert(PyList_Check(path_hooks));
1122 assert(PyDict_Check(path_importer_cache));
1123
1124 nhooks = PyList_Size(path_hooks);
1125 if (nhooks < 0)
1126 return NULL; /* Shouldn't happen */
1127
1128 importer = PyDict_GetItem(path_importer_cache, p);
1129 if (importer != NULL)
1130 return importer;
1131
1132 /* set path_importer_cache[p] to None to avoid recursion */
1133 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1134 return NULL;
1135
1136 for (j = 0; j < nhooks; j++) {
1137 PyObject *hook = PyList_GetItem(path_hooks, j);
1138 if (hook == NULL)
1139 return NULL;
Georg Brandl684fd0c2006-05-25 19:15:31 +00001140 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
Just van Rossum52e14d62002-12-30 22:08:05 +00001141 if (importer != NULL)
1142 break;
1143
1144 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1145 return NULL;
1146 }
1147 PyErr_Clear();
1148 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001149 if (importer == NULL) {
1150 importer = PyObject_CallFunctionObjArgs(
Nick Coghlan327a39b2007-11-18 11:56:28 +00001151 (PyObject *)&PyNullImporter_Type, p, NULL
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001152 );
1153 if (importer == NULL) {
1154 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1155 PyErr_Clear();
1156 return Py_None;
1157 }
1158 }
1159 }
1160 if (importer != NULL) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001161 int err = PyDict_SetItem(path_importer_cache, p, importer);
1162 Py_DECREF(importer);
1163 if (err != 0)
1164 return NULL;
1165 }
1166 return importer;
1167}
1168
Nick Coghlan327a39b2007-11-18 11:56:28 +00001169PyAPI_FUNC(PyObject *)
1170PyImport_GetImporter(PyObject *path) {
1171 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
1172
1173 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1174 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1175 importer = get_path_importer(path_importer_cache,
1176 path_hooks, path);
1177 }
1178 }
1179 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1180 return importer;
1181}
1182
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001183/* Search the path (default sys.path) for a module. Return the
1184 corresponding filedescr struct, and (via return arguments) the
1185 pathname and an open file. Return NULL if the module is not found. */
1186
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001187#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001188extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001189 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001190#endif
1191
Martin v. Löwis18e16552006-02-15 17:27:45 +00001192static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001193static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001194static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001195
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001196static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001197find_module(char *fullname, char *subname, PyObject *path, char *buf,
1198 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001199{
Martin v. Löwis725507b2006-03-07 12:08:51 +00001200 Py_ssize_t i, npath;
Fred Drake4c82b232000-06-30 16:18:57 +00001201 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001202 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001203 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001204 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001205 PyObject *path_hooks, *path_importer_cache;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001206#ifndef RISCOS
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001207 struct stat statbuf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001208#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001209 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1210 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1211 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001212 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001213#if defined(PYOS_OS2)
1214 size_t saved_len;
1215 size_t saved_namelen;
1216 char *saved_buf = NULL;
1217#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001218 if (p_loader != NULL)
1219 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001220
Just van Rossum52e14d62002-12-30 22:08:05 +00001221 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001222 PyErr_SetString(PyExc_OverflowError,
1223 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001224 return NULL;
1225 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001226 strcpy(name, subname);
1227
1228 /* sys.meta_path import hook */
1229 if (p_loader != NULL) {
1230 PyObject *meta_path;
1231
1232 meta_path = PySys_GetObject("meta_path");
1233 if (meta_path == NULL || !PyList_Check(meta_path)) {
1234 PyErr_SetString(PyExc_ImportError,
1235 "sys.meta_path must be a list of "
1236 "import hooks");
1237 return NULL;
1238 }
1239 Py_INCREF(meta_path); /* zap guard */
1240 npath = PyList_Size(meta_path);
1241 for (i = 0; i < npath; i++) {
1242 PyObject *loader;
1243 PyObject *hook = PyList_GetItem(meta_path, i);
1244 loader = PyObject_CallMethod(hook, "find_module",
1245 "sO", fullname,
1246 path != NULL ?
1247 path : Py_None);
1248 if (loader == NULL) {
1249 Py_DECREF(meta_path);
1250 return NULL; /* true error */
1251 }
1252 if (loader != Py_None) {
1253 /* a loader was found */
1254 *p_loader = loader;
1255 Py_DECREF(meta_path);
1256 return &importhookdescr;
1257 }
1258 Py_DECREF(loader);
1259 }
1260 Py_DECREF(meta_path);
1261 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001262
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001263 if (path != NULL && PyString_Check(path)) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001264 /* The only type of submodule allowed inside a "frozen"
1265 package are other frozen modules or packages. */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001266 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
Guido van Rossum0506a431998-08-11 15:07:39 +00001267 PyErr_SetString(PyExc_ImportError,
1268 "full frozen module name too long");
1269 return NULL;
1270 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001271 strcpy(buf, PyString_AsString(path));
Guido van Rossum0506a431998-08-11 15:07:39 +00001272 strcat(buf, ".");
1273 strcat(buf, name);
1274 strcpy(name, buf);
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001275 if (find_frozen(name) != NULL) {
1276 strcpy(buf, name);
1277 return &fd_frozen;
1278 }
1279 PyErr_Format(PyExc_ImportError,
1280 "No frozen submodule named %.200s", name);
1281 return NULL;
Guido van Rossum0506a431998-08-11 15:07:39 +00001282 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001283 if (path == NULL) {
1284 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001285 strcpy(buf, name);
1286 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001287 }
Greg Ward201baee2001-10-04 14:52:06 +00001288 if ((find_frozen(name)) != NULL) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001289 strcpy(buf, name);
1290 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001291 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001292
Guido van Rossumac279101996-08-22 23:10:58 +00001293#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001294 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1295 if (fp != NULL) {
1296 *p_fp = fp;
1297 return fdp;
1298 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001299#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001300 path = PySys_GetObject("path");
1301 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001302 if (path == NULL || !PyList_Check(path)) {
1303 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001304 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001305 return NULL;
1306 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001307
1308 path_hooks = PySys_GetObject("path_hooks");
1309 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1310 PyErr_SetString(PyExc_ImportError,
1311 "sys.path_hooks must be a list of "
1312 "import hooks");
1313 return NULL;
1314 }
1315 path_importer_cache = PySys_GetObject("path_importer_cache");
1316 if (path_importer_cache == NULL ||
1317 !PyDict_Check(path_importer_cache)) {
1318 PyErr_SetString(PyExc_ImportError,
1319 "sys.path_importer_cache must be a dict");
1320 return NULL;
1321 }
1322
Guido van Rossum79f25d91997-04-29 20:08:16 +00001323 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001324 namelen = strlen(name);
1325 for (i = 0; i < npath; i++) {
Walter Dörwald3430d702002-06-17 10:43:59 +00001326 PyObject *copy = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001327 PyObject *v = PyList_GetItem(path, i);
Neal Norwitz3cb31ac2006-08-13 18:10:47 +00001328 if (!v)
1329 return NULL;
Walter Dörwald3430d702002-06-17 10:43:59 +00001330#ifdef Py_USING_UNICODE
1331 if (PyUnicode_Check(v)) {
1332 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1333 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1334 if (copy == NULL)
1335 return NULL;
1336 v = copy;
1337 }
1338 else
1339#endif
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001340 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001341 continue;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001342 len = PyString_GET_SIZE(v);
Walter Dörwald3430d702002-06-17 10:43:59 +00001343 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1344 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001345 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001346 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001347 strcpy(buf, PyString_AS_STRING(v));
Walter Dörwald3430d702002-06-17 10:43:59 +00001348 if (strlen(buf) != len) {
1349 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001350 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001351 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001352
1353 /* sys.path_hooks import hook */
1354 if (p_loader != NULL) {
1355 PyObject *importer;
1356
1357 importer = get_path_importer(path_importer_cache,
1358 path_hooks, v);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001359 if (importer == NULL) {
1360 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001361 return NULL;
Neal Norwitza4df11d2006-07-06 04:28:59 +00001362 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001363 /* Note: importer is a borrowed reference */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001364 if (importer != Py_None) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001365 PyObject *loader;
1366 loader = PyObject_CallMethod(importer,
1367 "find_module",
1368 "s", fullname);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001369 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001370 if (loader == NULL)
1371 return NULL; /* error */
1372 if (loader != Py_None) {
1373 /* a loader was found */
1374 *p_loader = loader;
1375 return &importhookdescr;
1376 }
1377 Py_DECREF(loader);
Georg Brandlf4ef1162006-05-26 18:03:31 +00001378 continue;
Just van Rossum52e14d62002-12-30 22:08:05 +00001379 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001380 }
Georg Brandlf4ef1162006-05-26 18:03:31 +00001381 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001382
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001383 if (len > 0 && buf[len-1] != SEP
1384#ifdef ALTSEP
1385 && buf[len-1] != ALTSEP
1386#endif
1387 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001388 buf[len++] = SEP;
Guido van Rossum215c3402000-11-13 17:26:32 +00001389 strcpy(buf+len, name);
1390 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001391
1392 /* Check for package import (buf holds a directory name,
1393 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001394#ifdef HAVE_STAT
Walter Dörwald3430d702002-06-17 10:43:59 +00001395 if (stat(buf, &statbuf) == 0 && /* it exists */
1396 S_ISDIR(statbuf.st_mode) && /* it's a directory */
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001397 case_ok(buf, len, namelen, name)) { /* case matches */
1398 if (find_init_module(buf)) { /* and has __init__.py */
1399 Py_XDECREF(copy);
1400 return &fd_package;
1401 }
1402 else {
1403 char warnstr[MAXPATHLEN+80];
1404 sprintf(warnstr, "Not importing directory "
1405 "'%.*s': missing __init__.py",
1406 MAXPATHLEN, buf);
1407 if (PyErr_Warn(PyExc_ImportWarning,
1408 warnstr)) {
1409 Py_XDECREF(copy);
1410 return NULL;
1411 }
1412 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001413 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001414#else
1415 /* XXX How are you going to test for directories? */
Guido van Rossum48a680c2001-03-02 06:34:14 +00001416#ifdef RISCOS
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001417 if (isdir(buf) &&
Walter Dörwald3430d702002-06-17 10:43:59 +00001418 case_ok(buf, len, namelen, name)) {
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001419 if (find_init_module(buf)) {
1420 Py_XDECREF(copy);
1421 return &fd_package;
1422 }
1423 else {
1424 char warnstr[MAXPATHLEN+80];
1425 sprintf(warnstr, "Not importing directory "
1426 "'%.*s': missing __init__.py",
1427 MAXPATHLEN, buf);
1428 if (PyErr_Warn(PyExc_ImportWarning,
1429 warnstr)) {
1430 Py_XDECREF(copy);
1431 return NULL;
1432 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001433 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001434#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001435#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001436#if defined(PYOS_OS2)
1437 /* take a snapshot of the module spec for restoration
1438 * after the 8 character DLL hackery
1439 */
1440 saved_buf = strdup(buf);
1441 saved_len = len;
1442 saved_namelen = namelen;
1443#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001444 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Georg Brandladd36e52007-08-23 18:08:06 +00001445#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001446 /* OS/2 limits DLLs to 8 character names (w/o
1447 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001448 * so if the name is longer than that and its a
1449 * dynamically loaded module we're going to try,
1450 * truncate the name before trying
1451 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001452 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001453 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001454 const struct filedescr *scan;
1455 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001456 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001457 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001458 break;
1459 else
1460 scan++;
1461 }
1462 if (scan->suffix != NULL) {
1463 /* yes, so truncate the name */
1464 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001465 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001466 buf[len] = '\0';
1467 }
1468 }
1469#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001470 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001471 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001472 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001473 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001474 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001475 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001476 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001477 if (fp != NULL) {
1478 if (case_ok(buf, len, namelen, name))
1479 break;
1480 else { /* continue search */
1481 fclose(fp);
1482 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001483 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001484 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001485#if defined(PYOS_OS2)
1486 /* restore the saved snapshot */
1487 strcpy(buf, saved_buf);
1488 len = saved_len;
1489 namelen = saved_namelen;
1490#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001491 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001492#if defined(PYOS_OS2)
1493 /* don't need/want the module name snapshot anymore */
1494 if (saved_buf)
1495 {
1496 free(saved_buf);
1497 saved_buf = NULL;
1498 }
1499#endif
Walter Dörwald3430d702002-06-17 10:43:59 +00001500 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001501 if (fp != NULL)
1502 break;
1503 }
1504 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001505 PyErr_Format(PyExc_ImportError,
1506 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001507 return NULL;
1508 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001509 *p_fp = fp;
1510 return fdp;
1511}
1512
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001513/* Helpers for main.c
1514 * Find the source file corresponding to a named module
1515 */
1516struct filedescr *
1517_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1518 size_t buflen, FILE **p_fp, PyObject **p_loader)
1519{
1520 return find_module((char *) name, (char *) name, path,
1521 buf, buflen, p_fp, p_loader);
1522}
1523
1524PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1525{
1526 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1527}
1528
Martin v. Löwis18e16552006-02-15 17:27:45 +00001529/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001530 * The arguments here are tricky, best shown by example:
1531 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1532 * ^ ^ ^ ^
1533 * |--------------------- buf ---------------------|
1534 * |------------------- len ------------------|
1535 * |------ name -------|
1536 * |----- namelen -----|
1537 * buf is the full path, but len only counts up to (& exclusive of) the
1538 * extension. name is the module name, also exclusive of extension.
1539 *
1540 * We've already done a successful stat() or fopen() on buf, so know that
1541 * there's some match, possibly case-insensitive.
1542 *
Tim Peters50d8d372001-02-28 05:34:27 +00001543 * case_ok() is to return 1 if there's a case-sensitive match for
1544 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1545 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001546 *
Tim Peters50d8d372001-02-28 05:34:27 +00001547 * case_ok() is used to implement case-sensitive import semantics even
1548 * on platforms with case-insensitive filesystems. It's trivial to implement
1549 * for case-sensitive filesystems. It's pretty much a cross-platform
1550 * nightmare for systems with case-insensitive filesystems.
1551 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001552
Tim Peters50d8d372001-02-28 05:34:27 +00001553/* First we may need a pile of platform-specific header files; the sequence
1554 * of #if's here should match the sequence in the body of case_ok().
1555 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001556#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001557#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001558
Tim Peters50d8d372001-02-28 05:34:27 +00001559#elif defined(DJGPP)
1560#include <dir.h>
1561
Jason Tishler7961aa62005-05-20 00:56:54 +00001562#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001563#include <sys/types.h>
1564#include <dirent.h>
1565
Andrew MacIntyred9400542002-02-26 11:41:34 +00001566#elif defined(PYOS_OS2)
1567#define INCL_DOS
1568#define INCL_DOSERRORS
1569#define INCL_NOPMAPI
1570#include <os2.h>
1571
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001572#elif defined(RISCOS)
1573#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001574#endif
1575
Guido van Rossum0980bd91998-02-13 17:18:36 +00001576static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001577case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001578{
Tim Peters50d8d372001-02-28 05:34:27 +00001579/* Pick a platform-specific implementation; the sequence of #if's here should
1580 * match the sequence just above.
1581 */
1582
Jason Tishler7961aa62005-05-20 00:56:54 +00001583/* MS_WINDOWS */
1584#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001585 WIN32_FIND_DATA data;
1586 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001587
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001588 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001589 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001590
Guido van Rossum0980bd91998-02-13 17:18:36 +00001591 h = FindFirstFile(buf, &data);
1592 if (h == INVALID_HANDLE_VALUE) {
1593 PyErr_Format(PyExc_NameError,
1594 "Can't find file for module %.100s\n(filename %.300s)",
1595 name, buf);
1596 return 0;
1597 }
1598 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001599 return strncmp(data.cFileName, name, namelen) == 0;
1600
1601/* DJGPP */
1602#elif defined(DJGPP)
1603 struct ffblk ffblk;
1604 int done;
1605
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001606 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001607 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001608
1609 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1610 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001611 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001612 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001613 name, buf);
1614 return 0;
1615 }
Tim Peters50d8d372001-02-28 05:34:27 +00001616 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001617
Jason Tishler7961aa62005-05-20 00:56:54 +00001618/* new-fangled macintosh (macosx) or Cygwin */
1619#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001620 DIR *dirp;
1621 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001622 char dirname[MAXPATHLEN + 1];
1623 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001624
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001625 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001626 return 1;
1627
Tim Petersd1e87a82001-03-01 18:12:00 +00001628 /* Copy the dir component into dirname; substitute "." if empty */
1629 if (dirlen <= 0) {
1630 dirname[0] = '.';
1631 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001632 }
1633 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001634 assert(dirlen <= MAXPATHLEN);
1635 memcpy(dirname, buf, dirlen);
1636 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001637 }
1638 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001639 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001640 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001641 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001642 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001643 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001644#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001645 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001646#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001647 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001648#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001649 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001650 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001651 (void)closedir(dirp);
1652 return 1; /* Found */
1653 }
1654 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001655 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001656 }
Tim Peters430f5d42001-03-01 01:30:56 +00001657 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001658
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001659/* RISC OS */
1660#elif defined(RISCOS)
1661 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1662 char buf2[MAXPATHLEN+2];
1663 char *nameWithExt = buf+len-namelen;
1664 int canonlen;
1665 os_error *e;
1666
1667 if (Py_GETENV("PYTHONCASEOK") != NULL)
1668 return 1;
1669
1670 /* workaround:
1671 append wildcard, otherwise case of filename wouldn't be touched */
1672 strcpy(buf2, buf);
1673 strcat(buf2, "*");
1674
1675 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1676 canonlen = MAXPATHLEN+1-canonlen;
1677 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1678 return 0;
1679 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1680 return 1; /* match */
1681
1682 return 0;
1683
Andrew MacIntyred9400542002-02-26 11:41:34 +00001684/* OS/2 */
1685#elif defined(PYOS_OS2)
1686 HDIR hdir = 1;
1687 ULONG srchcnt = 1;
1688 FILEFINDBUF3 ffbuf;
1689 APIRET rc;
1690
Georg Brandlaed6c662008-01-07 17:25:53 +00001691 if (Py_GETENV("PYTHONCASEOK") != NULL)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001692 return 1;
1693
1694 rc = DosFindFirst(buf,
1695 &hdir,
1696 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1697 &ffbuf, sizeof(ffbuf),
1698 &srchcnt,
1699 FIL_STANDARD);
1700 if (rc != NO_ERROR)
1701 return 0;
1702 return strncmp(ffbuf.achName, name, namelen) == 0;
1703
Tim Peters50d8d372001-02-28 05:34:27 +00001704/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1705#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001706 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001707
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001708#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001709}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001710
Guido van Rossum0980bd91998-02-13 17:18:36 +00001711
Guido van Rossum197346f1997-10-31 18:38:52 +00001712#ifdef HAVE_STAT
1713/* Helper to look for __init__.py or __init__.py[co] in potential package */
1714static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001715find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001716{
Tim Peters0f9431f2001-07-05 03:47:53 +00001717 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001718 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001719 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001720 struct stat statbuf;
1721
Tim Peters0f9431f2001-07-05 03:47:53 +00001722/* For calling case_ok(buf, len, namelen, name):
1723 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1724 * ^ ^ ^ ^
1725 * |--------------------- buf ---------------------|
1726 * |------------------- len ------------------|
1727 * |------ name -------|
1728 * |----- namelen -----|
1729 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001730 if (save_len + 13 >= MAXPATHLEN)
1731 return 0;
1732 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001733 pname = buf + i;
1734 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001735 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001736 if (case_ok(buf,
1737 save_len + 9, /* len("/__init__") */
1738 8, /* len("__init__") */
1739 pname)) {
1740 buf[save_len] = '\0';
1741 return 1;
1742 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001743 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001744 i += strlen(pname);
1745 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001746 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001747 if (case_ok(buf,
1748 save_len + 9, /* len("/__init__") */
1749 8, /* len("__init__") */
1750 pname)) {
1751 buf[save_len] = '\0';
1752 return 1;
1753 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001754 }
1755 buf[save_len] = '\0';
1756 return 0;
1757}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001758
1759#else
1760
1761#ifdef RISCOS
1762static int
1763find_init_module(buf)
1764 char *buf;
1765{
1766 int save_len = strlen(buf);
1767 int i = save_len;
1768
1769 if (save_len + 13 >= MAXPATHLEN)
1770 return 0;
1771 buf[i++] = SEP;
1772 strcpy(buf+i, "__init__/py");
1773 if (isfile(buf)) {
1774 buf[save_len] = '\0';
1775 return 1;
1776 }
1777
1778 if (Py_OptimizeFlag)
1779 strcpy(buf+i, "o");
1780 else
1781 strcpy(buf+i, "c");
1782 if (isfile(buf)) {
1783 buf[save_len] = '\0';
1784 return 1;
1785 }
1786 buf[save_len] = '\0';
1787 return 0;
1788}
1789#endif /*RISCOS*/
1790
Guido van Rossum197346f1997-10-31 18:38:52 +00001791#endif /* HAVE_STAT */
1792
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001793
Tim Petersdbd9ba62000-07-09 03:09:57 +00001794static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001795
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001796/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001797 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001798
Guido van Rossum79f25d91997-04-29 20:08:16 +00001799static PyObject *
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001800load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001801{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001802 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001803 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001804 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001805
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001806 /* First check that there's an open file (if we need one) */
1807 switch (type) {
1808 case PY_SOURCE:
1809 case PY_COMPILED:
1810 if (fp == NULL) {
1811 PyErr_Format(PyExc_ValueError,
1812 "file object required for import (type code %d)",
1813 type);
1814 return NULL;
1815 }
1816 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001817
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001818 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001819
1820 case PY_SOURCE:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001821 m = load_source_module(name, pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001822 break;
1823
1824 case PY_COMPILED:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001825 m = load_compiled_module(name, pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001826 break;
1827
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001828#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001829 case C_EXTENSION:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001830 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001831 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001832#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001833
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001834 case PKG_DIRECTORY:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001835 m = load_package(name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001836 break;
1837
1838 case C_BUILTIN:
1839 case PY_FROZEN:
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001840 if (pathname != NULL && pathname[0] != '\0')
1841 name = pathname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001842 if (type == C_BUILTIN)
1843 err = init_builtin(name);
1844 else
1845 err = PyImport_ImportFrozenModule(name);
1846 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001847 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001848 if (err == 0) {
1849 PyErr_Format(PyExc_ImportError,
1850 "Purported %s module %.200s not found",
1851 type == C_BUILTIN ?
1852 "builtin" : "frozen",
1853 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001854 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001855 }
1856 modules = PyImport_GetModuleDict();
1857 m = PyDict_GetItemString(modules, name);
1858 if (m == NULL) {
1859 PyErr_Format(
1860 PyExc_ImportError,
1861 "%s module %.200s not properly initialized",
1862 type == C_BUILTIN ?
1863 "builtin" : "frozen",
1864 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001865 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001866 }
1867 Py_INCREF(m);
1868 break;
1869
Just van Rossum52e14d62002-12-30 22:08:05 +00001870 case IMP_HOOK: {
1871 if (loader == NULL) {
1872 PyErr_SetString(PyExc_ImportError,
1873 "import hook without loader");
1874 return NULL;
1875 }
1876 m = PyObject_CallMethod(loader, "load_module", "s", name);
1877 break;
1878 }
1879
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001880 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001881 PyErr_Format(PyExc_ImportError,
1882 "Don't know how to import %.200s (type code %d)",
1883 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001884 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001885
1886 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001887
1888 return m;
1889}
1890
1891
1892/* Initialize a built-in module.
Brett Cannon5a9aa4f2006-10-03 21:58:55 +00001893 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001894 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001895
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001896static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001897init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001898{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001899 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001900
Greg Ward201baee2001-10-04 14:52:06 +00001901 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001902 return 1;
1903
Guido van Rossum771c6c81997-10-31 18:37:24 +00001904 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001905 if (strcmp(name, p->name) == 0) {
1906 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001907 PyErr_Format(PyExc_ImportError,
1908 "Cannot re-init internal module %.200s",
1909 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001910 return -1;
1911 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001912 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001913 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001914 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001915 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001916 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001917 if (_PyImport_FixupExtension(name, name) == NULL)
1918 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001919 return 1;
1920 }
1921 }
1922 return 0;
1923}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001924
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001925
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001926/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001927
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001928static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001929find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001930{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001931 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001932
Guido van Rossum79f25d91997-04-29 20:08:16 +00001933 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001934 if (p->name == NULL)
1935 return NULL;
1936 if (strcmp(p->name, name) == 0)
1937 break;
1938 }
1939 return p;
1940}
1941
Guido van Rossum79f25d91997-04-29 20:08:16 +00001942static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001943get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001944{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001945 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001946 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001947
1948 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001949 PyErr_Format(PyExc_ImportError,
1950 "No such frozen object named %.200s",
1951 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001952 return NULL;
1953 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001954 if (p->code == NULL) {
1955 PyErr_Format(PyExc_ImportError,
1956 "Excluded frozen object named %.200s",
1957 name);
1958 return NULL;
1959 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001960 size = p->size;
1961 if (size < 0)
1962 size = -size;
1963 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001964}
1965
1966/* Initialize a frozen module.
1967 Return 1 for succes, 0 if the module is not found, and -1 with
1968 an exception set if the initialization failed.
1969 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001970
1971int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001972PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001973{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001974 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001975 PyObject *co;
1976 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001977 int ispackage;
1978 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001979
1980 if (p == NULL)
1981 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001982 if (p->code == NULL) {
1983 PyErr_Format(PyExc_ImportError,
1984 "Excluded frozen object named %.200s",
1985 name);
1986 return -1;
1987 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001988 size = p->size;
1989 ispackage = (size < 0);
1990 if (ispackage)
1991 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001992 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001993 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001994 name, ispackage ? " package" : "");
1995 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001996 if (co == NULL)
1997 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001998 if (!PyCode_Check(co)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001999 PyErr_Format(PyExc_TypeError,
2000 "frozen object %.200s is not a code object",
2001 name);
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002002 goto err_return;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002003 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00002004 if (ispackage) {
2005 /* Set __path__ to the package name */
2006 PyObject *d, *s;
2007 int err;
2008 m = PyImport_AddModule(name);
2009 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002010 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002011 d = PyModule_GetDict(m);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002012 s = PyString_InternFromString(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00002013 if (s == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002014 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002015 err = PyDict_SetItemString(d, "__path__", s);
2016 Py_DECREF(s);
2017 if (err != 0)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002018 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002019 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00002020 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002021 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002022 goto err_return;
2023 Py_DECREF(co);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002024 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002025 return 1;
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002026err_return:
2027 Py_DECREF(co);
2028 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002029}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002030
2031
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002032/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002033 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002034
Guido van Rossum79f25d91997-04-29 20:08:16 +00002035PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002036PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002037{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002038 PyObject *pname;
2039 PyObject *result;
2040
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002041 pname = PyString_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00002042 if (pname == NULL)
2043 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002044 result = PyImport_Import(pname);
2045 Py_DECREF(pname);
2046 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002047}
2048
Christian Heimes000a0742008-01-03 22:16:32 +00002049/* Import a module without blocking
2050 *
2051 * At first it tries to fetch the module from sys.modules. If the module was
2052 * never loaded before it loads it with PyImport_ImportModule() unless another
2053 * thread holds the import lock. In the latter case the function raises an
2054 * ImportError instead of blocking.
2055 *
2056 * Returns the module object with incremented ref count.
2057 */
2058PyObject *
2059PyImport_ImportModuleNoBlock(const char *name)
2060{
2061 PyObject *result;
2062 PyObject *modules;
2063 long me;
2064
2065 /* Try to get the module from sys.modules[name] */
2066 modules = PyImport_GetModuleDict();
2067 if (modules == NULL)
2068 return NULL;
2069
2070 result = PyDict_GetItemString(modules, name);
2071 if (result != NULL) {
2072 Py_INCREF(result);
2073 return result;
2074 }
2075 else {
2076 PyErr_Clear();
2077 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002078#ifdef WITH_THREAD
Christian Heimes000a0742008-01-03 22:16:32 +00002079 /* check the import lock
2080 * me might be -1 but I ignore the error here, the lock function
2081 * takes care of the problem */
2082 me = PyThread_get_thread_ident();
2083 if (import_lock_thread == -1 || import_lock_thread == me) {
2084 /* no thread or me is holding the lock */
2085 return PyImport_ImportModule(name);
2086 }
2087 else {
2088 PyErr_Format(PyExc_ImportError,
2089 "Failed to import %.200s because the import lock"
2090 "is held by another thread.",
2091 name);
2092 return NULL;
2093 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002094#else
2095 return PyImport_ImportModule(name);
2096#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002097}
2098
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002099/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002100static PyObject *get_parent(PyObject *globals, char *buf,
2101 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002102static PyObject *load_next(PyObject *mod, PyObject *altmod,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002103 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002104static int mark_miss(char *name);
2105static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002106 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002107static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002108
2109/* The Magnum Opus of dotted-name import :-) */
2110
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002111static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002112import_module_level(char *name, PyObject *globals, PyObject *locals,
2113 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002114{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002115 char buf[MAXPATHLEN+1];
Martin v. Löwis18e16552006-02-15 17:27:45 +00002116 Py_ssize_t buflen = 0;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002117 PyObject *parent, *head, *next, *tail;
2118
Christian Heimes3403f152008-01-09 19:56:33 +00002119 if (strchr(name, '/') != NULL
2120#ifdef MS_WINDOWS
2121 || strchr(name, '\\') != NULL
2122#endif
2123 ) {
2124 PyErr_SetString(PyExc_ImportError,
2125 "Import by filename is not supported.");
2126 return NULL;
2127 }
2128
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002129 parent = get_parent(globals, buf, &buflen, level);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002130 if (parent == NULL)
2131 return NULL;
2132
2133 head = load_next(parent, Py_None, &name, buf, &buflen);
2134 if (head == NULL)
2135 return NULL;
2136
2137 tail = head;
2138 Py_INCREF(tail);
2139 while (name) {
2140 next = load_next(tail, tail, &name, buf, &buflen);
2141 Py_DECREF(tail);
2142 if (next == NULL) {
2143 Py_DECREF(head);
2144 return NULL;
2145 }
2146 tail = next;
2147 }
Thomas Wouters8ddab272006-04-04 16:17:02 +00002148 if (tail == Py_None) {
2149 /* If tail is Py_None, both get_parent and load_next found
2150 an empty module name: someone called __import__("") or
2151 doctored faulty bytecode */
Thomas Wouters4bdaa272006-04-05 13:39:37 +00002152 Py_DECREF(tail);
2153 Py_DECREF(head);
Thomas Wouters8ddab272006-04-04 16:17:02 +00002154 PyErr_SetString(PyExc_ValueError,
2155 "Empty module name");
2156 return NULL;
2157 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002158
2159 if (fromlist != NULL) {
2160 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2161 fromlist = NULL;
2162 }
2163
2164 if (fromlist == NULL) {
2165 Py_DECREF(tail);
2166 return head;
2167 }
2168
2169 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002170 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002171 Py_DECREF(tail);
2172 return NULL;
2173 }
2174
2175 return tail;
2176}
2177
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002178PyObject *
2179PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2180 PyObject *fromlist, int level)
2181{
2182 PyObject *result;
Thomas Woutersc4dcb382009-09-16 19:55:54 +00002183 _PyImport_AcquireLock();
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002184 result = import_module_level(name, globals, locals, fromlist, level);
Thomas Woutersc4dcb382009-09-16 19:55:54 +00002185 if (_PyImport_ReleaseLock() < 0) {
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002186 Py_XDECREF(result);
2187 PyErr_SetString(PyExc_RuntimeError,
2188 "not holding the import lock");
2189 return NULL;
2190 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002191 return result;
2192}
2193
Fred Drake87590902004-05-28 20:21:36 +00002194/* Return the package that an import is being performed in. If globals comes
2195 from the module foo.bar.bat (not itself a package), this returns the
2196 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Georg Brandl5f6861d2006-05-28 21:57:35 +00002197 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002198
2199 The *name* of the returned package is returned in buf, with the length of
2200 the name in *p_buflen.
2201
2202 If globals doesn't come from a package or a module in a package, or a
2203 corresponding entry is not found in sys.modules, Py_None is returned.
2204*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002205static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002206get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002207{
2208 static PyObject *namestr = NULL;
2209 static PyObject *pathstr = NULL;
Nick Coghlanef01d822007-12-03 12:55:17 +00002210 static PyObject *pkgstr = NULL;
2211 PyObject *pkgname, *modname, *modpath, *modules, *parent;
Nick Coghlanb028f502008-07-13 14:52:36 +00002212 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002213
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002214 if (globals == NULL || !PyDict_Check(globals) || !level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002215 return Py_None;
2216
2217 if (namestr == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002218 namestr = PyString_InternFromString("__name__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002219 if (namestr == NULL)
2220 return NULL;
2221 }
2222 if (pathstr == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002223 pathstr = PyString_InternFromString("__path__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002224 if (pathstr == NULL)
2225 return NULL;
2226 }
Nick Coghlanef01d822007-12-03 12:55:17 +00002227 if (pkgstr == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002228 pkgstr = PyString_InternFromString("__package__");
Nick Coghlanef01d822007-12-03 12:55:17 +00002229 if (pkgstr == NULL)
2230 return NULL;
2231 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002232
2233 *buf = '\0';
2234 *p_buflen = 0;
Nick Coghlanef01d822007-12-03 12:55:17 +00002235 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002236
Nick Coghlanef01d822007-12-03 12:55:17 +00002237 if ((pkgname != NULL) && (pkgname != Py_None)) {
2238 /* __package__ is set, so use it */
2239 Py_ssize_t len;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002240 if (!PyString_Check(pkgname)) {
Nick Coghlanef01d822007-12-03 12:55:17 +00002241 PyErr_SetString(PyExc_ValueError,
2242 "__package__ set to non-string");
2243 return NULL;
2244 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002245 len = PyString_GET_SIZE(pkgname);
Nick Coghlanef01d822007-12-03 12:55:17 +00002246 if (len == 0) {
2247 if (level > 0) {
2248 PyErr_SetString(PyExc_ValueError,
2249 "Attempted relative import in non-package");
2250 return NULL;
2251 }
2252 return Py_None;
2253 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002254 if (len > MAXPATHLEN) {
2255 PyErr_SetString(PyExc_ValueError,
Nick Coghlanef01d822007-12-03 12:55:17 +00002256 "Package name too long");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002257 return NULL;
2258 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002259 strcpy(buf, PyString_AS_STRING(pkgname));
Nick Coghlanef01d822007-12-03 12:55:17 +00002260 } else {
2261 /* __package__ not set, so figure it out and set it */
2262 modname = PyDict_GetItem(globals, namestr);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002263 if (modname == NULL || !PyString_Check(modname))
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002264 return Py_None;
Nick Coghlanef01d822007-12-03 12:55:17 +00002265
2266 modpath = PyDict_GetItem(globals, pathstr);
2267 if (modpath != NULL) {
2268 /* __path__ is set, so modname is already the package name */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002269 Py_ssize_t len = PyString_GET_SIZE(modname);
Nick Coghlanef01d822007-12-03 12:55:17 +00002270 int error;
2271 if (len > MAXPATHLEN) {
2272 PyErr_SetString(PyExc_ValueError,
2273 "Module name too long");
2274 return NULL;
2275 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002276 strcpy(buf, PyString_AS_STRING(modname));
Nick Coghlanef01d822007-12-03 12:55:17 +00002277 error = PyDict_SetItem(globals, pkgstr, modname);
2278 if (error) {
2279 PyErr_SetString(PyExc_ValueError,
2280 "Could not set __package__");
2281 return NULL;
2282 }
2283 } else {
2284 /* Normal module, so work out the package name if any */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002285 char *start = PyString_AS_STRING(modname);
Nick Coghlanef01d822007-12-03 12:55:17 +00002286 char *lastdot = strrchr(start, '.');
2287 size_t len;
2288 int error;
2289 if (lastdot == NULL && level > 0) {
2290 PyErr_SetString(PyExc_ValueError,
2291 "Attempted relative import in non-package");
2292 return NULL;
2293 }
2294 if (lastdot == NULL) {
2295 error = PyDict_SetItem(globals, pkgstr, Py_None);
2296 if (error) {
2297 PyErr_SetString(PyExc_ValueError,
2298 "Could not set __package__");
2299 return NULL;
2300 }
2301 return Py_None;
2302 }
2303 len = lastdot - start;
2304 if (len >= MAXPATHLEN) {
2305 PyErr_SetString(PyExc_ValueError,
2306 "Module name too long");
2307 return NULL;
2308 }
2309 strncpy(buf, start, len);
2310 buf[len] = '\0';
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002311 pkgname = PyString_FromString(buf);
Nick Coghlanef01d822007-12-03 12:55:17 +00002312 if (pkgname == NULL) {
2313 return NULL;
2314 }
2315 error = PyDict_SetItem(globals, pkgstr, pkgname);
2316 Py_DECREF(pkgname);
2317 if (error) {
2318 PyErr_SetString(PyExc_ValueError,
2319 "Could not set __package__");
2320 return NULL;
2321 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002322 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002323 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002324 while (--level > 0) {
2325 char *dot = strrchr(buf, '.');
2326 if (dot == NULL) {
2327 PyErr_SetString(PyExc_ValueError,
Georg Brandl98775df2006-09-06 06:09:31 +00002328 "Attempted relative import beyond "
2329 "toplevel package");
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002330 return NULL;
2331 }
2332 *dot = '\0';
2333 }
2334 *p_buflen = strlen(buf);
2335
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002336 modules = PyImport_GetModuleDict();
2337 parent = PyDict_GetItemString(modules, buf);
Nick Coghlanb028f502008-07-13 14:52:36 +00002338 if (parent == NULL) {
2339 if (orig_level < 1) {
2340 PyObject *err_msg = PyString_FromFormat(
2341 "Parent module '%.200s' not found "
2342 "while handling absolute import", buf);
2343 if (err_msg == NULL) {
2344 return NULL;
2345 }
2346 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2347 PyString_AsString(err_msg), 1)) {
2348 *buf = '\0';
2349 *p_buflen = 0;
2350 parent = Py_None;
2351 }
2352 Py_DECREF(err_msg);
2353 } else {
2354 PyErr_Format(PyExc_SystemError,
2355 "Parent module '%.200s' not loaded, "
2356 "cannot perform relative import", buf);
2357 }
2358 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002359 return parent;
2360 /* We expect, but can't guarantee, if parent != None, that:
2361 - parent.__name__ == buf
2362 - parent.__dict__ is globals
2363 If this is violated... Who cares? */
2364}
2365
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002366/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002367static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002368load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002369 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002370{
2371 char *name = *p_name;
2372 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002373 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002374 char *p;
2375 PyObject *result;
2376
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002377 if (strlen(name) == 0) {
Thomas Wouters8ddab272006-04-04 16:17:02 +00002378 /* completely empty module name should only happen in
2379 'from . import' (or '__import__("")')*/
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002380 Py_INCREF(mod);
2381 *p_name = NULL;
2382 return mod;
2383 }
2384
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002385 if (dot == NULL) {
2386 *p_name = NULL;
2387 len = strlen(name);
2388 }
2389 else {
2390 *p_name = dot+1;
2391 len = dot-name;
2392 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002393 if (len == 0) {
2394 PyErr_SetString(PyExc_ValueError,
2395 "Empty module name");
2396 return NULL;
2397 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002398
2399 p = buf + *p_buflen;
2400 if (p != buf)
2401 *p++ = '.';
2402 if (p+len-buf >= MAXPATHLEN) {
2403 PyErr_SetString(PyExc_ValueError,
2404 "Module name too long");
2405 return NULL;
2406 }
2407 strncpy(p, name, len);
2408 p[len] = '\0';
2409 *p_buflen = p+len-buf;
2410
2411 result = import_submodule(mod, p, buf);
2412 if (result == Py_None && altmod != mod) {
2413 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002414 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002415 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002416 if (result != NULL && result != Py_None) {
2417 if (mark_miss(buf) != 0) {
2418 Py_DECREF(result);
2419 return NULL;
2420 }
2421 strncpy(buf, name, len);
2422 buf[len] = '\0';
2423 *p_buflen = len;
2424 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002425 }
2426 if (result == NULL)
2427 return NULL;
2428
2429 if (result == Py_None) {
2430 Py_DECREF(result);
2431 PyErr_Format(PyExc_ImportError,
2432 "No module named %.200s", name);
2433 return NULL;
2434 }
2435
2436 return result;
2437}
2438
2439static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002440mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002441{
2442 PyObject *modules = PyImport_GetModuleDict();
2443 return PyDict_SetItemString(modules, name, Py_None);
2444}
2445
2446static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002447ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002448 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002449{
2450 int i;
2451
2452 if (!PyObject_HasAttrString(mod, "__path__"))
2453 return 1;
2454
2455 for (i = 0; ; i++) {
2456 PyObject *item = PySequence_GetItem(fromlist, i);
2457 int hasit;
2458 if (item == NULL) {
2459 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2460 PyErr_Clear();
2461 return 1;
2462 }
2463 return 0;
2464 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002465 if (!PyString_Check(item)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002466 PyErr_SetString(PyExc_TypeError,
2467 "Item in ``from list'' not a string");
2468 Py_DECREF(item);
2469 return 0;
2470 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002471 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002472 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002473 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002474 /* See if the package defines __all__ */
2475 if (recursive)
2476 continue; /* Avoid endless recursion */
2477 all = PyObject_GetAttrString(mod, "__all__");
2478 if (all == NULL)
2479 PyErr_Clear();
2480 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002481 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002482 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002483 if (!ret)
2484 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002485 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002486 continue;
2487 }
2488 hasit = PyObject_HasAttr(mod, item);
2489 if (!hasit) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002490 char *subname = PyString_AS_STRING(item);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002491 PyObject *submod;
2492 char *p;
2493 if (buflen + strlen(subname) >= MAXPATHLEN) {
2494 PyErr_SetString(PyExc_ValueError,
2495 "Module name too long");
2496 Py_DECREF(item);
2497 return 0;
2498 }
2499 p = buf + buflen;
2500 *p++ = '.';
2501 strcpy(p, subname);
2502 submod = import_submodule(mod, subname, buf);
2503 Py_XDECREF(submod);
2504 if (submod == NULL) {
2505 Py_DECREF(item);
2506 return 0;
2507 }
2508 }
2509 Py_DECREF(item);
2510 }
2511
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002512 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002513}
2514
Neil Schemenauer00b09662003-06-16 21:03:07 +00002515static int
2516add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2517 PyObject *modules)
2518{
2519 if (mod == Py_None)
2520 return 1;
2521 /* Irrespective of the success of this load, make a
2522 reference to it in the parent package module. A copy gets
2523 saved in the modules dictionary under the full name, so get a
2524 reference from there, if need be. (The exception is when the
2525 load failed with a SyntaxError -- then there's no trace in
2526 sys.modules. In that case, of course, do nothing extra.) */
2527 if (submod == NULL) {
2528 submod = PyDict_GetItemString(modules, fullname);
2529 if (submod == NULL)
2530 return 1;
2531 }
2532 if (PyModule_Check(mod)) {
2533 /* We can't use setattr here since it can give a
2534 * spurious warning if the submodule name shadows a
2535 * builtin name */
2536 PyObject *dict = PyModule_GetDict(mod);
2537 if (!dict)
2538 return 0;
2539 if (PyDict_SetItemString(dict, subname, submod) < 0)
2540 return 0;
2541 }
2542 else {
2543 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2544 return 0;
2545 }
2546 return 1;
2547}
2548
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002549static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002550import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002551{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002552 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002553 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002554
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002555 /* Require:
2556 if mod == None: subname == fullname
2557 else: mod.__name__ + "." + subname == fullname
2558 */
2559
Tim Peters50d8d372001-02-28 05:34:27 +00002560 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002561 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002562 }
2563 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002564 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002565 char buf[MAXPATHLEN+1];
2566 struct filedescr *fdp;
2567 FILE *fp = NULL;
2568
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002569 if (mod == Py_None)
2570 path = NULL;
2571 else {
2572 path = PyObject_GetAttrString(mod, "__path__");
2573 if (path == NULL) {
2574 PyErr_Clear();
2575 Py_INCREF(Py_None);
2576 return Py_None;
2577 }
2578 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002579
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002580 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002581 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2582 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002583 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002584 if (fdp == NULL) {
2585 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2586 return NULL;
2587 PyErr_Clear();
2588 Py_INCREF(Py_None);
2589 return Py_None;
2590 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002591 m = load_module(fullname, fp, buf, fdp->type, loader);
2592 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002593 if (fp)
2594 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002595 if (!add_submodule(mod, m, fullname, subname, modules)) {
2596 Py_XDECREF(m);
2597 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002598 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002599 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002600
2601 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002602}
2603
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002604
2605/* Re-import a module of any kind and return its module object, WITH
2606 INCREMENTED REFERENCE COUNT */
2607
Guido van Rossum79f25d91997-04-29 20:08:16 +00002608PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002609PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002610{
Collin Winter47c52a82007-03-13 23:02:15 +00002611 PyInterpreterState *interp = PyThreadState_Get()->interp;
2612 PyObject *modules_reloading = interp->modules_reloading;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002613 PyObject *modules = PyImport_GetModuleDict();
Collin Winter276887b2007-03-12 16:11:39 +00002614 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002615 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002616 char buf[MAXPATHLEN+1];
2617 struct filedescr *fdp;
2618 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002619 PyObject *newm;
Collin Winter47c52a82007-03-13 23:02:15 +00002620
2621 if (modules_reloading == NULL) {
2622 Py_FatalError("PyImport_ReloadModule: "
Neal Norwitz2fca81c2007-05-30 04:53:41 +00002623 "no modules_reloading dictionary!");
Collin Winter47c52a82007-03-13 23:02:15 +00002624 return NULL;
2625 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002626
Guido van Rossum79f25d91997-04-29 20:08:16 +00002627 if (m == NULL || !PyModule_Check(m)) {
2628 PyErr_SetString(PyExc_TypeError,
2629 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002630 return NULL;
2631 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002632 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002633 if (name == NULL)
2634 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002635 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002636 PyErr_Format(PyExc_ImportError,
2637 "reload(): module %.200s not in sys.modules",
2638 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002639 return NULL;
2640 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002641 existing_m = PyDict_GetItemString(modules_reloading, name);
2642 if (existing_m != NULL) {
2643 /* Due to a recursive reload, this module is already
2644 being reloaded. */
2645 Py_INCREF(existing_m);
2646 return existing_m;
Collin Winter276887b2007-03-12 16:11:39 +00002647 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002648 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2649 return NULL;
Collin Winter276887b2007-03-12 16:11:39 +00002650
Guido van Rossum222ef561997-09-06 19:41:09 +00002651 subname = strrchr(name, '.');
2652 if (subname == NULL)
2653 subname = name;
2654 else {
2655 PyObject *parentname, *parent;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002656 parentname = PyString_FromStringAndSize(name, (subname-name));
Collin Winter276887b2007-03-12 16:11:39 +00002657 if (parentname == NULL) {
2658 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002659 return NULL;
Neal Norwitz75c7c802007-03-13 05:31:38 +00002660 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002661 parent = PyDict_GetItem(modules, parentname);
2662 if (parent == NULL) {
2663 PyErr_Format(PyExc_ImportError,
2664 "reload(): parent %.200s not in sys.modules",
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002665 PyString_AS_STRING(parentname));
Georg Brandl0c55f292005-09-14 06:56:20 +00002666 Py_DECREF(parentname);
Neal Norwitz2fca81c2007-05-30 04:53:41 +00002667 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002668 return NULL;
2669 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002670 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002671 subname++;
2672 path = PyObject_GetAttrString(parent, "__path__");
2673 if (path == NULL)
2674 PyErr_Clear();
2675 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002676 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002677 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002678 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002679
2680 if (fdp == NULL) {
2681 Py_XDECREF(loader);
Collin Winter276887b2007-03-12 16:11:39 +00002682 imp_modules_reloading_clear();
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002683 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002684 }
2685
2686 newm = load_module(name, fp, buf, fdp->type, loader);
2687 Py_XDECREF(loader);
2688
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002689 if (fp)
2690 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002691 if (newm == NULL) {
2692 /* load_module probably removed name from modules because of
2693 * the error. Put back the original module object. We're
2694 * going to return NULL in this case regardless of whether
2695 * replacing name succeeds, so the return value is ignored.
2696 */
2697 PyDict_SetItemString(modules, name, m);
2698 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002699 imp_modules_reloading_clear();
Tim Peters1cd70172004-08-02 03:52:12 +00002700 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002701}
2702
2703
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002704/* Higher-level import emulator which emulates the "import" statement
2705 more accurately -- it invokes the __import__() function from the
2706 builtins of the current globals. This means that the import is
2707 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002708 environment, e.g. by "rexec".
2709 A dummy list ["__doc__"] is passed as the 4th argument so that
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002710 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00002711 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002712
2713PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002714PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002715{
2716 static PyObject *silly_list = NULL;
2717 static PyObject *builtins_str = NULL;
2718 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002719 PyObject *globals = NULL;
2720 PyObject *import = NULL;
2721 PyObject *builtins = NULL;
2722 PyObject *r = NULL;
2723
2724 /* Initialize constant string objects */
2725 if (silly_list == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002726 import_str = PyString_InternFromString("__import__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002727 if (import_str == NULL)
2728 return NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002729 builtins_str = PyString_InternFromString("__builtins__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002730 if (builtins_str == NULL)
2731 return NULL;
2732 silly_list = Py_BuildValue("[s]", "__doc__");
2733 if (silly_list == NULL)
2734 return NULL;
2735 }
2736
2737 /* Get the builtins from current globals */
2738 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002739 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002740 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002741 builtins = PyObject_GetItem(globals, builtins_str);
2742 if (builtins == NULL)
2743 goto err;
2744 }
2745 else {
2746 /* No globals -- use standard builtins, and fake globals */
2747 PyErr_Clear();
2748
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002749 builtins = PyImport_ImportModuleLevel("__builtin__",
2750 NULL, NULL, NULL, 0);
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002751 if (builtins == NULL)
2752 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002753 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2754 if (globals == NULL)
2755 goto err;
2756 }
2757
2758 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002759 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002760 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002761 if (import == NULL)
2762 PyErr_SetObject(PyExc_KeyError, import_str);
2763 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002764 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002765 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002766 if (import == NULL)
2767 goto err;
2768
Christian Heimes000a0742008-01-03 22:16:32 +00002769 /* Call the __import__ function with the proper argument list
2770 * Always use absolute import here. */
2771 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2772 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002773
2774 err:
2775 Py_XDECREF(globals);
2776 Py_XDECREF(builtins);
2777 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002778
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002779 return r;
2780}
2781
2782
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002783/* Module 'imp' provides Python access to the primitives used for
2784 importing modules.
2785*/
2786
Guido van Rossum79f25d91997-04-29 20:08:16 +00002787static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002788imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002789{
2790 char buf[4];
2791
Guido van Rossum96774c12000-05-01 20:19:08 +00002792 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2793 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2794 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2795 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002796
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002797 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002798}
2799
Guido van Rossum79f25d91997-04-29 20:08:16 +00002800static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002801imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002802{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002803 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002804 struct filedescr *fdp;
2805
Guido van Rossum79f25d91997-04-29 20:08:16 +00002806 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002807 if (list == NULL)
2808 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002809 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2810 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002811 fdp->suffix, fdp->mode, fdp->type);
2812 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002813 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002814 return NULL;
2815 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002816 if (PyList_Append(list, item) < 0) {
2817 Py_DECREF(list);
2818 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002819 return NULL;
2820 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002821 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002822 }
2823 return list;
2824}
2825
Guido van Rossum79f25d91997-04-29 20:08:16 +00002826static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002827call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002828{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002829 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002830 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002831 struct filedescr *fdp;
2832 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002833 FILE *fp = NULL;
2834
2835 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002836 if (path == Py_None)
2837 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002838 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002839 if (fdp == NULL)
2840 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002841 if (fp != NULL) {
2842 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2843 if (fob == NULL) {
2844 fclose(fp);
2845 return NULL;
2846 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002847 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002848 else {
2849 fob = Py_None;
2850 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002851 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002852 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002853 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002854 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002855 return ret;
2856}
2857
Guido van Rossum79f25d91997-04-29 20:08:16 +00002858static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002859imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002860{
2861 char *name;
2862 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002863 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002864 return NULL;
2865 return call_find_module(name, path);
2866}
2867
2868static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002869imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002870{
2871 char *name;
2872 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002873 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002874 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002875 return NULL;
2876 ret = init_builtin(name);
2877 if (ret < 0)
2878 return NULL;
2879 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002880 Py_INCREF(Py_None);
2881 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002882 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002883 m = PyImport_AddModule(name);
2884 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002885 return m;
2886}
2887
Guido van Rossum79f25d91997-04-29 20:08:16 +00002888static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002889imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002890{
2891 char *name;
2892 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002893 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002894 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002895 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002896 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002897 if (ret < 0)
2898 return NULL;
2899 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002900 Py_INCREF(Py_None);
2901 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002902 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002903 m = PyImport_AddModule(name);
2904 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002905 return m;
2906}
2907
Guido van Rossum79f25d91997-04-29 20:08:16 +00002908static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002909imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002910{
2911 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002912
Guido van Rossum43713e52000-02-29 13:59:29 +00002913 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002914 return NULL;
2915 return get_frozen_object(name);
2916}
2917
Guido van Rossum79f25d91997-04-29 20:08:16 +00002918static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002919imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002920{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002921 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002922 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002923 return NULL;
Guido van Rossum50ee94f2002-04-09 18:00:58 +00002924 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002925}
2926
Guido van Rossum79f25d91997-04-29 20:08:16 +00002927static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002928imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002929{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002930 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002931 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002932 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002933 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002934 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00002935 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002936}
2937
2938static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002939get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002940{
2941 FILE *fp;
2942 if (fob == NULL) {
Tim Peters86c7d2f2004-08-01 23:24:21 +00002943 if (mode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002944 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002945 fp = fopen(pathname, mode);
2946 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002947 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002948 }
2949 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002950 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002951 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002952 PyErr_SetString(PyExc_ValueError,
2953 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002954 }
2955 return fp;
2956}
2957
Guido van Rossum79f25d91997-04-29 20:08:16 +00002958static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002959imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002960{
2961 char *name;
2962 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002963 PyObject *fob = NULL;
2964 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002965 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002966 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002967 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002968 return NULL;
2969 fp = get_file(pathname, fob, "rb");
2970 if (fp == NULL)
2971 return NULL;
2972 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002973 if (fob == NULL)
2974 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002975 return m;
2976}
2977
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002978#ifdef HAVE_DYNAMIC_LOADING
2979
Guido van Rossum79f25d91997-04-29 20:08:16 +00002980static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002981imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002982{
2983 char *name;
2984 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002985 PyObject *fob = NULL;
2986 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002987 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002988 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002989 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002990 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002991 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002992 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002993 if (fp == NULL)
2994 return NULL;
2995 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002996 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002997 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002998}
2999
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003000#endif /* HAVE_DYNAMIC_LOADING */
3001
Guido van Rossum79f25d91997-04-29 20:08:16 +00003002static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003003imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003004{
3005 char *name;
3006 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003007 PyObject *fob = NULL;
3008 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003009 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00003010 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00003011 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003012 return NULL;
3013 fp = get_file(pathname, fob, "r");
3014 if (fp == NULL)
3015 return NULL;
3016 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003017 if (fob == NULL)
3018 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003019 return m;
3020}
3021
Guido van Rossum79f25d91997-04-29 20:08:16 +00003022static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003023imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003024{
3025 char *name;
3026 PyObject *fob;
3027 char *pathname;
3028 char *suffix; /* Unused */
3029 char *mode;
3030 int type;
3031 FILE *fp;
3032
Guido van Rossum43713e52000-02-29 13:59:29 +00003033 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003034 &name, &fob, &pathname,
3035 &suffix, &mode, &type))
3036 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003037 if (*mode) {
3038 /* Mode must start with 'r' or 'U' and must not contain '+'.
3039 Implicit in this test is the assumption that the mode
3040 may contain other modifiers like 'b' or 't'. */
3041
3042 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00003043 PyErr_Format(PyExc_ValueError,
3044 "invalid file open mode %.200s", mode);
3045 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003046 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003047 }
3048 if (fob == Py_None)
3049 fp = NULL;
3050 else {
3051 if (!PyFile_Check(fob)) {
3052 PyErr_SetString(PyExc_ValueError,
3053 "load_module arg#2 should be a file or None");
3054 return NULL;
3055 }
3056 fp = get_file(pathname, fob, mode);
3057 if (fp == NULL)
3058 return NULL;
3059 }
Just van Rossum52e14d62002-12-30 22:08:05 +00003060 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003061}
3062
3063static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003064imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003065{
3066 char *name;
3067 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00003068 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003069 return NULL;
3070 return load_package(name, pathname);
3071}
3072
3073static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003074imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003075{
3076 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00003077 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003078 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003079 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003080}
3081
Brett Cannon3aa2a492008-08-06 22:28:09 +00003082static PyObject *
3083imp_reload(PyObject *self, PyObject *v)
3084{
3085 return PyImport_ReloadModule(v);
3086}
3087
3088
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003089/* Doc strings */
3090
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003091PyDoc_STRVAR(doc_imp,
3092"This module provides the components needed to build your own\n\
3093__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003094
Brett Cannon3aa2a492008-08-06 22:28:09 +00003095PyDoc_STRVAR(doc_reload,
3096"reload(module) -> module\n\
3097\n\
3098Reload the module. The module must have been successfully imported before.");
3099
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003100PyDoc_STRVAR(doc_find_module,
3101"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003102Search for a module. If path is omitted or None, search for a\n\
3103built-in, frozen or special module and continue search in sys.path.\n\
3104The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003105package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003106
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003107PyDoc_STRVAR(doc_load_module,
3108"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003109Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003110The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003111
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003112PyDoc_STRVAR(doc_get_magic,
3113"get_magic() -> string\n\
3114Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003115
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003116PyDoc_STRVAR(doc_get_suffixes,
3117"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003118Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003119that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003120
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003121PyDoc_STRVAR(doc_new_module,
3122"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003123Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003124The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003125
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003126PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003127"lock_held() -> boolean\n\
3128Return True if the import lock is currently held, else False.\n\
3129On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003130
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003131PyDoc_STRVAR(doc_acquire_lock,
3132"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003133Acquires the interpreter's import lock for the current thread.\n\
3134This lock should be used by import hooks to ensure thread-safety\n\
3135when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003136On platforms without threads, this function does nothing.");
3137
3138PyDoc_STRVAR(doc_release_lock,
3139"release_lock() -> None\n\
3140Release the interpreter's import lock.\n\
3141On platforms without threads, this function does nothing.");
3142
Guido van Rossum79f25d91997-04-29 20:08:16 +00003143static PyMethodDef imp_methods[] = {
Brett Cannon3aa2a492008-08-06 22:28:09 +00003144 {"reload", imp_reload, METH_O, doc_reload},
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003145 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3146 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3147 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3148 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3149 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3150 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3151 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3152 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003153 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00003154 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3155 {"init_builtin", imp_init_builtin, METH_VARARGS},
3156 {"init_frozen", imp_init_frozen, METH_VARARGS},
3157 {"is_builtin", imp_is_builtin, METH_VARARGS},
3158 {"is_frozen", imp_is_frozen, METH_VARARGS},
3159 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003160#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00003161 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003162#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00003163 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00003164 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003165 {NULL, NULL} /* sentinel */
3166};
3167
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003168static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003169setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003170{
3171 PyObject *v;
3172 int err;
3173
3174 v = PyInt_FromLong((long)value);
3175 err = PyDict_SetItemString(d, name, v);
3176 Py_XDECREF(v);
3177 return err;
3178}
3179
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003180typedef struct {
3181 PyObject_HEAD
3182} NullImporter;
3183
3184static int
3185NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3186{
3187 char *path;
Christian Heimescea681b2007-11-07 17:50:54 +00003188 Py_ssize_t pathlen;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003189
3190 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3191 return -1;
3192
3193 if (!PyArg_ParseTuple(args, "s:NullImporter",
3194 &path))
3195 return -1;
3196
Christian Heimescea681b2007-11-07 17:50:54 +00003197 pathlen = strlen(path);
3198 if (pathlen == 0) {
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003199 PyErr_SetString(PyExc_ImportError, "empty pathname");
3200 return -1;
3201 } else {
3202#ifndef RISCOS
Kristján Valur Jónsson3b2a6b82009-01-09 20:10:59 +00003203#ifndef MS_WINDOWS
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003204 struct stat statbuf;
3205 int rv;
3206
3207 rv = stat(path, &statbuf);
3208 if (rv == 0) {
3209 /* it exists */
3210 if (S_ISDIR(statbuf.st_mode)) {
3211 /* it's a directory */
3212 PyErr_SetString(PyExc_ImportError,
3213 "existing directory");
3214 return -1;
3215 }
3216 }
Kristján Valur Jónsson3b2a6b82009-01-09 20:10:59 +00003217#else /* MS_WINDOWS */
3218 DWORD rv;
3219 /* see issue1293 and issue3677:
3220 * stat() on Windows doesn't recognise paths like
3221 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
3222 */
3223 rv = GetFileAttributesA(path);
3224 if (rv != INVALID_FILE_ATTRIBUTES) {
3225 /* it exists */
3226 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
3227 /* it's a directory */
3228 PyErr_SetString(PyExc_ImportError,
3229 "existing directory");
3230 return -1;
3231 }
3232 }
3233#endif
3234#else /* RISCOS */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003235 if (object_exists(path)) {
3236 /* it exists */
3237 if (isdir(path)) {
3238 /* it's a directory */
3239 PyErr_SetString(PyExc_ImportError,
3240 "existing directory");
3241 return -1;
3242 }
3243 }
3244#endif
3245 }
3246 return 0;
3247}
3248
3249static PyObject *
3250NullImporter_find_module(NullImporter *self, PyObject *args)
3251{
3252 Py_RETURN_NONE;
3253}
3254
3255static PyMethodDef NullImporter_methods[] = {
3256 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3257 "Always return None"
3258 },
3259 {NULL} /* Sentinel */
3260};
3261
3262
Nick Coghlan327a39b2007-11-18 11:56:28 +00003263PyTypeObject PyNullImporter_Type = {
Martin v. Löwis68192102007-07-21 06:55:02 +00003264 PyVarObject_HEAD_INIT(NULL, 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003265 "imp.NullImporter", /*tp_name*/
3266 sizeof(NullImporter), /*tp_basicsize*/
3267 0, /*tp_itemsize*/
3268 0, /*tp_dealloc*/
3269 0, /*tp_print*/
3270 0, /*tp_getattr*/
3271 0, /*tp_setattr*/
3272 0, /*tp_compare*/
3273 0, /*tp_repr*/
3274 0, /*tp_as_number*/
3275 0, /*tp_as_sequence*/
3276 0, /*tp_as_mapping*/
3277 0, /*tp_hash */
3278 0, /*tp_call*/
3279 0, /*tp_str*/
3280 0, /*tp_getattro*/
3281 0, /*tp_setattro*/
3282 0, /*tp_as_buffer*/
3283 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3284 "Null importer object", /* tp_doc */
3285 0, /* tp_traverse */
3286 0, /* tp_clear */
3287 0, /* tp_richcompare */
3288 0, /* tp_weaklistoffset */
3289 0, /* tp_iter */
3290 0, /* tp_iternext */
3291 NullImporter_methods, /* tp_methods */
3292 0, /* tp_members */
3293 0, /* tp_getset */
3294 0, /* tp_base */
3295 0, /* tp_dict */
3296 0, /* tp_descr_get */
3297 0, /* tp_descr_set */
3298 0, /* tp_dictoffset */
3299 (initproc)NullImporter_init, /* tp_init */
3300 0, /* tp_alloc */
3301 PyType_GenericNew /* tp_new */
3302};
3303
3304
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003305PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003306initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003307{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003308 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003309
Nick Coghlan327a39b2007-11-18 11:56:28 +00003310 if (PyType_Ready(&PyNullImporter_Type) < 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003311 goto failure;
3312
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003313 m = Py_InitModule4("imp", imp_methods, doc_imp,
3314 NULL, PYTHON_API_VERSION);
Neal Norwitz1ac754f2006-01-19 06:09:39 +00003315 if (m == NULL)
3316 goto failure;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003317 d = PyModule_GetDict(m);
Neal Norwitz3cb31ac2006-08-13 18:10:47 +00003318 if (d == NULL)
3319 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003320
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003321 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3322 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3323 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3324 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3325 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3326 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3327 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3328 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00003329 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00003330 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003331
Nick Coghlan327a39b2007-11-18 11:56:28 +00003332 Py_INCREF(&PyNullImporter_Type);
3333 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003334 failure:
3335 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003336}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003337
3338
Guido van Rossumb18618d2000-05-03 23:44:39 +00003339/* API for embedding applications that want to add their own entries
3340 to the table of built-in modules. This should normally be called
3341 *before* Py_Initialize(). When the table resize fails, -1 is
3342 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003343
3344 After a similar function by Just van Rossum. */
3345
3346int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003347PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003348{
3349 static struct _inittab *our_copy = NULL;
3350 struct _inittab *p;
3351 int i, n;
3352
3353 /* Count the number of entries in both tables */
3354 for (n = 0; newtab[n].name != NULL; n++)
3355 ;
3356 if (n == 0)
3357 return 0; /* Nothing to do */
3358 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3359 ;
3360
3361 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00003362 p = our_copy;
3363 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003364 if (p == NULL)
3365 return -1;
3366
3367 /* Copy the tables into the new memory */
3368 if (our_copy != PyImport_Inittab)
3369 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3370 PyImport_Inittab = our_copy = p;
3371 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3372
3373 return 0;
3374}
3375
3376/* Shorthand to add a single entry given a name and a function */
3377
3378int
Brett Cannonc4f90eb2009-04-02 03:17:39 +00003379PyImport_AppendInittab(const char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003380{
3381 struct _inittab newtab[2];
3382
3383 memset(newtab, '\0', sizeof newtab);
3384
Brett Cannon238cedc2009-04-02 03:34:53 +00003385 newtab[0].name = (char *)name;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003386 newtab[0].initfunc = initfunc;
3387
3388 return PyImport_ExtendInittab(newtab);
3389}
Anthony Baxterac6bd462006-04-13 02:06:09 +00003390
3391#ifdef __cplusplus
3392}
3393#endif