blob: 191c0393986b7f0ea5d49c8d4029dc62ffd80b68 [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)
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000075.
Tim Peters36515e22001-11-18 04:06:29 +000076*/
Raymond Hettingereffde122007-12-18 18:26:18 +000077#define MAGIC (62151 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000078
Guido van Rossum96774c12000-05-01 20:19:08 +000079/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000080 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000081 compiler works which are enabled by command line switches. */
82static long pyc_magic = MAGIC;
83
Guido van Rossum25ce5661997-08-02 03:10:38 +000084/* See _PyImport_FixupExtension() below */
85static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000086
Guido van Rossum771c6c81997-10-31 18:37:24 +000087/* This table is defined in config.c: */
88extern struct _inittab _PyImport_Inittab[];
89
90struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000091
Guido van Rossumed1170e1999-12-20 21:23:41 +000092/* these tables define the module suffixes that Python recognizes */
93struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +000094
95#ifdef RISCOS
96static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +000097 {"/py", "U", PY_SOURCE},
Guido van Rossum48a680c2001-03-02 06:34:14 +000098 {"/pyc", "rb", PY_COMPILED},
99 {0, 0}
100};
101#else
Guido van Rossumed1170e1999-12-20 21:23:41 +0000102static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +0000103 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000104#ifdef MS_WINDOWS
Jack Jansenc88da1f2002-05-28 10:58:19 +0000105 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000106#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000107 {".pyc", "rb", PY_COMPILED},
108 {0, 0}
109};
Guido van Rossum48a680c2001-03-02 06:34:14 +0000110#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000111
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000112
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000113/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000114
115void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000116_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000117{
Guido van Rossumed1170e1999-12-20 21:23:41 +0000118 const struct filedescr *scan;
119 struct filedescr *filetab;
120 int countD = 0;
121 int countS = 0;
122
123 /* prepare _PyImport_Filetab: copy entries from
124 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
125 */
Georg Brandladd36e52007-08-23 18:08:06 +0000126#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossumed1170e1999-12-20 21:23:41 +0000127 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
128 ++countD;
Georg Brandladd36e52007-08-23 18:08:06 +0000129#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000130 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
131 ++countS;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000132 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
Neal Norwitze1fdb322006-07-21 05:32:28 +0000133 if (filetab == NULL)
Neal Norwitz33722ae2006-07-21 07:59:02 +0000134 Py_FatalError("Can't initialize import file table.");
Georg Brandladd36e52007-08-23 18:08:06 +0000135#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossumed1170e1999-12-20 21:23:41 +0000136 memcpy(filetab, _PyImport_DynLoadFiletab,
137 countD * sizeof(struct filedescr));
Georg Brandladd36e52007-08-23 18:08:06 +0000138#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000139 memcpy(filetab + countD, _PyImport_StandardFiletab,
140 countS * sizeof(struct filedescr));
141 filetab[countD + countS].suffix = NULL;
142
143 _PyImport_Filetab = filetab;
144
Guido van Rossum0824f631997-03-11 18:37:35 +0000145 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000146 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
147 for (; filetab->suffix != NULL; filetab++) {
Guido van Rossum48a680c2001-03-02 06:34:14 +0000148#ifndef RISCOS
Guido van Rossumed1170e1999-12-20 21:23:41 +0000149 if (strcmp(filetab->suffix, ".pyc") == 0)
150 filetab->suffix = ".pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000151#else
152 if (strcmp(filetab->suffix, "/pyc") == 0)
153 filetab->suffix = "/pyo";
154#endif
Guido van Rossum0824f631997-03-11 18:37:35 +0000155 }
156 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000157
158 if (Py_UnicodeFlag) {
159 /* Fix the pyc_magic so that byte compiled code created
160 using the all-Unicode method doesn't interfere with
161 code created in normal operation mode. */
162 pyc_magic = MAGIC + 1;
163 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000164}
165
Guido van Rossum25ce5661997-08-02 03:10:38 +0000166void
Just van Rossum52e14d62002-12-30 22:08:05 +0000167_PyImportHooks_Init(void)
168{
169 PyObject *v, *path_hooks = NULL, *zimpimport;
170 int err = 0;
171
172 /* adding sys.path_hooks and sys.path_importer_cache, setting up
173 zipimport */
Nick Coghlan327a39b2007-11-18 11:56:28 +0000174 if (PyType_Ready(&PyNullImporter_Type) < 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000175 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000176
177 if (Py_VerboseFlag)
178 PySys_WriteStderr("# installing zipimport hook\n");
179
180 v = PyList_New(0);
181 if (v == NULL)
182 goto error;
183 err = PySys_SetObject("meta_path", v);
184 Py_DECREF(v);
185 if (err)
186 goto error;
187 v = PyDict_New();
188 if (v == NULL)
189 goto error;
190 err = PySys_SetObject("path_importer_cache", v);
191 Py_DECREF(v);
192 if (err)
193 goto error;
194 path_hooks = PyList_New(0);
195 if (path_hooks == NULL)
196 goto error;
197 err = PySys_SetObject("path_hooks", path_hooks);
198 if (err) {
199 error:
200 PyErr_Print();
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000201 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
202 "path_importer_cache, or NullImporter failed"
203 );
Just van Rossum52e14d62002-12-30 22:08:05 +0000204 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000205
Just van Rossum52e14d62002-12-30 22:08:05 +0000206 zimpimport = PyImport_ImportModule("zipimport");
207 if (zimpimport == NULL) {
208 PyErr_Clear(); /* No zip import module -- okay */
209 if (Py_VerboseFlag)
210 PySys_WriteStderr("# can't import zipimport\n");
211 }
212 else {
213 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
214 "zipimporter");
215 Py_DECREF(zimpimport);
216 if (zipimporter == NULL) {
217 PyErr_Clear(); /* No zipimporter object -- okay */
218 if (Py_VerboseFlag)
219 PySys_WriteStderr(
Fred Drake1e5fc552003-07-11 15:01:02 +0000220 "# can't import zipimport.zipimporter\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000221 }
222 else {
223 /* sys.path_hooks.append(zipimporter) */
224 err = PyList_Append(path_hooks, zipimporter);
225 Py_DECREF(zipimporter);
226 if (err)
227 goto error;
228 if (Py_VerboseFlag)
229 PySys_WriteStderr(
230 "# installed zipimport hook\n");
231 }
232 }
233 Py_DECREF(path_hooks);
234}
235
236void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000237_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000238{
239 Py_XDECREF(extensions);
240 extensions = NULL;
Barry Warsaw84294482000-10-03 16:02:05 +0000241 PyMem_DEL(_PyImport_Filetab);
242 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000243}
244
245
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000246/* Locking primitives to prevent parallel imports of the same module
247 in different threads to return with a partially loaded module.
248 These calls are serialized by the global interpreter lock. */
249
250#ifdef WITH_THREAD
251
Guido van Rossum49b56061998-10-01 20:42:43 +0000252#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000253
Guido van Rossum65d5b571998-12-21 19:32:43 +0000254static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000255static long import_lock_thread = -1;
256static int import_lock_level = 0;
257
258static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000259lock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000260{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000261 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000262 if (me == -1)
263 return; /* Too bad */
Neal Norwitze1fdb322006-07-21 05:32:28 +0000264 if (import_lock == NULL) {
Guido van Rossum65d5b571998-12-21 19:32:43 +0000265 import_lock = PyThread_allocate_lock();
Neal Norwitze1fdb322006-07-21 05:32:28 +0000266 if (import_lock == NULL)
267 return; /* Nothing much we can do. */
268 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000269 if (import_lock_thread == me) {
270 import_lock_level++;
271 return;
272 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000273 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
274 {
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000275 PyThreadState *tstate = PyEval_SaveThread();
Guido van Rossum65d5b571998-12-21 19:32:43 +0000276 PyThread_acquire_lock(import_lock, 1);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000277 PyEval_RestoreThread(tstate);
278 }
279 import_lock_thread = me;
280 import_lock_level = 1;
281}
282
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000283static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000284unlock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000285{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000286 long me = PyThread_get_thread_ident();
Neal Norwitze1fdb322006-07-21 05:32:28 +0000287 if (me == -1 || import_lock == NULL)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000288 return 0; /* Too bad */
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000289 if (import_lock_thread != me)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000290 return -1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000291 import_lock_level--;
292 if (import_lock_level == 0) {
293 import_lock_thread = -1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000294 PyThread_release_lock(import_lock);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000295 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000296 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000297}
298
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000299/* This function is called from PyOS_AfterFork to ensure that newly
300 created child processes do not share locks with the parent. */
301
302void
303_PyImport_ReInitLock(void)
304{
305#ifdef _AIX
306 if (import_lock != NULL)
307 import_lock = PyThread_allocate_lock();
308#endif
309}
310
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000311#else
312
313#define lock_import()
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000314#define unlock_import() 0
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000315
316#endif
317
Tim Peters69232342001-08-30 05:16:13 +0000318static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000319imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000320{
Tim Peters69232342001-08-30 05:16:13 +0000321#ifdef WITH_THREAD
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000322 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000323#else
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000324 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000325#endif
326}
327
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000328static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000329imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000330{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000331#ifdef WITH_THREAD
332 lock_import();
333#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000334 Py_INCREF(Py_None);
335 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000336}
337
338static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000339imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000340{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000341#ifdef WITH_THREAD
342 if (unlock_import() < 0) {
343 PyErr_SetString(PyExc_RuntimeError,
344 "not holding the import lock");
345 return NULL;
346 }
347#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000348 Py_INCREF(Py_None);
349 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000350}
351
Collin Winter276887b2007-03-12 16:11:39 +0000352static void
Neal Norwitz75c7c802007-03-13 05:31:38 +0000353imp_modules_reloading_clear(void)
Collin Winter276887b2007-03-12 16:11:39 +0000354{
355 PyInterpreterState *interp = PyThreadState_Get()->interp;
Neal Norwitz75c7c802007-03-13 05:31:38 +0000356 if (interp->modules_reloading != NULL)
357 PyDict_Clear(interp->modules_reloading);
Collin Winter276887b2007-03-12 16:11:39 +0000358}
359
Guido van Rossum25ce5661997-08-02 03:10:38 +0000360/* Helper for sys */
361
362PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000363PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000364{
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000365 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000366 if (interp->modules == NULL)
367 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
368 return interp->modules;
369}
370
Guido van Rossum3f5da241990-12-20 15:06:42 +0000371
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000372/* List of names to clear in sys */
373static char* sys_deletes[] = {
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000374 "path", "argv", "ps1", "ps2", "exitfunc",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000375 "exc_type", "exc_value", "exc_traceback",
376 "last_type", "last_value", "last_traceback",
Just van Rossum52e14d62002-12-30 22:08:05 +0000377 "path_hooks", "path_importer_cache", "meta_path",
Christian Heimes0d924432008-01-30 17:21:22 +0000378 /* misc stuff */
379 "flags", "float_info",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000380 NULL
381};
382
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000383static char* sys_files[] = {
384 "stdin", "__stdin__",
385 "stdout", "__stdout__",
386 "stderr", "__stderr__",
387 NULL
388};
389
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000390
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000391/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000392
Guido van Rossum3f5da241990-12-20 15:06:42 +0000393void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000394PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000395{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000396 Py_ssize_t pos, ndone;
Guido van Rossum758eec01998-01-19 21:58:26 +0000397 char *name;
398 PyObject *key, *value, *dict;
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000399 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000400 PyObject *modules = interp->modules;
401
402 if (modules == NULL)
403 return; /* Already done */
404
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000405 /* Delete some special variables first. These are common
406 places where user values hide and people complain when their
407 destructors fail. Since the modules containing them are
408 deleted *last* of all, they would come too late in the normal
409 destruction order. Sigh. */
410
411 value = PyDict_GetItemString(modules, "__builtin__");
412 if (value != NULL && PyModule_Check(value)) {
413 dict = PyModule_GetDict(value);
414 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000415 PySys_WriteStderr("# clear __builtin__._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000416 PyDict_SetItemString(dict, "_", Py_None);
417 }
418 value = PyDict_GetItemString(modules, "sys");
419 if (value != NULL && PyModule_Check(value)) {
420 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000421 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000422 dict = PyModule_GetDict(value);
423 for (p = sys_deletes; *p != NULL; p++) {
424 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000425 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000426 PyDict_SetItemString(dict, *p, Py_None);
427 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000428 for (p = sys_files; *p != NULL; p+=2) {
429 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000430 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000431 v = PyDict_GetItemString(dict, *(p+1));
432 if (v == NULL)
433 v = Py_None;
434 PyDict_SetItemString(dict, *p, v);
435 }
436 }
437
438 /* First, delete __main__ */
439 value = PyDict_GetItemString(modules, "__main__");
440 if (value != NULL && PyModule_Check(value)) {
441 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000442 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000443 _PyModule_Clear(value);
444 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000445 }
446
Guido van Rossum758eec01998-01-19 21:58:26 +0000447 /* The special treatment of __builtin__ here is because even
448 when it's not referenced as a module, its dictionary is
449 referenced by almost every module's __builtins__. Since
450 deleting a module clears its dictionary (even if there are
451 references left to it), we need to delete the __builtin__
452 module last. Likewise, we don't delete sys until the very
453 end because it is implicitly referenced (e.g. by print).
454
455 Also note that we 'delete' modules by replacing their entry
456 in the modules dict with None, rather than really deleting
457 them; this avoids a rehash of the modules dictionary and
458 also marks them as "non existent" so they won't be
459 re-imported. */
460
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000461 /* Next, repeatedly delete modules with a reference count of
Guido van Rossum758eec01998-01-19 21:58:26 +0000462 one (skipping __builtin__ and sys) and delete them */
463 do {
464 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000465 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000466 while (PyDict_Next(modules, &pos, &key, &value)) {
467 if (value->ob_refcnt != 1)
468 continue;
Guido van Rossum566373e1998-10-01 15:24:50 +0000469 if (PyString_Check(key) && PyModule_Check(value)) {
470 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000471 if (strcmp(name, "__builtin__") == 0)
472 continue;
473 if (strcmp(name, "sys") == 0)
474 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000475 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000476 PySys_WriteStderr(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000477 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000478 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000479 PyDict_SetItem(modules, key, Py_None);
480 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000481 }
482 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000483 } while (ndone > 0);
484
Guido van Rossum758eec01998-01-19 21:58:26 +0000485 /* Next, delete all modules (still skipping __builtin__ and sys) */
486 pos = 0;
487 while (PyDict_Next(modules, &pos, &key, &value)) {
Guido van Rossum566373e1998-10-01 15:24:50 +0000488 if (PyString_Check(key) && PyModule_Check(value)) {
489 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000490 if (strcmp(name, "__builtin__") == 0)
491 continue;
492 if (strcmp(name, "sys") == 0)
493 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000494 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000495 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000496 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000497 PyDict_SetItem(modules, key, Py_None);
498 }
499 }
500
501 /* Next, delete sys and __builtin__ (in that order) */
502 value = PyDict_GetItemString(modules, "sys");
503 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000504 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000505 PySys_WriteStderr("# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000506 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000507 PyDict_SetItemString(modules, "sys", Py_None);
508 }
509 value = PyDict_GetItemString(modules, "__builtin__");
510 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000511 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000512 PySys_WriteStderr("# cleanup __builtin__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000513 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000514 PyDict_SetItemString(modules, "__builtin__", Py_None);
515 }
516
517 /* Finally, clear and delete the modules directory */
518 PyDict_Clear(modules);
519 interp->modules = NULL;
520 Py_DECREF(modules);
Collin Winter276887b2007-03-12 16:11:39 +0000521 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000522}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000523
524
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000525/* Helper for pythonrun.c -- return magic number */
526
527long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000528PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000529{
Guido van Rossum96774c12000-05-01 20:19:08 +0000530 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000531}
532
533
Guido van Rossum25ce5661997-08-02 03:10:38 +0000534/* Magic for extension modules (built-in as well as dynamically
535 loaded). To prevent initializing an extension module more than
536 once, we keep a static dictionary 'extensions' keyed by module name
537 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000538 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000539 dictionary is stored by calling _PyImport_FixupExtension()
540 immediately after the module initialization function succeeds. A
541 copy can be retrieved from there by calling
542 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000543
Guido van Rossum79f25d91997-04-29 20:08:16 +0000544PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000545_PyImport_FixupExtension(char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000546{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000547 PyObject *modules, *mod, *dict, *copy;
548 if (extensions == NULL) {
549 extensions = PyDict_New();
550 if (extensions == NULL)
551 return NULL;
552 }
553 modules = PyImport_GetModuleDict();
554 mod = PyDict_GetItemString(modules, name);
555 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000556 PyErr_Format(PyExc_SystemError,
557 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000558 return NULL;
559 }
560 dict = PyModule_GetDict(mod);
561 if (dict == NULL)
562 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000563 copy = PyDict_Copy(dict);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000564 if (copy == NULL)
565 return NULL;
566 PyDict_SetItemString(extensions, filename, copy);
567 Py_DECREF(copy);
568 return copy;
569}
570
571PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000572_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000573{
Fred Drake9cd0efc2001-10-25 21:38:59 +0000574 PyObject *dict, *mod, *mdict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000575 if (extensions == NULL)
576 return NULL;
577 dict = PyDict_GetItemString(extensions, filename);
578 if (dict == NULL)
579 return NULL;
580 mod = PyImport_AddModule(name);
581 if (mod == NULL)
582 return NULL;
583 mdict = PyModule_GetDict(mod);
584 if (mdict == NULL)
585 return NULL;
Fred Drake9cd0efc2001-10-25 21:38:59 +0000586 if (PyDict_Update(mdict, dict))
Guido van Rossum25ce5661997-08-02 03:10:38 +0000587 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000588 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000589 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Guido van Rossum25ce5661997-08-02 03:10:38 +0000590 name, filename);
591 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000592}
593
594
595/* Get the module object corresponding to a module name.
596 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000597 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000598 Because the former action is most common, THIS DOES NOT RETURN A
599 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000600
Guido van Rossum79f25d91997-04-29 20:08:16 +0000601PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000602PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000603{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000604 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000605 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000606
Guido van Rossum25ce5661997-08-02 03:10:38 +0000607 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000608 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000609 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000610 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000611 if (m == NULL)
612 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000613 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000614 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000615 return NULL;
616 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000617 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000618
619 return m;
620}
621
Tim Peters1cd70172004-08-02 03:52:12 +0000622/* Remove name from sys.modules, if it's there. */
623static void
624_RemoveModule(const char *name)
625{
626 PyObject *modules = PyImport_GetModuleDict();
627 if (PyDict_GetItemString(modules, name) == NULL)
628 return;
629 if (PyDict_DelItemString(modules, name) < 0)
630 Py_FatalError("import: deleting existing key in"
631 "sys.modules failed");
632}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000633
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000634/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000635 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
636 * removed from sys.modules, to avoid leaving damaged module objects
637 * in sys.modules. The caller may wish to restore the original
638 * module object (if any) in this case; PyImport_ReloadModule is an
639 * example.
640 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000642PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000643{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000644 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
645}
646
647PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000648PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000649{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000650 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000651 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000652
Guido van Rossum79f25d91997-04-29 20:08:16 +0000653 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000654 if (m == NULL)
655 return NULL;
Jeremy Hyltonecd91292004-01-02 23:25:32 +0000656 /* If the module is being reloaded, we get the old module back
657 and re-use its dict to exec the new code. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000658 d = PyModule_GetDict(m);
659 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
660 if (PyDict_SetItemString(d, "__builtins__",
661 PyEval_GetBuiltins()) != 0)
Tim Peters1cd70172004-08-02 03:52:12 +0000662 goto error;
Guido van Rossum6135a871995-01-09 17:53:26 +0000663 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000664 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000665 v = NULL;
666 if (pathname != NULL) {
667 v = PyString_FromString(pathname);
668 if (v == NULL)
669 PyErr_Clear();
670 }
671 if (v == NULL) {
672 v = ((PyCodeObject *)co)->co_filename;
673 Py_INCREF(v);
674 }
675 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000676 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000677 Py_DECREF(v);
678
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000679 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000680 if (v == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000681 goto error;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000682 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000683
Guido van Rossum25ce5661997-08-02 03:10:38 +0000684 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000685 PyErr_Format(PyExc_ImportError,
686 "Loaded module %.200s not found in sys.modules",
687 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000688 return NULL;
689 }
690
Guido van Rossum79f25d91997-04-29 20:08:16 +0000691 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000692
693 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000694
695 error:
696 _RemoveModule(name);
697 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000698}
699
700
701/* Given a pathname for a Python source file, fill a buffer with the
702 pathname for the corresponding compiled file. Return the pathname
703 for the compiled file, or NULL if there's no space in the buffer.
704 Doesn't set an exception. */
705
706static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000707make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000708{
Tim Petersc1731372001-08-04 08:12:36 +0000709 size_t len = strlen(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000710 if (len+2 > buflen)
711 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000712
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000713#ifdef MS_WINDOWS
Tim Petersc1731372001-08-04 08:12:36 +0000714 /* Treat .pyw as if it were .py. The case of ".pyw" must match
715 that used in _PyImport_StandardFiletab. */
716 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
717 --len; /* pretend 'w' isn't there */
718#endif
719 memcpy(buf, pathname, len);
720 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
721 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000722
723 return buf;
724}
725
726
727/* Given a pathname for a Python source file, its time of last
728 modification, and a pathname for a compiled file, check whether the
729 compiled file represents the same version of the source. If so,
730 return a FILE pointer for the compiled file, positioned just after
731 the header; if not, return NULL.
732 Doesn't set an exception. */
733
734static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000735check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000736{
737 FILE *fp;
738 long magic;
739 long pyc_mtime;
740
741 fp = fopen(cpathname, "rb");
742 if (fp == NULL)
743 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000745 if (magic != pyc_magic) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000746 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000747 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000748 fclose(fp);
749 return NULL;
750 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000752 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000753 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000754 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000755 fclose(fp);
756 return NULL;
757 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000758 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000759 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000760 return fp;
761}
762
763
764/* Read a code object from a file and check it for validity */
765
Guido van Rossum79f25d91997-04-29 20:08:16 +0000766static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000767read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000768{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000769 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000770
Tim Petersd9b9ac82001-01-28 00:27:39 +0000771 co = PyMarshal_ReadLastObjectFromFile(fp);
Armin Rigo01ab2792004-03-26 15:09:27 +0000772 if (co == NULL)
773 return NULL;
774 if (!PyCode_Check(co)) {
775 PyErr_Format(PyExc_ImportError,
776 "Non-code object in %.200s", cpathname);
777 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000778 return NULL;
779 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000780 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000781}
782
783
784/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000785 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000786
Guido van Rossum79f25d91997-04-29 20:08:16 +0000787static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000788load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000789{
790 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000791 PyCodeObject *co;
792 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000793
Guido van Rossum79f25d91997-04-29 20:08:16 +0000794 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000795 if (magic != pyc_magic) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000796 PyErr_Format(PyExc_ImportError,
797 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000798 return NULL;
799 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000800 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000801 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000802 if (co == NULL)
803 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000804 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000805 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000806 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000807 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000808 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000809
810 return m;
811}
812
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000813/* Parse a source file and return the corresponding code object */
814
Guido van Rossum79f25d91997-04-29 20:08:16 +0000815static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000816parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000817{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000818 PyCodeObject *co = NULL;
819 mod_ty mod;
Neal Norwitz2a399b02006-09-11 04:28:16 +0000820 PyArena *arena = PyArena_New();
821 if (arena == NULL)
822 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000823
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000824 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, 0,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000825 NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000826 if (mod) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000827 co = PyAST_Compile(mod, pathname, NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000828 }
Neal Norwitz2a399b02006-09-11 04:28:16 +0000829 PyArena_Free(arena);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000830 return co;
831}
832
833
Guido van Rossum55a83382000-09-20 20:31:38 +0000834/* Helper to open a bytecode file for writing in exclusive mode */
835
836static FILE *
Christian Heimes40346852008-02-23 17:52:07 +0000837open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +0000838{
839#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
840 /* Use O_EXCL to avoid a race condition when another process tries to
841 write the same file. When that happens, our open() call fails,
842 which is just fine (since it's only a cache).
843 XXX If the file exists and is writable but the directory is not
844 writable, the file will never be written. Oh well.
845 */
846 int fd;
847 (void) unlink(filename);
Tim Peters42c83af2000-09-29 04:03:10 +0000848 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
849#ifdef O_BINARY
850 |O_BINARY /* necessary for Windows */
851#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000852#ifdef __VMS
Christian Heimes40346852008-02-23 17:52:07 +0000853 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000854#else
Christian Heimes40346852008-02-23 17:52:07 +0000855 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000856#endif
Martin v. Löwis18e16552006-02-15 17:27:45 +0000857 );
Guido van Rossum55a83382000-09-20 20:31:38 +0000858 if (fd < 0)
859 return NULL;
860 return fdopen(fd, "wb");
861#else
862 /* Best we can do -- on Windows this can't happen anyway */
863 return fopen(filename, "wb");
864#endif
865}
866
867
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000868/* Write a compiled module to a file, placing the time of last
869 modification of its source into the header.
870 Errors are ignored, if a write error occurs an attempt is made to
871 remove the file. */
872
873static void
Christian Heimes40346852008-02-23 17:52:07 +0000874write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000875{
876 FILE *fp;
Christian Heimes40346852008-02-23 17:52:07 +0000877 time_t mtime = srcstat->st_mtime;
878 mode_t mode = srcstat->st_mode;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000879
Christian Heimes40346852008-02-23 17:52:07 +0000880 fp = open_exclusive(cpathname, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000881 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000882 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000883 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000884 "# can't create %s\n", cpathname);
885 return;
886 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000887 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000888 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000889 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
890 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000891 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000892 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000893 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000894 /* Don't keep partial file */
895 fclose(fp);
896 (void) unlink(cpathname);
897 return;
898 }
899 /* Now write the true mtime */
900 fseek(fp, 4L, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000901 assert(mtime < LONG_MAX);
Martin v. Löwis725507b2006-03-07 12:08:51 +0000902 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000903 fflush(fp);
904 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000905 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000906 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000907}
908
909
910/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000911 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
912 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000913
Guido van Rossum79f25d91997-04-29 20:08:16 +0000914static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000915load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000916{
Christian Heimes40346852008-02-23 17:52:07 +0000917 struct stat st;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000918 FILE *fpc;
919 char buf[MAXPATHLEN+1];
920 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921 PyCodeObject *co;
922 PyObject *m;
Christian Heimes40346852008-02-23 17:52:07 +0000923
924 if (fstat(fileno(fp), &st) != 0) {
Neal Norwitz708e51a2005-10-03 04:48:15 +0000925 PyErr_Format(PyExc_RuntimeError,
Christian Heimes40346852008-02-23 17:52:07 +0000926 "unable to get file status from '%s'",
Neal Norwitz708e51a2005-10-03 04:48:15 +0000927 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +0000928 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +0000929 }
Fred Drake4c82b232000-06-30 16:18:57 +0000930#if SIZEOF_TIME_T > 4
931 /* Python's .pyc timestamp handling presumes that the timestamp fits
932 in 4 bytes. This will be fine until sometime in the year 2038,
933 when a 4-byte signed time_t will overflow.
934 */
Christian Heimes40346852008-02-23 17:52:07 +0000935 if (st.st_mtime >> 32) {
Fred Drake4c82b232000-06-30 16:18:57 +0000936 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +0000937 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +0000938 return NULL;
939 }
940#endif
Tim Peters36515e22001-11-18 04:06:29 +0000941 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +0000942 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000943 if (cpathname != NULL &&
Christian Heimes40346852008-02-23 17:52:07 +0000944 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000945 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000946 fclose(fpc);
947 if (co == NULL)
948 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000949 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000950 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000951 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000952 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000953 }
954 else {
955 co = parse_source_module(pathname, fp);
956 if (co == NULL)
957 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000958 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000959 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000960 name, pathname);
Georg Brandl2da0fce2008-01-07 17:09:35 +0000961 if (cpathname) {
962 PyObject *ro = PySys_GetObject("dont_write_bytecode");
963 if (ro == NULL || !PyObject_IsTrue(ro))
Christian Heimes40346852008-02-23 17:52:07 +0000964 write_compiled_module(co, cpathname, &st);
Georg Brandl2da0fce2008-01-07 17:09:35 +0000965 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000966 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000967 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000969
970 return m;
971}
972
973
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000974/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +0000975static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
976static struct filedescr *find_module(char *, char *, PyObject *,
977 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +0000978static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000979
980/* Load a package and return its module object WITH INCREMENTED
981 REFERENCE COUNT */
982
983static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000984load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000985{
Tim Peters1cd70172004-08-02 03:52:12 +0000986 PyObject *m, *d;
987 PyObject *file = NULL;
988 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000989 int err;
990 char buf[MAXPATHLEN+1];
991 FILE *fp = NULL;
992 struct filedescr *fdp;
993
994 m = PyImport_AddModule(name);
995 if (m == NULL)
996 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000997 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000998 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000999 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001000 d = PyModule_GetDict(m);
1001 file = PyString_FromString(pathname);
1002 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +00001003 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001004 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +00001005 if (path == NULL)
1006 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001007 err = PyDict_SetItemString(d, "__file__", file);
1008 if (err == 0)
1009 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +00001010 if (err != 0)
1011 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001012 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00001013 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001014 if (fdp == NULL) {
1015 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1016 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +00001017 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001018 }
1019 else
1020 m = NULL;
1021 goto cleanup;
1022 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001023 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001024 if (fp != NULL)
1025 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00001026 goto cleanup;
1027
1028 error:
1029 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001030 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001031 Py_XDECREF(path);
1032 Py_XDECREF(file);
1033 return m;
1034}
1035
1036
1037/* Helper to test for built-in module */
1038
1039static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001040is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001041{
1042 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +00001043 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1044 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1045 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001046 return -1;
1047 else
1048 return 1;
1049 }
1050 }
1051 return 0;
1052}
1053
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001054
Just van Rossum52e14d62002-12-30 22:08:05 +00001055/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1056 possibly by fetching it from the path_importer_cache dict. If it
Brett Cannon94b69f62006-09-28 22:10:14 +00001057 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001058 that can handle the path item. Return None if no hook could;
1059 this tells our caller it should fall back to the builtin
1060 import mechanism. Cache the result in path_importer_cache.
1061 Returns a borrowed reference. */
1062
1063static PyObject *
1064get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1065 PyObject *p)
1066{
1067 PyObject *importer;
Martin v. Löwis725507b2006-03-07 12:08:51 +00001068 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001069
1070 /* These conditions are the caller's responsibility: */
1071 assert(PyList_Check(path_hooks));
1072 assert(PyDict_Check(path_importer_cache));
1073
1074 nhooks = PyList_Size(path_hooks);
1075 if (nhooks < 0)
1076 return NULL; /* Shouldn't happen */
1077
1078 importer = PyDict_GetItem(path_importer_cache, p);
1079 if (importer != NULL)
1080 return importer;
1081
1082 /* set path_importer_cache[p] to None to avoid recursion */
1083 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1084 return NULL;
1085
1086 for (j = 0; j < nhooks; j++) {
1087 PyObject *hook = PyList_GetItem(path_hooks, j);
1088 if (hook == NULL)
1089 return NULL;
Georg Brandl684fd0c2006-05-25 19:15:31 +00001090 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
Just van Rossum52e14d62002-12-30 22:08:05 +00001091 if (importer != NULL)
1092 break;
1093
1094 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1095 return NULL;
1096 }
1097 PyErr_Clear();
1098 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001099 if (importer == NULL) {
1100 importer = PyObject_CallFunctionObjArgs(
Nick Coghlan327a39b2007-11-18 11:56:28 +00001101 (PyObject *)&PyNullImporter_Type, p, NULL
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001102 );
1103 if (importer == NULL) {
1104 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1105 PyErr_Clear();
1106 return Py_None;
1107 }
1108 }
1109 }
1110 if (importer != NULL) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001111 int err = PyDict_SetItem(path_importer_cache, p, importer);
1112 Py_DECREF(importer);
1113 if (err != 0)
1114 return NULL;
1115 }
1116 return importer;
1117}
1118
Nick Coghlan327a39b2007-11-18 11:56:28 +00001119PyAPI_FUNC(PyObject *)
1120PyImport_GetImporter(PyObject *path) {
1121 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
1122
1123 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1124 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1125 importer = get_path_importer(path_importer_cache,
1126 path_hooks, path);
1127 }
1128 }
1129 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1130 return importer;
1131}
1132
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001133/* Search the path (default sys.path) for a module. Return the
1134 corresponding filedescr struct, and (via return arguments) the
1135 pathname and an open file. Return NULL if the module is not found. */
1136
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001137#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001138extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001139 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001140#endif
1141
Martin v. Löwis18e16552006-02-15 17:27:45 +00001142static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001143static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001144static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001145
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001146static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001147find_module(char *fullname, char *subname, PyObject *path, char *buf,
1148 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001149{
Martin v. Löwis725507b2006-03-07 12:08:51 +00001150 Py_ssize_t i, npath;
Fred Drake4c82b232000-06-30 16:18:57 +00001151 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001152 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001153 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001154 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001155 PyObject *path_hooks, *path_importer_cache;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001156#ifndef RISCOS
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001157 struct stat statbuf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001158#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001159 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1160 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1161 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001162 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001163#if defined(PYOS_OS2)
1164 size_t saved_len;
1165 size_t saved_namelen;
1166 char *saved_buf = NULL;
1167#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001168 if (p_loader != NULL)
1169 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001170
Just van Rossum52e14d62002-12-30 22:08:05 +00001171 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001172 PyErr_SetString(PyExc_OverflowError,
1173 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001174 return NULL;
1175 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001176 strcpy(name, subname);
1177
1178 /* sys.meta_path import hook */
1179 if (p_loader != NULL) {
1180 PyObject *meta_path;
1181
1182 meta_path = PySys_GetObject("meta_path");
1183 if (meta_path == NULL || !PyList_Check(meta_path)) {
1184 PyErr_SetString(PyExc_ImportError,
1185 "sys.meta_path must be a list of "
1186 "import hooks");
1187 return NULL;
1188 }
1189 Py_INCREF(meta_path); /* zap guard */
1190 npath = PyList_Size(meta_path);
1191 for (i = 0; i < npath; i++) {
1192 PyObject *loader;
1193 PyObject *hook = PyList_GetItem(meta_path, i);
1194 loader = PyObject_CallMethod(hook, "find_module",
1195 "sO", fullname,
1196 path != NULL ?
1197 path : Py_None);
1198 if (loader == NULL) {
1199 Py_DECREF(meta_path);
1200 return NULL; /* true error */
1201 }
1202 if (loader != Py_None) {
1203 /* a loader was found */
1204 *p_loader = loader;
1205 Py_DECREF(meta_path);
1206 return &importhookdescr;
1207 }
1208 Py_DECREF(loader);
1209 }
1210 Py_DECREF(meta_path);
1211 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001212
1213 if (path != NULL && PyString_Check(path)) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001214 /* The only type of submodule allowed inside a "frozen"
1215 package are other frozen modules or packages. */
Guido van Rossum0506a431998-08-11 15:07:39 +00001216 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1217 PyErr_SetString(PyExc_ImportError,
1218 "full frozen module name too long");
1219 return NULL;
1220 }
1221 strcpy(buf, PyString_AsString(path));
1222 strcat(buf, ".");
1223 strcat(buf, name);
1224 strcpy(name, buf);
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001225 if (find_frozen(name) != NULL) {
1226 strcpy(buf, name);
1227 return &fd_frozen;
1228 }
1229 PyErr_Format(PyExc_ImportError,
1230 "No frozen submodule named %.200s", name);
1231 return NULL;
Guido van Rossum0506a431998-08-11 15:07:39 +00001232 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001233 if (path == NULL) {
1234 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001235 strcpy(buf, name);
1236 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001237 }
Greg Ward201baee2001-10-04 14:52:06 +00001238 if ((find_frozen(name)) != NULL) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001239 strcpy(buf, name);
1240 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001241 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001242
Guido van Rossumac279101996-08-22 23:10:58 +00001243#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001244 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1245 if (fp != NULL) {
1246 *p_fp = fp;
1247 return fdp;
1248 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001249#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001250 path = PySys_GetObject("path");
1251 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001252 if (path == NULL || !PyList_Check(path)) {
1253 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001254 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001255 return NULL;
1256 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001257
1258 path_hooks = PySys_GetObject("path_hooks");
1259 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1260 PyErr_SetString(PyExc_ImportError,
1261 "sys.path_hooks must be a list of "
1262 "import hooks");
1263 return NULL;
1264 }
1265 path_importer_cache = PySys_GetObject("path_importer_cache");
1266 if (path_importer_cache == NULL ||
1267 !PyDict_Check(path_importer_cache)) {
1268 PyErr_SetString(PyExc_ImportError,
1269 "sys.path_importer_cache must be a dict");
1270 return NULL;
1271 }
1272
Guido van Rossum79f25d91997-04-29 20:08:16 +00001273 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001274 namelen = strlen(name);
1275 for (i = 0; i < npath; i++) {
Walter Dörwald3430d702002-06-17 10:43:59 +00001276 PyObject *copy = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001277 PyObject *v = PyList_GetItem(path, i);
Neal Norwitz3cb31ac2006-08-13 18:10:47 +00001278 if (!v)
1279 return NULL;
Walter Dörwald3430d702002-06-17 10:43:59 +00001280#ifdef Py_USING_UNICODE
1281 if (PyUnicode_Check(v)) {
1282 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1283 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1284 if (copy == NULL)
1285 return NULL;
1286 v = copy;
1287 }
1288 else
1289#endif
Guido van Rossum79f25d91997-04-29 20:08:16 +00001290 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001291 continue;
Neal Norwitz2aa9a5d2006-03-20 01:53:23 +00001292 len = PyString_GET_SIZE(v);
Walter Dörwald3430d702002-06-17 10:43:59 +00001293 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1294 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001295 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001296 }
Neal Norwitz2aa9a5d2006-03-20 01:53:23 +00001297 strcpy(buf, PyString_AS_STRING(v));
Walter Dörwald3430d702002-06-17 10:43:59 +00001298 if (strlen(buf) != len) {
1299 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001300 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001301 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001302
1303 /* sys.path_hooks import hook */
1304 if (p_loader != NULL) {
1305 PyObject *importer;
1306
1307 importer = get_path_importer(path_importer_cache,
1308 path_hooks, v);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001309 if (importer == NULL) {
1310 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001311 return NULL;
Neal Norwitza4df11d2006-07-06 04:28:59 +00001312 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001313 /* Note: importer is a borrowed reference */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00001314 if (importer != Py_None) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001315 PyObject *loader;
1316 loader = PyObject_CallMethod(importer,
1317 "find_module",
1318 "s", fullname);
Neal Norwitza4df11d2006-07-06 04:28:59 +00001319 Py_XDECREF(copy);
Just van Rossum52e14d62002-12-30 22:08:05 +00001320 if (loader == NULL)
1321 return NULL; /* error */
1322 if (loader != Py_None) {
1323 /* a loader was found */
1324 *p_loader = loader;
1325 return &importhookdescr;
1326 }
1327 Py_DECREF(loader);
Georg Brandlf4ef1162006-05-26 18:03:31 +00001328 continue;
Just van Rossum52e14d62002-12-30 22:08:05 +00001329 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001330 }
Georg Brandlf4ef1162006-05-26 18:03:31 +00001331 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001332
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001333 if (len > 0 && buf[len-1] != SEP
1334#ifdef ALTSEP
1335 && buf[len-1] != ALTSEP
1336#endif
1337 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001338 buf[len++] = SEP;
Guido van Rossum215c3402000-11-13 17:26:32 +00001339 strcpy(buf+len, name);
1340 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001341
1342 /* Check for package import (buf holds a directory name,
1343 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001344#ifdef HAVE_STAT
Walter Dörwald3430d702002-06-17 10:43:59 +00001345 if (stat(buf, &statbuf) == 0 && /* it exists */
1346 S_ISDIR(statbuf.st_mode) && /* it's a directory */
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001347 case_ok(buf, len, namelen, name)) { /* case matches */
1348 if (find_init_module(buf)) { /* and has __init__.py */
1349 Py_XDECREF(copy);
1350 return &fd_package;
1351 }
1352 else {
1353 char warnstr[MAXPATHLEN+80];
1354 sprintf(warnstr, "Not importing directory "
1355 "'%.*s': missing __init__.py",
1356 MAXPATHLEN, buf);
1357 if (PyErr_Warn(PyExc_ImportWarning,
1358 warnstr)) {
1359 Py_XDECREF(copy);
1360 return NULL;
1361 }
1362 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001363 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001364#else
1365 /* XXX How are you going to test for directories? */
Guido van Rossum48a680c2001-03-02 06:34:14 +00001366#ifdef RISCOS
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001367 if (isdir(buf) &&
Walter Dörwald3430d702002-06-17 10:43:59 +00001368 case_ok(buf, len, namelen, name)) {
Thomas Wouters9df4e6f2006-04-27 23:13:20 +00001369 if (find_init_module(buf)) {
1370 Py_XDECREF(copy);
1371 return &fd_package;
1372 }
1373 else {
1374 char warnstr[MAXPATHLEN+80];
1375 sprintf(warnstr, "Not importing directory "
1376 "'%.*s': missing __init__.py",
1377 MAXPATHLEN, buf);
1378 if (PyErr_Warn(PyExc_ImportWarning,
1379 warnstr)) {
1380 Py_XDECREF(copy);
1381 return NULL;
1382 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001383 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001384#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001385#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001386#if defined(PYOS_OS2)
1387 /* take a snapshot of the module spec for restoration
1388 * after the 8 character DLL hackery
1389 */
1390 saved_buf = strdup(buf);
1391 saved_len = len;
1392 saved_namelen = namelen;
1393#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001394 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Georg Brandladd36e52007-08-23 18:08:06 +00001395#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001396 /* OS/2 limits DLLs to 8 character names (w/o
1397 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001398 * so if the name is longer than that and its a
1399 * dynamically loaded module we're going to try,
1400 * truncate the name before trying
1401 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001402 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001403 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001404 const struct filedescr *scan;
1405 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001406 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001407 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001408 break;
1409 else
1410 scan++;
1411 }
1412 if (scan->suffix != NULL) {
1413 /* yes, so truncate the name */
1414 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001415 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001416 buf[len] = '\0';
1417 }
1418 }
1419#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001420 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001421 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001422 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001423 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001424 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001425 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001426 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001427 if (fp != NULL) {
1428 if (case_ok(buf, len, namelen, name))
1429 break;
1430 else { /* continue search */
1431 fclose(fp);
1432 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001433 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001434 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001435#if defined(PYOS_OS2)
1436 /* restore the saved snapshot */
1437 strcpy(buf, saved_buf);
1438 len = saved_len;
1439 namelen = saved_namelen;
1440#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001441 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001442#if defined(PYOS_OS2)
1443 /* don't need/want the module name snapshot anymore */
1444 if (saved_buf)
1445 {
1446 free(saved_buf);
1447 saved_buf = NULL;
1448 }
1449#endif
Walter Dörwald3430d702002-06-17 10:43:59 +00001450 Py_XDECREF(copy);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001451 if (fp != NULL)
1452 break;
1453 }
1454 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001455 PyErr_Format(PyExc_ImportError,
1456 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001457 return NULL;
1458 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001459 *p_fp = fp;
1460 return fdp;
1461}
1462
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001463/* Helpers for main.c
1464 * Find the source file corresponding to a named module
1465 */
1466struct filedescr *
1467_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1468 size_t buflen, FILE **p_fp, PyObject **p_loader)
1469{
1470 return find_module((char *) name, (char *) name, path,
1471 buf, buflen, p_fp, p_loader);
1472}
1473
1474PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1475{
1476 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1477}
1478
Martin v. Löwis18e16552006-02-15 17:27:45 +00001479/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001480 * The arguments here are tricky, best shown by example:
1481 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1482 * ^ ^ ^ ^
1483 * |--------------------- buf ---------------------|
1484 * |------------------- len ------------------|
1485 * |------ name -------|
1486 * |----- namelen -----|
1487 * buf is the full path, but len only counts up to (& exclusive of) the
1488 * extension. name is the module name, also exclusive of extension.
1489 *
1490 * We've already done a successful stat() or fopen() on buf, so know that
1491 * there's some match, possibly case-insensitive.
1492 *
Tim Peters50d8d372001-02-28 05:34:27 +00001493 * case_ok() is to return 1 if there's a case-sensitive match for
1494 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1495 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001496 *
Tim Peters50d8d372001-02-28 05:34:27 +00001497 * case_ok() is used to implement case-sensitive import semantics even
1498 * on platforms with case-insensitive filesystems. It's trivial to implement
1499 * for case-sensitive filesystems. It's pretty much a cross-platform
1500 * nightmare for systems with case-insensitive filesystems.
1501 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001502
Tim Peters50d8d372001-02-28 05:34:27 +00001503/* First we may need a pile of platform-specific header files; the sequence
1504 * of #if's here should match the sequence in the body of case_ok().
1505 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001506#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001507#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001508
Tim Peters50d8d372001-02-28 05:34:27 +00001509#elif defined(DJGPP)
1510#include <dir.h>
1511
Jason Tishler7961aa62005-05-20 00:56:54 +00001512#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001513#include <sys/types.h>
1514#include <dirent.h>
1515
Andrew MacIntyred9400542002-02-26 11:41:34 +00001516#elif defined(PYOS_OS2)
1517#define INCL_DOS
1518#define INCL_DOSERRORS
1519#define INCL_NOPMAPI
1520#include <os2.h>
1521
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001522#elif defined(RISCOS)
1523#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001524#endif
1525
Guido van Rossum0980bd91998-02-13 17:18:36 +00001526static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001527case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001528{
Tim Peters50d8d372001-02-28 05:34:27 +00001529/* Pick a platform-specific implementation; the sequence of #if's here should
1530 * match the sequence just above.
1531 */
1532
Jason Tishler7961aa62005-05-20 00:56:54 +00001533/* MS_WINDOWS */
1534#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001535 WIN32_FIND_DATA data;
1536 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001537
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001538 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001539 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001540
Guido van Rossum0980bd91998-02-13 17:18:36 +00001541 h = FindFirstFile(buf, &data);
1542 if (h == INVALID_HANDLE_VALUE) {
1543 PyErr_Format(PyExc_NameError,
1544 "Can't find file for module %.100s\n(filename %.300s)",
1545 name, buf);
1546 return 0;
1547 }
1548 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001549 return strncmp(data.cFileName, name, namelen) == 0;
1550
1551/* DJGPP */
1552#elif defined(DJGPP)
1553 struct ffblk ffblk;
1554 int done;
1555
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001556 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001557 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001558
1559 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1560 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001561 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001562 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001563 name, buf);
1564 return 0;
1565 }
Tim Peters50d8d372001-02-28 05:34:27 +00001566 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001567
Jason Tishler7961aa62005-05-20 00:56:54 +00001568/* new-fangled macintosh (macosx) or Cygwin */
1569#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001570 DIR *dirp;
1571 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001572 char dirname[MAXPATHLEN + 1];
1573 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001574
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001575 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001576 return 1;
1577
Tim Petersd1e87a82001-03-01 18:12:00 +00001578 /* Copy the dir component into dirname; substitute "." if empty */
1579 if (dirlen <= 0) {
1580 dirname[0] = '.';
1581 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001582 }
1583 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001584 assert(dirlen <= MAXPATHLEN);
1585 memcpy(dirname, buf, dirlen);
1586 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001587 }
1588 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001589 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001590 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001591 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001592 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001593 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001594#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001595 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001596#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001597 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001598#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001599 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001600 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001601 (void)closedir(dirp);
1602 return 1; /* Found */
1603 }
1604 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001605 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001606 }
Tim Peters430f5d42001-03-01 01:30:56 +00001607 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001608
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001609/* RISC OS */
1610#elif defined(RISCOS)
1611 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1612 char buf2[MAXPATHLEN+2];
1613 char *nameWithExt = buf+len-namelen;
1614 int canonlen;
1615 os_error *e;
1616
1617 if (Py_GETENV("PYTHONCASEOK") != NULL)
1618 return 1;
1619
1620 /* workaround:
1621 append wildcard, otherwise case of filename wouldn't be touched */
1622 strcpy(buf2, buf);
1623 strcat(buf2, "*");
1624
1625 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1626 canonlen = MAXPATHLEN+1-canonlen;
1627 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1628 return 0;
1629 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1630 return 1; /* match */
1631
1632 return 0;
1633
Andrew MacIntyred9400542002-02-26 11:41:34 +00001634/* OS/2 */
1635#elif defined(PYOS_OS2)
1636 HDIR hdir = 1;
1637 ULONG srchcnt = 1;
1638 FILEFINDBUF3 ffbuf;
1639 APIRET rc;
1640
Georg Brandlaed6c662008-01-07 17:25:53 +00001641 if (Py_GETENV("PYTHONCASEOK") != NULL)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001642 return 1;
1643
1644 rc = DosFindFirst(buf,
1645 &hdir,
1646 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1647 &ffbuf, sizeof(ffbuf),
1648 &srchcnt,
1649 FIL_STANDARD);
1650 if (rc != NO_ERROR)
1651 return 0;
1652 return strncmp(ffbuf.achName, name, namelen) == 0;
1653
Tim Peters50d8d372001-02-28 05:34:27 +00001654/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1655#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001656 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001657
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001658#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001659}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001660
Guido van Rossum0980bd91998-02-13 17:18:36 +00001661
Guido van Rossum197346f1997-10-31 18:38:52 +00001662#ifdef HAVE_STAT
1663/* Helper to look for __init__.py or __init__.py[co] in potential package */
1664static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001665find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001666{
Tim Peters0f9431f2001-07-05 03:47:53 +00001667 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001668 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001669 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001670 struct stat statbuf;
1671
Tim Peters0f9431f2001-07-05 03:47:53 +00001672/* For calling case_ok(buf, len, namelen, name):
1673 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1674 * ^ ^ ^ ^
1675 * |--------------------- buf ---------------------|
1676 * |------------------- len ------------------|
1677 * |------ name -------|
1678 * |----- namelen -----|
1679 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001680 if (save_len + 13 >= MAXPATHLEN)
1681 return 0;
1682 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001683 pname = buf + i;
1684 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001685 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001686 if (case_ok(buf,
1687 save_len + 9, /* len("/__init__") */
1688 8, /* len("__init__") */
1689 pname)) {
1690 buf[save_len] = '\0';
1691 return 1;
1692 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001693 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001694 i += strlen(pname);
1695 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001696 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001697 if (case_ok(buf,
1698 save_len + 9, /* len("/__init__") */
1699 8, /* len("__init__") */
1700 pname)) {
1701 buf[save_len] = '\0';
1702 return 1;
1703 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001704 }
1705 buf[save_len] = '\0';
1706 return 0;
1707}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001708
1709#else
1710
1711#ifdef RISCOS
1712static int
1713find_init_module(buf)
1714 char *buf;
1715{
1716 int save_len = strlen(buf);
1717 int i = save_len;
1718
1719 if (save_len + 13 >= MAXPATHLEN)
1720 return 0;
1721 buf[i++] = SEP;
1722 strcpy(buf+i, "__init__/py");
1723 if (isfile(buf)) {
1724 buf[save_len] = '\0';
1725 return 1;
1726 }
1727
1728 if (Py_OptimizeFlag)
1729 strcpy(buf+i, "o");
1730 else
1731 strcpy(buf+i, "c");
1732 if (isfile(buf)) {
1733 buf[save_len] = '\0';
1734 return 1;
1735 }
1736 buf[save_len] = '\0';
1737 return 0;
1738}
1739#endif /*RISCOS*/
1740
Guido van Rossum197346f1997-10-31 18:38:52 +00001741#endif /* HAVE_STAT */
1742
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001743
Tim Petersdbd9ba62000-07-09 03:09:57 +00001744static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001745
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001746/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001747 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001748
Guido van Rossum79f25d91997-04-29 20:08:16 +00001749static PyObject *
Just van Rossum52e14d62002-12-30 22:08:05 +00001750load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001751{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001752 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001753 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001754 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001755
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001756 /* First check that there's an open file (if we need one) */
1757 switch (type) {
1758 case PY_SOURCE:
1759 case PY_COMPILED:
1760 if (fp == NULL) {
1761 PyErr_Format(PyExc_ValueError,
1762 "file object required for import (type code %d)",
1763 type);
1764 return NULL;
1765 }
1766 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001767
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001768 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001769
1770 case PY_SOURCE:
1771 m = load_source_module(name, buf, fp);
1772 break;
1773
1774 case PY_COMPILED:
1775 m = load_compiled_module(name, buf, fp);
1776 break;
1777
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001778#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001779 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001780 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001781 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001782#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001783
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001784 case PKG_DIRECTORY:
1785 m = load_package(name, buf);
1786 break;
1787
1788 case C_BUILTIN:
1789 case PY_FROZEN:
Guido van Rossuma5568d31998-03-05 03:45:08 +00001790 if (buf != NULL && buf[0] != '\0')
1791 name = buf;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001792 if (type == C_BUILTIN)
1793 err = init_builtin(name);
1794 else
1795 err = PyImport_ImportFrozenModule(name);
1796 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001797 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001798 if (err == 0) {
1799 PyErr_Format(PyExc_ImportError,
1800 "Purported %s module %.200s not found",
1801 type == C_BUILTIN ?
1802 "builtin" : "frozen",
1803 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001804 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001805 }
1806 modules = PyImport_GetModuleDict();
1807 m = PyDict_GetItemString(modules, name);
1808 if (m == NULL) {
1809 PyErr_Format(
1810 PyExc_ImportError,
1811 "%s module %.200s not properly initialized",
1812 type == C_BUILTIN ?
1813 "builtin" : "frozen",
1814 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001815 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001816 }
1817 Py_INCREF(m);
1818 break;
1819
Just van Rossum52e14d62002-12-30 22:08:05 +00001820 case IMP_HOOK: {
1821 if (loader == NULL) {
1822 PyErr_SetString(PyExc_ImportError,
1823 "import hook without loader");
1824 return NULL;
1825 }
1826 m = PyObject_CallMethod(loader, "load_module", "s", name);
1827 break;
1828 }
1829
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001830 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001831 PyErr_Format(PyExc_ImportError,
1832 "Don't know how to import %.200s (type code %d)",
1833 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001834 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001835
1836 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001837
1838 return m;
1839}
1840
1841
1842/* Initialize a built-in module.
Brett Cannon5a9aa4f2006-10-03 21:58:55 +00001843 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001844 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001845
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001846static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001847init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001848{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001849 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001850
Greg Ward201baee2001-10-04 14:52:06 +00001851 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001852 return 1;
1853
Guido van Rossum771c6c81997-10-31 18:37:24 +00001854 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001855 if (strcmp(name, p->name) == 0) {
1856 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001857 PyErr_Format(PyExc_ImportError,
1858 "Cannot re-init internal module %.200s",
1859 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001860 return -1;
1861 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001862 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001863 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001864 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001865 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001866 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001867 if (_PyImport_FixupExtension(name, name) == NULL)
1868 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001869 return 1;
1870 }
1871 }
1872 return 0;
1873}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001874
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001875
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001876/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001877
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001878static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001879find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001880{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001881 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001882
Guido van Rossum79f25d91997-04-29 20:08:16 +00001883 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001884 if (p->name == NULL)
1885 return NULL;
1886 if (strcmp(p->name, name) == 0)
1887 break;
1888 }
1889 return p;
1890}
1891
Guido van Rossum79f25d91997-04-29 20:08:16 +00001892static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001893get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001894{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001895 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001896 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001897
1898 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001899 PyErr_Format(PyExc_ImportError,
1900 "No such frozen object named %.200s",
1901 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001902 return NULL;
1903 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001904 if (p->code == NULL) {
1905 PyErr_Format(PyExc_ImportError,
1906 "Excluded frozen object named %.200s",
1907 name);
1908 return NULL;
1909 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001910 size = p->size;
1911 if (size < 0)
1912 size = -size;
1913 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001914}
1915
1916/* Initialize a frozen module.
1917 Return 1 for succes, 0 if the module is not found, and -1 with
1918 an exception set if the initialization failed.
1919 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001920
1921int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001922PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001923{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001924 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001925 PyObject *co;
1926 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001927 int ispackage;
1928 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001929
1930 if (p == NULL)
1931 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001932 if (p->code == NULL) {
1933 PyErr_Format(PyExc_ImportError,
1934 "Excluded frozen object named %.200s",
1935 name);
1936 return -1;
1937 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001938 size = p->size;
1939 ispackage = (size < 0);
1940 if (ispackage)
1941 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001942 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001943 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001944 name, ispackage ? " package" : "");
1945 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001946 if (co == NULL)
1947 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001948 if (!PyCode_Check(co)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001949 PyErr_Format(PyExc_TypeError,
1950 "frozen object %.200s is not a code object",
1951 name);
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001952 goto err_return;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001953 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001954 if (ispackage) {
1955 /* Set __path__ to the package name */
1956 PyObject *d, *s;
1957 int err;
1958 m = PyImport_AddModule(name);
1959 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001960 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001961 d = PyModule_GetDict(m);
1962 s = PyString_InternFromString(name);
1963 if (s == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001964 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001965 err = PyDict_SetItemString(d, "__path__", s);
1966 Py_DECREF(s);
1967 if (err != 0)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001968 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001969 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001970 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001971 if (m == NULL)
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001972 goto err_return;
1973 Py_DECREF(co);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001974 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001975 return 1;
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00001976err_return:
1977 Py_DECREF(co);
1978 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001979}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001980
1981
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001982/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001983 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001984
Guido van Rossum79f25d91997-04-29 20:08:16 +00001985PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001986PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001987{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001988 PyObject *pname;
1989 PyObject *result;
1990
1991 pname = PyString_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00001992 if (pname == NULL)
1993 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001994 result = PyImport_Import(pname);
1995 Py_DECREF(pname);
1996 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001997}
1998
Christian Heimes000a0742008-01-03 22:16:32 +00001999/* Import a module without blocking
2000 *
2001 * At first it tries to fetch the module from sys.modules. If the module was
2002 * never loaded before it loads it with PyImport_ImportModule() unless another
2003 * thread holds the import lock. In the latter case the function raises an
2004 * ImportError instead of blocking.
2005 *
2006 * Returns the module object with incremented ref count.
2007 */
2008PyObject *
2009PyImport_ImportModuleNoBlock(const char *name)
2010{
2011 PyObject *result;
2012 PyObject *modules;
2013 long me;
2014
2015 /* Try to get the module from sys.modules[name] */
2016 modules = PyImport_GetModuleDict();
2017 if (modules == NULL)
2018 return NULL;
2019
2020 result = PyDict_GetItemString(modules, name);
2021 if (result != NULL) {
2022 Py_INCREF(result);
2023 return result;
2024 }
2025 else {
2026 PyErr_Clear();
2027 }
2028
2029 /* check the import lock
2030 * me might be -1 but I ignore the error here, the lock function
2031 * takes care of the problem */
2032 me = PyThread_get_thread_ident();
2033 if (import_lock_thread == -1 || import_lock_thread == me) {
2034 /* no thread or me is holding the lock */
2035 return PyImport_ImportModule(name);
2036 }
2037 else {
2038 PyErr_Format(PyExc_ImportError,
2039 "Failed to import %.200s because the import lock"
2040 "is held by another thread.",
2041 name);
2042 return NULL;
2043 }
2044}
2045
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002046/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002047static PyObject *get_parent(PyObject *globals, char *buf,
2048 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002049static PyObject *load_next(PyObject *mod, PyObject *altmod,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002050 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002051static int mark_miss(char *name);
2052static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002053 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002054static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002055
2056/* The Magnum Opus of dotted-name import :-) */
2057
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002058static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002059import_module_level(char *name, PyObject *globals, PyObject *locals,
2060 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002061{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002062 char buf[MAXPATHLEN+1];
Martin v. Löwis18e16552006-02-15 17:27:45 +00002063 Py_ssize_t buflen = 0;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002064 PyObject *parent, *head, *next, *tail;
2065
Christian Heimes3403f152008-01-09 19:56:33 +00002066 if (strchr(name, '/') != NULL
2067#ifdef MS_WINDOWS
2068 || strchr(name, '\\') != NULL
2069#endif
2070 ) {
2071 PyErr_SetString(PyExc_ImportError,
2072 "Import by filename is not supported.");
2073 return NULL;
2074 }
2075
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002076 parent = get_parent(globals, buf, &buflen, level);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002077 if (parent == NULL)
2078 return NULL;
2079
2080 head = load_next(parent, Py_None, &name, buf, &buflen);
2081 if (head == NULL)
2082 return NULL;
2083
2084 tail = head;
2085 Py_INCREF(tail);
2086 while (name) {
2087 next = load_next(tail, tail, &name, buf, &buflen);
2088 Py_DECREF(tail);
2089 if (next == NULL) {
2090 Py_DECREF(head);
2091 return NULL;
2092 }
2093 tail = next;
2094 }
Thomas Wouters8ddab272006-04-04 16:17:02 +00002095 if (tail == Py_None) {
2096 /* If tail is Py_None, both get_parent and load_next found
2097 an empty module name: someone called __import__("") or
2098 doctored faulty bytecode */
Thomas Wouters4bdaa272006-04-05 13:39:37 +00002099 Py_DECREF(tail);
2100 Py_DECREF(head);
Thomas Wouters8ddab272006-04-04 16:17:02 +00002101 PyErr_SetString(PyExc_ValueError,
2102 "Empty module name");
2103 return NULL;
2104 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002105
2106 if (fromlist != NULL) {
2107 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2108 fromlist = NULL;
2109 }
2110
2111 if (fromlist == NULL) {
2112 Py_DECREF(tail);
2113 return head;
2114 }
2115
2116 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002117 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002118 Py_DECREF(tail);
2119 return NULL;
2120 }
2121
2122 return tail;
2123}
2124
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002125PyObject *
2126PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2127 PyObject *fromlist, int level)
2128{
2129 PyObject *result;
2130 lock_import();
2131 result = import_module_level(name, globals, locals, fromlist, level);
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002132 if (unlock_import() < 0) {
2133 Py_XDECREF(result);
2134 PyErr_SetString(PyExc_RuntimeError,
2135 "not holding the import lock");
2136 return NULL;
2137 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002138 return result;
2139}
2140
Fred Drake87590902004-05-28 20:21:36 +00002141/* Return the package that an import is being performed in. If globals comes
2142 from the module foo.bar.bat (not itself a package), this returns the
2143 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Georg Brandl5f6861d2006-05-28 21:57:35 +00002144 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002145
2146 The *name* of the returned package is returned in buf, with the length of
2147 the name in *p_buflen.
2148
2149 If globals doesn't come from a package or a module in a package, or a
2150 corresponding entry is not found in sys.modules, Py_None is returned.
2151*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002152static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002153get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002154{
2155 static PyObject *namestr = NULL;
2156 static PyObject *pathstr = NULL;
Nick Coghlanef01d822007-12-03 12:55:17 +00002157 static PyObject *pkgstr = NULL;
2158 PyObject *pkgname, *modname, *modpath, *modules, *parent;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002159
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002160 if (globals == NULL || !PyDict_Check(globals) || !level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002161 return Py_None;
2162
2163 if (namestr == NULL) {
2164 namestr = PyString_InternFromString("__name__");
2165 if (namestr == NULL)
2166 return NULL;
2167 }
2168 if (pathstr == NULL) {
2169 pathstr = PyString_InternFromString("__path__");
2170 if (pathstr == NULL)
2171 return NULL;
2172 }
Nick Coghlanef01d822007-12-03 12:55:17 +00002173 if (pkgstr == NULL) {
2174 pkgstr = PyString_InternFromString("__package__");
2175 if (pkgstr == NULL)
2176 return NULL;
2177 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002178
2179 *buf = '\0';
2180 *p_buflen = 0;
Nick Coghlanef01d822007-12-03 12:55:17 +00002181 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002182
Nick Coghlanef01d822007-12-03 12:55:17 +00002183 if ((pkgname != NULL) && (pkgname != Py_None)) {
2184 /* __package__ is set, so use it */
2185 Py_ssize_t len;
2186 if (!PyString_Check(pkgname)) {
2187 PyErr_SetString(PyExc_ValueError,
2188 "__package__ set to non-string");
2189 return NULL;
2190 }
2191 len = PyString_GET_SIZE(pkgname);
2192 if (len == 0) {
2193 if (level > 0) {
2194 PyErr_SetString(PyExc_ValueError,
2195 "Attempted relative import in non-package");
2196 return NULL;
2197 }
2198 return Py_None;
2199 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002200 if (len > MAXPATHLEN) {
2201 PyErr_SetString(PyExc_ValueError,
Nick Coghlanef01d822007-12-03 12:55:17 +00002202 "Package name too long");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002203 return NULL;
2204 }
Nick Coghlanef01d822007-12-03 12:55:17 +00002205 strcpy(buf, PyString_AS_STRING(pkgname));
2206 } else {
2207 /* __package__ not set, so figure it out and set it */
2208 modname = PyDict_GetItem(globals, namestr);
2209 if (modname == NULL || !PyString_Check(modname))
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002210 return Py_None;
Nick Coghlanef01d822007-12-03 12:55:17 +00002211
2212 modpath = PyDict_GetItem(globals, pathstr);
2213 if (modpath != NULL) {
2214 /* __path__ is set, so modname is already the package name */
2215 Py_ssize_t len = PyString_GET_SIZE(modname);
2216 int error;
2217 if (len > MAXPATHLEN) {
2218 PyErr_SetString(PyExc_ValueError,
2219 "Module name too long");
2220 return NULL;
2221 }
2222 strcpy(buf, PyString_AS_STRING(modname));
2223 error = PyDict_SetItem(globals, pkgstr, modname);
2224 if (error) {
2225 PyErr_SetString(PyExc_ValueError,
2226 "Could not set __package__");
2227 return NULL;
2228 }
2229 } else {
2230 /* Normal module, so work out the package name if any */
2231 char *start = PyString_AS_STRING(modname);
2232 char *lastdot = strrchr(start, '.');
2233 size_t len;
2234 int error;
2235 if (lastdot == NULL && level > 0) {
2236 PyErr_SetString(PyExc_ValueError,
2237 "Attempted relative import in non-package");
2238 return NULL;
2239 }
2240 if (lastdot == NULL) {
2241 error = PyDict_SetItem(globals, pkgstr, Py_None);
2242 if (error) {
2243 PyErr_SetString(PyExc_ValueError,
2244 "Could not set __package__");
2245 return NULL;
2246 }
2247 return Py_None;
2248 }
2249 len = lastdot - start;
2250 if (len >= MAXPATHLEN) {
2251 PyErr_SetString(PyExc_ValueError,
2252 "Module name too long");
2253 return NULL;
2254 }
2255 strncpy(buf, start, len);
2256 buf[len] = '\0';
2257 pkgname = PyString_FromString(buf);
2258 if (pkgname == NULL) {
2259 return NULL;
2260 }
2261 error = PyDict_SetItem(globals, pkgstr, pkgname);
2262 Py_DECREF(pkgname);
2263 if (error) {
2264 PyErr_SetString(PyExc_ValueError,
2265 "Could not set __package__");
2266 return NULL;
2267 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002268 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002269 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002270 while (--level > 0) {
2271 char *dot = strrchr(buf, '.');
2272 if (dot == NULL) {
2273 PyErr_SetString(PyExc_ValueError,
Georg Brandl98775df2006-09-06 06:09:31 +00002274 "Attempted relative import beyond "
2275 "toplevel package");
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002276 return NULL;
2277 }
2278 *dot = '\0';
2279 }
2280 *p_buflen = strlen(buf);
2281
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002282 modules = PyImport_GetModuleDict();
2283 parent = PyDict_GetItemString(modules, buf);
2284 if (parent == NULL)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002285 PyErr_Format(PyExc_SystemError,
2286 "Parent module '%.200s' not loaded", buf);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002287 return parent;
2288 /* We expect, but can't guarantee, if parent != None, that:
2289 - parent.__name__ == buf
2290 - parent.__dict__ is globals
2291 If this is violated... Who cares? */
2292}
2293
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002294/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002295static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002296load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002297 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002298{
2299 char *name = *p_name;
2300 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002301 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002302 char *p;
2303 PyObject *result;
2304
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002305 if (strlen(name) == 0) {
Thomas Wouters8ddab272006-04-04 16:17:02 +00002306 /* completely empty module name should only happen in
2307 'from . import' (or '__import__("")')*/
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002308 Py_INCREF(mod);
2309 *p_name = NULL;
2310 return mod;
2311 }
2312
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002313 if (dot == NULL) {
2314 *p_name = NULL;
2315 len = strlen(name);
2316 }
2317 else {
2318 *p_name = dot+1;
2319 len = dot-name;
2320 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002321 if (len == 0) {
2322 PyErr_SetString(PyExc_ValueError,
2323 "Empty module name");
2324 return NULL;
2325 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002326
2327 p = buf + *p_buflen;
2328 if (p != buf)
2329 *p++ = '.';
2330 if (p+len-buf >= MAXPATHLEN) {
2331 PyErr_SetString(PyExc_ValueError,
2332 "Module name too long");
2333 return NULL;
2334 }
2335 strncpy(p, name, len);
2336 p[len] = '\0';
2337 *p_buflen = p+len-buf;
2338
2339 result = import_submodule(mod, p, buf);
2340 if (result == Py_None && altmod != mod) {
2341 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002342 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002343 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002344 if (result != NULL && result != Py_None) {
2345 if (mark_miss(buf) != 0) {
2346 Py_DECREF(result);
2347 return NULL;
2348 }
2349 strncpy(buf, name, len);
2350 buf[len] = '\0';
2351 *p_buflen = len;
2352 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002353 }
2354 if (result == NULL)
2355 return NULL;
2356
2357 if (result == Py_None) {
2358 Py_DECREF(result);
2359 PyErr_Format(PyExc_ImportError,
2360 "No module named %.200s", name);
2361 return NULL;
2362 }
2363
2364 return result;
2365}
2366
2367static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002368mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002369{
2370 PyObject *modules = PyImport_GetModuleDict();
2371 return PyDict_SetItemString(modules, name, Py_None);
2372}
2373
2374static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002375ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002376 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002377{
2378 int i;
2379
2380 if (!PyObject_HasAttrString(mod, "__path__"))
2381 return 1;
2382
2383 for (i = 0; ; i++) {
2384 PyObject *item = PySequence_GetItem(fromlist, i);
2385 int hasit;
2386 if (item == NULL) {
2387 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2388 PyErr_Clear();
2389 return 1;
2390 }
2391 return 0;
2392 }
2393 if (!PyString_Check(item)) {
2394 PyErr_SetString(PyExc_TypeError,
2395 "Item in ``from list'' not a string");
2396 Py_DECREF(item);
2397 return 0;
2398 }
2399 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002400 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002401 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002402 /* See if the package defines __all__ */
2403 if (recursive)
2404 continue; /* Avoid endless recursion */
2405 all = PyObject_GetAttrString(mod, "__all__");
2406 if (all == NULL)
2407 PyErr_Clear();
2408 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002409 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002410 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002411 if (!ret)
2412 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002413 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002414 continue;
2415 }
2416 hasit = PyObject_HasAttr(mod, item);
2417 if (!hasit) {
2418 char *subname = PyString_AS_STRING(item);
2419 PyObject *submod;
2420 char *p;
2421 if (buflen + strlen(subname) >= MAXPATHLEN) {
2422 PyErr_SetString(PyExc_ValueError,
2423 "Module name too long");
2424 Py_DECREF(item);
2425 return 0;
2426 }
2427 p = buf + buflen;
2428 *p++ = '.';
2429 strcpy(p, subname);
2430 submod = import_submodule(mod, subname, buf);
2431 Py_XDECREF(submod);
2432 if (submod == NULL) {
2433 Py_DECREF(item);
2434 return 0;
2435 }
2436 }
2437 Py_DECREF(item);
2438 }
2439
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002440 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002441}
2442
Neil Schemenauer00b09662003-06-16 21:03:07 +00002443static int
2444add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2445 PyObject *modules)
2446{
2447 if (mod == Py_None)
2448 return 1;
2449 /* Irrespective of the success of this load, make a
2450 reference to it in the parent package module. A copy gets
2451 saved in the modules dictionary under the full name, so get a
2452 reference from there, if need be. (The exception is when the
2453 load failed with a SyntaxError -- then there's no trace in
2454 sys.modules. In that case, of course, do nothing extra.) */
2455 if (submod == NULL) {
2456 submod = PyDict_GetItemString(modules, fullname);
2457 if (submod == NULL)
2458 return 1;
2459 }
2460 if (PyModule_Check(mod)) {
2461 /* We can't use setattr here since it can give a
2462 * spurious warning if the submodule name shadows a
2463 * builtin name */
2464 PyObject *dict = PyModule_GetDict(mod);
2465 if (!dict)
2466 return 0;
2467 if (PyDict_SetItemString(dict, subname, submod) < 0)
2468 return 0;
2469 }
2470 else {
2471 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2472 return 0;
2473 }
2474 return 1;
2475}
2476
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002477static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002478import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002479{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002480 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002481 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002482
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002483 /* Require:
2484 if mod == None: subname == fullname
2485 else: mod.__name__ + "." + subname == fullname
2486 */
2487
Tim Peters50d8d372001-02-28 05:34:27 +00002488 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002489 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002490 }
2491 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002492 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002493 char buf[MAXPATHLEN+1];
2494 struct filedescr *fdp;
2495 FILE *fp = NULL;
2496
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002497 if (mod == Py_None)
2498 path = NULL;
2499 else {
2500 path = PyObject_GetAttrString(mod, "__path__");
2501 if (path == NULL) {
2502 PyErr_Clear();
2503 Py_INCREF(Py_None);
2504 return Py_None;
2505 }
2506 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002507
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002508 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002509 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2510 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002511 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002512 if (fdp == NULL) {
2513 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2514 return NULL;
2515 PyErr_Clear();
2516 Py_INCREF(Py_None);
2517 return Py_None;
2518 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002519 m = load_module(fullname, fp, buf, fdp->type, loader);
2520 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002521 if (fp)
2522 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002523 if (!add_submodule(mod, m, fullname, subname, modules)) {
2524 Py_XDECREF(m);
2525 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002526 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002527 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002528
2529 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002530}
2531
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002532
2533/* Re-import a module of any kind and return its module object, WITH
2534 INCREMENTED REFERENCE COUNT */
2535
Guido van Rossum79f25d91997-04-29 20:08:16 +00002536PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002537PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002538{
Collin Winter47c52a82007-03-13 23:02:15 +00002539 PyInterpreterState *interp = PyThreadState_Get()->interp;
2540 PyObject *modules_reloading = interp->modules_reloading;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002541 PyObject *modules = PyImport_GetModuleDict();
Collin Winter276887b2007-03-12 16:11:39 +00002542 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002543 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002544 char buf[MAXPATHLEN+1];
2545 struct filedescr *fdp;
2546 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002547 PyObject *newm;
Collin Winter47c52a82007-03-13 23:02:15 +00002548
2549 if (modules_reloading == NULL) {
2550 Py_FatalError("PyImport_ReloadModule: "
Neal Norwitz2fca81c2007-05-30 04:53:41 +00002551 "no modules_reloading dictionary!");
Collin Winter47c52a82007-03-13 23:02:15 +00002552 return NULL;
2553 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002554
Guido van Rossum79f25d91997-04-29 20:08:16 +00002555 if (m == NULL || !PyModule_Check(m)) {
2556 PyErr_SetString(PyExc_TypeError,
2557 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002558 return NULL;
2559 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002560 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002561 if (name == NULL)
2562 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002563 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002564 PyErr_Format(PyExc_ImportError,
2565 "reload(): module %.200s not in sys.modules",
2566 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002567 return NULL;
2568 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002569 existing_m = PyDict_GetItemString(modules_reloading, name);
2570 if (existing_m != NULL) {
2571 /* Due to a recursive reload, this module is already
2572 being reloaded. */
2573 Py_INCREF(existing_m);
2574 return existing_m;
Collin Winter276887b2007-03-12 16:11:39 +00002575 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002576 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2577 return NULL;
Collin Winter276887b2007-03-12 16:11:39 +00002578
Guido van Rossum222ef561997-09-06 19:41:09 +00002579 subname = strrchr(name, '.');
2580 if (subname == NULL)
2581 subname = name;
2582 else {
2583 PyObject *parentname, *parent;
2584 parentname = PyString_FromStringAndSize(name, (subname-name));
Collin Winter276887b2007-03-12 16:11:39 +00002585 if (parentname == NULL) {
2586 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002587 return NULL;
Neal Norwitz75c7c802007-03-13 05:31:38 +00002588 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002589 parent = PyDict_GetItem(modules, parentname);
2590 if (parent == NULL) {
2591 PyErr_Format(PyExc_ImportError,
2592 "reload(): parent %.200s not in sys.modules",
Georg Brandl0c55f292005-09-14 06:56:20 +00002593 PyString_AS_STRING(parentname));
2594 Py_DECREF(parentname);
Neal Norwitz2fca81c2007-05-30 04:53:41 +00002595 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002596 return NULL;
2597 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002598 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002599 subname++;
2600 path = PyObject_GetAttrString(parent, "__path__");
2601 if (path == NULL)
2602 PyErr_Clear();
2603 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002604 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002605 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002606 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002607
2608 if (fdp == NULL) {
2609 Py_XDECREF(loader);
Collin Winter276887b2007-03-12 16:11:39 +00002610 imp_modules_reloading_clear();
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002611 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002612 }
2613
2614 newm = load_module(name, fp, buf, fdp->type, loader);
2615 Py_XDECREF(loader);
2616
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002617 if (fp)
2618 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002619 if (newm == NULL) {
2620 /* load_module probably removed name from modules because of
2621 * the error. Put back the original module object. We're
2622 * going to return NULL in this case regardless of whether
2623 * replacing name succeeds, so the return value is ignored.
2624 */
2625 PyDict_SetItemString(modules, name, m);
2626 }
Neal Norwitz75c7c802007-03-13 05:31:38 +00002627 imp_modules_reloading_clear();
Tim Peters1cd70172004-08-02 03:52:12 +00002628 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002629}
2630
2631
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002632/* Higher-level import emulator which emulates the "import" statement
2633 more accurately -- it invokes the __import__() function from the
2634 builtins of the current globals. This means that the import is
2635 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002636 environment, e.g. by "rexec".
2637 A dummy list ["__doc__"] is passed as the 4th argument so that
2638 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
2639 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002640
2641PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002642PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002643{
2644 static PyObject *silly_list = NULL;
2645 static PyObject *builtins_str = NULL;
2646 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002647 PyObject *globals = NULL;
2648 PyObject *import = NULL;
2649 PyObject *builtins = NULL;
2650 PyObject *r = NULL;
2651
2652 /* Initialize constant string objects */
2653 if (silly_list == NULL) {
2654 import_str = PyString_InternFromString("__import__");
2655 if (import_str == NULL)
2656 return NULL;
2657 builtins_str = PyString_InternFromString("__builtins__");
2658 if (builtins_str == NULL)
2659 return NULL;
2660 silly_list = Py_BuildValue("[s]", "__doc__");
2661 if (silly_list == NULL)
2662 return NULL;
2663 }
2664
2665 /* Get the builtins from current globals */
2666 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002667 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002668 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002669 builtins = PyObject_GetItem(globals, builtins_str);
2670 if (builtins == NULL)
2671 goto err;
2672 }
2673 else {
2674 /* No globals -- use standard builtins, and fake globals */
2675 PyErr_Clear();
2676
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002677 builtins = PyImport_ImportModuleLevel("__builtin__",
2678 NULL, NULL, NULL, 0);
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002679 if (builtins == NULL)
2680 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002681 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2682 if (globals == NULL)
2683 goto err;
2684 }
2685
2686 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002687 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002688 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002689 if (import == NULL)
2690 PyErr_SetObject(PyExc_KeyError, import_str);
2691 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002692 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002693 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002694 if (import == NULL)
2695 goto err;
2696
Christian Heimes000a0742008-01-03 22:16:32 +00002697 /* Call the __import__ function with the proper argument list
2698 * Always use absolute import here. */
2699 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2700 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002701
2702 err:
2703 Py_XDECREF(globals);
2704 Py_XDECREF(builtins);
2705 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002706
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002707 return r;
2708}
2709
2710
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002711/* Module 'imp' provides Python access to the primitives used for
2712 importing modules.
2713*/
2714
Guido van Rossum79f25d91997-04-29 20:08:16 +00002715static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002716imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002717{
2718 char buf[4];
2719
Guido van Rossum96774c12000-05-01 20:19:08 +00002720 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2721 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2722 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2723 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002724
Guido van Rossum79f25d91997-04-29 20:08:16 +00002725 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002726}
2727
Guido van Rossum79f25d91997-04-29 20:08:16 +00002728static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002729imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002730{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002731 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002732 struct filedescr *fdp;
2733
Guido van Rossum79f25d91997-04-29 20:08:16 +00002734 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002735 if (list == NULL)
2736 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002737 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2738 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002739 fdp->suffix, fdp->mode, fdp->type);
2740 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002741 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002742 return NULL;
2743 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002744 if (PyList_Append(list, item) < 0) {
2745 Py_DECREF(list);
2746 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002747 return NULL;
2748 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002749 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002750 }
2751 return list;
2752}
2753
Guido van Rossum79f25d91997-04-29 20:08:16 +00002754static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002755call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002756{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002757 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002758 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002759 struct filedescr *fdp;
2760 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002761 FILE *fp = NULL;
2762
2763 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002764 if (path == Py_None)
2765 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002766 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002767 if (fdp == NULL)
2768 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002769 if (fp != NULL) {
2770 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2771 if (fob == NULL) {
2772 fclose(fp);
2773 return NULL;
2774 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002775 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002776 else {
2777 fob = Py_None;
2778 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002779 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002780 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002781 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002782 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002783 return ret;
2784}
2785
Guido van Rossum79f25d91997-04-29 20:08:16 +00002786static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002787imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002788{
2789 char *name;
2790 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002791 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002792 return NULL;
2793 return call_find_module(name, path);
2794}
2795
2796static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002797imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002798{
2799 char *name;
2800 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002801 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002802 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002803 return NULL;
2804 ret = init_builtin(name);
2805 if (ret < 0)
2806 return NULL;
2807 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002808 Py_INCREF(Py_None);
2809 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002810 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002811 m = PyImport_AddModule(name);
2812 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002813 return m;
2814}
2815
Guido van Rossum79f25d91997-04-29 20:08:16 +00002816static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002817imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002818{
2819 char *name;
2820 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002821 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002822 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002823 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002824 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002825 if (ret < 0)
2826 return NULL;
2827 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002828 Py_INCREF(Py_None);
2829 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002830 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002831 m = PyImport_AddModule(name);
2832 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002833 return m;
2834}
2835
Guido van Rossum79f25d91997-04-29 20:08:16 +00002836static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002837imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002838{
2839 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002840
Guido van Rossum43713e52000-02-29 13:59:29 +00002841 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002842 return NULL;
2843 return get_frozen_object(name);
2844}
2845
Guido van Rossum79f25d91997-04-29 20:08:16 +00002846static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002847imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002848{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002849 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002850 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002851 return NULL;
Guido van Rossum50ee94f2002-04-09 18:00:58 +00002852 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002853}
2854
Guido van Rossum79f25d91997-04-29 20:08:16 +00002855static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002856imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002857{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002858 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002859 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002860 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002861 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002862 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00002863 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002864}
2865
2866static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002867get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002868{
2869 FILE *fp;
2870 if (fob == NULL) {
Tim Peters86c7d2f2004-08-01 23:24:21 +00002871 if (mode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002872 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002873 fp = fopen(pathname, mode);
2874 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002875 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002876 }
2877 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002878 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002879 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002880 PyErr_SetString(PyExc_ValueError,
2881 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002882 }
2883 return fp;
2884}
2885
Guido van Rossum79f25d91997-04-29 20:08:16 +00002886static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002887imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002888{
2889 char *name;
2890 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002891 PyObject *fob = NULL;
2892 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002893 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002894 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002895 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002896 return NULL;
2897 fp = get_file(pathname, fob, "rb");
2898 if (fp == NULL)
2899 return NULL;
2900 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002901 if (fob == NULL)
2902 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002903 return m;
2904}
2905
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002906#ifdef HAVE_DYNAMIC_LOADING
2907
Guido van Rossum79f25d91997-04-29 20:08:16 +00002908static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002909imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002910{
2911 char *name;
2912 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002913 PyObject *fob = NULL;
2914 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002915 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002916 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002917 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002918 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002919 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002920 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002921 if (fp == NULL)
2922 return NULL;
2923 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002924 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002925 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002926}
2927
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002928#endif /* HAVE_DYNAMIC_LOADING */
2929
Guido van Rossum79f25d91997-04-29 20:08:16 +00002930static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002931imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002932{
2933 char *name;
2934 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002935 PyObject *fob = NULL;
2936 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002937 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002938 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002939 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002940 return NULL;
2941 fp = get_file(pathname, fob, "r");
2942 if (fp == NULL)
2943 return NULL;
2944 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002945 if (fob == NULL)
2946 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002947 return m;
2948}
2949
Guido van Rossum79f25d91997-04-29 20:08:16 +00002950static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002951imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002952{
2953 char *name;
2954 PyObject *fob;
2955 char *pathname;
2956 char *suffix; /* Unused */
2957 char *mode;
2958 int type;
2959 FILE *fp;
2960
Guido van Rossum43713e52000-02-29 13:59:29 +00002961 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002962 &name, &fob, &pathname,
2963 &suffix, &mode, &type))
2964 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002965 if (*mode) {
2966 /* Mode must start with 'r' or 'U' and must not contain '+'.
2967 Implicit in this test is the assumption that the mode
2968 may contain other modifiers like 'b' or 't'. */
2969
2970 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00002971 PyErr_Format(PyExc_ValueError,
2972 "invalid file open mode %.200s", mode);
2973 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00002974 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002975 }
2976 if (fob == Py_None)
2977 fp = NULL;
2978 else {
2979 if (!PyFile_Check(fob)) {
2980 PyErr_SetString(PyExc_ValueError,
2981 "load_module arg#2 should be a file or None");
2982 return NULL;
2983 }
2984 fp = get_file(pathname, fob, mode);
2985 if (fp == NULL)
2986 return NULL;
2987 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002988 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002989}
2990
2991static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002992imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002993{
2994 char *name;
2995 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00002996 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002997 return NULL;
2998 return load_package(name, pathname);
2999}
3000
3001static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003002imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003003{
3004 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00003005 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003006 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003007 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003008}
3009
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003010/* Doc strings */
3011
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003012PyDoc_STRVAR(doc_imp,
3013"This module provides the components needed to build your own\n\
3014__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003015
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003016PyDoc_STRVAR(doc_find_module,
3017"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003018Search for a module. If path is omitted or None, search for a\n\
3019built-in, frozen or special module and continue search in sys.path.\n\
3020The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003021package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003022
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003023PyDoc_STRVAR(doc_load_module,
3024"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003025Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003026The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003027
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003028PyDoc_STRVAR(doc_get_magic,
3029"get_magic() -> string\n\
3030Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003031
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003032PyDoc_STRVAR(doc_get_suffixes,
3033"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003034Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003035that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003036
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003037PyDoc_STRVAR(doc_new_module,
3038"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003039Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003040The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003041
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003042PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003043"lock_held() -> boolean\n\
3044Return True if the import lock is currently held, else False.\n\
3045On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003046
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003047PyDoc_STRVAR(doc_acquire_lock,
3048"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003049Acquires the interpreter's import lock for the current thread.\n\
3050This lock should be used by import hooks to ensure thread-safety\n\
3051when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003052On platforms without threads, this function does nothing.");
3053
3054PyDoc_STRVAR(doc_release_lock,
3055"release_lock() -> None\n\
3056Release the interpreter's import lock.\n\
3057On platforms without threads, this function does nothing.");
3058
Guido van Rossum79f25d91997-04-29 20:08:16 +00003059static PyMethodDef imp_methods[] = {
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003060 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3061 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3062 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3063 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3064 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3065 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3066 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3067 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003068 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00003069 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3070 {"init_builtin", imp_init_builtin, METH_VARARGS},
3071 {"init_frozen", imp_init_frozen, METH_VARARGS},
3072 {"is_builtin", imp_is_builtin, METH_VARARGS},
3073 {"is_frozen", imp_is_frozen, METH_VARARGS},
3074 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003075#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00003076 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003077#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00003078 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00003079 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003080 {NULL, NULL} /* sentinel */
3081};
3082
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003083static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003084setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003085{
3086 PyObject *v;
3087 int err;
3088
3089 v = PyInt_FromLong((long)value);
3090 err = PyDict_SetItemString(d, name, v);
3091 Py_XDECREF(v);
3092 return err;
3093}
3094
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003095typedef struct {
3096 PyObject_HEAD
3097} NullImporter;
3098
3099static int
3100NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3101{
3102 char *path;
Christian Heimescea681b2007-11-07 17:50:54 +00003103 Py_ssize_t pathlen;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003104
3105 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3106 return -1;
3107
3108 if (!PyArg_ParseTuple(args, "s:NullImporter",
3109 &path))
3110 return -1;
3111
Christian Heimescea681b2007-11-07 17:50:54 +00003112 pathlen = strlen(path);
3113 if (pathlen == 0) {
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003114 PyErr_SetString(PyExc_ImportError, "empty pathname");
3115 return -1;
3116 } else {
3117#ifndef RISCOS
3118 struct stat statbuf;
3119 int rv;
3120
3121 rv = stat(path, &statbuf);
Christian Heimes004c1c12007-11-07 18:30:22 +00003122#ifdef MS_WINDOWS
3123 /* MS Windows stat() chokes on paths like C:\path\. Try to
3124 * recover *one* time by stripping off a trailing slash or
3125 * backslash. http://bugs.python.org/issue1293
3126 */
Christian Heimescea681b2007-11-07 17:50:54 +00003127 if (rv != 0 && pathlen <= MAXPATHLEN &&
3128 (path[pathlen-1] == '/' || path[pathlen-1] == '\\')) {
3129 char mangled[MAXPATHLEN+1];
3130
3131 strcpy(mangled, path);
3132 mangled[pathlen-1] = '\0';
3133 rv = stat(mangled, &statbuf);
3134 }
Christian Heimescea681b2007-11-07 17:50:54 +00003135#endif
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003136 if (rv == 0) {
3137 /* it exists */
3138 if (S_ISDIR(statbuf.st_mode)) {
3139 /* it's a directory */
3140 PyErr_SetString(PyExc_ImportError,
3141 "existing directory");
3142 return -1;
3143 }
3144 }
3145#else
3146 if (object_exists(path)) {
3147 /* it exists */
3148 if (isdir(path)) {
3149 /* it's a directory */
3150 PyErr_SetString(PyExc_ImportError,
3151 "existing directory");
3152 return -1;
3153 }
3154 }
3155#endif
3156 }
3157 return 0;
3158}
3159
3160static PyObject *
3161NullImporter_find_module(NullImporter *self, PyObject *args)
3162{
3163 Py_RETURN_NONE;
3164}
3165
3166static PyMethodDef NullImporter_methods[] = {
3167 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3168 "Always return None"
3169 },
3170 {NULL} /* Sentinel */
3171};
3172
3173
Nick Coghlan327a39b2007-11-18 11:56:28 +00003174PyTypeObject PyNullImporter_Type = {
Martin v. Löwis68192102007-07-21 06:55:02 +00003175 PyVarObject_HEAD_INIT(NULL, 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003176 "imp.NullImporter", /*tp_name*/
3177 sizeof(NullImporter), /*tp_basicsize*/
3178 0, /*tp_itemsize*/
3179 0, /*tp_dealloc*/
3180 0, /*tp_print*/
3181 0, /*tp_getattr*/
3182 0, /*tp_setattr*/
3183 0, /*tp_compare*/
3184 0, /*tp_repr*/
3185 0, /*tp_as_number*/
3186 0, /*tp_as_sequence*/
3187 0, /*tp_as_mapping*/
3188 0, /*tp_hash */
3189 0, /*tp_call*/
3190 0, /*tp_str*/
3191 0, /*tp_getattro*/
3192 0, /*tp_setattro*/
3193 0, /*tp_as_buffer*/
3194 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3195 "Null importer object", /* tp_doc */
3196 0, /* tp_traverse */
3197 0, /* tp_clear */
3198 0, /* tp_richcompare */
3199 0, /* tp_weaklistoffset */
3200 0, /* tp_iter */
3201 0, /* tp_iternext */
3202 NullImporter_methods, /* tp_methods */
3203 0, /* tp_members */
3204 0, /* tp_getset */
3205 0, /* tp_base */
3206 0, /* tp_dict */
3207 0, /* tp_descr_get */
3208 0, /* tp_descr_set */
3209 0, /* tp_dictoffset */
3210 (initproc)NullImporter_init, /* tp_init */
3211 0, /* tp_alloc */
3212 PyType_GenericNew /* tp_new */
3213};
3214
3215
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003216PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003217initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003218{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003219 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003220
Nick Coghlan327a39b2007-11-18 11:56:28 +00003221 if (PyType_Ready(&PyNullImporter_Type) < 0)
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003222 goto failure;
3223
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003224 m = Py_InitModule4("imp", imp_methods, doc_imp,
3225 NULL, PYTHON_API_VERSION);
Neal Norwitz1ac754f2006-01-19 06:09:39 +00003226 if (m == NULL)
3227 goto failure;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003228 d = PyModule_GetDict(m);
Neal Norwitz3cb31ac2006-08-13 18:10:47 +00003229 if (d == NULL)
3230 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003231
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003232 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3233 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3234 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3235 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3236 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3237 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3238 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3239 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00003240 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00003241 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003242
Nick Coghlan327a39b2007-11-18 11:56:28 +00003243 Py_INCREF(&PyNullImporter_Type);
3244 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003245 failure:
3246 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003247}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003248
3249
Guido van Rossumb18618d2000-05-03 23:44:39 +00003250/* API for embedding applications that want to add their own entries
3251 to the table of built-in modules. This should normally be called
3252 *before* Py_Initialize(). When the table resize fails, -1 is
3253 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003254
3255 After a similar function by Just van Rossum. */
3256
3257int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003258PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003259{
3260 static struct _inittab *our_copy = NULL;
3261 struct _inittab *p;
3262 int i, n;
3263
3264 /* Count the number of entries in both tables */
3265 for (n = 0; newtab[n].name != NULL; n++)
3266 ;
3267 if (n == 0)
3268 return 0; /* Nothing to do */
3269 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3270 ;
3271
3272 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00003273 p = our_copy;
3274 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003275 if (p == NULL)
3276 return -1;
3277
3278 /* Copy the tables into the new memory */
3279 if (our_copy != PyImport_Inittab)
3280 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3281 PyImport_Inittab = our_copy = p;
3282 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3283
3284 return 0;
3285}
3286
3287/* Shorthand to add a single entry given a name and a function */
3288
3289int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003290PyImport_AppendInittab(char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003291{
3292 struct _inittab newtab[2];
3293
3294 memset(newtab, '\0', sizeof newtab);
3295
3296 newtab[0].name = name;
3297 newtab[0].initfunc = initfunc;
3298
3299 return PyImport_ExtendInittab(newtab);
3300}
Anthony Baxterac6bd462006-04-13 02:06:09 +00003301
3302#ifdef __cplusplus
3303}
3304#endif