blob: 95cd20dffd29e63e0bb225cd7ea144f87cd56ebb [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Module definition and import implementation */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00005
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "Python-ast.h"
Kristján Valur Jónsson67387fb2007-04-25 00:17:39 +00007#undef Yield /* undefine macro conflicting with winbase.h */
Neal Norwitzadb69fc2005-12-17 20:54:49 +00008#include "pyarena.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00009#include "pythonrun.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000010#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000011#include "marshal.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000012#include "code.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000013#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000014#include "eval.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000015#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000016#include "importdl.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000017
Guido van Rossum55a83382000-09-20 20:31:38 +000018#ifdef HAVE_FCNTL_H
19#include <fcntl.h>
20#endif
Anthony Baxterac6bd462006-04-13 02:06:09 +000021#ifdef __cplusplus
22extern "C" {
23#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000024
Christian Heimes5e8e6d22008-02-23 23:59:45 +000025#ifdef MS_WINDOWS
26/* for stat.st_mode */
27typedef unsigned short mode_t;
28#endif
29
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000030extern time_t PyOS_GetLastModificationTime(char *, FILE *);
31 /* In getmtime.c */
Guido van Rossum21d335e1993-10-15 13:01:11 +000032
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000033/* Magic word to reject .pyc files generated by other Python versions.
34 It should change for each incompatible change to the bytecode.
35
36 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000037 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000038 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000039
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000040 The magic numbers must be spaced apart atleast 2 values, as the
41 -U interpeter flag will cause MAGIC+1 being used. They have been
42 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000043
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000044 There were a variety of old schemes for setting the magic number.
45 The current working scheme is to increment the previous value by
46 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000047
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000048 Known values:
49 Python 1.5: 20121
50 Python 1.5.1: 20121
51 Python 1.5.2: 20121
Skip Montanaro4ec3c262006-03-25 14:12:03 +000052 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000053 Python 2.0: 50823
54 Python 2.0.1: 50823
55 Python 2.1: 60202
56 Python 2.1.1: 60202
57 Python 2.1.2: 60202
58 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000059 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000060 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000061 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000062 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000063 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000064 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000065 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000066 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000067 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000068 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Neal Norwitz0d62a062006-07-30 06:53:31 +000069 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
70 Python 2.5b3: 62111 (fix wrong code: x += yield)
Neal Norwitz9a70f952006-08-04 05:12:19 +000071 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
72 storing constants that should have been removed)
Neal Norwitzdac090d2006-09-05 03:53:08 +000073 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
Raymond Hettingereffde122007-12-18 18:26:18 +000074 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)
Nick Coghlan7af53be2008-03-07 14:13:28 +000075 Python 2.6a1: 62161 (WITH_CLEANUP optimization)
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000076.
Tim Peters36515e22001-11-18 04:06:29 +000077*/
Nick Coghlan7af53be2008-03-07 14:13:28 +000078#define MAGIC (62161 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000079
Guido van Rossum96774c12000-05-01 20:19:08 +000080/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000081 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000082 compiler works which are enabled by command line switches. */
83static long pyc_magic = MAGIC;
84
Guido van Rossum25ce5661997-08-02 03:10:38 +000085/* See _PyImport_FixupExtension() below */
86static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000087
Guido van Rossum771c6c81997-10-31 18:37:24 +000088/* This table is defined in config.c: */
89extern struct _inittab _PyImport_Inittab[];
90
91struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000092
Guido van Rossumed1170e1999-12-20 21:23:41 +000093/* these tables define the module suffixes that Python recognizes */
94struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +000095
96#ifdef RISCOS
97static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +000098 {"/py", "U", PY_SOURCE},
Guido van Rossum48a680c2001-03-02 06:34:14 +000099 {"/pyc", "rb", PY_COMPILED},
100 {0, 0}
101};
102#else
Guido van Rossumed1170e1999-12-20 21:23:41 +0000103static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +0000104 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000105#ifdef MS_WINDOWS
Jack Jansenc88da1f2002-05-28 10:58:19 +0000106 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000107#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000108 {".pyc", "rb", PY_COMPILED},
109 {0, 0}
110};
Guido van Rossum48a680c2001-03-02 06:34:14 +0000111#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000112
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000113
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000114/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000115
116void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000117_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000118{
Guido van Rossumed1170e1999-12-20 21:23:41 +0000119 const struct filedescr *scan;
120 struct filedescr *filetab;
121 int countD = 0;
122 int countS = 0;
123
124 /* prepare _PyImport_Filetab: copy entries from
125 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
126 */
Georg Brandladd36e52007-08-23 18:08:06 +0000127#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossumed1170e1999-12-20 21:23:41 +0000128 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
129 ++countD;
Georg Brandladd36e52007-08-23 18:08:06 +0000130#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000131 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
132 ++countS;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000133 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
Neal Norwitze1fdb322006-07-21 05:32:28 +0000134 if (filetab == NULL)
Neal Norwitz33722ae2006-07-21 07:59:02 +0000135 Py_FatalError("Can't initialize import file table.");
Georg Brandladd36e52007-08-23 18:08:06 +0000136#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossumed1170e1999-12-20 21:23:41 +0000137 memcpy(filetab, _PyImport_DynLoadFiletab,
138 countD * sizeof(struct filedescr));
Georg Brandladd36e52007-08-23 18:08:06 +0000139#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000140 memcpy(filetab + countD, _PyImport_StandardFiletab,
141 countS * sizeof(struct filedescr));
142 filetab[countD + countS].suffix = NULL;
143
144 _PyImport_Filetab = filetab;
145
Guido van Rossum0824f631997-03-11 18:37:35 +0000146 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000147 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
148 for (; filetab->suffix != NULL; filetab++) {
Guido van Rossum48a680c2001-03-02 06:34:14 +0000149#ifndef RISCOS
Guido van Rossumed1170e1999-12-20 21:23:41 +0000150 if (strcmp(filetab->suffix, ".pyc") == 0)
151 filetab->suffix = ".pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000152#else
153 if (strcmp(filetab->suffix, "/pyc") == 0)
154 filetab->suffix = "/pyo";
155#endif
Guido van Rossum0824f631997-03-11 18:37:35 +0000156 }
157 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000158
159 if (Py_UnicodeFlag) {
160 /* Fix the pyc_magic so that byte compiled code created
161 using the all-Unicode method doesn't interfere with
162 code created in normal operation mode. */
163 pyc_magic = MAGIC + 1;
164 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000165}
166
Guido van Rossum25ce5661997-08-02 03:10:38 +0000167void
Just van Rossum52e14d62002-12-30 22:08:05 +0000168_PyImportHooks_Init(void)
169{
170 PyObject *v, *path_hooks = NULL, *zimpimport;
171 int err = 0;
172
173 /* adding sys.path_hooks and sys.path_importer_cache, setting up
174 zipimport */
Nick Coghlan327a39b2007-11-18 11:56:28 +0000175 if (PyType_Ready(&PyNullImporter_Type) < 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000176 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000177
178 if (Py_VerboseFlag)
179 PySys_WriteStderr("# installing zipimport hook\n");
180
181 v = PyList_New(0);
182 if (v == NULL)
183 goto error;
184 err = PySys_SetObject("meta_path", v);
185 Py_DECREF(v);
186 if (err)
187 goto error;
188 v = PyDict_New();
189 if (v == NULL)
190 goto error;
191 err = PySys_SetObject("path_importer_cache", v);
192 Py_DECREF(v);
193 if (err)
194 goto error;
195 path_hooks = PyList_New(0);
196 if (path_hooks == NULL)
197 goto error;
198 err = PySys_SetObject("path_hooks", path_hooks);
199 if (err) {
200 error:
201 PyErr_Print();
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000202 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
203 "path_importer_cache, or NullImporter failed"
204 );
Just van Rossum52e14d62002-12-30 22:08:05 +0000205 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000206
Just van Rossum52e14d62002-12-30 22:08:05 +0000207 zimpimport = PyImport_ImportModule("zipimport");
208 if (zimpimport == NULL) {
209 PyErr_Clear(); /* No zip import module -- okay */
210 if (Py_VerboseFlag)
211 PySys_WriteStderr("# can't import zipimport\n");
212 }
213 else {
214 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
215 "zipimporter");
216 Py_DECREF(zimpimport);
217 if (zipimporter == NULL) {
218 PyErr_Clear(); /* No zipimporter object -- okay */
219 if (Py_VerboseFlag)
220 PySys_WriteStderr(
Fred Drake1e5fc552003-07-11 15:01:02 +0000221 "# can't import zipimport.zipimporter\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000222 }
223 else {
224 /* sys.path_hooks.append(zipimporter) */
225 err = PyList_Append(path_hooks, zipimporter);
226 Py_DECREF(zipimporter);
227 if (err)
228 goto error;
229 if (Py_VerboseFlag)
230 PySys_WriteStderr(
231 "# installed zipimport hook\n");
232 }
233 }
234 Py_DECREF(path_hooks);
235}
236
237void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000238_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000239{
240 Py_XDECREF(extensions);
241 extensions = NULL;
Barry Warsaw84294482000-10-03 16:02:05 +0000242 PyMem_DEL(_PyImport_Filetab);
243 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000244}
245
246
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000247/* Locking primitives to prevent parallel imports of the same module
248 in different threads to return with a partially loaded module.
249 These calls are serialized by the global interpreter lock. */
250
251#ifdef WITH_THREAD
252
Guido van Rossum49b56061998-10-01 20:42:43 +0000253#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000254
Guido van Rossum65d5b571998-12-21 19:32:43 +0000255static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000256static long import_lock_thread = -1;
257static int import_lock_level = 0;
258
259static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000260lock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000261{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000262 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000263 if (me == -1)
264 return; /* Too bad */
Neal Norwitze1fdb322006-07-21 05:32:28 +0000265 if (import_lock == NULL) {
Guido van Rossum65d5b571998-12-21 19:32:43 +0000266 import_lock = PyThread_allocate_lock();
Neal Norwitze1fdb322006-07-21 05:32:28 +0000267 if (import_lock == NULL)
268 return; /* Nothing much we can do. */
269 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000270 if (import_lock_thread == me) {
271 import_lock_level++;
272 return;
273 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000274 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
275 {
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000276 PyThreadState *tstate = PyEval_SaveThread();
Guido van Rossum65d5b571998-12-21 19:32:43 +0000277 PyThread_acquire_lock(import_lock, 1);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000278 PyEval_RestoreThread(tstate);
279 }
280 import_lock_thread = me;
281 import_lock_level = 1;
282}
283
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000284static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000285unlock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000286{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000287 long me = PyThread_get_thread_ident();
Neal Norwitze1fdb322006-07-21 05:32:28 +0000288 if (me == -1 || import_lock == NULL)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000289 return 0; /* Too bad */
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000290 if (import_lock_thread != me)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000291 return -1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000292 import_lock_level--;
293 if (import_lock_level == 0) {
294 import_lock_thread = -1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000295 PyThread_release_lock(import_lock);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000296 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000297 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000298}
299
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000300/* This function is called from PyOS_AfterFork to ensure that newly
301 created child processes do not share locks with the parent. */
302
303void
304_PyImport_ReInitLock(void)
305{
306#ifdef _AIX
307 if (import_lock != NULL)
308 import_lock = PyThread_allocate_lock();
309#endif
310}
311
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000312#else
313
314#define lock_import()
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000315#define unlock_import() 0
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000316
317#endif
318
Tim Peters69232342001-08-30 05:16:13 +0000319static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000320imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000321{
Tim Peters69232342001-08-30 05:16:13 +0000322#ifdef WITH_THREAD
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000323 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000324#else
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000325 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000326#endif
327}
328
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000329static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000330imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000331{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000332#ifdef WITH_THREAD
333 lock_import();
334#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000335 Py_INCREF(Py_None);
336 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000337}
338
339static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000340imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000341{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000342#ifdef WITH_THREAD
343 if (unlock_import() < 0) {
344 PyErr_SetString(PyExc_RuntimeError,
345 "not holding the import lock");
346 return NULL;
347 }
348#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000349 Py_INCREF(Py_None);
350 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000351}
352
Collin Winter276887b2007-03-12 16:11:39 +0000353static void
Neal Norwitz75c7c802007-03-13 05:31:38 +0000354imp_modules_reloading_clear(void)
Collin Winter276887b2007-03-12 16:11:39 +0000355{
356 PyInterpreterState *interp = PyThreadState_Get()->interp;
Neal Norwitz75c7c802007-03-13 05:31:38 +0000357 if (interp->modules_reloading != NULL)
358 PyDict_Clear(interp->modules_reloading);
Collin Winter276887b2007-03-12 16:11:39 +0000359}
360
Guido van Rossum25ce5661997-08-02 03:10:38 +0000361/* Helper for sys */
362
363PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000364PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000365{
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000366 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000367 if (interp->modules == NULL)
368 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
369 return interp->modules;
370}
371
Guido van Rossum3f5da241990-12-20 15:06:42 +0000372
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000373/* List of names to clear in sys */
374static char* sys_deletes[] = {
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000375 "path", "argv", "ps1", "ps2", "exitfunc",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000376 "exc_type", "exc_value", "exc_traceback",
377 "last_type", "last_value", "last_traceback",
Just van Rossum52e14d62002-12-30 22:08:05 +0000378 "path_hooks", "path_importer_cache", "meta_path",
Christian Heimes0d924432008-01-30 17:21:22 +0000379 /* misc stuff */
380 "flags", "float_info",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000381 NULL
382};
383
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000384static char* sys_files[] = {
385 "stdin", "__stdin__",
386 "stdout", "__stdout__",
387 "stderr", "__stderr__",
388 NULL
389};
390
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000391
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000392/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000393
Guido van Rossum3f5da241990-12-20 15:06:42 +0000394void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000395PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000396{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000397 Py_ssize_t pos, ndone;
Guido van Rossum758eec01998-01-19 21:58:26 +0000398 char *name;
399 PyObject *key, *value, *dict;
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000400 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000401 PyObject *modules = interp->modules;
402
403 if (modules == NULL)
404 return; /* Already done */
405
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000406 /* Delete some special variables first. These are common
407 places where user values hide and people complain when their
408 destructors fail. Since the modules containing them are
409 deleted *last* of all, they would come too late in the normal
410 destruction order. Sigh. */
411
412 value = PyDict_GetItemString(modules, "__builtin__");
413 if (value != NULL && PyModule_Check(value)) {
414 dict = PyModule_GetDict(value);
415 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000416 PySys_WriteStderr("# clear __builtin__._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000417 PyDict_SetItemString(dict, "_", Py_None);
418 }
419 value = PyDict_GetItemString(modules, "sys");
420 if (value != NULL && PyModule_Check(value)) {
421 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000422 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000423 dict = PyModule_GetDict(value);
424 for (p = sys_deletes; *p != NULL; p++) {
425 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000426 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000427 PyDict_SetItemString(dict, *p, Py_None);
428 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000429 for (p = sys_files; *p != NULL; p+=2) {
430 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000431 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000432 v = PyDict_GetItemString(dict, *(p+1));
433 if (v == NULL)
434 v = Py_None;
435 PyDict_SetItemString(dict, *p, v);
436 }
437 }
438
439 /* First, delete __main__ */
440 value = PyDict_GetItemString(modules, "__main__");
441 if (value != NULL && PyModule_Check(value)) {
442 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000443 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000444 _PyModule_Clear(value);
445 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000446 }
447
Guido van Rossum758eec01998-01-19 21:58:26 +0000448 /* The special treatment of __builtin__ here is because even
449 when it's not referenced as a module, its dictionary is
450 referenced by almost every module's __builtins__. Since
451 deleting a module clears its dictionary (even if there are
452 references left to it), we need to delete the __builtin__
453 module last. Likewise, we don't delete sys until the very
454 end because it is implicitly referenced (e.g. by print).
455
456 Also note that we 'delete' modules by replacing their entry
457 in the modules dict with None, rather than really deleting
458 them; this avoids a rehash of the modules dictionary and
459 also marks them as "non existent" so they won't be
460 re-imported. */
461
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000462 /* Next, repeatedly delete modules with a reference count of
Guido van Rossum758eec01998-01-19 21:58:26 +0000463 one (skipping __builtin__ and sys) and delete them */
464 do {
465 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000466 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000467 while (PyDict_Next(modules, &pos, &key, &value)) {
468 if (value->ob_refcnt != 1)
469 continue;
Guido van Rossum566373e1998-10-01 15:24:50 +0000470 if (PyString_Check(key) && PyModule_Check(value)) {
471 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000472 if (strcmp(name, "__builtin__") == 0)
473 continue;
474 if (strcmp(name, "sys") == 0)
475 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000476 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000477 PySys_WriteStderr(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000478 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000479 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000480 PyDict_SetItem(modules, key, Py_None);
481 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000482 }
483 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000484 } while (ndone > 0);
485
Guido van Rossum758eec01998-01-19 21:58:26 +0000486 /* Next, delete all modules (still skipping __builtin__ and sys) */
487 pos = 0;
488 while (PyDict_Next(modules, &pos, &key, &value)) {
Guido van Rossum566373e1998-10-01 15:24:50 +0000489 if (PyString_Check(key) && PyModule_Check(value)) {
490 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000491 if (strcmp(name, "__builtin__") == 0)
492 continue;
493 if (strcmp(name, "sys") == 0)
494 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000495 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000496 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000497 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000498 PyDict_SetItem(modules, key, Py_None);
499 }
500 }
501
502 /* Next, delete sys and __builtin__ (in that order) */
503 value = PyDict_GetItemString(modules, "sys");
504 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000505 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000506 PySys_WriteStderr("# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000507 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000508 PyDict_SetItemString(modules, "sys", Py_None);
509 }
510 value = PyDict_GetItemString(modules, "__builtin__");
511 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000512 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000513 PySys_WriteStderr("# cleanup __builtin__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000514 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000515 PyDict_SetItemString(modules, "__builtin__", Py_None);
516 }
517
518 /* Finally, clear and delete the modules directory */
519 PyDict_Clear(modules);
520 interp->modules = NULL;
521 Py_DECREF(modules);
Collin Winter276887b2007-03-12 16:11:39 +0000522 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000523}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000524
525
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000526/* Helper for pythonrun.c -- return magic number */
527
528long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000529PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000530{
Guido van Rossum96774c12000-05-01 20:19:08 +0000531 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000532}
533
534
Guido van Rossum25ce5661997-08-02 03:10:38 +0000535/* Magic for extension modules (built-in as well as dynamically
536 loaded). To prevent initializing an extension module more than
537 once, we keep a static dictionary 'extensions' keyed by module name
538 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000539 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000540 dictionary is stored by calling _PyImport_FixupExtension()
541 immediately after the module initialization function succeeds. A
542 copy can be retrieved from there by calling
543 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000544
Guido van Rossum79f25d91997-04-29 20:08:16 +0000545PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000546_PyImport_FixupExtension(char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000547{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000548 PyObject *modules, *mod, *dict, *copy;
549 if (extensions == NULL) {
550 extensions = PyDict_New();
551 if (extensions == NULL)
552 return NULL;
553 }
554 modules = PyImport_GetModuleDict();
555 mod = PyDict_GetItemString(modules, name);
556 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000557 PyErr_Format(PyExc_SystemError,
558 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000559 return NULL;
560 }
561 dict = PyModule_GetDict(mod);
562 if (dict == NULL)
563 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000564 copy = PyDict_Copy(dict);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000565 if (copy == NULL)
566 return NULL;
567 PyDict_SetItemString(extensions, filename, copy);
568 Py_DECREF(copy);
569 return copy;
570}
571
572PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000573_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000574{
Fred Drake9cd0efc2001-10-25 21:38:59 +0000575 PyObject *dict, *mod, *mdict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000576 if (extensions == NULL)
577 return NULL;
578 dict = PyDict_GetItemString(extensions, filename);
579 if (dict == NULL)
580 return NULL;
581 mod = PyImport_AddModule(name);
582 if (mod == NULL)
583 return NULL;
584 mdict = PyModule_GetDict(mod);
585 if (mdict == NULL)
586 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000587 if (PyDict_Update(mdict, dict))
Guido van Rossum25ce5661997-08-02 03:10:38 +0000588 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000589 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000590 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Guido van Rossum25ce5661997-08-02 03:10:38 +0000591 name, filename);
592 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000593}
594
595
596/* Get the module object corresponding to a module name.
597 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000598 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000599 Because the former action is most common, THIS DOES NOT RETURN A
600 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000601
Guido van Rossum79f25d91997-04-29 20:08:16 +0000602PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000603PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000604{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000605 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000606 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000607
Guido van Rossum25ce5661997-08-02 03:10:38 +0000608 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000609 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000610 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000611 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000612 if (m == NULL)
613 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000614 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000615 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000616 return NULL;
617 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000618 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000619
620 return m;
621}
622
Tim Peters1cd70172004-08-02 03:52:12 +0000623/* Remove name from sys.modules, if it's there. */
624static void
625_RemoveModule(const char *name)
626{
627 PyObject *modules = PyImport_GetModuleDict();
628 if (PyDict_GetItemString(modules, name) == NULL)
629 return;
630 if (PyDict_DelItemString(modules, name) < 0)
631 Py_FatalError("import: deleting existing key in"
632 "sys.modules failed");
633}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000634
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000635/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000636 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
637 * removed from sys.modules, to avoid leaving damaged module objects
638 * in sys.modules. The caller may wish to restore the original
639 * module object (if any) in this case; PyImport_ReloadModule is an
640 * example.
641 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000642PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000643PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000644{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000645 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
646}
647
648PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000649PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000650{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000651 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000652 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000653
Guido van Rossum79f25d91997-04-29 20:08:16 +0000654 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000655 if (m == NULL)
656 return NULL;
Jeremy Hyltonecd91292004-01-02 23:25:32 +0000657 /* If the module is being reloaded, we get the old module back
658 and re-use its dict to exec the new code. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000659 d = PyModule_GetDict(m);
660 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
661 if (PyDict_SetItemString(d, "__builtins__",
662 PyEval_GetBuiltins()) != 0)
Tim Peters1cd70172004-08-02 03:52:12 +0000663 goto error;
Guido van Rossum6135a871995-01-09 17:53:26 +0000664 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000665 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000666 v = NULL;
667 if (pathname != NULL) {
668 v = PyString_FromString(pathname);
669 if (v == NULL)
670 PyErr_Clear();
671 }
672 if (v == NULL) {
673 v = ((PyCodeObject *)co)->co_filename;
674 Py_INCREF(v);
675 }
676 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000677 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000678 Py_DECREF(v);
679
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000680 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000681 if (v == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000682 goto error;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000683 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000684
Guido van Rossum25ce5661997-08-02 03:10:38 +0000685 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000686 PyErr_Format(PyExc_ImportError,
687 "Loaded module %.200s not found in sys.modules",
688 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000689 return NULL;
690 }
691
Guido van Rossum79f25d91997-04-29 20:08:16 +0000692 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000693
694 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000695
696 error:
697 _RemoveModule(name);
698 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000699}
700
701
702/* Given a pathname for a Python source file, fill a buffer with the
703 pathname for the corresponding compiled file. Return the pathname
704 for the compiled file, or NULL if there's no space in the buffer.
705 Doesn't set an exception. */
706
707static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000708make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000709{
Tim Petersc1731372001-08-04 08:12:36 +0000710 size_t len = strlen(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000711 if (len+2 > buflen)
712 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000713
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000714#ifdef MS_WINDOWS
Tim Petersc1731372001-08-04 08:12:36 +0000715 /* Treat .pyw as if it were .py. The case of ".pyw" must match
716 that used in _PyImport_StandardFiletab. */
717 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
718 --len; /* pretend 'w' isn't there */
719#endif
720 memcpy(buf, pathname, len);
721 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
722 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000723
724 return buf;
725}
726
727
728/* Given a pathname for a Python source file, its time of last
729 modification, and a pathname for a compiled file, check whether the
730 compiled file represents the same version of the source. If so,
731 return a FILE pointer for the compiled file, positioned just after
732 the header; if not, return NULL.
733 Doesn't set an exception. */
734
735static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000736check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000737{
738 FILE *fp;
739 long magic;
740 long pyc_mtime;
741
742 fp = fopen(cpathname, "rb");
743 if (fp == NULL)
744 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000745 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000746 if (magic != pyc_magic) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000747 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000748 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000749 fclose(fp);
750 return NULL;
751 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000752 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000753 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000754 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000755 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000756 fclose(fp);
757 return NULL;
758 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000759 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000760 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000761 return fp;
762}
763
764
765/* Read a code object from a file and check it for validity */
766
Guido van Rossum79f25d91997-04-29 20:08:16 +0000767static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000768read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000769{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000770 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000771
Tim Petersd9b9ac82001-01-28 00:27:39 +0000772 co = PyMarshal_ReadLastObjectFromFile(fp);
Armin Rigo01ab2792004-03-26 15:09:27 +0000773 if (co == NULL)
774 return NULL;
775 if (!PyCode_Check(co)) {
776 PyErr_Format(PyExc_ImportError,
777 "Non-code object in %.200s", cpathname);
778 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000779 return NULL;
780 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000781 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000782}
783
784
785/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000786 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000787
Guido van Rossum79f25d91997-04-29 20:08:16 +0000788static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000789load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000790{
791 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000792 PyCodeObject *co;
793 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000794
Guido van Rossum79f25d91997-04-29 20:08:16 +0000795 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000796 if (magic != pyc_magic) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000797 PyErr_Format(PyExc_ImportError,
798 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000799 return NULL;
800 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000801 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000802 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000803 if (co == NULL)
804 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000805 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000806 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000807 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000808 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000809 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000810
811 return m;
812}
813
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000814/* Parse a source file and return the corresponding code object */
815
Guido van Rossum79f25d91997-04-29 20:08:16 +0000816static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000817parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000818{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000819 PyCodeObject *co = NULL;
820 mod_ty mod;
Christian Heimes3c608332008-03-26 22:01:37 +0000821 PyCompilerFlags flags;
Neal Norwitz2a399b02006-09-11 04:28:16 +0000822 PyArena *arena = PyArena_New();
823 if (arena == NULL)
824 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000825
Christian Heimes3c608332008-03-26 22:01:37 +0000826 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, &flags,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000827 NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000828 if (mod) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000829 co = PyAST_Compile(mod, pathname, NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000830 }
Neal Norwitz2a399b02006-09-11 04:28:16 +0000831 PyArena_Free(arena);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000832 return co;
833}
834
835
Guido van Rossum55a83382000-09-20 20:31:38 +0000836/* Helper to open a bytecode file for writing in exclusive mode */
837
838static FILE *
Christian Heimes40346852008-02-23 17:52:07 +0000839open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +0000840{
841#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
842 /* Use O_EXCL to avoid a race condition when another process tries to
843 write the same file. When that happens, our open() call fails,
844 which is just fine (since it's only a cache).
845 XXX If the file exists and is writable but the directory is not
846 writable, the file will never be written. Oh well.
847 */
848 int fd;
849 (void) unlink(filename);
Tim Peters42c83af2000-09-29 04:03:10 +0000850 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
851#ifdef O_BINARY
852 |O_BINARY /* necessary for Windows */
853#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000854#ifdef __VMS
Christian Heimes40346852008-02-23 17:52:07 +0000855 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000856#else
Christian Heimes40346852008-02-23 17:52:07 +0000857 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000858#endif
Martin v. Löwis18e16552006-02-15 17:27:45 +0000859 );
Guido van Rossum55a83382000-09-20 20:31:38 +0000860 if (fd < 0)
861 return NULL;
862 return fdopen(fd, "wb");
863#else
864 /* Best we can do -- on Windows this can't happen anyway */
865 return fopen(filename, "wb");
866#endif
867}
868
869
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000870/* Write a compiled module to a file, placing the time of last
871 modification of its source into the header.
872 Errors are ignored, if a write error occurs an attempt is made to
873 remove the file. */
874
875static void
Christian Heimes40346852008-02-23 17:52:07 +0000876write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000877{
878 FILE *fp;
Christian Heimes40346852008-02-23 17:52:07 +0000879 time_t mtime = srcstat->st_mtime;
880 mode_t mode = srcstat->st_mode;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000881
Christian Heimes40346852008-02-23 17:52:07 +0000882 fp = open_exclusive(cpathname, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000883 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000884 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000885 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000886 "# can't create %s\n", cpathname);
887 return;
888 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000889 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000890 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000891 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
892 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000893 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000894 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000895 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000896 /* Don't keep partial file */
897 fclose(fp);
898 (void) unlink(cpathname);
899 return;
900 }
901 /* Now write the true mtime */
902 fseek(fp, 4L, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000903 assert(mtime < LONG_MAX);
Martin v. Löwis725507b2006-03-07 12:08:51 +0000904 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000905 fflush(fp);
906 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000908 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000909}
910
911
912/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000913 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
914 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000915
Guido van Rossum79f25d91997-04-29 20:08:16 +0000916static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000917load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000918{
Christian Heimes40346852008-02-23 17:52:07 +0000919 struct stat st;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000920 FILE *fpc;
921 char buf[MAXPATHLEN+1];
922 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923 PyCodeObject *co;
924 PyObject *m;
Christian Heimes40346852008-02-23 17:52:07 +0000925
926 if (fstat(fileno(fp), &st) != 0) {
Neal Norwitz708e51a2005-10-03 04:48:15 +0000927 PyErr_Format(PyExc_RuntimeError,
Christian Heimes40346852008-02-23 17:52:07 +0000928 "unable to get file status from '%s'",
Neal Norwitz708e51a2005-10-03 04:48:15 +0000929 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +0000930 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +0000931 }
Fred Drake4c82b232000-06-30 16:18:57 +0000932#if SIZEOF_TIME_T > 4
933 /* Python's .pyc timestamp handling presumes that the timestamp fits
934 in 4 bytes. This will be fine until sometime in the year 2038,
935 when a 4-byte signed time_t will overflow.
936 */
Christian Heimes40346852008-02-23 17:52:07 +0000937 if (st.st_mtime >> 32) {
Fred Drake4c82b232000-06-30 16:18:57 +0000938 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +0000939 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +0000940 return NULL;
941 }
942#endif
Tim Peters36515e22001-11-18 04:06:29 +0000943 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +0000944 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000945 if (cpathname != NULL &&
Christian Heimes40346852008-02-23 17:52:07 +0000946 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000947 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000948 fclose(fpc);
949 if (co == NULL)
950 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000951 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000952 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000953 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000954 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000955 }
956 else {
957 co = parse_source_module(pathname, fp);
958 if (co == NULL)
959 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000960 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000961 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000962 name, pathname);
Georg Brandl2da0fce2008-01-07 17:09:35 +0000963 if (cpathname) {
964 PyObject *ro = PySys_GetObject("dont_write_bytecode");
965 if (ro == NULL || !PyObject_IsTrue(ro))
Christian Heimes40346852008-02-23 17:52:07 +0000966 write_compiled_module(co, cpathname, &st);
Georg Brandl2da0fce2008-01-07 17:09:35 +0000967 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000968 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000969 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000970 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000971
972 return m;
973}
974
975
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000976/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +0000977static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
978static struct filedescr *find_module(char *, char *, PyObject *,
979 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +0000980static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000981
982/* Load a package and return its module object WITH INCREMENTED
983 REFERENCE COUNT */
984
985static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000986load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000987{
Tim Peters1cd70172004-08-02 03:52:12 +0000988 PyObject *m, *d;
989 PyObject *file = NULL;
990 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000991 int err;
992 char buf[MAXPATHLEN+1];
993 FILE *fp = NULL;
994 struct filedescr *fdp;
995
996 m = PyImport_AddModule(name);
997 if (m == NULL)
998 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000999 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001000 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001001 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001002 d = PyModule_GetDict(m);
1003 file = PyString_FromString(pathname);
1004 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +00001005 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001006 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +00001007 if (path == NULL)
1008 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001009 err = PyDict_SetItemString(d, "__file__", file);
1010 if (err == 0)
1011 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +00001012 if (err != 0)
1013 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001014 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00001015 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001016 if (fdp == NULL) {
1017 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1018 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +00001019 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001020 }
1021 else
1022 m = NULL;
1023 goto cleanup;
1024 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001025 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001026 if (fp != NULL)
1027 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00001028 goto cleanup;
1029
1030 error:
1031 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001032 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001033 Py_XDECREF(path);
1034 Py_XDECREF(file);
1035 return m;
1036}
1037
1038
1039/* Helper to test for built-in module */
1040
1041static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001042is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001043{
1044 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +00001045 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1046 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1047 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001048 return -1;
1049 else
1050 return 1;
1051 }
1052 }
1053 return 0;
1054}
1055
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001056
Just van Rossum52e14d62002-12-30 22:08:05 +00001057/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1058 possibly by fetching it from the path_importer_cache dict. If it
Brett Cannon94b69f62006-09-28 22:10:14 +00001059 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001060 that can handle the path item. Return None if no hook could;
1061 this tells our caller it should fall back to the builtin
1062 import mechanism. Cache the result in path_importer_cache.
1063 Returns a borrowed reference. */
1064
1065static PyObject *
1066get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1067 PyObject *p)
1068{
1069 PyObject *importer;
Martin v. Löwis725507b2006-03-07 12:08:51 +00001070 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001071
1072 /* These conditions are the caller's responsibility: */
1073 assert(PyList_Check(path_hooks));
1074 assert(PyDict_Check(path_importer_cache));
1075
1076 nhooks = PyList_Size(path_hooks);
1077 if (nhooks < 0)
1078 return NULL; /* Shouldn't happen */
1079
1080 importer = PyDict_GetItem(path_importer_cache, p);
1081 if (importer != NULL)
1082 return importer;
1083
1084 /* set path_importer_cache[p] to None to avoid recursion */
1085 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1086 return NULL;
1087
1088 for (j = 0; j < nhooks; j++) {
1089 PyObject *hook = PyList_GetItem(path_hooks, j);
1090 if (hook == NULL)
1091 return NULL;
Georg Brandl684fd0c2006-05-25 19:15:31 +00001092 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
Just van Rossum52e14d62002-12-30 22:08:05 +00001093 if (importer != NULL)
1094 break;
1095
1096 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1097 return NULL;
1098 }
1099 PyErr_Clear();
1100 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001101 if (importer == NULL) {
1102 importer = PyObject_CallFunctionObjArgs(
Nick Coghlan327a39b2007-11-18 11:56:28 +00001103 (PyObject *)&PyNullImporter_Type, p, NULL
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001104 );
1105 if (importer == NULL) {
1106 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1107 PyErr_Clear();
1108 return Py_None;
1109 }
1110 }
1111 }
1112 if (importer != NULL) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001113 int err = PyDict_SetItem(path_importer_cache, p, importer);
1114 Py_DECREF(importer);
1115 if (err != 0)
1116 return NULL;
1117 }
1118 return importer;
1119}
1120
Nick Coghlan327a39b2007-11-18 11:56:28 +00001121PyAPI_FUNC(PyObject *)
1122PyImport_GetImporter(PyObject *path) {
1123 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
1124
1125 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1126 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1127 importer = get_path_importer(path_importer_cache,
1128 path_hooks, path);
1129 }
1130 }
1131 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1132 return importer;
1133}
1134
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001135/* Search the path (default sys.path) for a module. Return the
1136 corresponding filedescr struct, and (via return arguments) the
1137 pathname and an open file. Return NULL if the module is not found. */
1138
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001139#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001140extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001141 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001142#endif
1143
Martin v. Löwis18e16552006-02-15 17:27:45 +00001144static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001145static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001146static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001147
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001148static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001149find_module(char *fullname, char *subname, PyObject *path, char *buf,
1150 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001151{
Martin v. Löwis725507b2006-03-07 12:08:51 +00001152 Py_ssize_t i, npath;
Fred Drake4c82b232000-06-30 16:18:57 +00001153 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001154 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001155 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001156 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001157 PyObject *path_hooks, *path_importer_cache;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001158#ifndef RISCOS
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001159 struct stat statbuf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001160#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001161 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1162 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1163 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001164 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001165#if defined(PYOS_OS2)
1166 size_t saved_len;
1167 size_t saved_namelen;
1168 char *saved_buf = NULL;
1169#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001170 if (p_loader != NULL)
1171 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001172
Just van Rossum52e14d62002-12-30 22:08:05 +00001173 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001174 PyErr_SetString(PyExc_OverflowError,
1175 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001176 return NULL;
1177 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001178 strcpy(name, subname);
1179
1180 /* sys.meta_path import hook */
1181 if (p_loader != NULL) {
1182 PyObject *meta_path;
1183
1184 meta_path = PySys_GetObject("meta_path");
1185 if (meta_path == NULL || !PyList_Check(meta_path)) {
1186 PyErr_SetString(PyExc_ImportError,
1187 "sys.meta_path must be a list of "
1188 "import hooks");
1189 return NULL;
1190 }
1191 Py_INCREF(meta_path); /* zap guard */
1192 npath = PyList_Size(meta_path);
1193 for (i = 0; i < npath; i++) {
1194 PyObject *loader;
1195 PyObject *hook = PyList_GetItem(meta_path, i);
1196 loader = PyObject_CallMethod(hook, "find_module",
1197 "sO", fullname,
1198 path != NULL ?
1199 path : Py_None);
1200 if (loader == NULL) {
1201 Py_DECREF(meta_path);
1202 return NULL; /* true error */
1203 }
1204 if (loader != Py_None) {
1205 /* a loader was found */
1206 *p_loader = loader;
1207 Py_DECREF(meta_path);
1208 return &importhookdescr;
1209 }
1210 Py_DECREF(loader);
1211 }
1212 Py_DECREF(meta_path);
1213 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001214
1215 if (path != NULL && PyString_Check(path)) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001216 /* The only type of submodule allowed inside a "frozen"
1217 package are other frozen modules or packages. */
Guido van Rossum0506a431998-08-11 15:07:39 +00001218 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1219 PyErr_SetString(PyExc_ImportError,
1220 "full frozen module name too long");
1221 return NULL;
1222 }
1223 strcpy(buf, PyString_AsString(path));
1224 strcat(buf, ".");
1225 strcat(buf, name);
1226 strcpy(name, buf);
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001227 if (find_frozen(name) != NULL) {
1228 strcpy(buf, name);
1229 return &fd_frozen;
1230 }
1231 PyErr_Format(PyExc_ImportError,
1232 "No frozen submodule named %.200s", name);
1233 return NULL;
Guido van Rossum0506a431998-08-11 15:07:39 +00001234 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001235 if (path == NULL) {
1236 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001237 strcpy(buf, name);
1238 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001239 }
Greg Ward201baee2001-10-04 14:52:06 +00001240 if ((find_frozen(name)) != NULL) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001241 strcpy(buf, name);
1242 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001243 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001244
Guido van Rossumac279101996-08-22 23:10:58 +00001245#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001246 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1247 if (fp != NULL) {
1248 *p_fp = fp;
1249 return fdp;
1250 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001251#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001252 path = PySys_GetObject("path");
1253 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001254 if (path == NULL || !PyList_Check(path)) {
1255 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001256 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001257 return NULL;
1258 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001259
1260 path_hooks = PySys_GetObject("path_hooks");
1261 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1262 PyErr_SetString(PyExc_ImportError,
1263 "sys.path_hooks must be a list of "
1264 "import hooks");
1265 return NULL;
1266 }
1267 path_importer_cache = PySys_GetObject("path_importer_cache");
1268 if (path_importer_cache == NULL ||
1269 !PyDict_Check(path_importer_cache)) {
1270 PyErr_SetString(PyExc_ImportError,
1271 "sys.path_importer_cache must be a dict");
1272 return NULL;
1273 }
1274
Guido van Rossum79f25d91997-04-29 20:08:16 +00001275 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001276 namelen = strlen(name);
1277 for (i = 0; i < npath; i++) {
Walter Dörwald3430d702002-06-17 10:43:59 +00001278 PyObject *copy = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001279 PyObject *v = PyList_GetItem(path, i);
Neal Norwitz3cb31ac2006-08-13 18:10:47 +00001280 if (!v)
1281 return NULL;
Walter Dörwald3430d702002-06-17 10:43:59 +00001282#ifdef Py_USING_UNICODE
1283 if (PyUnicode_Check(v)) {
1284 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1285 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1286 if (copy == NULL)
1287 return NULL;
1288 v = copy;
1289 }
1290 else
1291#endif
Guido van Rossum79f25d91997-04-29 20:08:16 +00001292 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001293 continue;
Neal Norwitz2aa9a5d2006-03-20 01:53:23 +00001294 len = PyString_GET_SIZE(v);
Walter Dörwald3430d702002-06-17 10:43:59 +00001295 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1296 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001297 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001298 }
Neal Norwitz2aa9a5d2006-03-20 01:53:23 +00001299 strcpy(buf, PyString_AS_STRING(v));
Walter Dörwald3430d702002-06-17 10:43:59 +00001300 if (strlen(buf) != len) {
1301 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001302 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001303 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001304
1305 /* sys.path_hooks import hook */
1306 if (p_loader != NULL) {
1307 PyObject *importer;
1308
1309 importer = get_path_importer(path_importer_cache,
1310 path_hooks, v);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001311 if (importer == NULL) {
1312 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001313 return NULL;
Neal Norwitza4df11d2006-07-06 04:28:59 +00001314 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001315 /* Note: importer is a borrowed reference */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001316 if (importer != Py_None) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001317 PyObject *loader;
1318 loader = PyObject_CallMethod(importer,
1319 "find_module",
1320 "s", fullname);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001321 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001322 if (loader == NULL)
1323 return NULL; /* error */
1324 if (loader != Py_None) {
1325 /* a loader was found */
1326 *p_loader = loader;
1327 return &importhookdescr;
1328 }
1329 Py_DECREF(loader);
Georg Brandlf4ef1162006-05-26 18:03:31 +00001330 continue;
Just van Rossum52e14d62002-12-30 22:08:05 +00001331 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001332 }
Georg Brandlf4ef1162006-05-26 18:03:31 +00001333 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001334
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001335 if (len > 0 && buf[len-1] != SEP
1336#ifdef ALTSEP
1337 && buf[len-1] != ALTSEP
1338#endif
1339 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001340 buf[len++] = SEP;
Guido van Rossum215c3402000-11-13 17:26:32 +00001341 strcpy(buf+len, name);
1342 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001343
1344 /* Check for package import (buf holds a directory name,
1345 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001346#ifdef HAVE_STAT
Walter Dörwald3430d702002-06-17 10:43:59 +00001347 if (stat(buf, &statbuf) == 0 && /* it exists */
1348 S_ISDIR(statbuf.st_mode) && /* it's a directory */
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001349 case_ok(buf, len, namelen, name)) { /* case matches */
1350 if (find_init_module(buf)) { /* and has __init__.py */
1351 Py_XDECREF(copy);
1352 return &fd_package;
1353 }
1354 else {
1355 char warnstr[MAXPATHLEN+80];
1356 sprintf(warnstr, "Not importing directory "
1357 "'%.*s': missing __init__.py",
1358 MAXPATHLEN, buf);
1359 if (PyErr_Warn(PyExc_ImportWarning,
1360 warnstr)) {
1361 Py_XDECREF(copy);
1362 return NULL;
1363 }
1364 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001365 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001366#else
1367 /* XXX How are you going to test for directories? */
Guido van Rossum48a680c2001-03-02 06:34:14 +00001368#ifdef RISCOS
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001369 if (isdir(buf) &&
Walter Dörwald3430d702002-06-17 10:43:59 +00001370 case_ok(buf, len, namelen, name)) {
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001371 if (find_init_module(buf)) {
1372 Py_XDECREF(copy);
1373 return &fd_package;
1374 }
1375 else {
1376 char warnstr[MAXPATHLEN+80];
1377 sprintf(warnstr, "Not importing directory "
1378 "'%.*s': missing __init__.py",
1379 MAXPATHLEN, buf);
1380 if (PyErr_Warn(PyExc_ImportWarning,
1381 warnstr)) {
1382 Py_XDECREF(copy);
1383 return NULL;
1384 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001385 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001386#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001387#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001388#if defined(PYOS_OS2)
1389 /* take a snapshot of the module spec for restoration
1390 * after the 8 character DLL hackery
1391 */
1392 saved_buf = strdup(buf);
1393 saved_len = len;
1394 saved_namelen = namelen;
1395#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001396 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Georg Brandladd36e52007-08-23 18:08:06 +00001397#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001398 /* OS/2 limits DLLs to 8 character names (w/o
1399 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001400 * so if the name is longer than that and its a
1401 * dynamically loaded module we're going to try,
1402 * truncate the name before trying
1403 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001404 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001405 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001406 const struct filedescr *scan;
1407 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001408 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001409 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001410 break;
1411 else
1412 scan++;
1413 }
1414 if (scan->suffix != NULL) {
1415 /* yes, so truncate the name */
1416 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001417 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001418 buf[len] = '\0';
1419 }
1420 }
1421#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001422 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001423 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001424 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001425 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001426 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001427 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001428 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001429 if (fp != NULL) {
1430 if (case_ok(buf, len, namelen, name))
1431 break;
1432 else { /* continue search */
1433 fclose(fp);
1434 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001435 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001436 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001437#if defined(PYOS_OS2)
1438 /* restore the saved snapshot */
1439 strcpy(buf, saved_buf);
1440 len = saved_len;
1441 namelen = saved_namelen;
1442#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001443 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001444#if defined(PYOS_OS2)
1445 /* don't need/want the module name snapshot anymore */
1446 if (saved_buf)
1447 {
1448 free(saved_buf);
1449 saved_buf = NULL;
1450 }
1451#endif
Walter Dörwald3430d702002-06-17 10:43:59 +00001452 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001453 if (fp != NULL)
1454 break;
1455 }
1456 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001457 PyErr_Format(PyExc_ImportError,
1458 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001459 return NULL;
1460 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001461 *p_fp = fp;
1462 return fdp;
1463}
1464
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001465/* Helpers for main.c
1466 * Find the source file corresponding to a named module
1467 */
1468struct filedescr *
1469_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1470 size_t buflen, FILE **p_fp, PyObject **p_loader)
1471{
1472 return find_module((char *) name, (char *) name, path,
1473 buf, buflen, p_fp, p_loader);
1474}
1475
1476PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1477{
1478 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1479}
1480
Martin v. Löwis18e16552006-02-15 17:27:45 +00001481/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001482 * The arguments here are tricky, best shown by example:
1483 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1484 * ^ ^ ^ ^
1485 * |--------------------- buf ---------------------|
1486 * |------------------- len ------------------|
1487 * |------ name -------|
1488 * |----- namelen -----|
1489 * buf is the full path, but len only counts up to (& exclusive of) the
1490 * extension. name is the module name, also exclusive of extension.
1491 *
1492 * We've already done a successful stat() or fopen() on buf, so know that
1493 * there's some match, possibly case-insensitive.
1494 *
Tim Peters50d8d372001-02-28 05:34:27 +00001495 * case_ok() is to return 1 if there's a case-sensitive match for
1496 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1497 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001498 *
Tim Peters50d8d372001-02-28 05:34:27 +00001499 * case_ok() is used to implement case-sensitive import semantics even
1500 * on platforms with case-insensitive filesystems. It's trivial to implement
1501 * for case-sensitive filesystems. It's pretty much a cross-platform
1502 * nightmare for systems with case-insensitive filesystems.
1503 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001504
Tim Peters50d8d372001-02-28 05:34:27 +00001505/* First we may need a pile of platform-specific header files; the sequence
1506 * of #if's here should match the sequence in the body of case_ok().
1507 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001508#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001509#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001510
Tim Peters50d8d372001-02-28 05:34:27 +00001511#elif defined(DJGPP)
1512#include <dir.h>
1513
Jason Tishler7961aa62005-05-20 00:56:54 +00001514#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001515#include <sys/types.h>
1516#include <dirent.h>
1517
Andrew MacIntyred9400542002-02-26 11:41:34 +00001518#elif defined(PYOS_OS2)
1519#define INCL_DOS
1520#define INCL_DOSERRORS
1521#define INCL_NOPMAPI
1522#include <os2.h>
1523
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001524#elif defined(RISCOS)
1525#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001526#endif
1527
Guido van Rossum0980bd91998-02-13 17:18:36 +00001528static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001529case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001530{
Tim Peters50d8d372001-02-28 05:34:27 +00001531/* Pick a platform-specific implementation; the sequence of #if's here should
1532 * match the sequence just above.
1533 */
1534
Jason Tishler7961aa62005-05-20 00:56:54 +00001535/* MS_WINDOWS */
1536#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001537 WIN32_FIND_DATA data;
1538 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001539
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001540 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001541 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001542
Guido van Rossum0980bd91998-02-13 17:18:36 +00001543 h = FindFirstFile(buf, &data);
1544 if (h == INVALID_HANDLE_VALUE) {
1545 PyErr_Format(PyExc_NameError,
1546 "Can't find file for module %.100s\n(filename %.300s)",
1547 name, buf);
1548 return 0;
1549 }
1550 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001551 return strncmp(data.cFileName, name, namelen) == 0;
1552
1553/* DJGPP */
1554#elif defined(DJGPP)
1555 struct ffblk ffblk;
1556 int done;
1557
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001558 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001559 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001560
1561 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1562 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001563 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001564 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001565 name, buf);
1566 return 0;
1567 }
Tim Peters50d8d372001-02-28 05:34:27 +00001568 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001569
Jason Tishler7961aa62005-05-20 00:56:54 +00001570/* new-fangled macintosh (macosx) or Cygwin */
1571#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001572 DIR *dirp;
1573 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001574 char dirname[MAXPATHLEN + 1];
1575 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001576
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001577 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001578 return 1;
1579
Tim Petersd1e87a82001-03-01 18:12:00 +00001580 /* Copy the dir component into dirname; substitute "." if empty */
1581 if (dirlen <= 0) {
1582 dirname[0] = '.';
1583 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001584 }
1585 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001586 assert(dirlen <= MAXPATHLEN);
1587 memcpy(dirname, buf, dirlen);
1588 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001589 }
1590 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001591 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001592 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001593 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001594 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001595 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001596#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001597 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001598#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001599 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001600#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001601 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001602 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001603 (void)closedir(dirp);
1604 return 1; /* Found */
1605 }
1606 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001607 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001608 }
Tim Peters430f5d42001-03-01 01:30:56 +00001609 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001610
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001611/* RISC OS */
1612#elif defined(RISCOS)
1613 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1614 char buf2[MAXPATHLEN+2];
1615 char *nameWithExt = buf+len-namelen;
1616 int canonlen;
1617 os_error *e;
1618
1619 if (Py_GETENV("PYTHONCASEOK") != NULL)
1620 return 1;
1621
1622 /* workaround:
1623 append wildcard, otherwise case of filename wouldn't be touched */
1624 strcpy(buf2, buf);
1625 strcat(buf2, "*");
1626
1627 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1628 canonlen = MAXPATHLEN+1-canonlen;
1629 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1630 return 0;
1631 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1632 return 1; /* match */
1633
1634 return 0;
1635
Andrew MacIntyred9400542002-02-26 11:41:34 +00001636/* OS/2 */
1637#elif defined(PYOS_OS2)
1638 HDIR hdir = 1;
1639 ULONG srchcnt = 1;
1640 FILEFINDBUF3 ffbuf;
1641 APIRET rc;
1642
Georg Brandlaed6c662008-01-07 17:25:53 +00001643 if (Py_GETENV("PYTHONCASEOK") != NULL)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001644 return 1;
1645
1646 rc = DosFindFirst(buf,
1647 &hdir,
1648 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1649 &ffbuf, sizeof(ffbuf),
1650 &srchcnt,
1651 FIL_STANDARD);
1652 if (rc != NO_ERROR)
1653 return 0;
1654 return strncmp(ffbuf.achName, name, namelen) == 0;
1655
Tim Peters50d8d372001-02-28 05:34:27 +00001656/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1657#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001658 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001659
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001660#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001661}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001662
Guido van Rossum0980bd91998-02-13 17:18:36 +00001663
Guido van Rossum197346f1997-10-31 18:38:52 +00001664#ifdef HAVE_STAT
1665/* Helper to look for __init__.py or __init__.py[co] in potential package */
1666static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001667find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001668{
Tim Peters0f9431f2001-07-05 03:47:53 +00001669 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001670 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001671 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001672 struct stat statbuf;
1673
Tim Peters0f9431f2001-07-05 03:47:53 +00001674/* For calling case_ok(buf, len, namelen, name):
1675 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1676 * ^ ^ ^ ^
1677 * |--------------------- buf ---------------------|
1678 * |------------------- len ------------------|
1679 * |------ name -------|
1680 * |----- namelen -----|
1681 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001682 if (save_len + 13 >= MAXPATHLEN)
1683 return 0;
1684 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001685 pname = buf + i;
1686 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001687 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001688 if (case_ok(buf,
1689 save_len + 9, /* len("/__init__") */
1690 8, /* len("__init__") */
1691 pname)) {
1692 buf[save_len] = '\0';
1693 return 1;
1694 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001695 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001696 i += strlen(pname);
1697 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001698 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001699 if (case_ok(buf,
1700 save_len + 9, /* len("/__init__") */
1701 8, /* len("__init__") */
1702 pname)) {
1703 buf[save_len] = '\0';
1704 return 1;
1705 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001706 }
1707 buf[save_len] = '\0';
1708 return 0;
1709}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001710
1711#else
1712
1713#ifdef RISCOS
1714static int
1715find_init_module(buf)
1716 char *buf;
1717{
1718 int save_len = strlen(buf);
1719 int i = save_len;
1720
1721 if (save_len + 13 >= MAXPATHLEN)
1722 return 0;
1723 buf[i++] = SEP;
1724 strcpy(buf+i, "__init__/py");
1725 if (isfile(buf)) {
1726 buf[save_len] = '\0';
1727 return 1;
1728 }
1729
1730 if (Py_OptimizeFlag)
1731 strcpy(buf+i, "o");
1732 else
1733 strcpy(buf+i, "c");
1734 if (isfile(buf)) {
1735 buf[save_len] = '\0';
1736 return 1;
1737 }
1738 buf[save_len] = '\0';
1739 return 0;
1740}
1741#endif /*RISCOS*/
1742
Guido van Rossum197346f1997-10-31 18:38:52 +00001743#endif /* HAVE_STAT */
1744
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001745
Tim Petersdbd9ba62000-07-09 03:09:57 +00001746static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001747
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001748/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001749 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001750
Guido van Rossum79f25d91997-04-29 20:08:16 +00001751static PyObject *
Just van Rossum52e14d62002-12-30 22:08:05 +00001752load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001753{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001754 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001755 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001756 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001757
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001758 /* First check that there's an open file (if we need one) */
1759 switch (type) {
1760 case PY_SOURCE:
1761 case PY_COMPILED:
1762 if (fp == NULL) {
1763 PyErr_Format(PyExc_ValueError,
1764 "file object required for import (type code %d)",
1765 type);
1766 return NULL;
1767 }
1768 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001769
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001770 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001771
1772 case PY_SOURCE:
1773 m = load_source_module(name, buf, fp);
1774 break;
1775
1776 case PY_COMPILED:
1777 m = load_compiled_module(name, buf, fp);
1778 break;
1779
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001780#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001781 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001782 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001783 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001784#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001785
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001786 case PKG_DIRECTORY:
1787 m = load_package(name, buf);
1788 break;
1789
1790 case C_BUILTIN:
1791 case PY_FROZEN:
Guido van Rossuma5568d31998-03-05 03:45:08 +00001792 if (buf != NULL && buf[0] != '\0')
1793 name = buf;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001794 if (type == C_BUILTIN)
1795 err = init_builtin(name);
1796 else
1797 err = PyImport_ImportFrozenModule(name);
1798 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001799 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001800 if (err == 0) {
1801 PyErr_Format(PyExc_ImportError,
1802 "Purported %s module %.200s not found",
1803 type == C_BUILTIN ?
1804 "builtin" : "frozen",
1805 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001806 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001807 }
1808 modules = PyImport_GetModuleDict();
1809 m = PyDict_GetItemString(modules, name);
1810 if (m == NULL) {
1811 PyErr_Format(
1812 PyExc_ImportError,
1813 "%s module %.200s not properly initialized",
1814 type == C_BUILTIN ?
1815 "builtin" : "frozen",
1816 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001817 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001818 }
1819 Py_INCREF(m);
1820 break;
1821
Just van Rossum52e14d62002-12-30 22:08:05 +00001822 case IMP_HOOK: {
1823 if (loader == NULL) {
1824 PyErr_SetString(PyExc_ImportError,
1825 "import hook without loader");
1826 return NULL;
1827 }
1828 m = PyObject_CallMethod(loader, "load_module", "s", name);
1829 break;
1830 }
1831
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001832 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001833 PyErr_Format(PyExc_ImportError,
1834 "Don't know how to import %.200s (type code %d)",
1835 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001836 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001837
1838 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001839
1840 return m;
1841}
1842
1843
1844/* Initialize a built-in module.
Brett Cannon5a9aa4f2006-10-03 21:58:55 +00001845 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001846 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001847
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001848static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001849init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001850{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001851 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001852
Greg Ward201baee2001-10-04 14:52:06 +00001853 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001854 return 1;
1855
Guido van Rossum771c6c81997-10-31 18:37:24 +00001856 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001857 if (strcmp(name, p->name) == 0) {
1858 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001859 PyErr_Format(PyExc_ImportError,
1860 "Cannot re-init internal module %.200s",
1861 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001862 return -1;
1863 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001864 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001865 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001866 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001867 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001868 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001869 if (_PyImport_FixupExtension(name, name) == NULL)
1870 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001871 return 1;
1872 }
1873 }
1874 return 0;
1875}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001876
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001877
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001878/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001879
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001880static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001881find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001882{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001883 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001884
Guido van Rossum79f25d91997-04-29 20:08:16 +00001885 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001886 if (p->name == NULL)
1887 return NULL;
1888 if (strcmp(p->name, name) == 0)
1889 break;
1890 }
1891 return p;
1892}
1893
Guido van Rossum79f25d91997-04-29 20:08:16 +00001894static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001895get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001896{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001897 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001898 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001899
1900 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001901 PyErr_Format(PyExc_ImportError,
1902 "No such frozen object named %.200s",
1903 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001904 return NULL;
1905 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001906 if (p->code == NULL) {
1907 PyErr_Format(PyExc_ImportError,
1908 "Excluded frozen object named %.200s",
1909 name);
1910 return NULL;
1911 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001912 size = p->size;
1913 if (size < 0)
1914 size = -size;
1915 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001916}
1917
1918/* Initialize a frozen module.
1919 Return 1 for succes, 0 if the module is not found, and -1 with
1920 an exception set if the initialization failed.
1921 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001922
1923int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001924PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001925{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001926 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001927 PyObject *co;
1928 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001929 int ispackage;
1930 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001931
1932 if (p == NULL)
1933 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001934 if (p->code == NULL) {
1935 PyErr_Format(PyExc_ImportError,
1936 "Excluded frozen object named %.200s",
1937 name);
1938 return -1;
1939 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001940 size = p->size;
1941 ispackage = (size < 0);
1942 if (ispackage)
1943 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001944 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001945 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001946 name, ispackage ? " package" : "");
1947 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001948 if (co == NULL)
1949 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001950 if (!PyCode_Check(co)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001951 PyErr_Format(PyExc_TypeError,
1952 "frozen object %.200s is not a code object",
1953 name);
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001954 goto err_return;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001955 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001956 if (ispackage) {
1957 /* Set __path__ to the package name */
1958 PyObject *d, *s;
1959 int err;
1960 m = PyImport_AddModule(name);
1961 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001962 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001963 d = PyModule_GetDict(m);
1964 s = PyString_InternFromString(name);
1965 if (s == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001966 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001967 err = PyDict_SetItemString(d, "__path__", s);
1968 Py_DECREF(s);
1969 if (err != 0)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001970 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001971 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001972 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001973 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001974 goto err_return;
1975 Py_DECREF(co);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001976 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001977 return 1;
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001978err_return:
1979 Py_DECREF(co);
1980 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001981}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001982
1983
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001984/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001985 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001986
Guido van Rossum79f25d91997-04-29 20:08:16 +00001987PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001988PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001989{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001990 PyObject *pname;
1991 PyObject *result;
1992
1993 pname = PyString_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00001994 if (pname == NULL)
1995 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001996 result = PyImport_Import(pname);
1997 Py_DECREF(pname);
1998 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001999}
2000
Christian Heimes000a0742008-01-03 22:16:32 +00002001/* Import a module without blocking
2002 *
2003 * At first it tries to fetch the module from sys.modules. If the module was
2004 * never loaded before it loads it with PyImport_ImportModule() unless another
2005 * thread holds the import lock. In the latter case the function raises an
2006 * ImportError instead of blocking.
2007 *
2008 * Returns the module object with incremented ref count.
2009 */
2010PyObject *
2011PyImport_ImportModuleNoBlock(const char *name)
2012{
2013 PyObject *result;
2014 PyObject *modules;
2015 long me;
2016
2017 /* Try to get the module from sys.modules[name] */
2018 modules = PyImport_GetModuleDict();
2019 if (modules == NULL)
2020 return NULL;
2021
2022 result = PyDict_GetItemString(modules, name);
2023 if (result != NULL) {
2024 Py_INCREF(result);
2025 return result;
2026 }
2027 else {
2028 PyErr_Clear();
2029 }
2030
2031 /* check the import lock
2032 * me might be -1 but I ignore the error here, the lock function
2033 * takes care of the problem */
2034 me = PyThread_get_thread_ident();
2035 if (import_lock_thread == -1 || import_lock_thread == me) {
2036 /* no thread or me is holding the lock */
2037 return PyImport_ImportModule(name);
2038 }
2039 else {
2040 PyErr_Format(PyExc_ImportError,
2041 "Failed to import %.200s because the import lock"
2042 "is held by another thread.",
2043 name);
2044 return NULL;
2045 }
2046}
2047
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002048/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002049static PyObject *get_parent(PyObject *globals, char *buf,
2050 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002051static PyObject *load_next(PyObject *mod, PyObject *altmod,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002052 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002053static int mark_miss(char *name);
2054static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002055 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002056static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002057
2058/* The Magnum Opus of dotted-name import :-) */
2059
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002060static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002061import_module_level(char *name, PyObject *globals, PyObject *locals,
2062 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002063{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002064 char buf[MAXPATHLEN+1];
Martin v. Löwis18e16552006-02-15 17:27:45 +00002065 Py_ssize_t buflen = 0;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002066 PyObject *parent, *head, *next, *tail;
2067
Christian Heimes3403f152008-01-09 19:56:33 +00002068 if (strchr(name, '/') != NULL
2069#ifdef MS_WINDOWS
2070 || strchr(name, '\\') != NULL
2071#endif
2072 ) {
2073 PyErr_SetString(PyExc_ImportError,
2074 "Import by filename is not supported.");
2075 return NULL;
2076 }
2077
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002078 parent = get_parent(globals, buf, &buflen, level);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002079 if (parent == NULL)
2080 return NULL;
2081
2082 head = load_next(parent, Py_None, &name, buf, &buflen);
2083 if (head == NULL)
2084 return NULL;
2085
2086 tail = head;
2087 Py_INCREF(tail);
2088 while (name) {
2089 next = load_next(tail, tail, &name, buf, &buflen);
2090 Py_DECREF(tail);
2091 if (next == NULL) {
2092 Py_DECREF(head);
2093 return NULL;
2094 }
2095 tail = next;
2096 }
Thomas Wouters8ddab272006-04-04 16:17:02 +00002097 if (tail == Py_None) {
2098 /* If tail is Py_None, both get_parent and load_next found
2099 an empty module name: someone called __import__("") or
2100 doctored faulty bytecode */
Thomas Wouters4bdaa272006-04-05 13:39:37 +00002101 Py_DECREF(tail);
2102 Py_DECREF(head);
Thomas Wouters8ddab272006-04-04 16:17:02 +00002103 PyErr_SetString(PyExc_ValueError,
2104 "Empty module name");
2105 return NULL;
2106 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002107
2108 if (fromlist != NULL) {
2109 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2110 fromlist = NULL;
2111 }
2112
2113 if (fromlist == NULL) {
2114 Py_DECREF(tail);
2115 return head;
2116 }
2117
2118 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002119 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002120 Py_DECREF(tail);
2121 return NULL;
2122 }
2123
2124 return tail;
2125}
2126
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002127PyObject *
2128PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2129 PyObject *fromlist, int level)
2130{
2131 PyObject *result;
2132 lock_import();
2133 result = import_module_level(name, globals, locals, fromlist, level);
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002134 if (unlock_import() < 0) {
2135 Py_XDECREF(result);
2136 PyErr_SetString(PyExc_RuntimeError,
2137 "not holding the import lock");
2138 return NULL;
2139 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002140 return result;
2141}
2142
Fred Drake87590902004-05-28 20:21:36 +00002143/* Return the package that an import is being performed in. If globals comes
2144 from the module foo.bar.bat (not itself a package), this returns the
2145 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Georg Brandl5f6861d2006-05-28 21:57:35 +00002146 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002147
2148 The *name* of the returned package is returned in buf, with the length of
2149 the name in *p_buflen.
2150
2151 If globals doesn't come from a package or a module in a package, or a
2152 corresponding entry is not found in sys.modules, Py_None is returned.
2153*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002154static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002155get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002156{
2157 static PyObject *namestr = NULL;
2158 static PyObject *pathstr = NULL;
Nick Coghlanef01d822007-12-03 12:55:17 +00002159 static PyObject *pkgstr = NULL;
2160 PyObject *pkgname, *modname, *modpath, *modules, *parent;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002161
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002162 if (globals == NULL || !PyDict_Check(globals) || !level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002163 return Py_None;
2164
2165 if (namestr == NULL) {
2166 namestr = PyString_InternFromString("__name__");
2167 if (namestr == NULL)
2168 return NULL;
2169 }
2170 if (pathstr == NULL) {
2171 pathstr = PyString_InternFromString("__path__");
2172 if (pathstr == NULL)
2173 return NULL;
2174 }
Nick Coghlanef01d822007-12-03 12:55:17 +00002175 if (pkgstr == NULL) {
2176 pkgstr = PyString_InternFromString("__package__");
2177 if (pkgstr == NULL)
2178 return NULL;
2179 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002180
2181 *buf = '\0';
2182 *p_buflen = 0;
Nick Coghlanef01d822007-12-03 12:55:17 +00002183 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002184
Nick Coghlanef01d822007-12-03 12:55:17 +00002185 if ((pkgname != NULL) && (pkgname != Py_None)) {
2186 /* __package__ is set, so use it */
2187 Py_ssize_t len;
2188 if (!PyString_Check(pkgname)) {
2189 PyErr_SetString(PyExc_ValueError,
2190 "__package__ set to non-string");
2191 return NULL;
2192 }
2193 len = PyString_GET_SIZE(pkgname);
2194 if (len == 0) {
2195 if (level > 0) {
2196 PyErr_SetString(PyExc_ValueError,
2197 "Attempted relative import in non-package");
2198 return NULL;
2199 }
2200 return Py_None;
2201 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002202 if (len > MAXPATHLEN) {
2203 PyErr_SetString(PyExc_ValueError,
Nick Coghlanef01d822007-12-03 12:55:17 +00002204 "Package name too long");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002205 return NULL;
2206 }
Nick Coghlanef01d822007-12-03 12:55:17 +00002207 strcpy(buf, PyString_AS_STRING(pkgname));
2208 } else {
2209 /* __package__ not set, so figure it out and set it */
2210 modname = PyDict_GetItem(globals, namestr);
2211 if (modname == NULL || !PyString_Check(modname))
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002212 return Py_None;
Nick Coghlanef01d822007-12-03 12:55:17 +00002213
2214 modpath = PyDict_GetItem(globals, pathstr);
2215 if (modpath != NULL) {
2216 /* __path__ is set, so modname is already the package name */
2217 Py_ssize_t len = PyString_GET_SIZE(modname);
2218 int error;
2219 if (len > MAXPATHLEN) {
2220 PyErr_SetString(PyExc_ValueError,
2221 "Module name too long");
2222 return NULL;
2223 }
2224 strcpy(buf, PyString_AS_STRING(modname));
2225 error = PyDict_SetItem(globals, pkgstr, modname);
2226 if (error) {
2227 PyErr_SetString(PyExc_ValueError,
2228 "Could not set __package__");
2229 return NULL;
2230 }
2231 } else {
2232 /* Normal module, so work out the package name if any */
2233 char *start = PyString_AS_STRING(modname);
2234 char *lastdot = strrchr(start, '.');
2235 size_t len;
2236 int error;
2237 if (lastdot == NULL && level > 0) {
2238 PyErr_SetString(PyExc_ValueError,
2239 "Attempted relative import in non-package");
2240 return NULL;
2241 }
2242 if (lastdot == NULL) {
2243 error = PyDict_SetItem(globals, pkgstr, Py_None);
2244 if (error) {
2245 PyErr_SetString(PyExc_ValueError,
2246 "Could not set __package__");
2247 return NULL;
2248 }
2249 return Py_None;
2250 }
2251 len = lastdot - start;
2252 if (len >= MAXPATHLEN) {
2253 PyErr_SetString(PyExc_ValueError,
2254 "Module name too long");
2255 return NULL;
2256 }
2257 strncpy(buf, start, len);
2258 buf[len] = '\0';
2259 pkgname = PyString_FromString(buf);
2260 if (pkgname == NULL) {
2261 return NULL;
2262 }
2263 error = PyDict_SetItem(globals, pkgstr, pkgname);
2264 Py_DECREF(pkgname);
2265 if (error) {
2266 PyErr_SetString(PyExc_ValueError,
2267 "Could not set __package__");
2268 return NULL;
2269 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002270 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002271 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002272 while (--level > 0) {
2273 char *dot = strrchr(buf, '.');
2274 if (dot == NULL) {
2275 PyErr_SetString(PyExc_ValueError,
Georg Brandl98775df2006-09-06 06:09:31 +00002276 "Attempted relative import beyond "
2277 "toplevel package");
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002278 return NULL;
2279 }
2280 *dot = '\0';
2281 }
2282 *p_buflen = strlen(buf);
2283
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002284 modules = PyImport_GetModuleDict();
2285 parent = PyDict_GetItemString(modules, buf);
2286 if (parent == NULL)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002287 PyErr_Format(PyExc_SystemError,
2288 "Parent module '%.200s' not loaded", buf);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002289 return parent;
2290 /* We expect, but can't guarantee, if parent != None, that:
2291 - parent.__name__ == buf
2292 - parent.__dict__ is globals
2293 If this is violated... Who cares? */
2294}
2295
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002296/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002297static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002298load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002299 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002300{
2301 char *name = *p_name;
2302 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002303 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002304 char *p;
2305 PyObject *result;
2306
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002307 if (strlen(name) == 0) {
Thomas Wouters8ddab272006-04-04 16:17:02 +00002308 /* completely empty module name should only happen in
2309 'from . import' (or '__import__("")')*/
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002310 Py_INCREF(mod);
2311 *p_name = NULL;
2312 return mod;
2313 }
2314
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002315 if (dot == NULL) {
2316 *p_name = NULL;
2317 len = strlen(name);
2318 }
2319 else {
2320 *p_name = dot+1;
2321 len = dot-name;
2322 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002323 if (len == 0) {
2324 PyErr_SetString(PyExc_ValueError,
2325 "Empty module name");
2326 return NULL;
2327 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002328
2329 p = buf + *p_buflen;
2330 if (p != buf)
2331 *p++ = '.';
2332 if (p+len-buf >= MAXPATHLEN) {
2333 PyErr_SetString(PyExc_ValueError,
2334 "Module name too long");
2335 return NULL;
2336 }
2337 strncpy(p, name, len);
2338 p[len] = '\0';
2339 *p_buflen = p+len-buf;
2340
2341 result = import_submodule(mod, p, buf);
2342 if (result == Py_None && altmod != mod) {
2343 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002344 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002345 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002346 if (result != NULL && result != Py_None) {
2347 if (mark_miss(buf) != 0) {
2348 Py_DECREF(result);
2349 return NULL;
2350 }
2351 strncpy(buf, name, len);
2352 buf[len] = '\0';
2353 *p_buflen = len;
2354 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002355 }
2356 if (result == NULL)
2357 return NULL;
2358
2359 if (result == Py_None) {
2360 Py_DECREF(result);
2361 PyErr_Format(PyExc_ImportError,
2362 "No module named %.200s", name);
2363 return NULL;
2364 }
2365
2366 return result;
2367}
2368
2369static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002370mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002371{
2372 PyObject *modules = PyImport_GetModuleDict();
2373 return PyDict_SetItemString(modules, name, Py_None);
2374}
2375
2376static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002377ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002378 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002379{
2380 int i;
2381
2382 if (!PyObject_HasAttrString(mod, "__path__"))
2383 return 1;
2384
2385 for (i = 0; ; i++) {
2386 PyObject *item = PySequence_GetItem(fromlist, i);
2387 int hasit;
2388 if (item == NULL) {
2389 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2390 PyErr_Clear();
2391 return 1;
2392 }
2393 return 0;
2394 }
2395 if (!PyString_Check(item)) {
2396 PyErr_SetString(PyExc_TypeError,
2397 "Item in ``from list'' not a string");
2398 Py_DECREF(item);
2399 return 0;
2400 }
2401 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002402 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002403 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002404 /* See if the package defines __all__ */
2405 if (recursive)
2406 continue; /* Avoid endless recursion */
2407 all = PyObject_GetAttrString(mod, "__all__");
2408 if (all == NULL)
2409 PyErr_Clear();
2410 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002411 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002412 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002413 if (!ret)
2414 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002415 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002416 continue;
2417 }
2418 hasit = PyObject_HasAttr(mod, item);
2419 if (!hasit) {
2420 char *subname = PyString_AS_STRING(item);
2421 PyObject *submod;
2422 char *p;
2423 if (buflen + strlen(subname) >= MAXPATHLEN) {
2424 PyErr_SetString(PyExc_ValueError,
2425 "Module name too long");
2426 Py_DECREF(item);
2427 return 0;
2428 }
2429 p = buf + buflen;
2430 *p++ = '.';
2431 strcpy(p, subname);
2432 submod = import_submodule(mod, subname, buf);
2433 Py_XDECREF(submod);
2434 if (submod == NULL) {
2435 Py_DECREF(item);
2436 return 0;
2437 }
2438 }
2439 Py_DECREF(item);
2440 }
2441
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002442 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002443}
2444
Neil Schemenauer00b09662003-06-16 21:03:07 +00002445static int
2446add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2447 PyObject *modules)
2448{
2449 if (mod == Py_None)
2450 return 1;
2451 /* Irrespective of the success of this load, make a
2452 reference to it in the parent package module. A copy gets
2453 saved in the modules dictionary under the full name, so get a
2454 reference from there, if need be. (The exception is when the
2455 load failed with a SyntaxError -- then there's no trace in
2456 sys.modules. In that case, of course, do nothing extra.) */
2457 if (submod == NULL) {
2458 submod = PyDict_GetItemString(modules, fullname);
2459 if (submod == NULL)
2460 return 1;
2461 }
2462 if (PyModule_Check(mod)) {
2463 /* We can't use setattr here since it can give a
2464 * spurious warning if the submodule name shadows a
2465 * builtin name */
2466 PyObject *dict = PyModule_GetDict(mod);
2467 if (!dict)
2468 return 0;
2469 if (PyDict_SetItemString(dict, subname, submod) < 0)
2470 return 0;
2471 }
2472 else {
2473 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2474 return 0;
2475 }
2476 return 1;
2477}
2478
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002479static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002480import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002481{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002482 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002483 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002484
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002485 /* Require:
2486 if mod == None: subname == fullname
2487 else: mod.__name__ + "." + subname == fullname
2488 */
2489
Tim Peters50d8d372001-02-28 05:34:27 +00002490 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002491 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002492 }
2493 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002494 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002495 char buf[MAXPATHLEN+1];
2496 struct filedescr *fdp;
2497 FILE *fp = NULL;
2498
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002499 if (mod == Py_None)
2500 path = NULL;
2501 else {
2502 path = PyObject_GetAttrString(mod, "__path__");
2503 if (path == NULL) {
2504 PyErr_Clear();
2505 Py_INCREF(Py_None);
2506 return Py_None;
2507 }
2508 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002509
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002510 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002511 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2512 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002513 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002514 if (fdp == NULL) {
2515 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2516 return NULL;
2517 PyErr_Clear();
2518 Py_INCREF(Py_None);
2519 return Py_None;
2520 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002521 m = load_module(fullname, fp, buf, fdp->type, loader);
2522 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002523 if (fp)
2524 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002525 if (!add_submodule(mod, m, fullname, subname, modules)) {
2526 Py_XDECREF(m);
2527 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002528 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002529 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002530
2531 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002532}
2533
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002534
2535/* Re-import a module of any kind and return its module object, WITH
2536 INCREMENTED REFERENCE COUNT */
2537
Guido van Rossum79f25d91997-04-29 20:08:16 +00002538PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002539PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002540{
Collin Winter47c52a82007-03-13 23:02:15 +00002541 PyInterpreterState *interp = PyThreadState_Get()->interp;
2542 PyObject *modules_reloading = interp->modules_reloading;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002543 PyObject *modules = PyImport_GetModuleDict();
Collin Winter276887b2007-03-12 16:11:39 +00002544 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002545 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002546 char buf[MAXPATHLEN+1];
2547 struct filedescr *fdp;
2548 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002549 PyObject *newm;
Collin Winter47c52a82007-03-13 23:02:15 +00002550
2551 if (modules_reloading == NULL) {
2552 Py_FatalError("PyImport_ReloadModule: "
Neal Norwitz2fca81c2007-05-30 04:53:41 +00002553 "no modules_reloading dictionary!");
Collin Winter47c52a82007-03-13 23:02:15 +00002554 return NULL;
2555 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002556
Guido van Rossum79f25d91997-04-29 20:08:16 +00002557 if (m == NULL || !PyModule_Check(m)) {
2558 PyErr_SetString(PyExc_TypeError,
2559 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002560 return NULL;
2561 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002562 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002563 if (name == NULL)
2564 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002565 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002566 PyErr_Format(PyExc_ImportError,
2567 "reload(): module %.200s not in sys.modules",
2568 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002569 return NULL;
2570 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002571 existing_m = PyDict_GetItemString(modules_reloading, name);
2572 if (existing_m != NULL) {
2573 /* Due to a recursive reload, this module is already
2574 being reloaded. */
2575 Py_INCREF(existing_m);
2576 return existing_m;
Collin Winter276887b2007-03-12 16:11:39 +00002577 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002578 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2579 return NULL;
Collin Winter276887b2007-03-12 16:11:39 +00002580
Guido van Rossum222ef561997-09-06 19:41:09 +00002581 subname = strrchr(name, '.');
2582 if (subname == NULL)
2583 subname = name;
2584 else {
2585 PyObject *parentname, *parent;
2586 parentname = PyString_FromStringAndSize(name, (subname-name));
Collin Winter276887b2007-03-12 16:11:39 +00002587 if (parentname == NULL) {
2588 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002589 return NULL;
Neal Norwitz75c7c802007-03-13 05:31:38 +00002590 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002591 parent = PyDict_GetItem(modules, parentname);
2592 if (parent == NULL) {
2593 PyErr_Format(PyExc_ImportError,
2594 "reload(): parent %.200s not in sys.modules",
Georg Brandl0c55f292005-09-14 06:56:20 +00002595 PyString_AS_STRING(parentname));
2596 Py_DECREF(parentname);
Neal Norwitz2fca81c2007-05-30 04:53:41 +00002597 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002598 return NULL;
2599 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002600 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002601 subname++;
2602 path = PyObject_GetAttrString(parent, "__path__");
2603 if (path == NULL)
2604 PyErr_Clear();
2605 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002606 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002607 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002608 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002609
2610 if (fdp == NULL) {
2611 Py_XDECREF(loader);
Collin Winter276887b2007-03-12 16:11:39 +00002612 imp_modules_reloading_clear();
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002613 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002614 }
2615
2616 newm = load_module(name, fp, buf, fdp->type, loader);
2617 Py_XDECREF(loader);
2618
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002619 if (fp)
2620 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002621 if (newm == NULL) {
2622 /* load_module probably removed name from modules because of
2623 * the error. Put back the original module object. We're
2624 * going to return NULL in this case regardless of whether
2625 * replacing name succeeds, so the return value is ignored.
2626 */
2627 PyDict_SetItemString(modules, name, m);
2628 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002629 imp_modules_reloading_clear();
Tim Peters1cd70172004-08-02 03:52:12 +00002630 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002631}
2632
2633
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002634/* Higher-level import emulator which emulates the "import" statement
2635 more accurately -- it invokes the __import__() function from the
2636 builtins of the current globals. This means that the import is
2637 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002638 environment, e.g. by "rexec".
2639 A dummy list ["__doc__"] is passed as the 4th argument so that
2640 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
2641 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002642
2643PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002644PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002645{
2646 static PyObject *silly_list = NULL;
2647 static PyObject *builtins_str = NULL;
2648 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002649 PyObject *globals = NULL;
2650 PyObject *import = NULL;
2651 PyObject *builtins = NULL;
2652 PyObject *r = NULL;
2653
2654 /* Initialize constant string objects */
2655 if (silly_list == NULL) {
2656 import_str = PyString_InternFromString("__import__");
2657 if (import_str == NULL)
2658 return NULL;
2659 builtins_str = PyString_InternFromString("__builtins__");
2660 if (builtins_str == NULL)
2661 return NULL;
2662 silly_list = Py_BuildValue("[s]", "__doc__");
2663 if (silly_list == NULL)
2664 return NULL;
2665 }
2666
2667 /* Get the builtins from current globals */
2668 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002669 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002670 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002671 builtins = PyObject_GetItem(globals, builtins_str);
2672 if (builtins == NULL)
2673 goto err;
2674 }
2675 else {
2676 /* No globals -- use standard builtins, and fake globals */
2677 PyErr_Clear();
2678
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002679 builtins = PyImport_ImportModuleLevel("__builtin__",
2680 NULL, NULL, NULL, 0);
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002681 if (builtins == NULL)
2682 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002683 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2684 if (globals == NULL)
2685 goto err;
2686 }
2687
2688 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002689 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002690 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002691 if (import == NULL)
2692 PyErr_SetObject(PyExc_KeyError, import_str);
2693 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002694 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002695 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002696 if (import == NULL)
2697 goto err;
2698
Christian Heimes000a0742008-01-03 22:16:32 +00002699 /* Call the __import__ function with the proper argument list
2700 * Always use absolute import here. */
2701 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2702 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002703
2704 err:
2705 Py_XDECREF(globals);
2706 Py_XDECREF(builtins);
2707 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002708
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002709 return r;
2710}
2711
2712
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002713/* Module 'imp' provides Python access to the primitives used for
2714 importing modules.
2715*/
2716
Guido van Rossum79f25d91997-04-29 20:08:16 +00002717static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002718imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002719{
2720 char buf[4];
2721
Guido van Rossum96774c12000-05-01 20:19:08 +00002722 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2723 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2724 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2725 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002726
Guido van Rossum79f25d91997-04-29 20:08:16 +00002727 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002728}
2729
Guido van Rossum79f25d91997-04-29 20:08:16 +00002730static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002731imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002732{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002733 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002734 struct filedescr *fdp;
2735
Guido van Rossum79f25d91997-04-29 20:08:16 +00002736 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002737 if (list == NULL)
2738 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002739 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2740 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002741 fdp->suffix, fdp->mode, fdp->type);
2742 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002743 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002744 return NULL;
2745 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002746 if (PyList_Append(list, item) < 0) {
2747 Py_DECREF(list);
2748 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002749 return NULL;
2750 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002751 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002752 }
2753 return list;
2754}
2755
Guido van Rossum79f25d91997-04-29 20:08:16 +00002756static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002757call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002758{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002759 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002760 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002761 struct filedescr *fdp;
2762 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002763 FILE *fp = NULL;
2764
2765 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002766 if (path == Py_None)
2767 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002768 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002769 if (fdp == NULL)
2770 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002771 if (fp != NULL) {
2772 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2773 if (fob == NULL) {
2774 fclose(fp);
2775 return NULL;
2776 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002777 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002778 else {
2779 fob = Py_None;
2780 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002781 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002782 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002783 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002784 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002785 return ret;
2786}
2787
Guido van Rossum79f25d91997-04-29 20:08:16 +00002788static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002789imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002790{
2791 char *name;
2792 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002793 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002794 return NULL;
2795 return call_find_module(name, path);
2796}
2797
2798static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002799imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002800{
2801 char *name;
2802 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002803 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002804 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002805 return NULL;
2806 ret = init_builtin(name);
2807 if (ret < 0)
2808 return NULL;
2809 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002810 Py_INCREF(Py_None);
2811 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002812 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002813 m = PyImport_AddModule(name);
2814 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002815 return m;
2816}
2817
Guido van Rossum79f25d91997-04-29 20:08:16 +00002818static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002819imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002820{
2821 char *name;
2822 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002823 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002824 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002825 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002826 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002827 if (ret < 0)
2828 return NULL;
2829 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002830 Py_INCREF(Py_None);
2831 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002832 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002833 m = PyImport_AddModule(name);
2834 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002835 return m;
2836}
2837
Guido van Rossum79f25d91997-04-29 20:08:16 +00002838static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002839imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002840{
2841 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002842
Guido van Rossum43713e52000-02-29 13:59:29 +00002843 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002844 return NULL;
2845 return get_frozen_object(name);
2846}
2847
Guido van Rossum79f25d91997-04-29 20:08:16 +00002848static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002849imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002850{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002851 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002852 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002853 return NULL;
Guido van Rossum50ee94f2002-04-09 18:00:58 +00002854 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002855}
2856
Guido van Rossum79f25d91997-04-29 20:08:16 +00002857static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002858imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002859{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002860 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002861 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002862 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002863 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002864 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00002865 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002866}
2867
2868static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002869get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002870{
2871 FILE *fp;
2872 if (fob == NULL) {
Tim Peters86c7d2f2004-08-01 23:24:21 +00002873 if (mode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002874 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002875 fp = fopen(pathname, mode);
2876 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002877 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002878 }
2879 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002880 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002881 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002882 PyErr_SetString(PyExc_ValueError,
2883 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002884 }
2885 return fp;
2886}
2887
Guido van Rossum79f25d91997-04-29 20:08:16 +00002888static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002889imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002890{
2891 char *name;
2892 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002893 PyObject *fob = NULL;
2894 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002895 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002896 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002897 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002898 return NULL;
2899 fp = get_file(pathname, fob, "rb");
2900 if (fp == NULL)
2901 return NULL;
2902 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002903 if (fob == NULL)
2904 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002905 return m;
2906}
2907
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002908#ifdef HAVE_DYNAMIC_LOADING
2909
Guido van Rossum79f25d91997-04-29 20:08:16 +00002910static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002911imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002912{
2913 char *name;
2914 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002915 PyObject *fob = NULL;
2916 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002917 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002918 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002919 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002920 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002921 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002922 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002923 if (fp == NULL)
2924 return NULL;
2925 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002926 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002927 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002928}
2929
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002930#endif /* HAVE_DYNAMIC_LOADING */
2931
Guido van Rossum79f25d91997-04-29 20:08:16 +00002932static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002933imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002934{
2935 char *name;
2936 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002937 PyObject *fob = NULL;
2938 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002939 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002940 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002941 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002942 return NULL;
2943 fp = get_file(pathname, fob, "r");
2944 if (fp == NULL)
2945 return NULL;
2946 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002947 if (fob == NULL)
2948 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002949 return m;
2950}
2951
Guido van Rossum79f25d91997-04-29 20:08:16 +00002952static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002953imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002954{
2955 char *name;
2956 PyObject *fob;
2957 char *pathname;
2958 char *suffix; /* Unused */
2959 char *mode;
2960 int type;
2961 FILE *fp;
2962
Guido van Rossum43713e52000-02-29 13:59:29 +00002963 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002964 &name, &fob, &pathname,
2965 &suffix, &mode, &type))
2966 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002967 if (*mode) {
2968 /* Mode must start with 'r' or 'U' and must not contain '+'.
2969 Implicit in this test is the assumption that the mode
2970 may contain other modifiers like 'b' or 't'. */
2971
2972 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002973 PyErr_Format(PyExc_ValueError,
2974 "invalid file open mode %.200s", mode);
2975 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002976 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002977 }
2978 if (fob == Py_None)
2979 fp = NULL;
2980 else {
2981 if (!PyFile_Check(fob)) {
2982 PyErr_SetString(PyExc_ValueError,
2983 "load_module arg#2 should be a file or None");
2984 return NULL;
2985 }
2986 fp = get_file(pathname, fob, mode);
2987 if (fp == NULL)
2988 return NULL;
2989 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002990 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002991}
2992
2993static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002994imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002995{
2996 char *name;
2997 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00002998 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002999 return NULL;
3000 return load_package(name, pathname);
3001}
3002
3003static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003004imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003005{
3006 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00003007 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003008 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003009 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003010}
3011
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003012/* Doc strings */
3013
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003014PyDoc_STRVAR(doc_imp,
3015"This module provides the components needed to build your own\n\
3016__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003017
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003018PyDoc_STRVAR(doc_find_module,
3019"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003020Search for a module. If path is omitted or None, search for a\n\
3021built-in, frozen or special module and continue search in sys.path.\n\
3022The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003023package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003024
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003025PyDoc_STRVAR(doc_load_module,
3026"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003027Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003028The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003029
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003030PyDoc_STRVAR(doc_get_magic,
3031"get_magic() -> string\n\
3032Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003033
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003034PyDoc_STRVAR(doc_get_suffixes,
3035"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003036Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003037that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003038
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003039PyDoc_STRVAR(doc_new_module,
3040"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003041Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003042The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003043
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003044PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003045"lock_held() -> boolean\n\
3046Return True if the import lock is currently held, else False.\n\
3047On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003048
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003049PyDoc_STRVAR(doc_acquire_lock,
3050"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003051Acquires the interpreter's import lock for the current thread.\n\
3052This lock should be used by import hooks to ensure thread-safety\n\
3053when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003054On platforms without threads, this function does nothing.");
3055
3056PyDoc_STRVAR(doc_release_lock,
3057"release_lock() -> None\n\
3058Release the interpreter's import lock.\n\
3059On platforms without threads, this function does nothing.");
3060
Guido van Rossum79f25d91997-04-29 20:08:16 +00003061static PyMethodDef imp_methods[] = {
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003062 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3063 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3064 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3065 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3066 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3067 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3068 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3069 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003070 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00003071 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3072 {"init_builtin", imp_init_builtin, METH_VARARGS},
3073 {"init_frozen", imp_init_frozen, METH_VARARGS},
3074 {"is_builtin", imp_is_builtin, METH_VARARGS},
3075 {"is_frozen", imp_is_frozen, METH_VARARGS},
3076 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003077#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00003078 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003079#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00003080 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00003081 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003082 {NULL, NULL} /* sentinel */
3083};
3084
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003085static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003086setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003087{
3088 PyObject *v;
3089 int err;
3090
3091 v = PyInt_FromLong((long)value);
3092 err = PyDict_SetItemString(d, name, v);
3093 Py_XDECREF(v);
3094 return err;
3095}
3096
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003097typedef struct {
3098 PyObject_HEAD
3099} NullImporter;
3100
3101static int
3102NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3103{
3104 char *path;
Christian Heimescea681b2007-11-07 17:50:54 +00003105 Py_ssize_t pathlen;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003106
3107 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3108 return -1;
3109
3110 if (!PyArg_ParseTuple(args, "s:NullImporter",
3111 &path))
3112 return -1;
3113
Christian Heimescea681b2007-11-07 17:50:54 +00003114 pathlen = strlen(path);
3115 if (pathlen == 0) {
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003116 PyErr_SetString(PyExc_ImportError, "empty pathname");
3117 return -1;
3118 } else {
3119#ifndef RISCOS
3120 struct stat statbuf;
3121 int rv;
3122
3123 rv = stat(path, &statbuf);
Christian Heimes004c1c12007-11-07 18:30:22 +00003124#ifdef MS_WINDOWS
3125 /* MS Windows stat() chokes on paths like C:\path\. Try to
3126 * recover *one* time by stripping off a trailing slash or
3127 * backslash. http://bugs.python.org/issue1293
3128 */
Christian Heimescea681b2007-11-07 17:50:54 +00003129 if (rv != 0 && pathlen <= MAXPATHLEN &&
3130 (path[pathlen-1] == '/' || path[pathlen-1] == '\\')) {
3131 char mangled[MAXPATHLEN+1];
3132
3133 strcpy(mangled, path);
3134 mangled[pathlen-1] = '\0';
3135 rv = stat(mangled, &statbuf);
3136 }
Christian Heimescea681b2007-11-07 17:50:54 +00003137#endif
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003138 if (rv == 0) {
3139 /* it exists */
3140 if (S_ISDIR(statbuf.st_mode)) {
3141 /* it's a directory */
3142 PyErr_SetString(PyExc_ImportError,
3143 "existing directory");
3144 return -1;
3145 }
3146 }
3147#else
3148 if (object_exists(path)) {
3149 /* it exists */
3150 if (isdir(path)) {
3151 /* it's a directory */
3152 PyErr_SetString(PyExc_ImportError,
3153 "existing directory");
3154 return -1;
3155 }
3156 }
3157#endif
3158 }
3159 return 0;
3160}
3161
3162static PyObject *
3163NullImporter_find_module(NullImporter *self, PyObject *args)
3164{
3165 Py_RETURN_NONE;
3166}
3167
3168static PyMethodDef NullImporter_methods[] = {
3169 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3170 "Always return None"
3171 },
3172 {NULL} /* Sentinel */
3173};
3174
3175
Nick Coghlan327a39b2007-11-18 11:56:28 +00003176PyTypeObject PyNullImporter_Type = {
Martin v. Löwis68192102007-07-21 06:55:02 +00003177 PyVarObject_HEAD_INIT(NULL, 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003178 "imp.NullImporter", /*tp_name*/
3179 sizeof(NullImporter), /*tp_basicsize*/
3180 0, /*tp_itemsize*/
3181 0, /*tp_dealloc*/
3182 0, /*tp_print*/
3183 0, /*tp_getattr*/
3184 0, /*tp_setattr*/
3185 0, /*tp_compare*/
3186 0, /*tp_repr*/
3187 0, /*tp_as_number*/
3188 0, /*tp_as_sequence*/
3189 0, /*tp_as_mapping*/
3190 0, /*tp_hash */
3191 0, /*tp_call*/
3192 0, /*tp_str*/
3193 0, /*tp_getattro*/
3194 0, /*tp_setattro*/
3195 0, /*tp_as_buffer*/
3196 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3197 "Null importer object", /* tp_doc */
3198 0, /* tp_traverse */
3199 0, /* tp_clear */
3200 0, /* tp_richcompare */
3201 0, /* tp_weaklistoffset */
3202 0, /* tp_iter */
3203 0, /* tp_iternext */
3204 NullImporter_methods, /* tp_methods */
3205 0, /* tp_members */
3206 0, /* tp_getset */
3207 0, /* tp_base */
3208 0, /* tp_dict */
3209 0, /* tp_descr_get */
3210 0, /* tp_descr_set */
3211 0, /* tp_dictoffset */
3212 (initproc)NullImporter_init, /* tp_init */
3213 0, /* tp_alloc */
3214 PyType_GenericNew /* tp_new */
3215};
3216
3217
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003218PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003219initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003220{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003221 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003222
Nick Coghlan327a39b2007-11-18 11:56:28 +00003223 if (PyType_Ready(&PyNullImporter_Type) < 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003224 goto failure;
3225
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003226 m = Py_InitModule4("imp", imp_methods, doc_imp,
3227 NULL, PYTHON_API_VERSION);
Neal Norwitz1ac754f2006-01-19 06:09:39 +00003228 if (m == NULL)
3229 goto failure;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003230 d = PyModule_GetDict(m);
Neal Norwitz3cb31ac2006-08-13 18:10:47 +00003231 if (d == NULL)
3232 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003233
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003234 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3235 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3236 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3237 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3238 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3239 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3240 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3241 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00003242 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00003243 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003244
Nick Coghlan327a39b2007-11-18 11:56:28 +00003245 Py_INCREF(&PyNullImporter_Type);
3246 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003247 failure:
3248 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003249}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003250
3251
Guido van Rossumb18618d2000-05-03 23:44:39 +00003252/* API for embedding applications that want to add their own entries
3253 to the table of built-in modules. This should normally be called
3254 *before* Py_Initialize(). When the table resize fails, -1 is
3255 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003256
3257 After a similar function by Just van Rossum. */
3258
3259int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003260PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003261{
3262 static struct _inittab *our_copy = NULL;
3263 struct _inittab *p;
3264 int i, n;
3265
3266 /* Count the number of entries in both tables */
3267 for (n = 0; newtab[n].name != NULL; n++)
3268 ;
3269 if (n == 0)
3270 return 0; /* Nothing to do */
3271 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3272 ;
3273
3274 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00003275 p = our_copy;
3276 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003277 if (p == NULL)
3278 return -1;
3279
3280 /* Copy the tables into the new memory */
3281 if (our_copy != PyImport_Inittab)
3282 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3283 PyImport_Inittab = our_copy = p;
3284 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3285
3286 return 0;
3287}
3288
3289/* Shorthand to add a single entry given a name and a function */
3290
3291int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003292PyImport_AppendInittab(char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003293{
3294 struct _inittab newtab[2];
3295
3296 memset(newtab, '\0', sizeof newtab);
3297
3298 newtab[0].name = name;
3299 newtab[0].initfunc = initfunc;
3300
3301 return PyImport_ExtendInittab(newtab);
3302}
Anthony Baxterac6bd462006-04-13 02:06:09 +00003303
3304#ifdef __cplusplus
3305}
3306#endif