blob: f9f3cdbbfbd0ac1cbf3aba539838a639ad155690 [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
Brett Cannonb166afc2010-05-05 20:25:47 +000022extern "C" {
Anthony Baxterac6bd462006-04-13 02:06:09 +000023#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
Antoine Pitrouc83ea132010-05-09 14:46:46 +000070 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:
Antoine Pitrouc83ea132010-05-09 14:46:46 +000076 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[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000102 {"/py", "U", PY_SOURCE},
103 {"/pyc", "rb", PY_COMPILED},
104 {0, 0}
Guido van Rossum48a680c2001-03-02 06:34:14 +0000105};
106#else
Guido van Rossumed1170e1999-12-20 21:23:41 +0000107static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000108 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000109#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000110 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000111#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000112 {".pyc", "rb", PY_COMPILED},
113 {0, 0}
Guido van Rossumed1170e1999-12-20 21:23:41 +0000114};
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{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000123 const struct filedescr *scan;
124 struct filedescr *filetab;
125 int countD = 0;
126 int countS = 0;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000127
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000128 /* 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
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000132 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
133 ++countD;
Georg Brandladd36e52007-08-23 18:08:06 +0000134#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000135 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
136 ++countS;
137 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
138 if (filetab == NULL)
139 Py_FatalError("Can't initialize import file table.");
Georg Brandladd36e52007-08-23 18:08:06 +0000140#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000141 memcpy(filetab, _PyImport_DynLoadFiletab,
142 countD * sizeof(struct filedescr));
Georg Brandladd36e52007-08-23 18:08:06 +0000143#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000144 memcpy(filetab + countD, _PyImport_StandardFiletab,
145 countS * sizeof(struct filedescr));
146 filetab[countD + countS].suffix = NULL;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000147
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000148 _PyImport_Filetab = filetab;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000149
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000150 if (Py_OptimizeFlag) {
151 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
152 for (; filetab->suffix != NULL; filetab++) {
Guido van Rossum48a680c2001-03-02 06:34:14 +0000153#ifndef RISCOS
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000154 if (strcmp(filetab->suffix, ".pyc") == 0)
155 filetab->suffix = ".pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000156#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000157 if (strcmp(filetab->suffix, "/pyc") == 0)
158 filetab->suffix = "/pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000159#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000160 }
161 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000162
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000163 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{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000174 PyObject *v, *path_hooks = NULL, *zimpimport;
175 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000176
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000177 /* adding sys.path_hooks and sys.path_importer_cache, setting up
178 zipimport */
179 if (PyType_Ready(&PyNullImporter_Type) < 0)
180 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000181
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000182 if (Py_VerboseFlag)
183 PySys_WriteStderr("# installing zipimport hook\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000184
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000185 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) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000204 error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000205 PyErr_Print();
206 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
207 "path_importer_cache, or NullImporter failed"
208 );
209 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000210
Antoine Pitrouc83ea132010-05-09 14:46:46 +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(
225 "# can't import zipimport.zipimporter\n");
226 }
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);
Just van Rossum52e14d62002-12-30 22:08:05 +0000239}
240
241void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000242_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000243{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000244 Py_XDECREF(extensions);
245 extensions = NULL;
246 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{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000266 long me = PyThread_get_thread_ident();
267 if (me == -1)
268 return; /* Too bad */
269 if (import_lock == NULL) {
270 import_lock = PyThread_allocate_lock();
271 if (import_lock == NULL)
272 return; /* Nothing much we can do. */
273 }
274 if (import_lock_thread == me) {
275 import_lock_level++;
276 return;
277 }
278 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
279 {
280 PyThreadState *tstate = PyEval_SaveThread();
281 PyThread_acquire_lock(import_lock, 1);
282 PyEval_RestoreThread(tstate);
283 }
284 import_lock_thread = me;
285 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000286}
287
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000288int
289_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000290{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000291 long me = PyThread_get_thread_ident();
292 if (me == -1 || import_lock == NULL)
293 return 0; /* Too bad */
294 if (import_lock_thread != me)
295 return -1;
296 import_lock_level--;
297 if (import_lock_level == 0) {
298 import_lock_thread = -1;
299 PyThread_release_lock(import_lock);
300 }
301 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000302}
303
Gregory P. Smith9e5d1322010-03-01 01:22:39 +0000304/* This function is called from PyOS_AfterFork to ensure that newly
305 created child processes do not share locks with the parent.
306 We now acquire the import lock around fork() calls but on some platforms
307 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000308
309void
310_PyImport_ReInitLock(void)
311{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000312 if (import_lock != NULL)
313 import_lock = PyThread_allocate_lock();
314 import_lock_thread = -1;
315 import_lock_level = 0;
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000316}
317
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000318#endif
319
Tim Peters69232342001-08-30 05:16:13 +0000320static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000321imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000322{
Tim Peters69232342001-08-30 05:16:13 +0000323#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000324 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000325#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000326 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000327#endif
328}
329
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000330static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000331imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000332{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000333#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000334 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000335#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000336 Py_INCREF(Py_None);
337 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000338}
339
340static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000341imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000342{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000343#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000344 if (_PyImport_ReleaseLock() < 0) {
345 PyErr_SetString(PyExc_RuntimeError,
346 "not holding the import lock");
347 return NULL;
348 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000349#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000350 Py_INCREF(Py_None);
351 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000352}
353
Collin Winter276887b2007-03-12 16:11:39 +0000354static void
Neal Norwitz75c7c802007-03-13 05:31:38 +0000355imp_modules_reloading_clear(void)
Collin Winter276887b2007-03-12 16:11:39 +0000356{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000357 PyInterpreterState *interp = PyThreadState_Get()->interp;
358 if (interp->modules_reloading != NULL)
359 PyDict_Clear(interp->modules_reloading);
Collin Winter276887b2007-03-12 16:11:39 +0000360}
361
Guido van Rossum25ce5661997-08-02 03:10:38 +0000362/* Helper for sys */
363
364PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000365PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000366{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000367 PyInterpreterState *interp = PyThreadState_GET()->interp;
368 if (interp->modules == NULL)
369 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
370 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000371}
372
Guido van Rossum3f5da241990-12-20 15:06:42 +0000373
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000374/* List of names to clear in sys */
375static char* sys_deletes[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000376 "path", "argv", "ps1", "ps2", "exitfunc",
377 "exc_type", "exc_value", "exc_traceback",
378 "last_type", "last_value", "last_traceback",
379 "path_hooks", "path_importer_cache", "meta_path",
380 /* misc stuff */
381 "flags", "float_info",
382 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000383};
384
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000385static char* sys_files[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000386 "stdin", "__stdin__",
387 "stdout", "__stdout__",
388 "stderr", "__stderr__",
389 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000390};
391
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000392
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000393/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000394
Guido van Rossum3f5da241990-12-20 15:06:42 +0000395void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000396PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000397{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000398 Py_ssize_t pos, ndone;
399 char *name;
400 PyObject *key, *value, *dict;
401 PyInterpreterState *interp = PyThreadState_GET()->interp;
402 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000403
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000404 if (modules == NULL)
405 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000406
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000407 /* Delete some special variables first. These are common
408 places where user values hide and people complain when their
409 destructors fail. Since the modules containing them are
410 deleted *last* of all, they would come too late in the normal
411 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000412
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000413 value = PyDict_GetItemString(modules, "__builtin__");
414 if (value != NULL && PyModule_Check(value)) {
415 dict = PyModule_GetDict(value);
416 if (Py_VerboseFlag)
417 PySys_WriteStderr("# clear __builtin__._\n");
418 PyDict_SetItemString(dict, "_", Py_None);
419 }
420 value = PyDict_GetItemString(modules, "sys");
421 if (value != NULL && PyModule_Check(value)) {
422 char **p;
423 PyObject *v;
424 dict = PyModule_GetDict(value);
425 for (p = sys_deletes; *p != NULL; p++) {
426 if (Py_VerboseFlag)
427 PySys_WriteStderr("# clear sys.%s\n", *p);
428 PyDict_SetItemString(dict, *p, Py_None);
429 }
430 for (p = sys_files; *p != NULL; p+=2) {
431 if (Py_VerboseFlag)
432 PySys_WriteStderr("# restore sys.%s\n", *p);
433 v = PyDict_GetItemString(dict, *(p+1));
434 if (v == NULL)
435 v = Py_None;
436 PyDict_SetItemString(dict, *p, v);
437 }
438 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000439
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000440 /* First, delete __main__ */
441 value = PyDict_GetItemString(modules, "__main__");
442 if (value != NULL && PyModule_Check(value)) {
443 if (Py_VerboseFlag)
444 PySys_WriteStderr("# cleanup __main__\n");
445 _PyModule_Clear(value);
446 PyDict_SetItemString(modules, "__main__", Py_None);
447 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000448
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000449 /* The special treatment of __builtin__ here is because even
450 when it's not referenced as a module, its dictionary is
451 referenced by almost every module's __builtins__. Since
452 deleting a module clears its dictionary (even if there are
453 references left to it), we need to delete the __builtin__
454 module last. Likewise, we don't delete sys until the very
455 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000456
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000457 Also note that we 'delete' modules by replacing their entry
458 in the modules dict with None, rather than really deleting
459 them; this avoids a rehash of the modules dictionary and
460 also marks them as "non existent" so they won't be
461 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000462
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000463 /* Next, repeatedly delete modules with a reference count of
464 one (skipping __builtin__ and sys) and delete them */
465 do {
466 ndone = 0;
467 pos = 0;
468 while (PyDict_Next(modules, &pos, &key, &value)) {
469 if (value->ob_refcnt != 1)
470 continue;
471 if (PyString_Check(key) && PyModule_Check(value)) {
472 name = PyString_AS_STRING(key);
473 if (strcmp(name, "__builtin__") == 0)
474 continue;
475 if (strcmp(name, "sys") == 0)
476 continue;
477 if (Py_VerboseFlag)
478 PySys_WriteStderr(
479 "# cleanup[1] %s\n", name);
480 _PyModule_Clear(value);
481 PyDict_SetItem(modules, key, Py_None);
482 ndone++;
483 }
484 }
485 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000486
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000487 /* Next, delete all modules (still skipping __builtin__ and sys) */
488 pos = 0;
489 while (PyDict_Next(modules, &pos, &key, &value)) {
490 if (PyString_Check(key) && PyModule_Check(value)) {
491 name = PyString_AS_STRING(key);
492 if (strcmp(name, "__builtin__") == 0)
493 continue;
494 if (strcmp(name, "sys") == 0)
495 continue;
496 if (Py_VerboseFlag)
497 PySys_WriteStderr("# cleanup[2] %s\n", name);
498 _PyModule_Clear(value);
499 PyDict_SetItem(modules, key, Py_None);
500 }
501 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000502
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000503 /* Next, delete sys and __builtin__ (in that order) */
504 value = PyDict_GetItemString(modules, "sys");
505 if (value != NULL && PyModule_Check(value)) {
506 if (Py_VerboseFlag)
507 PySys_WriteStderr("# cleanup sys\n");
508 _PyModule_Clear(value);
509 PyDict_SetItemString(modules, "sys", Py_None);
510 }
511 value = PyDict_GetItemString(modules, "__builtin__");
512 if (value != NULL && PyModule_Check(value)) {
513 if (Py_VerboseFlag)
514 PySys_WriteStderr("# cleanup __builtin__\n");
515 _PyModule_Clear(value);
516 PyDict_SetItemString(modules, "__builtin__", Py_None);
517 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000518
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000519 /* Finally, clear and delete the modules directory */
520 PyDict_Clear(modules);
521 interp->modules = NULL;
522 Py_DECREF(modules);
523 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000524}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000525
526
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000527/* Helper for pythonrun.c -- return magic number */
528
529long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000530PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000531{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000532 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000533}
534
535
Guido van Rossum25ce5661997-08-02 03:10:38 +0000536/* Magic for extension modules (built-in as well as dynamically
537 loaded). To prevent initializing an extension module more than
538 once, we keep a static dictionary 'extensions' keyed by module name
539 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000540 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000541 dictionary is stored by calling _PyImport_FixupExtension()
542 immediately after the module initialization function succeeds. A
543 copy can be retrieved from there by calling
544 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000545
Guido van Rossum79f25d91997-04-29 20:08:16 +0000546PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000547_PyImport_FixupExtension(char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000548{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000549 PyObject *modules, *mod, *dict, *copy;
550 if (extensions == NULL) {
551 extensions = PyDict_New();
552 if (extensions == NULL)
553 return NULL;
554 }
555 modules = PyImport_GetModuleDict();
556 mod = PyDict_GetItemString(modules, name);
557 if (mod == NULL || !PyModule_Check(mod)) {
558 PyErr_Format(PyExc_SystemError,
559 "_PyImport_FixupExtension: module %.200s not loaded", name);
560 return NULL;
561 }
562 dict = PyModule_GetDict(mod);
563 if (dict == NULL)
564 return NULL;
565 copy = PyDict_Copy(dict);
566 if (copy == NULL)
567 return NULL;
568 PyDict_SetItemString(extensions, filename, copy);
569 Py_DECREF(copy);
570 return copy;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000571}
572
573PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000574_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000575{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000576 PyObject *dict, *mod, *mdict;
577 if (extensions == NULL)
578 return NULL;
579 dict = PyDict_GetItemString(extensions, filename);
580 if (dict == NULL)
581 return NULL;
582 mod = PyImport_AddModule(name);
583 if (mod == NULL)
584 return NULL;
585 mdict = PyModule_GetDict(mod);
586 if (mdict == NULL)
587 return NULL;
588 if (PyDict_Update(mdict, dict))
589 return NULL;
590 if (Py_VerboseFlag)
591 PySys_WriteStderr("import %s # previously loaded (%s)\n",
592 name, filename);
593 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000594}
595
596
597/* Get the module object corresponding to a module name.
598 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000599 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000600 Because the former action is most common, THIS DOES NOT RETURN A
601 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000602
Guido van Rossum79f25d91997-04-29 20:08:16 +0000603PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000604PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000605{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000606 PyObject *modules = PyImport_GetModuleDict();
607 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000608
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000609 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
610 PyModule_Check(m))
611 return m;
612 m = PyModule_New(name);
613 if (m == NULL)
614 return NULL;
615 if (PyDict_SetItemString(modules, name, m) != 0) {
616 Py_DECREF(m);
617 return NULL;
618 }
619 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000620
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000621 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000622}
623
Tim Peters1cd70172004-08-02 03:52:12 +0000624/* Remove name from sys.modules, if it's there. */
625static void
Benjamin Peterson06638732010-03-25 23:27:16 +0000626remove_module(const char *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000627{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000628 PyObject *modules = PyImport_GetModuleDict();
629 if (PyDict_GetItemString(modules, name) == NULL)
630 return;
631 if (PyDict_DelItemString(modules, name) < 0)
632 Py_FatalError("import: deleting existing key in"
633 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000634}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000635
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000636/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000637 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
638 * removed from sys.modules, to avoid leaving damaged module objects
639 * in sys.modules. The caller may wish to restore the original
640 * module object (if any) in this case; PyImport_ReloadModule is an
641 * example.
642 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000643PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000644PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000645{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000646 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000647}
648
649PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000650PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000651{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000652 PyObject *modules = PyImport_GetModuleDict();
653 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000654
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000655 m = PyImport_AddModule(name);
656 if (m == NULL)
657 return NULL;
658 /* If the module is being reloaded, we get the old module back
659 and re-use its dict to exec the new code. */
660 d = PyModule_GetDict(m);
661 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
662 if (PyDict_SetItemString(d, "__builtins__",
663 PyEval_GetBuiltins()) != 0)
664 goto error;
665 }
666 /* Remember the filename as the __file__ attribute */
667 v = NULL;
668 if (pathname != NULL) {
669 v = PyString_FromString(pathname);
670 if (v == NULL)
671 PyErr_Clear();
672 }
673 if (v == NULL) {
674 v = ((PyCodeObject *)co)->co_filename;
675 Py_INCREF(v);
676 }
677 if (PyDict_SetItemString(d, "__file__", v) != 0)
678 PyErr_Clear(); /* Not important enough to report */
679 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000680
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000681 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
682 if (v == NULL)
683 goto error;
684 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000685
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000686 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
687 PyErr_Format(PyExc_ImportError,
688 "Loaded module %.200s not found in sys.modules",
689 name);
690 return NULL;
691 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000692
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000693 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000694
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000695 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000696
697 error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000698 remove_module(name);
699 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000700}
701
702
703/* Given a pathname for a Python source file, fill a buffer with the
704 pathname for the corresponding compiled file. Return the pathname
705 for the compiled file, or NULL if there's no space in the buffer.
706 Doesn't set an exception. */
707
708static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000709make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000710{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000711 size_t len = strlen(pathname);
712 if (len+2 > buflen)
713 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000714
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000715#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000716 /* Treat .pyw as if it were .py. The case of ".pyw" must match
717 that used in _PyImport_StandardFiletab. */
718 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
719 --len; /* pretend 'w' isn't there */
Tim Petersc1731372001-08-04 08:12:36 +0000720#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000721 memcpy(buf, pathname, len);
722 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
723 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000724
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000725 return buf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000726}
727
728
729/* Given a pathname for a Python source file, its time of last
730 modification, and a pathname for a compiled file, check whether the
731 compiled file represents the same version of the source. If so,
732 return a FILE pointer for the compiled file, positioned just after
733 the header; if not, return NULL.
734 Doesn't set an exception. */
735
736static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000737check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000738{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000739 FILE *fp;
740 long magic;
741 long pyc_mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000742
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000743 fp = fopen(cpathname, "rb");
744 if (fp == NULL)
745 return NULL;
746 magic = PyMarshal_ReadLongFromFile(fp);
747 if (magic != pyc_magic) {
748 if (Py_VerboseFlag)
749 PySys_WriteStderr("# %s has bad magic\n", cpathname);
750 fclose(fp);
751 return NULL;
752 }
753 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
754 if (pyc_mtime != mtime) {
755 if (Py_VerboseFlag)
756 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
757 fclose(fp);
758 return NULL;
759 }
760 if (Py_VerboseFlag)
761 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
762 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000763}
764
765
766/* Read a code object from a file and check it for validity */
767
Guido van Rossum79f25d91997-04-29 20:08:16 +0000768static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000769read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000770{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000771 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000772
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000773 co = PyMarshal_ReadLastObjectFromFile(fp);
774 if (co == NULL)
775 return NULL;
776 if (!PyCode_Check(co)) {
777 PyErr_Format(PyExc_ImportError,
778 "Non-code object in %.200s", cpathname);
779 Py_DECREF(co);
780 return NULL;
781 }
782 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000783}
784
785
786/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000787 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000788
Guido van Rossum79f25d91997-04-29 20:08:16 +0000789static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000790load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000791{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000792 long magic;
793 PyCodeObject *co;
794 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000795
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000796 magic = PyMarshal_ReadLongFromFile(fp);
797 if (magic != pyc_magic) {
798 PyErr_Format(PyExc_ImportError,
799 "Bad magic number in %.200s", cpathname);
800 return NULL;
801 }
802 (void) PyMarshal_ReadLongFromFile(fp);
803 co = read_compiled_module(cpathname, fp);
804 if (co == NULL)
805 return NULL;
806 if (Py_VerboseFlag)
807 PySys_WriteStderr("import %s # precompiled from %s\n",
808 name, cpathname);
809 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
810 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000811
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000812 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000813}
814
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000815/* Parse a source file and return the corresponding code object */
816
Guido van Rossum79f25d91997-04-29 20:08:16 +0000817static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000818parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000819{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000820 PyCodeObject *co = NULL;
821 mod_ty mod;
822 PyCompilerFlags flags;
823 PyArena *arena = PyArena_New();
824 if (arena == NULL)
825 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000826
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000827 flags.cf_flags = 0;
Christian Heimes7f23d862008-03-26 22:51:58 +0000828
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000829 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, &flags,
830 NULL, arena);
831 if (mod) {
832 co = PyAST_Compile(mod, pathname, NULL, arena);
833 }
834 PyArena_Free(arena);
835 return co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000836}
837
838
Guido van Rossum55a83382000-09-20 20:31:38 +0000839/* Helper to open a bytecode file for writing in exclusive mode */
840
841static FILE *
Christian Heimes40346852008-02-23 17:52:07 +0000842open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +0000843{
844#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000845 /* Use O_EXCL to avoid a race condition when another process tries to
846 write the same file. When that happens, our open() call fails,
847 which is just fine (since it's only a cache).
848 XXX If the file exists and is writable but the directory is not
849 writable, the file will never be written. Oh well.
850 */
851 int fd;
852 (void) unlink(filename);
853 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
Tim Peters42c83af2000-09-29 04:03:10 +0000854#ifdef O_BINARY
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000855 |O_BINARY /* necessary for Windows */
Tim Peters42c83af2000-09-29 04:03:10 +0000856#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000857#ifdef __VMS
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000858 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000859#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000860 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000861#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000862 );
863 if (fd < 0)
864 return NULL;
865 return fdopen(fd, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +0000866#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000867 /* Best we can do -- on Windows this can't happen anyway */
868 return fopen(filename, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +0000869#endif
870}
871
872
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000873/* Write a compiled module to a file, placing the time of last
874 modification of its source into the header.
875 Errors are ignored, if a write error occurs an attempt is made to
876 remove the file. */
877
878static void
Christian Heimes40346852008-02-23 17:52:07 +0000879write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000880{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000881 FILE *fp;
882 time_t mtime = srcstat->st_mtime;
R. David Murray3310a102009-07-07 09:54:16 +0000883#ifdef MS_WINDOWS /* since Windows uses different permissions */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000884 mode_t mode = srcstat->st_mode & ~S_IEXEC;
R. David Murray3310a102009-07-07 09:54:16 +0000885#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000886 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
Brett Cannonb166afc2010-05-05 20:25:47 +0000887#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000888
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000889 fp = open_exclusive(cpathname, mode);
890 if (fp == NULL) {
891 if (Py_VerboseFlag)
892 PySys_WriteStderr(
893 "# can't create %s\n", cpathname);
894 return;
895 }
896 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
897 /* First write a 0 for mtime */
898 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
899 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
900 if (fflush(fp) != 0 || ferror(fp)) {
901 if (Py_VerboseFlag)
902 PySys_WriteStderr("# can't write %s\n", cpathname);
903 /* Don't keep partial file */
904 fclose(fp);
905 (void) unlink(cpathname);
906 return;
907 }
908 /* Now write the true mtime */
909 fseek(fp, 4L, 0);
Antoine Pitrou11cc4802012-01-25 14:39:21 +0100910 if (mtime >= LONG_MAX) {
Antoine Pitroub744cef2012-01-25 14:57:56 +0100911 fprintf(stderr, "** sizes=(%ld, %ld), mtime=%I64d >= %ld\n", sizeof(time_t), sizeof(srcstat->st_mtime), mtime, LONG_MAX);
Antoine Pitrou11cc4802012-01-25 14:39:21 +0100912 assert(0);
913 /* can't get here */
914 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000915 assert(mtime < LONG_MAX);
916 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
917 fflush(fp);
918 fclose(fp);
919 if (Py_VerboseFlag)
920 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000921}
922
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000923static void
924update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
925{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000926 PyObject *constants, *tmp;
927 Py_ssize_t i, n;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000928
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000929 if (!_PyString_Eq(co->co_filename, oldname))
930 return;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000931
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000932 tmp = co->co_filename;
933 co->co_filename = newname;
934 Py_INCREF(co->co_filename);
935 Py_DECREF(tmp);
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000936
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000937 constants = co->co_consts;
938 n = PyTuple_GET_SIZE(constants);
939 for (i = 0; i < n; i++) {
940 tmp = PyTuple_GET_ITEM(constants, i);
941 if (PyCode_Check(tmp))
942 update_code_filenames((PyCodeObject *)tmp,
943 oldname, newname);
944 }
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000945}
946
947static int
948update_compiled_module(PyCodeObject *co, char *pathname)
949{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000950 PyObject *oldname, *newname;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000951
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000952 if (strcmp(PyString_AsString(co->co_filename), pathname) == 0)
953 return 0;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000954
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000955 newname = PyString_FromString(pathname);
956 if (newname == NULL)
957 return -1;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000958
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000959 oldname = co->co_filename;
960 Py_INCREF(oldname);
961 update_code_filenames(co, oldname, newname);
962 Py_DECREF(oldname);
963 Py_DECREF(newname);
964 return 1;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000965}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000966
967/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000968 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
969 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000970
Guido van Rossum79f25d91997-04-29 20:08:16 +0000971static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000972load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000973{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000974 struct stat st;
975 FILE *fpc;
976 char buf[MAXPATHLEN+1];
977 char *cpathname;
978 PyCodeObject *co;
979 PyObject *m;
Brett Cannonb166afc2010-05-05 20:25:47 +0000980
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000981 if (fstat(fileno(fp), &st) != 0) {
982 PyErr_Format(PyExc_RuntimeError,
983 "unable to get file status from '%s'",
984 pathname);
985 return NULL;
986 }
Antoine Pitrou0e5fd592012-01-25 03:31:39 +0100987 if (sizeof st.st_mtime > 4) {
988 /* Python's .pyc timestamp handling presumes that the timestamp fits
989 in 4 bytes. Since the code only does an equality comparison,
990 ordering is not important and we can safely ignore the higher bits
991 (collisions are extremely unlikely).
992 */
993 st.st_mtime &= 0xFFFFFFFF;
994 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000995 cpathname = make_compiled_pathname(pathname, buf,
996 (size_t)MAXPATHLEN + 1);
997 if (cpathname != NULL &&
998 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
999 co = read_compiled_module(cpathname, fpc);
1000 fclose(fpc);
1001 if (co == NULL)
1002 return NULL;
1003 if (update_compiled_module(co, pathname) < 0)
1004 return NULL;
1005 if (Py_VerboseFlag)
1006 PySys_WriteStderr("import %s # precompiled from %s\n",
1007 name, cpathname);
1008 pathname = cpathname;
1009 }
1010 else {
1011 co = parse_source_module(pathname, fp);
1012 if (co == NULL)
1013 return NULL;
1014 if (Py_VerboseFlag)
1015 PySys_WriteStderr("import %s # from %s\n",
1016 name, pathname);
1017 if (cpathname) {
1018 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1019 if (ro == NULL || !PyObject_IsTrue(ro))
1020 write_compiled_module(co, cpathname, &st);
1021 }
1022 }
1023 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
1024 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001025
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001026 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001027}
1028
1029
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001030/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001031static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1032static struct filedescr *find_module(char *, char *, PyObject *,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001033 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001034static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001035
1036/* Load a package and return its module object WITH INCREMENTED
1037 REFERENCE COUNT */
1038
1039static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001040load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001041{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001042 PyObject *m, *d;
1043 PyObject *file = NULL;
1044 PyObject *path = NULL;
1045 int err;
1046 char buf[MAXPATHLEN+1];
1047 FILE *fp = NULL;
1048 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001049
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001050 m = PyImport_AddModule(name);
1051 if (m == NULL)
1052 return NULL;
1053 if (Py_VerboseFlag)
1054 PySys_WriteStderr("import %s # directory %s\n",
1055 name, pathname);
1056 d = PyModule_GetDict(m);
1057 file = PyString_FromString(pathname);
1058 if (file == NULL)
1059 goto error;
1060 path = Py_BuildValue("[O]", file);
1061 if (path == NULL)
1062 goto error;
1063 err = PyDict_SetItemString(d, "__file__", file);
1064 if (err == 0)
1065 err = PyDict_SetItemString(d, "__path__", path);
1066 if (err != 0)
1067 goto error;
1068 buf[0] = '\0';
1069 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
1070 if (fdp == NULL) {
1071 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1072 PyErr_Clear();
1073 Py_INCREF(m);
1074 }
1075 else
1076 m = NULL;
1077 goto cleanup;
1078 }
1079 m = load_module(name, fp, buf, fdp->type, NULL);
1080 if (fp != NULL)
1081 fclose(fp);
1082 goto cleanup;
Tim Peters1cd70172004-08-02 03:52:12 +00001083
1084 error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001085 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001086 cleanup:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001087 Py_XDECREF(path);
1088 Py_XDECREF(file);
1089 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001090}
1091
1092
1093/* Helper to test for built-in module */
1094
1095static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001096is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001097{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001098 int i;
1099 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1100 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1101 if (PyImport_Inittab[i].initfunc == NULL)
1102 return -1;
1103 else
1104 return 1;
1105 }
1106 }
1107 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001108}
1109
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001110
Just van Rossum52e14d62002-12-30 22:08:05 +00001111/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1112 possibly by fetching it from the path_importer_cache dict. If it
Brett Cannon94b69f62006-09-28 22:10:14 +00001113 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001114 that can handle the path item. Return None if no hook could;
1115 this tells our caller it should fall back to the builtin
1116 import mechanism. Cache the result in path_importer_cache.
1117 Returns a borrowed reference. */
1118
1119static PyObject *
1120get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001121 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001122{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001123 PyObject *importer;
1124 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001125
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001126 /* These conditions are the caller's responsibility: */
1127 assert(PyList_Check(path_hooks));
1128 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001129
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001130 nhooks = PyList_Size(path_hooks);
1131 if (nhooks < 0)
1132 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001133
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001134 importer = PyDict_GetItem(path_importer_cache, p);
1135 if (importer != NULL)
1136 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001137
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001138 /* set path_importer_cache[p] to None to avoid recursion */
1139 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1140 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001141
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001142 for (j = 0; j < nhooks; j++) {
1143 PyObject *hook = PyList_GetItem(path_hooks, j);
1144 if (hook == NULL)
1145 return NULL;
1146 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1147 if (importer != NULL)
1148 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001149
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001150 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1151 return NULL;
1152 }
1153 PyErr_Clear();
1154 }
1155 if (importer == NULL) {
1156 importer = PyObject_CallFunctionObjArgs(
1157 (PyObject *)&PyNullImporter_Type, p, NULL
1158 );
1159 if (importer == NULL) {
1160 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1161 PyErr_Clear();
1162 return Py_None;
1163 }
1164 }
1165 }
1166 if (importer != NULL) {
1167 int err = PyDict_SetItem(path_importer_cache, p, importer);
1168 Py_DECREF(importer);
1169 if (err != 0)
1170 return NULL;
1171 }
1172 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001173}
1174
Nick Coghlan327a39b2007-11-18 11:56:28 +00001175PyAPI_FUNC(PyObject *)
1176PyImport_GetImporter(PyObject *path) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001177 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Nick Coghlan327a39b2007-11-18 11:56:28 +00001178
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001179 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1180 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1181 importer = get_path_importer(path_importer_cache,
1182 path_hooks, path);
1183 }
1184 }
1185 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1186 return importer;
Nick Coghlan327a39b2007-11-18 11:56:28 +00001187}
1188
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001189/* Search the path (default sys.path) for a module. Return the
1190 corresponding filedescr struct, and (via return arguments) the
1191 pathname and an open file. Return NULL if the module is not found. */
1192
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001193#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001194extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001195 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001196#endif
1197
Martin v. Löwis18e16552006-02-15 17:27:45 +00001198static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001199static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001200static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001201
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001202static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001203find_module(char *fullname, char *subname, PyObject *path, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001204 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001205{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001206 Py_ssize_t i, npath;
1207 size_t len, namelen;
1208 struct filedescr *fdp = NULL;
1209 char *filemode;
1210 FILE *fp = NULL;
1211 PyObject *path_hooks, *path_importer_cache;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001212#ifndef RISCOS
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001213 struct stat statbuf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001214#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001215 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1216 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1217 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
1218 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001219#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001220 size_t saved_len;
1221 size_t saved_namelen;
1222 char *saved_buf = NULL;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001223#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001224 if (p_loader != NULL)
1225 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001226
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001227 if (strlen(subname) > MAXPATHLEN) {
1228 PyErr_SetString(PyExc_OverflowError,
1229 "module name is too long");
1230 return NULL;
1231 }
1232 strcpy(name, subname);
Just van Rossum52e14d62002-12-30 22:08:05 +00001233
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001234 /* sys.meta_path import hook */
1235 if (p_loader != NULL) {
1236 PyObject *meta_path;
Just van Rossum52e14d62002-12-30 22:08:05 +00001237
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001238 meta_path = PySys_GetObject("meta_path");
1239 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001240 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001241 "sys.meta_path must be a list of "
1242 "import hooks");
1243 return NULL;
1244 }
1245 Py_INCREF(meta_path); /* zap guard */
1246 npath = PyList_Size(meta_path);
1247 for (i = 0; i < npath; i++) {
1248 PyObject *loader;
1249 PyObject *hook = PyList_GetItem(meta_path, i);
1250 loader = PyObject_CallMethod(hook, "find_module",
1251 "sO", fullname,
1252 path != NULL ?
1253 path : Py_None);
1254 if (loader == NULL) {
1255 Py_DECREF(meta_path);
1256 return NULL; /* true error */
1257 }
1258 if (loader != Py_None) {
1259 /* a loader was found */
1260 *p_loader = loader;
1261 Py_DECREF(meta_path);
1262 return &importhookdescr;
1263 }
1264 Py_DECREF(loader);
1265 }
1266 Py_DECREF(meta_path);
1267 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001268
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001269 if (path != NULL && PyString_Check(path)) {
1270 /* The only type of submodule allowed inside a "frozen"
1271 package are other frozen modules or packages. */
1272 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1273 PyErr_SetString(PyExc_ImportError,
1274 "full frozen module name too long");
1275 return NULL;
1276 }
1277 strcpy(buf, PyString_AsString(path));
1278 strcat(buf, ".");
1279 strcat(buf, name);
1280 strcpy(name, buf);
1281 if (find_frozen(name) != NULL) {
1282 strcpy(buf, name);
1283 return &fd_frozen;
1284 }
1285 PyErr_Format(PyExc_ImportError,
1286 "No frozen submodule named %.200s", name);
1287 return NULL;
1288 }
1289 if (path == NULL) {
1290 if (is_builtin(name)) {
1291 strcpy(buf, name);
1292 return &fd_builtin;
1293 }
1294 if ((find_frozen(name)) != NULL) {
1295 strcpy(buf, name);
1296 return &fd_frozen;
1297 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001298
Guido van Rossumac279101996-08-22 23:10:58 +00001299#ifdef MS_COREDLL
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001300 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1301 if (fp != NULL) {
1302 *p_fp = fp;
1303 return fdp;
1304 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001305#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001306 path = PySys_GetObject("path");
1307 }
1308 if (path == NULL || !PyList_Check(path)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001309 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001310 "sys.path must be a list of directory names");
1311 return NULL;
1312 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001313
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001314 path_hooks = PySys_GetObject("path_hooks");
1315 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001316 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001317 "sys.path_hooks must be a list of "
1318 "import hooks");
1319 return NULL;
1320 }
1321 path_importer_cache = PySys_GetObject("path_importer_cache");
1322 if (path_importer_cache == NULL ||
1323 !PyDict_Check(path_importer_cache)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001324 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001325 "sys.path_importer_cache must be a dict");
1326 return NULL;
1327 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001328
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001329 npath = PyList_Size(path);
1330 namelen = strlen(name);
1331 for (i = 0; i < npath; i++) {
1332 PyObject *copy = NULL;
1333 PyObject *v = PyList_GetItem(path, i);
1334 if (!v)
1335 return NULL;
Walter Dörwald3430d702002-06-17 10:43:59 +00001336#ifdef Py_USING_UNICODE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001337 if (PyUnicode_Check(v)) {
1338 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1339 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1340 if (copy == NULL)
1341 return NULL;
1342 v = copy;
1343 }
1344 else
Walter Dörwald3430d702002-06-17 10:43:59 +00001345#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001346 if (!PyString_Check(v))
1347 continue;
1348 len = PyString_GET_SIZE(v);
1349 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1350 Py_XDECREF(copy);
1351 continue; /* Too long */
1352 }
1353 strcpy(buf, PyString_AS_STRING(v));
1354 if (strlen(buf) != len) {
1355 Py_XDECREF(copy);
1356 continue; /* v contains '\0' */
1357 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001358
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001359 /* sys.path_hooks import hook */
1360 if (p_loader != NULL) {
1361 PyObject *importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001362
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001363 importer = get_path_importer(path_importer_cache,
1364 path_hooks, v);
1365 if (importer == NULL) {
1366 Py_XDECREF(copy);
1367 return NULL;
1368 }
1369 /* Note: importer is a borrowed reference */
1370 if (importer != Py_None) {
1371 PyObject *loader;
1372 loader = PyObject_CallMethod(importer,
1373 "find_module",
1374 "s", fullname);
1375 Py_XDECREF(copy);
1376 if (loader == NULL)
1377 return NULL; /* error */
1378 if (loader != Py_None) {
1379 /* a loader was found */
1380 *p_loader = loader;
1381 return &importhookdescr;
1382 }
1383 Py_DECREF(loader);
1384 continue;
1385 }
1386 }
1387 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001388
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001389 if (len > 0 && buf[len-1] != SEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001390#ifdef ALTSEP
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001391 && buf[len-1] != ALTSEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001392#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001393 )
1394 buf[len++] = SEP;
1395 strcpy(buf+len, name);
1396 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001397
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001398 /* Check for package import (buf holds a directory name,
1399 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001400#ifdef HAVE_STAT
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001401 if (stat(buf, &statbuf) == 0 && /* it exists */
1402 S_ISDIR(statbuf.st_mode) && /* it's a directory */
1403 case_ok(buf, len, namelen, name)) { /* case matches */
1404 if (find_init_module(buf)) { /* and has __init__.py */
1405 Py_XDECREF(copy);
1406 return &fd_package;
1407 }
1408 else {
1409 char warnstr[MAXPATHLEN+80];
1410 sprintf(warnstr, "Not importing directory "
1411 "'%.*s': missing __init__.py",
1412 MAXPATHLEN, buf);
1413 if (PyErr_Warn(PyExc_ImportWarning,
1414 warnstr)) {
1415 Py_XDECREF(copy);
1416 return NULL;
1417 }
1418 }
1419 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001420#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001421 /* XXX How are you going to test for directories? */
Guido van Rossum48a680c2001-03-02 06:34:14 +00001422#ifdef RISCOS
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001423 if (isdir(buf) &&
1424 case_ok(buf, len, namelen, name)) {
1425 if (find_init_module(buf)) {
1426 Py_XDECREF(copy);
1427 return &fd_package;
1428 }
1429 else {
1430 char warnstr[MAXPATHLEN+80];
1431 sprintf(warnstr, "Not importing directory "
1432 "'%.*s': missing __init__.py",
1433 MAXPATHLEN, buf);
1434 if (PyErr_Warn(PyExc_ImportWarning,
1435 warnstr)) {
1436 Py_XDECREF(copy);
1437 return NULL;
1438 }
1439 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001440#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001441#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001442#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001443 /* take a snapshot of the module spec for restoration
1444 * after the 8 character DLL hackery
1445 */
1446 saved_buf = strdup(buf);
1447 saved_len = len;
1448 saved_namelen = namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001449#endif /* PYOS_OS2 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001450 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Georg Brandladd36e52007-08-23 18:08:06 +00001451#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001452 /* OS/2 limits DLLs to 8 character names (w/o
1453 extension)
1454 * so if the name is longer than that and its a
1455 * dynamically loaded module we're going to try,
1456 * truncate the name before trying
1457 */
1458 if (strlen(subname) > 8) {
1459 /* is this an attempt to load a C extension? */
1460 const struct filedescr *scan;
1461 scan = _PyImport_DynLoadFiletab;
1462 while (scan->suffix != NULL) {
1463 if (!strcmp(scan->suffix, fdp->suffix))
1464 break;
1465 else
1466 scan++;
1467 }
1468 if (scan->suffix != NULL) {
1469 /* yes, so truncate the name */
1470 namelen = 8;
1471 len -= strlen(subname) - namelen;
1472 buf[len] = '\0';
1473 }
1474 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001475#endif /* PYOS_OS2 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001476 strcpy(buf+len, fdp->suffix);
1477 if (Py_VerboseFlag > 1)
1478 PySys_WriteStderr("# trying %s\n", buf);
1479 filemode = fdp->mode;
1480 if (filemode[0] == 'U')
1481 filemode = "r" PY_STDIOTEXTMODE;
1482 fp = fopen(buf, filemode);
1483 if (fp != NULL) {
1484 if (case_ok(buf, len, namelen, name))
1485 break;
1486 else { /* continue search */
1487 fclose(fp);
1488 fp = NULL;
1489 }
1490 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001491#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001492 /* restore the saved snapshot */
1493 strcpy(buf, saved_buf);
1494 len = saved_len;
1495 namelen = saved_namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001496#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001497 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001498#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001499 /* don't need/want the module name snapshot anymore */
1500 if (saved_buf)
1501 {
1502 free(saved_buf);
1503 saved_buf = NULL;
1504 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001505#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001506 Py_XDECREF(copy);
1507 if (fp != NULL)
1508 break;
1509 }
1510 if (fp == NULL) {
1511 PyErr_Format(PyExc_ImportError,
1512 "No module named %.200s", name);
1513 return NULL;
1514 }
1515 *p_fp = fp;
1516 return fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001517}
1518
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001519/* Helpers for main.c
1520 * Find the source file corresponding to a named module
1521 */
1522struct filedescr *
1523_PyImport_FindModule(const char *name, PyObject *path, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001524 size_t buflen, FILE **p_fp, PyObject **p_loader)
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001525{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001526 return find_module((char *) name, (char *) name, path,
1527 buf, buflen, p_fp, p_loader);
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001528}
1529
1530PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1531{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001532 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001533}
1534
Martin v. Löwis18e16552006-02-15 17:27:45 +00001535/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001536 * The arguments here are tricky, best shown by example:
1537 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1538 * ^ ^ ^ ^
1539 * |--------------------- buf ---------------------|
1540 * |------------------- len ------------------|
1541 * |------ name -------|
1542 * |----- namelen -----|
1543 * buf is the full path, but len only counts up to (& exclusive of) the
1544 * extension. name is the module name, also exclusive of extension.
1545 *
1546 * We've already done a successful stat() or fopen() on buf, so know that
1547 * there's some match, possibly case-insensitive.
1548 *
Tim Peters50d8d372001-02-28 05:34:27 +00001549 * case_ok() is to return 1 if there's a case-sensitive match for
1550 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1551 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001552 *
Tim Peters50d8d372001-02-28 05:34:27 +00001553 * case_ok() is used to implement case-sensitive import semantics even
1554 * on platforms with case-insensitive filesystems. It's trivial to implement
1555 * for case-sensitive filesystems. It's pretty much a cross-platform
1556 * nightmare for systems with case-insensitive filesystems.
1557 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001558
Tim Peters50d8d372001-02-28 05:34:27 +00001559/* First we may need a pile of platform-specific header files; the sequence
1560 * of #if's here should match the sequence in the body of case_ok().
1561 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001562#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001563#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001564
Tim Peters50d8d372001-02-28 05:34:27 +00001565#elif defined(DJGPP)
1566#include <dir.h>
1567
Jason Tishler7961aa62005-05-20 00:56:54 +00001568#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001569#include <sys/types.h>
1570#include <dirent.h>
1571
Andrew MacIntyred9400542002-02-26 11:41:34 +00001572#elif defined(PYOS_OS2)
1573#define INCL_DOS
1574#define INCL_DOSERRORS
1575#define INCL_NOPMAPI
1576#include <os2.h>
1577
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001578#elif defined(RISCOS)
1579#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001580#endif
1581
Guido van Rossum0980bd91998-02-13 17:18:36 +00001582static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001583case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001584{
Tim Peters50d8d372001-02-28 05:34:27 +00001585/* Pick a platform-specific implementation; the sequence of #if's here should
1586 * match the sequence just above.
1587 */
1588
Jason Tishler7961aa62005-05-20 00:56:54 +00001589/* MS_WINDOWS */
1590#if defined(MS_WINDOWS)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001591 WIN32_FIND_DATA data;
1592 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001593
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001594 if (Py_GETENV("PYTHONCASEOK") != NULL)
1595 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001596
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001597 h = FindFirstFile(buf, &data);
1598 if (h == INVALID_HANDLE_VALUE) {
1599 PyErr_Format(PyExc_NameError,
1600 "Can't find file for module %.100s\n(filename %.300s)",
1601 name, buf);
1602 return 0;
1603 }
1604 FindClose(h);
1605 return strncmp(data.cFileName, name, namelen) == 0;
Tim Peters50d8d372001-02-28 05:34:27 +00001606
1607/* DJGPP */
1608#elif defined(DJGPP)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001609 struct ffblk ffblk;
1610 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00001611
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001612 if (Py_GETENV("PYTHONCASEOK") != NULL)
1613 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001614
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001615 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1616 if (done) {
1617 PyErr_Format(PyExc_NameError,
1618 "Can't find file for module %.100s\n(filename %.300s)",
1619 name, buf);
1620 return 0;
1621 }
1622 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001623
Jason Tishler7961aa62005-05-20 00:56:54 +00001624/* new-fangled macintosh (macosx) or Cygwin */
1625#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001626 DIR *dirp;
1627 struct dirent *dp;
1628 char dirname[MAXPATHLEN + 1];
1629 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001630
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001631 if (Py_GETENV("PYTHONCASEOK") != NULL)
1632 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001633
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001634 /* Copy the dir component into dirname; substitute "." if empty */
1635 if (dirlen <= 0) {
1636 dirname[0] = '.';
1637 dirname[1] = '\0';
1638 }
1639 else {
1640 assert(dirlen <= MAXPATHLEN);
1641 memcpy(dirname, buf, dirlen);
1642 dirname[dirlen] = '\0';
1643 }
1644 /* Open the directory and search the entries for an exact match. */
1645 dirp = opendir(dirname);
1646 if (dirp) {
1647 char *nameWithExt = buf + len - namelen;
1648 while ((dp = readdir(dirp)) != NULL) {
1649 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001650#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001651 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001652#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001653 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001654#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001655 if (thislen >= namelen &&
1656 strcmp(dp->d_name, nameWithExt) == 0) {
1657 (void)closedir(dirp);
1658 return 1; /* Found */
1659 }
1660 }
1661 (void)closedir(dirp);
1662 }
1663 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001664
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001665/* RISC OS */
1666#elif defined(RISCOS)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001667 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1668 char buf2[MAXPATHLEN+2];
1669 char *nameWithExt = buf+len-namelen;
1670 int canonlen;
1671 os_error *e;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001672
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001673 if (Py_GETENV("PYTHONCASEOK") != NULL)
1674 return 1;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001675
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001676 /* workaround:
1677 append wildcard, otherwise case of filename wouldn't be touched */
1678 strcpy(buf2, buf);
1679 strcat(buf2, "*");
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001680
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001681 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1682 canonlen = MAXPATHLEN+1-canonlen;
1683 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1684 return 0;
1685 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1686 return 1; /* match */
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001687
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001688 return 0;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001689
Andrew MacIntyred9400542002-02-26 11:41:34 +00001690/* OS/2 */
1691#elif defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001692 HDIR hdir = 1;
1693 ULONG srchcnt = 1;
1694 FILEFINDBUF3 ffbuf;
1695 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001696
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001697 if (Py_GETENV("PYTHONCASEOK") != NULL)
1698 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001699
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001700 rc = DosFindFirst(buf,
1701 &hdir,
1702 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1703 &ffbuf, sizeof(ffbuf),
1704 &srchcnt,
1705 FIL_STANDARD);
1706 if (rc != NO_ERROR)
1707 return 0;
1708 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001709
Tim Peters50d8d372001-02-28 05:34:27 +00001710/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1711#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001712 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001713
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001714#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001715}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001716
Guido van Rossum0980bd91998-02-13 17:18:36 +00001717
Guido van Rossum197346f1997-10-31 18:38:52 +00001718#ifdef HAVE_STAT
1719/* Helper to look for __init__.py or __init__.py[co] in potential package */
1720static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001721find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001722{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001723 const size_t save_len = strlen(buf);
1724 size_t i = save_len;
1725 char *pname; /* pointer to start of __init__ */
1726 struct stat statbuf;
Guido van Rossum197346f1997-10-31 18:38:52 +00001727
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001728/* For calling case_ok(buf, len, namelen, name):
1729 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1730 * ^ ^ ^ ^
1731 * |--------------------- buf ---------------------|
1732 * |------------------- len ------------------|
1733 * |------ name -------|
1734 * |----- namelen -----|
Tim Peters0f9431f2001-07-05 03:47:53 +00001735 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001736 if (save_len + 13 >= MAXPATHLEN)
1737 return 0;
1738 buf[i++] = SEP;
1739 pname = buf + i;
1740 strcpy(pname, "__init__.py");
1741 if (stat(buf, &statbuf) == 0) {
1742 if (case_ok(buf,
1743 save_len + 9, /* len("/__init__") */
1744 8, /* len("__init__") */
1745 pname)) {
1746 buf[save_len] = '\0';
1747 return 1;
1748 }
1749 }
1750 i += strlen(pname);
1751 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
1752 if (stat(buf, &statbuf) == 0) {
1753 if (case_ok(buf,
1754 save_len + 9, /* len("/__init__") */
1755 8, /* len("__init__") */
1756 pname)) {
1757 buf[save_len] = '\0';
1758 return 1;
1759 }
1760 }
1761 buf[save_len] = '\0';
1762 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00001763}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001764
1765#else
1766
1767#ifdef RISCOS
1768static int
1769find_init_module(buf)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001770 char *buf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001771{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001772 int save_len = strlen(buf);
1773 int i = save_len;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001774
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001775 if (save_len + 13 >= MAXPATHLEN)
1776 return 0;
1777 buf[i++] = SEP;
1778 strcpy(buf+i, "__init__/py");
1779 if (isfile(buf)) {
1780 buf[save_len] = '\0';
1781 return 1;
1782 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001783
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001784 if (Py_OptimizeFlag)
1785 strcpy(buf+i, "o");
1786 else
1787 strcpy(buf+i, "c");
1788 if (isfile(buf)) {
1789 buf[save_len] = '\0';
1790 return 1;
1791 }
1792 buf[save_len] = '\0';
1793 return 0;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001794}
1795#endif /*RISCOS*/
1796
Guido van Rossum197346f1997-10-31 18:38:52 +00001797#endif /* HAVE_STAT */
1798
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001799
Tim Petersdbd9ba62000-07-09 03:09:57 +00001800static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001801
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001802/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001803 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001804
Guido van Rossum79f25d91997-04-29 20:08:16 +00001805static PyObject *
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001806load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001807{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001808 PyObject *modules;
1809 PyObject *m;
1810 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001811
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001812 /* First check that there's an open file (if we need one) */
1813 switch (type) {
1814 case PY_SOURCE:
1815 case PY_COMPILED:
1816 if (fp == NULL) {
1817 PyErr_Format(PyExc_ValueError,
1818 "file object required for import (type code %d)",
1819 type);
1820 return NULL;
1821 }
1822 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001823
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001824 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001825
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001826 case PY_SOURCE:
1827 m = load_source_module(name, pathname, fp);
1828 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001829
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001830 case PY_COMPILED:
1831 m = load_compiled_module(name, pathname, fp);
1832 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001833
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001834#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001835 case C_EXTENSION:
1836 m = _PyImport_LoadDynamicModule(name, pathname, fp);
1837 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001838#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001839
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001840 case PKG_DIRECTORY:
1841 m = load_package(name, pathname);
1842 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001843
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001844 case C_BUILTIN:
1845 case PY_FROZEN:
1846 if (pathname != NULL && pathname[0] != '\0')
1847 name = pathname;
1848 if (type == C_BUILTIN)
1849 err = init_builtin(name);
1850 else
1851 err = PyImport_ImportFrozenModule(name);
1852 if (err < 0)
1853 return NULL;
1854 if (err == 0) {
1855 PyErr_Format(PyExc_ImportError,
1856 "Purported %s module %.200s not found",
1857 type == C_BUILTIN ?
1858 "builtin" : "frozen",
1859 name);
1860 return NULL;
1861 }
1862 modules = PyImport_GetModuleDict();
1863 m = PyDict_GetItemString(modules, name);
1864 if (m == NULL) {
1865 PyErr_Format(
1866 PyExc_ImportError,
1867 "%s module %.200s not properly initialized",
1868 type == C_BUILTIN ?
1869 "builtin" : "frozen",
1870 name);
1871 return NULL;
1872 }
1873 Py_INCREF(m);
1874 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001875
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001876 case IMP_HOOK: {
1877 if (loader == NULL) {
1878 PyErr_SetString(PyExc_ImportError,
1879 "import hook without loader");
1880 return NULL;
1881 }
1882 m = PyObject_CallMethod(loader, "load_module", "s", name);
1883 break;
1884 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001885
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001886 default:
1887 PyErr_Format(PyExc_ImportError,
1888 "Don't know how to import %.200s (type code %d)",
1889 name, type);
1890 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001891
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001892 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001893
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001894 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001895}
1896
1897
1898/* Initialize a built-in module.
Brett Cannon5a9aa4f2006-10-03 21:58:55 +00001899 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001900 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001901
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001902static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001903init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001904{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001905 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001906
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001907 if (_PyImport_FindExtension(name, name) != NULL)
1908 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001909
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001910 for (p = PyImport_Inittab; p->name != NULL; p++) {
1911 if (strcmp(name, p->name) == 0) {
1912 if (p->initfunc == NULL) {
1913 PyErr_Format(PyExc_ImportError,
1914 "Cannot re-init internal module %.200s",
1915 name);
1916 return -1;
1917 }
1918 if (Py_VerboseFlag)
1919 PySys_WriteStderr("import %s # builtin\n", name);
1920 (*p->initfunc)();
1921 if (PyErr_Occurred())
1922 return -1;
1923 if (_PyImport_FixupExtension(name, name) == NULL)
1924 return -1;
1925 return 1;
1926 }
1927 }
1928 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001929}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001930
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001931
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001932/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001933
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001934static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001935find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001936{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001937 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001938
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001939 for (p = PyImport_FrozenModules; ; p++) {
1940 if (p->name == NULL)
1941 return NULL;
1942 if (strcmp(p->name, name) == 0)
1943 break;
1944 }
1945 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001946}
1947
Guido van Rossum79f25d91997-04-29 20:08:16 +00001948static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001949get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001950{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001951 struct _frozen *p = find_frozen(name);
1952 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001953
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001954 if (p == NULL) {
1955 PyErr_Format(PyExc_ImportError,
1956 "No such frozen object named %.200s",
1957 name);
1958 return NULL;
1959 }
1960 if (p->code == NULL) {
1961 PyErr_Format(PyExc_ImportError,
1962 "Excluded frozen object named %.200s",
1963 name);
1964 return NULL;
1965 }
1966 size = p->size;
1967 if (size < 0)
1968 size = -size;
1969 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001970}
1971
1972/* Initialize a frozen module.
1973 Return 1 for succes, 0 if the module is not found, and -1 with
1974 an exception set if the initialization failed.
1975 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001976
1977int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001978PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001979{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001980 struct _frozen *p = find_frozen(name);
1981 PyObject *co;
1982 PyObject *m;
1983 int ispackage;
1984 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001985
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001986 if (p == NULL)
1987 return 0;
1988 if (p->code == NULL) {
1989 PyErr_Format(PyExc_ImportError,
1990 "Excluded frozen object named %.200s",
1991 name);
1992 return -1;
1993 }
1994 size = p->size;
1995 ispackage = (size < 0);
1996 if (ispackage)
1997 size = -size;
1998 if (Py_VerboseFlag)
1999 PySys_WriteStderr("import %s # frozen%s\n",
2000 name, ispackage ? " package" : "");
2001 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2002 if (co == NULL)
2003 return -1;
2004 if (!PyCode_Check(co)) {
2005 PyErr_Format(PyExc_TypeError,
2006 "frozen object %.200s is not a code object",
2007 name);
2008 goto err_return;
2009 }
2010 if (ispackage) {
2011 /* Set __path__ to the package name */
2012 PyObject *d, *s;
2013 int err;
2014 m = PyImport_AddModule(name);
2015 if (m == NULL)
2016 goto err_return;
2017 d = PyModule_GetDict(m);
2018 s = PyString_InternFromString(name);
2019 if (s == NULL)
2020 goto err_return;
2021 err = PyDict_SetItemString(d, "__path__", s);
2022 Py_DECREF(s);
2023 if (err != 0)
2024 goto err_return;
2025 }
2026 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
2027 if (m == NULL)
2028 goto err_return;
2029 Py_DECREF(co);
2030 Py_DECREF(m);
2031 return 1;
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002032err_return:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002033 Py_DECREF(co);
2034 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002035}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002036
2037
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002038/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002039 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002040
Guido van Rossum79f25d91997-04-29 20:08:16 +00002041PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002042PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002043{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002044 PyObject *pname;
2045 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002046
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002047 pname = PyString_FromString(name);
2048 if (pname == NULL)
2049 return NULL;
2050 result = PyImport_Import(pname);
2051 Py_DECREF(pname);
2052 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002053}
2054
Christian Heimes000a0742008-01-03 22:16:32 +00002055/* Import a module without blocking
2056 *
2057 * At first it tries to fetch the module from sys.modules. If the module was
2058 * never loaded before it loads it with PyImport_ImportModule() unless another
2059 * thread holds the import lock. In the latter case the function raises an
2060 * ImportError instead of blocking.
2061 *
2062 * Returns the module object with incremented ref count.
2063 */
2064PyObject *
2065PyImport_ImportModuleNoBlock(const char *name)
2066{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002067 PyObject *result;
2068 PyObject *modules;
Victor Stinner871a0fb2011-09-02 00:21:36 +02002069#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002070 long me;
Victor Stinner871a0fb2011-09-02 00:21:36 +02002071#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002072
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002073 /* Try to get the module from sys.modules[name] */
2074 modules = PyImport_GetModuleDict();
2075 if (modules == NULL)
2076 return NULL;
Christian Heimes000a0742008-01-03 22:16:32 +00002077
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002078 result = PyDict_GetItemString(modules, name);
2079 if (result != NULL) {
2080 Py_INCREF(result);
2081 return result;
2082 }
2083 else {
2084 PyErr_Clear();
2085 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002086#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002087 /* check the import lock
2088 * me might be -1 but I ignore the error here, the lock function
2089 * takes care of the problem */
2090 me = PyThread_get_thread_ident();
2091 if (import_lock_thread == -1 || import_lock_thread == me) {
2092 /* no thread or me is holding the lock */
2093 return PyImport_ImportModule(name);
2094 }
2095 else {
2096 PyErr_Format(PyExc_ImportError,
2097 "Failed to import %.200s because the import lock"
2098 "is held by another thread.",
2099 name);
2100 return NULL;
2101 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002102#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002103 return PyImport_ImportModule(name);
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002104#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002105}
2106
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002107/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002108static PyObject *get_parent(PyObject *globals, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002109 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002110static PyObject *load_next(PyObject *mod, PyObject *altmod,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002111 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002112static int mark_miss(char *name);
2113static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002114 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002115static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002116
2117/* The Magnum Opus of dotted-name import :-) */
2118
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002119static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002120import_module_level(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002121 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002122{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002123 char buf[MAXPATHLEN+1];
2124 Py_ssize_t buflen = 0;
2125 PyObject *parent, *head, *next, *tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002126
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002127 if (strchr(name, '/') != NULL
Christian Heimes3403f152008-01-09 19:56:33 +00002128#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002129 || strchr(name, '\\') != NULL
Christian Heimes3403f152008-01-09 19:56:33 +00002130#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002131 ) {
2132 PyErr_SetString(PyExc_ImportError,
2133 "Import by filename is not supported.");
2134 return NULL;
2135 }
Christian Heimes3403f152008-01-09 19:56:33 +00002136
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002137 parent = get_parent(globals, buf, &buflen, level);
2138 if (parent == NULL)
2139 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002140
Brett Cannoneb3cd302010-05-20 18:37:55 +00002141 head = load_next(parent, level < 0 ? Py_None : parent, &name, buf,
2142 &buflen);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002143 if (head == NULL)
2144 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002145
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002146 tail = head;
2147 Py_INCREF(tail);
2148 while (name) {
2149 next = load_next(tail, tail, &name, buf, &buflen);
2150 Py_DECREF(tail);
2151 if (next == NULL) {
2152 Py_DECREF(head);
2153 return NULL;
2154 }
2155 tail = next;
2156 }
2157 if (tail == Py_None) {
2158 /* If tail is Py_None, both get_parent and load_next found
2159 an empty module name: someone called __import__("") or
2160 doctored faulty bytecode */
2161 Py_DECREF(tail);
2162 Py_DECREF(head);
2163 PyErr_SetString(PyExc_ValueError,
2164 "Empty module name");
2165 return NULL;
2166 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002167
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002168 if (fromlist != NULL) {
2169 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2170 fromlist = NULL;
2171 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002172
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002173 if (fromlist == NULL) {
2174 Py_DECREF(tail);
2175 return head;
2176 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002177
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002178 Py_DECREF(head);
2179 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
2180 Py_DECREF(tail);
2181 return NULL;
2182 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002183
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002184 return tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002185}
2186
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002187PyObject *
2188PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002189 PyObject *fromlist, int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002190{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002191 PyObject *result;
2192 _PyImport_AcquireLock();
2193 result = import_module_level(name, globals, locals, fromlist, level);
2194 if (_PyImport_ReleaseLock() < 0) {
2195 Py_XDECREF(result);
2196 PyErr_SetString(PyExc_RuntimeError,
2197 "not holding the import lock");
2198 return NULL;
2199 }
2200 return result;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002201}
2202
Fred Drake87590902004-05-28 20:21:36 +00002203/* Return the package that an import is being performed in. If globals comes
2204 from the module foo.bar.bat (not itself a package), this returns the
2205 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Georg Brandl5f6861d2006-05-28 21:57:35 +00002206 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002207
2208 The *name* of the returned package is returned in buf, with the length of
2209 the name in *p_buflen.
2210
2211 If globals doesn't come from a package or a module in a package, or a
2212 corresponding entry is not found in sys.modules, Py_None is returned.
2213*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002214static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002215get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002216{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002217 static PyObject *namestr = NULL;
2218 static PyObject *pathstr = NULL;
2219 static PyObject *pkgstr = NULL;
2220 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2221 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002222
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002223 if (globals == NULL || !PyDict_Check(globals) || !level)
2224 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002225
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002226 if (namestr == NULL) {
2227 namestr = PyString_InternFromString("__name__");
2228 if (namestr == NULL)
2229 return NULL;
2230 }
2231 if (pathstr == NULL) {
2232 pathstr = PyString_InternFromString("__path__");
2233 if (pathstr == NULL)
2234 return NULL;
2235 }
2236 if (pkgstr == NULL) {
2237 pkgstr = PyString_InternFromString("__package__");
2238 if (pkgstr == NULL)
2239 return NULL;
2240 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002241
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002242 *buf = '\0';
2243 *p_buflen = 0;
2244 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002245
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002246 if ((pkgname != NULL) && (pkgname != Py_None)) {
2247 /* __package__ is set, so use it */
2248 Py_ssize_t len;
2249 if (!PyString_Check(pkgname)) {
2250 PyErr_SetString(PyExc_ValueError,
2251 "__package__ set to non-string");
2252 return NULL;
2253 }
2254 len = PyString_GET_SIZE(pkgname);
2255 if (len == 0) {
2256 if (level > 0) {
2257 PyErr_SetString(PyExc_ValueError,
2258 "Attempted relative import in non-package");
2259 return NULL;
2260 }
2261 return Py_None;
2262 }
2263 if (len > MAXPATHLEN) {
2264 PyErr_SetString(PyExc_ValueError,
2265 "Package name too long");
2266 return NULL;
2267 }
2268 strcpy(buf, PyString_AS_STRING(pkgname));
2269 } else {
2270 /* __package__ not set, so figure it out and set it */
2271 modname = PyDict_GetItem(globals, namestr);
2272 if (modname == NULL || !PyString_Check(modname))
2273 return Py_None;
Brett Cannonb166afc2010-05-05 20:25:47 +00002274
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002275 modpath = PyDict_GetItem(globals, pathstr);
2276 if (modpath != NULL) {
2277 /* __path__ is set, so modname is already the package name */
2278 Py_ssize_t len = PyString_GET_SIZE(modname);
2279 int error;
2280 if (len > MAXPATHLEN) {
2281 PyErr_SetString(PyExc_ValueError,
2282 "Module name too long");
2283 return NULL;
2284 }
2285 strcpy(buf, PyString_AS_STRING(modname));
2286 error = PyDict_SetItem(globals, pkgstr, modname);
2287 if (error) {
2288 PyErr_SetString(PyExc_ValueError,
2289 "Could not set __package__");
2290 return NULL;
2291 }
2292 } else {
2293 /* Normal module, so work out the package name if any */
2294 char *start = PyString_AS_STRING(modname);
2295 char *lastdot = strrchr(start, '.');
2296 size_t len;
2297 int error;
2298 if (lastdot == NULL && level > 0) {
2299 PyErr_SetString(PyExc_ValueError,
2300 "Attempted relative import in non-package");
2301 return NULL;
2302 }
2303 if (lastdot == NULL) {
2304 error = PyDict_SetItem(globals, pkgstr, Py_None);
2305 if (error) {
2306 PyErr_SetString(PyExc_ValueError,
2307 "Could not set __package__");
2308 return NULL;
2309 }
2310 return Py_None;
2311 }
2312 len = lastdot - start;
2313 if (len >= MAXPATHLEN) {
2314 PyErr_SetString(PyExc_ValueError,
2315 "Module name too long");
2316 return NULL;
2317 }
2318 strncpy(buf, start, len);
2319 buf[len] = '\0';
2320 pkgname = PyString_FromString(buf);
2321 if (pkgname == NULL) {
2322 return NULL;
2323 }
2324 error = PyDict_SetItem(globals, pkgstr, pkgname);
2325 Py_DECREF(pkgname);
2326 if (error) {
2327 PyErr_SetString(PyExc_ValueError,
2328 "Could not set __package__");
2329 return NULL;
2330 }
2331 }
2332 }
2333 while (--level > 0) {
2334 char *dot = strrchr(buf, '.');
2335 if (dot == NULL) {
2336 PyErr_SetString(PyExc_ValueError,
2337 "Attempted relative import beyond "
2338 "toplevel package");
2339 return NULL;
2340 }
2341 *dot = '\0';
2342 }
2343 *p_buflen = strlen(buf);
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002344
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002345 modules = PyImport_GetModuleDict();
2346 parent = PyDict_GetItemString(modules, buf);
2347 if (parent == NULL) {
2348 if (orig_level < 1) {
2349 PyObject *err_msg = PyString_FromFormat(
2350 "Parent module '%.200s' not found "
2351 "while handling absolute import", buf);
2352 if (err_msg == NULL) {
2353 return NULL;
2354 }
2355 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2356 PyString_AsString(err_msg), 1)) {
2357 *buf = '\0';
2358 *p_buflen = 0;
2359 parent = Py_None;
2360 }
2361 Py_DECREF(err_msg);
2362 } else {
2363 PyErr_Format(PyExc_SystemError,
2364 "Parent module '%.200s' not loaded, "
2365 "cannot perform relative import", buf);
2366 }
2367 }
2368 return parent;
2369 /* We expect, but can't guarantee, if parent != None, that:
2370 - parent.__name__ == buf
2371 - parent.__dict__ is globals
2372 If this is violated... Who cares? */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002373}
2374
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002375/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002376static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002377load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002378 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002379{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002380 char *name = *p_name;
2381 char *dot = strchr(name, '.');
2382 size_t len;
2383 char *p;
2384 PyObject *result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002385
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002386 if (strlen(name) == 0) {
2387 /* completely empty module name should only happen in
2388 'from . import' (or '__import__("")')*/
2389 Py_INCREF(mod);
2390 *p_name = NULL;
2391 return mod;
2392 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002393
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002394 if (dot == NULL) {
2395 *p_name = NULL;
2396 len = strlen(name);
2397 }
2398 else {
2399 *p_name = dot+1;
2400 len = dot-name;
2401 }
2402 if (len == 0) {
2403 PyErr_SetString(PyExc_ValueError,
2404 "Empty module name");
2405 return NULL;
2406 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002407
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002408 p = buf + *p_buflen;
2409 if (p != buf)
2410 *p++ = '.';
2411 if (p+len-buf >= MAXPATHLEN) {
2412 PyErr_SetString(PyExc_ValueError,
2413 "Module name too long");
2414 return NULL;
2415 }
2416 strncpy(p, name, len);
2417 p[len] = '\0';
2418 *p_buflen = p+len-buf;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002419
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002420 result = import_submodule(mod, p, buf);
2421 if (result == Py_None && altmod != mod) {
2422 Py_DECREF(result);
2423 /* Here, altmod must be None and mod must not be None */
2424 result = import_submodule(altmod, p, p);
2425 if (result != NULL && result != Py_None) {
2426 if (mark_miss(buf) != 0) {
2427 Py_DECREF(result);
2428 return NULL;
2429 }
2430 strncpy(buf, name, len);
2431 buf[len] = '\0';
2432 *p_buflen = len;
2433 }
2434 }
2435 if (result == NULL)
2436 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002437
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002438 if (result == Py_None) {
2439 Py_DECREF(result);
2440 PyErr_Format(PyExc_ImportError,
2441 "No module named %.200s", name);
2442 return NULL;
2443 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002444
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002445 return result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002446}
2447
2448static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002449mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002450{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002451 PyObject *modules = PyImport_GetModuleDict();
2452 return PyDict_SetItemString(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002453}
2454
2455static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002456ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002457 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002458{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002459 int i;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002460
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002461 if (!PyObject_HasAttrString(mod, "__path__"))
2462 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002463
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002464 for (i = 0; ; i++) {
2465 PyObject *item = PySequence_GetItem(fromlist, i);
2466 int hasit;
2467 if (item == NULL) {
2468 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2469 PyErr_Clear();
2470 return 1;
2471 }
2472 return 0;
2473 }
2474 if (!PyString_Check(item)) {
2475 PyErr_SetString(PyExc_TypeError,
2476 "Item in ``from list'' not a string");
2477 Py_DECREF(item);
2478 return 0;
2479 }
2480 if (PyString_AS_STRING(item)[0] == '*') {
2481 PyObject *all;
2482 Py_DECREF(item);
2483 /* See if the package defines __all__ */
2484 if (recursive)
2485 continue; /* Avoid endless recursion */
2486 all = PyObject_GetAttrString(mod, "__all__");
2487 if (all == NULL)
2488 PyErr_Clear();
2489 else {
2490 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
2491 Py_DECREF(all);
2492 if (!ret)
2493 return 0;
2494 }
2495 continue;
2496 }
2497 hasit = PyObject_HasAttr(mod, item);
2498 if (!hasit) {
2499 char *subname = PyString_AS_STRING(item);
2500 PyObject *submod;
2501 char *p;
2502 if (buflen + strlen(subname) >= MAXPATHLEN) {
2503 PyErr_SetString(PyExc_ValueError,
2504 "Module name too long");
2505 Py_DECREF(item);
2506 return 0;
2507 }
2508 p = buf + buflen;
2509 *p++ = '.';
2510 strcpy(p, subname);
2511 submod = import_submodule(mod, subname, buf);
2512 Py_XDECREF(submod);
2513 if (submod == NULL) {
2514 Py_DECREF(item);
2515 return 0;
2516 }
2517 }
2518 Py_DECREF(item);
2519 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002520
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002521 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002522}
2523
Neil Schemenauer00b09662003-06-16 21:03:07 +00002524static int
2525add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002526 PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00002527{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002528 if (mod == Py_None)
2529 return 1;
2530 /* Irrespective of the success of this load, make a
2531 reference to it in the parent package module. A copy gets
2532 saved in the modules dictionary under the full name, so get a
2533 reference from there, if need be. (The exception is when the
2534 load failed with a SyntaxError -- then there's no trace in
2535 sys.modules. In that case, of course, do nothing extra.) */
2536 if (submod == NULL) {
2537 submod = PyDict_GetItemString(modules, fullname);
2538 if (submod == NULL)
2539 return 1;
2540 }
2541 if (PyModule_Check(mod)) {
2542 /* We can't use setattr here since it can give a
2543 * spurious warning if the submodule name shadows a
2544 * builtin name */
2545 PyObject *dict = PyModule_GetDict(mod);
2546 if (!dict)
2547 return 0;
2548 if (PyDict_SetItemString(dict, subname, submod) < 0)
2549 return 0;
2550 }
2551 else {
2552 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2553 return 0;
2554 }
2555 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00002556}
2557
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002558static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002559import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002560{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002561 PyObject *modules = PyImport_GetModuleDict();
2562 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002563
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002564 /* Require:
2565 if mod == None: subname == fullname
2566 else: mod.__name__ + "." + subname == fullname
2567 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002568
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002569 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
2570 Py_INCREF(m);
2571 }
2572 else {
2573 PyObject *path, *loader = NULL;
2574 char buf[MAXPATHLEN+1];
2575 struct filedescr *fdp;
2576 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002577
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002578 if (mod == Py_None)
2579 path = NULL;
2580 else {
2581 path = PyObject_GetAttrString(mod, "__path__");
2582 if (path == NULL) {
2583 PyErr_Clear();
2584 Py_INCREF(Py_None);
2585 return Py_None;
2586 }
2587 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002588
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002589 buf[0] = '\0';
2590 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2591 &fp, &loader);
2592 Py_XDECREF(path);
2593 if (fdp == NULL) {
2594 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2595 return NULL;
2596 PyErr_Clear();
2597 Py_INCREF(Py_None);
2598 return Py_None;
2599 }
2600 m = load_module(fullname, fp, buf, fdp->type, loader);
2601 Py_XDECREF(loader);
2602 if (fp)
2603 fclose(fp);
2604 if (!add_submodule(mod, m, fullname, subname, modules)) {
2605 Py_XDECREF(m);
2606 m = NULL;
2607 }
2608 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002609
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002610 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002611}
2612
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002613
2614/* Re-import a module of any kind and return its module object, WITH
2615 INCREMENTED REFERENCE COUNT */
2616
Guido van Rossum79f25d91997-04-29 20:08:16 +00002617PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002618PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002619{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002620 PyInterpreterState *interp = PyThreadState_Get()->interp;
2621 PyObject *modules_reloading = interp->modules_reloading;
2622 PyObject *modules = PyImport_GetModuleDict();
2623 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
2624 char *name, *subname;
2625 char buf[MAXPATHLEN+1];
2626 struct filedescr *fdp;
2627 FILE *fp = NULL;
2628 PyObject *newm;
Brett Cannonb166afc2010-05-05 20:25:47 +00002629
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002630 if (modules_reloading == NULL) {
2631 Py_FatalError("PyImport_ReloadModule: "
2632 "no modules_reloading dictionary!");
2633 return NULL;
2634 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002635
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002636 if (m == NULL || !PyModule_Check(m)) {
2637 PyErr_SetString(PyExc_TypeError,
2638 "reload() argument must be module");
2639 return NULL;
2640 }
2641 name = PyModule_GetName(m);
2642 if (name == NULL)
2643 return NULL;
2644 if (m != PyDict_GetItemString(modules, name)) {
2645 PyErr_Format(PyExc_ImportError,
2646 "reload(): module %.200s not in sys.modules",
2647 name);
2648 return NULL;
2649 }
2650 existing_m = PyDict_GetItemString(modules_reloading, name);
2651 if (existing_m != NULL) {
2652 /* Due to a recursive reload, this module is already
2653 being reloaded. */
2654 Py_INCREF(existing_m);
2655 return existing_m;
2656 }
2657 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2658 return NULL;
Collin Winter276887b2007-03-12 16:11:39 +00002659
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002660 subname = strrchr(name, '.');
2661 if (subname == NULL)
2662 subname = name;
2663 else {
2664 PyObject *parentname, *parent;
2665 parentname = PyString_FromStringAndSize(name, (subname-name));
2666 if (parentname == NULL) {
2667 imp_modules_reloading_clear();
2668 return NULL;
2669 }
2670 parent = PyDict_GetItem(modules, parentname);
2671 if (parent == NULL) {
2672 PyErr_Format(PyExc_ImportError,
2673 "reload(): parent %.200s not in sys.modules",
2674 PyString_AS_STRING(parentname));
2675 Py_DECREF(parentname);
2676 imp_modules_reloading_clear();
2677 return NULL;
2678 }
2679 Py_DECREF(parentname);
2680 subname++;
2681 path = PyObject_GetAttrString(parent, "__path__");
2682 if (path == NULL)
2683 PyErr_Clear();
2684 }
2685 buf[0] = '\0';
2686 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
2687 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002688
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002689 if (fdp == NULL) {
2690 Py_XDECREF(loader);
2691 imp_modules_reloading_clear();
2692 return NULL;
2693 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002694
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002695 newm = load_module(name, fp, buf, fdp->type, loader);
2696 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002697
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002698 if (fp)
2699 fclose(fp);
2700 if (newm == NULL) {
2701 /* load_module probably removed name from modules because of
2702 * the error. Put back the original module object. We're
2703 * going to return NULL in this case regardless of whether
2704 * replacing name succeeds, so the return value is ignored.
2705 */
2706 PyDict_SetItemString(modules, name, m);
2707 }
2708 imp_modules_reloading_clear();
2709 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002710}
2711
2712
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002713/* Higher-level import emulator which emulates the "import" statement
2714 more accurately -- it invokes the __import__() function from the
2715 builtins of the current globals. This means that the import is
2716 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002717 environment, e.g. by "rexec".
2718 A dummy list ["__doc__"] is passed as the 4th argument so that
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002719 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00002720 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002721
2722PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002723PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002724{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002725 static PyObject *silly_list = NULL;
2726 static PyObject *builtins_str = NULL;
2727 static PyObject *import_str = NULL;
2728 PyObject *globals = NULL;
2729 PyObject *import = NULL;
2730 PyObject *builtins = NULL;
2731 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002732
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002733 /* Initialize constant string objects */
2734 if (silly_list == NULL) {
2735 import_str = PyString_InternFromString("__import__");
2736 if (import_str == NULL)
2737 return NULL;
2738 builtins_str = PyString_InternFromString("__builtins__");
2739 if (builtins_str == NULL)
2740 return NULL;
2741 silly_list = Py_BuildValue("[s]", "__doc__");
2742 if (silly_list == NULL)
2743 return NULL;
2744 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002745
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002746 /* Get the builtins from current globals */
2747 globals = PyEval_GetGlobals();
2748 if (globals != NULL) {
2749 Py_INCREF(globals);
2750 builtins = PyObject_GetItem(globals, builtins_str);
2751 if (builtins == NULL)
2752 goto err;
2753 }
2754 else {
2755 /* No globals -- use standard builtins, and fake globals */
2756 builtins = PyImport_ImportModuleLevel("__builtin__",
2757 NULL, NULL, NULL, 0);
2758 if (builtins == NULL)
2759 return NULL;
2760 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2761 if (globals == NULL)
2762 goto err;
2763 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002764
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002765 /* Get the __import__ function from the builtins */
2766 if (PyDict_Check(builtins)) {
2767 import = PyObject_GetItem(builtins, import_str);
2768 if (import == NULL)
2769 PyErr_SetObject(PyExc_KeyError, import_str);
2770 }
2771 else
2772 import = PyObject_GetAttr(builtins, import_str);
2773 if (import == NULL)
2774 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002775
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002776 /* Call the __import__ function with the proper argument list
2777 * Always use absolute import here. */
2778 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2779 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002780
2781 err:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002782 Py_XDECREF(globals);
2783 Py_XDECREF(builtins);
2784 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002785
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002786 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002787}
2788
2789
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002790/* Module 'imp' provides Python access to the primitives used for
2791 importing modules.
2792*/
2793
Guido van Rossum79f25d91997-04-29 20:08:16 +00002794static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002795imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002796{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002797 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002798
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002799 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2800 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2801 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2802 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002803
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002804 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002805}
2806
Guido van Rossum79f25d91997-04-29 20:08:16 +00002807static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002808imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002809{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002810 PyObject *list;
2811 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002812
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002813 list = PyList_New(0);
2814 if (list == NULL)
2815 return NULL;
2816 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2817 PyObject *item = Py_BuildValue("ssi",
2818 fdp->suffix, fdp->mode, fdp->type);
2819 if (item == NULL) {
2820 Py_DECREF(list);
2821 return NULL;
2822 }
2823 if (PyList_Append(list, item) < 0) {
2824 Py_DECREF(list);
2825 Py_DECREF(item);
2826 return NULL;
2827 }
2828 Py_DECREF(item);
2829 }
2830 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002831}
2832
Guido van Rossum79f25d91997-04-29 20:08:16 +00002833static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002834call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002835{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002836 extern int fclose(FILE *);
2837 PyObject *fob, *ret;
2838 struct filedescr *fdp;
2839 char pathname[MAXPATHLEN+1];
2840 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002841
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002842 pathname[0] = '\0';
2843 if (path == Py_None)
2844 path = NULL;
2845 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
2846 if (fdp == NULL)
2847 return NULL;
2848 if (fp != NULL) {
2849 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
Victor Stinner63c22fa2011-09-23 19:37:03 +02002850 if (fob == NULL)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002851 return NULL;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002852 }
2853 else {
2854 fob = Py_None;
2855 Py_INCREF(fob);
2856 }
2857 ret = Py_BuildValue("Os(ssi)",
2858 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
2859 Py_DECREF(fob);
2860 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002861}
2862
Guido van Rossum79f25d91997-04-29 20:08:16 +00002863static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002864imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002865{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002866 char *name;
2867 PyObject *path = NULL;
2868 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
2869 return NULL;
2870 return call_find_module(name, path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002871}
2872
2873static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002874imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002875{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002876 char *name;
2877 int ret;
2878 PyObject *m;
2879 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
2880 return NULL;
2881 ret = init_builtin(name);
2882 if (ret < 0)
2883 return NULL;
2884 if (ret == 0) {
2885 Py_INCREF(Py_None);
2886 return Py_None;
2887 }
2888 m = PyImport_AddModule(name);
2889 Py_XINCREF(m);
2890 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002891}
2892
Guido van Rossum79f25d91997-04-29 20:08:16 +00002893static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002894imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002895{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002896 char *name;
2897 int ret;
2898 PyObject *m;
2899 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
2900 return NULL;
2901 ret = PyImport_ImportFrozenModule(name);
2902 if (ret < 0)
2903 return NULL;
2904 if (ret == 0) {
2905 Py_INCREF(Py_None);
2906 return Py_None;
2907 }
2908 m = PyImport_AddModule(name);
2909 Py_XINCREF(m);
2910 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002911}
2912
Guido van Rossum79f25d91997-04-29 20:08:16 +00002913static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002914imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002915{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002916 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002917
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002918 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
2919 return NULL;
2920 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002921}
2922
Guido van Rossum79f25d91997-04-29 20:08:16 +00002923static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002924imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002925{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002926 char *name;
2927 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
2928 return NULL;
2929 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002930}
2931
Guido van Rossum79f25d91997-04-29 20:08:16 +00002932static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002933imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002934{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002935 char *name;
2936 struct _frozen *p;
2937 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
2938 return NULL;
2939 p = find_frozen(name);
2940 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002941}
2942
2943static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002944get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002945{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002946 FILE *fp;
2947 if (fob == NULL) {
2948 if (mode[0] == 'U')
2949 mode = "r" PY_STDIOTEXTMODE;
2950 fp = fopen(pathname, mode);
2951 if (fp == NULL)
2952 PyErr_SetFromErrno(PyExc_IOError);
2953 }
2954 else {
2955 fp = PyFile_AsFile(fob);
2956 if (fp == NULL)
2957 PyErr_SetString(PyExc_ValueError,
2958 "bad/closed file object");
2959 }
2960 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002961}
2962
Guido van Rossum79f25d91997-04-29 20:08:16 +00002963static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002964imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002965{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002966 char *name;
2967 char *pathname;
2968 PyObject *fob = NULL;
2969 PyObject *m;
2970 FILE *fp;
2971 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
2972 &PyFile_Type, &fob))
2973 return NULL;
2974 fp = get_file(pathname, fob, "rb");
2975 if (fp == NULL)
2976 return NULL;
2977 m = load_compiled_module(name, pathname, fp);
2978 if (fob == NULL)
2979 fclose(fp);
2980 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002981}
2982
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002983#ifdef HAVE_DYNAMIC_LOADING
2984
Guido van Rossum79f25d91997-04-29 20:08:16 +00002985static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002986imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002987{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002988 char *name;
2989 char *pathname;
2990 PyObject *fob = NULL;
2991 PyObject *m;
2992 FILE *fp = NULL;
2993 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
2994 &PyFile_Type, &fob))
2995 return NULL;
2996 if (fob) {
2997 fp = get_file(pathname, fob, "r");
2998 if (fp == NULL)
2999 return NULL;
3000 }
3001 m = _PyImport_LoadDynamicModule(name, pathname, fp);
3002 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003003}
3004
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003005#endif /* HAVE_DYNAMIC_LOADING */
3006
Guido van Rossum79f25d91997-04-29 20:08:16 +00003007static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003008imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003009{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003010 char *name;
3011 char *pathname;
3012 PyObject *fob = NULL;
3013 PyObject *m;
3014 FILE *fp;
3015 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
3016 &PyFile_Type, &fob))
3017 return NULL;
3018 fp = get_file(pathname, fob, "r");
3019 if (fp == NULL)
3020 return NULL;
3021 m = load_source_module(name, pathname, fp);
3022 if (fob == NULL)
3023 fclose(fp);
3024 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003025}
3026
Guido van Rossum79f25d91997-04-29 20:08:16 +00003027static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003028imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003029{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003030 char *name;
3031 PyObject *fob;
3032 char *pathname;
3033 char *suffix; /* Unused */
3034 char *mode;
3035 int type;
3036 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003037
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003038 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
3039 &name, &fob, &pathname,
3040 &suffix, &mode, &type))
3041 return NULL;
3042 if (*mode) {
3043 /* Mode must start with 'r' or 'U' and must not contain '+'.
3044 Implicit in this test is the assumption that the mode
3045 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003046
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003047 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3048 PyErr_Format(PyExc_ValueError,
3049 "invalid file open mode %.200s", mode);
3050 return NULL;
3051 }
3052 }
3053 if (fob == Py_None)
3054 fp = NULL;
3055 else {
3056 if (!PyFile_Check(fob)) {
3057 PyErr_SetString(PyExc_ValueError,
3058 "load_module arg#2 should be a file or None");
3059 return NULL;
3060 }
3061 fp = get_file(pathname, fob, mode);
3062 if (fp == NULL)
3063 return NULL;
3064 }
3065 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003066}
3067
3068static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003069imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003070{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003071 char *name;
3072 char *pathname;
3073 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
3074 return NULL;
3075 return load_package(name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003076}
3077
3078static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003079imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003080{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003081 char *name;
3082 if (!PyArg_ParseTuple(args, "s:new_module", &name))
3083 return NULL;
3084 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003085}
3086
Brett Cannon3aa2a492008-08-06 22:28:09 +00003087static PyObject *
3088imp_reload(PyObject *self, PyObject *v)
3089{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003090 return PyImport_ReloadModule(v);
Brett Cannon3aa2a492008-08-06 22:28:09 +00003091}
3092
3093
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003094/* Doc strings */
3095
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003096PyDoc_STRVAR(doc_imp,
3097"This module provides the components needed to build your own\n\
3098__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003099
Brett Cannon3aa2a492008-08-06 22:28:09 +00003100PyDoc_STRVAR(doc_reload,
3101"reload(module) -> module\n\
3102\n\
3103Reload the module. The module must have been successfully imported before.");
3104
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003105PyDoc_STRVAR(doc_find_module,
3106"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003107Search for a module. If path is omitted or None, search for a\n\
3108built-in, frozen or special module and continue search in sys.path.\n\
3109The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003110package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003111
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003112PyDoc_STRVAR(doc_load_module,
3113"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003114Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003115The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003116
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003117PyDoc_STRVAR(doc_get_magic,
3118"get_magic() -> string\n\
3119Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003120
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003121PyDoc_STRVAR(doc_get_suffixes,
3122"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003123Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003124that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003125
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003126PyDoc_STRVAR(doc_new_module,
3127"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003128Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003129The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003130
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003131PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003132"lock_held() -> boolean\n\
3133Return True if the import lock is currently held, else False.\n\
3134On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003135
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003136PyDoc_STRVAR(doc_acquire_lock,
3137"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003138Acquires the interpreter's import lock for the current thread.\n\
3139This lock should be used by import hooks to ensure thread-safety\n\
3140when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003141On platforms without threads, this function does nothing.");
3142
3143PyDoc_STRVAR(doc_release_lock,
3144"release_lock() -> None\n\
3145Release the interpreter's import lock.\n\
3146On platforms without threads, this function does nothing.");
3147
Guido van Rossum79f25d91997-04-29 20:08:16 +00003148static PyMethodDef imp_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003149 {"reload", imp_reload, METH_O, doc_reload},
3150 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3151 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3152 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3153 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3154 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3155 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3156 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3157 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
3158 /* The rest are obsolete */
3159 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3160 {"init_builtin", imp_init_builtin, METH_VARARGS},
3161 {"init_frozen", imp_init_frozen, METH_VARARGS},
3162 {"is_builtin", imp_is_builtin, METH_VARARGS},
3163 {"is_frozen", imp_is_frozen, METH_VARARGS},
3164 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003165#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003166 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003167#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003168 {"load_package", imp_load_package, METH_VARARGS},
3169 {"load_source", imp_load_source, METH_VARARGS},
3170 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003171};
3172
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003173static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003174setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003175{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003176 PyObject *v;
3177 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003178
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003179 v = PyInt_FromLong((long)value);
3180 err = PyDict_SetItemString(d, name, v);
3181 Py_XDECREF(v);
3182 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003183}
3184
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003185typedef struct {
3186 PyObject_HEAD
3187} NullImporter;
3188
3189static int
3190NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3191{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003192 char *path;
3193 Py_ssize_t pathlen;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003194
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003195 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3196 return -1;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003197
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003198 if (!PyArg_ParseTuple(args, "s:NullImporter",
3199 &path))
3200 return -1;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003201
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003202 pathlen = strlen(path);
3203 if (pathlen == 0) {
3204 PyErr_SetString(PyExc_ImportError, "empty pathname");
3205 return -1;
3206 } else {
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003207#ifndef RISCOS
Kristján Valur Jónsson3b2a6b82009-01-09 20:10:59 +00003208#ifndef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003209 struct stat statbuf;
3210 int rv;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003211
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003212 rv = stat(path, &statbuf);
3213 if (rv == 0) {
3214 /* it exists */
3215 if (S_ISDIR(statbuf.st_mode)) {
3216 /* it's a directory */
3217 PyErr_SetString(PyExc_ImportError,
3218 "existing directory");
3219 return -1;
3220 }
3221 }
Kristján Valur Jónsson3b2a6b82009-01-09 20:10:59 +00003222#else /* MS_WINDOWS */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003223 DWORD rv;
3224 /* see issue1293 and issue3677:
3225 * stat() on Windows doesn't recognise paths like
3226 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
3227 */
3228 rv = GetFileAttributesA(path);
3229 if (rv != INVALID_FILE_ATTRIBUTES) {
3230 /* it exists */
3231 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
3232 /* it's a directory */
3233 PyErr_SetString(PyExc_ImportError,
3234 "existing directory");
3235 return -1;
3236 }
3237 }
Kristján Valur Jónsson3b2a6b82009-01-09 20:10:59 +00003238#endif
3239#else /* RISCOS */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003240 if (object_exists(path)) {
3241 /* it exists */
3242 if (isdir(path)) {
3243 /* it's a directory */
3244 PyErr_SetString(PyExc_ImportError,
3245 "existing directory");
3246 return -1;
3247 }
3248 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003249#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003250 }
3251 return 0;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003252}
3253
3254static PyObject *
3255NullImporter_find_module(NullImporter *self, PyObject *args)
3256{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003257 Py_RETURN_NONE;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003258}
3259
3260static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003261 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3262 "Always return None"
3263 },
3264 {NULL} /* Sentinel */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003265};
3266
3267
Nick Coghlan327a39b2007-11-18 11:56:28 +00003268PyTypeObject PyNullImporter_Type = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003269 PyVarObject_HEAD_INIT(NULL, 0)
3270 "imp.NullImporter", /*tp_name*/
3271 sizeof(NullImporter), /*tp_basicsize*/
3272 0, /*tp_itemsize*/
3273 0, /*tp_dealloc*/
3274 0, /*tp_print*/
3275 0, /*tp_getattr*/
3276 0, /*tp_setattr*/
3277 0, /*tp_compare*/
3278 0, /*tp_repr*/
3279 0, /*tp_as_number*/
3280 0, /*tp_as_sequence*/
3281 0, /*tp_as_mapping*/
3282 0, /*tp_hash */
3283 0, /*tp_call*/
3284 0, /*tp_str*/
3285 0, /*tp_getattro*/
3286 0, /*tp_setattro*/
3287 0, /*tp_as_buffer*/
3288 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3289 "Null importer object", /* tp_doc */
3290 0, /* tp_traverse */
3291 0, /* tp_clear */
3292 0, /* tp_richcompare */
3293 0, /* tp_weaklistoffset */
3294 0, /* tp_iter */
3295 0, /* tp_iternext */
3296 NullImporter_methods, /* tp_methods */
3297 0, /* tp_members */
3298 0, /* tp_getset */
3299 0, /* tp_base */
3300 0, /* tp_dict */
3301 0, /* tp_descr_get */
3302 0, /* tp_descr_set */
3303 0, /* tp_dictoffset */
3304 (initproc)NullImporter_init, /* tp_init */
3305 0, /* tp_alloc */
3306 PyType_GenericNew /* tp_new */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003307};
3308
3309
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003310PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003311initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003312{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003313 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003314
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003315 if (PyType_Ready(&PyNullImporter_Type) < 0)
3316 goto failure;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003317
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003318 m = Py_InitModule4("imp", imp_methods, doc_imp,
3319 NULL, PYTHON_API_VERSION);
3320 if (m == NULL)
3321 goto failure;
3322 d = PyModule_GetDict(m);
3323 if (d == NULL)
3324 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003325
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003326 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3327 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3328 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3329 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3330 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3331 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3332 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3333 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
3334 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
3335 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003336
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003337 Py_INCREF(&PyNullImporter_Type);
3338 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003339 failure:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003340 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003341}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003342
3343
Guido van Rossumb18618d2000-05-03 23:44:39 +00003344/* API for embedding applications that want to add their own entries
3345 to the table of built-in modules. This should normally be called
3346 *before* Py_Initialize(). When the table resize fails, -1 is
3347 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003348
3349 After a similar function by Just van Rossum. */
3350
3351int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003352PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003353{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003354 static struct _inittab *our_copy = NULL;
3355 struct _inittab *p;
3356 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003357
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003358 /* Count the number of entries in both tables */
3359 for (n = 0; newtab[n].name != NULL; n++)
3360 ;
3361 if (n == 0)
3362 return 0; /* Nothing to do */
3363 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3364 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003365
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003366 /* Allocate new memory for the combined table */
3367 p = our_copy;
3368 PyMem_RESIZE(p, struct _inittab, i+n+1);
3369 if (p == NULL)
3370 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003371
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003372 /* Copy the tables into the new memory */
3373 if (our_copy != PyImport_Inittab)
3374 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3375 PyImport_Inittab = our_copy = p;
3376 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003377
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003378 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003379}
3380
3381/* Shorthand to add a single entry given a name and a function */
3382
3383int
Brett Cannonc4f90eb2009-04-02 03:17:39 +00003384PyImport_AppendInittab(const char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003385{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003386 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003387
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003388 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003389
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003390 newtab[0].name = (char *)name;
3391 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003392
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003393 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003394}
Anthony Baxterac6bd462006-04-13 02:06:09 +00003395
3396#ifdef __cplusplus
3397}
3398#endif