blob: 2ae5fa7f6fb6df10ee400046505bf01e127573c6 [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"
Guido van Rossumd8faa362007-04-27 19:54:29 +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
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000021#ifdef __cplusplus
22extern "C" {
23#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000024
Christian Heimesd3eb5a152008-02-24 00:38:49 +000025#ifdef MS_WINDOWS
26/* for stat.st_mode */
27typedef unsigned short mode_t;
28#endif
29
Guido van Rossum21d335e1993-10-15 13:01:11 +000030
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000031/* Magic word to reject .pyc files generated by other Python versions.
32 It should change for each incompatible change to the bytecode.
33
34 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000035 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000036 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000037
Guido van Rossum45aecf42006-03-15 04:58:47 +000038 The magic numbers must be spaced apart at least 2 values, as the
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000039 -U interpeter flag will cause MAGIC+1 being used. They have been
40 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000041
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000042 There were a variety of old schemes for setting the magic number.
43 The current working scheme is to increment the previous value by
44 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000045
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000046 Known values:
47 Python 1.5: 20121
48 Python 1.5.1: 20121
49 Python 1.5.2: 20121
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000050 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000051 Python 2.0: 50823
52 Python 2.0.1: 50823
53 Python 2.1: 60202
54 Python 2.1.1: 60202
55 Python 2.1.2: 60202
56 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000057 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000058 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000059 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000060 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000061 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000062 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000063 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000064 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000065 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000066 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000067 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
68 Python 2.5b3: 62111 (fix wrong code: x += yield)
69 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
70 storing constants that should have been removed)
Thomas Wouters89f507f2006-12-13 04:49:30 +000071 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
Christian Heimes99170a52007-12-19 02:07:34 +000072 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)
Christian Heimesdd15f6c2008-03-16 00:07:10 +000073 Python 2.6a1: 62161 (WITH_CLEANUP optimization)
Guido van Rossum45aecf42006-03-15 04:58:47 +000074 Python 3000: 3000
Brett Cannone2e23ef2006-08-25 05:05:30 +000075 3010 (removed UNARY_CONVERT)
Guido van Rossum86e58e22006-08-28 15:27:34 +000076 3020 (added BUILD_SET)
Guido van Rossum4f72a782006-10-27 23:31:49 +000077 3030 (added keyword-only parameters)
Guido van Rossum3203bdc2006-12-28 21:03:31 +000078 3040 (added signature annotations)
Guido van Rossum452bf512007-02-09 05:32:43 +000079 3050 (print becomes a function)
Guido van Rossum52cc1d82007-03-18 15:41:51 +000080 3060 (PEP 3115 metaclass syntax)
Guido van Rossum00bc0e02007-10-15 02:52:41 +000081 3070 (PEP 3109 raise changes)
82 3080 (PEP 3137 make __file__ and __name__ unicode)
Guido van Rossum98297ee2007-11-06 21:34:58 +000083 3090 (kill str8 interning)
Christian Heimes99170a52007-12-19 02:07:34 +000084 3100 (merge from 2.6a0, see 62151)
Christian Heimes3b06e532008-01-07 20:12:44 +000085 3102 (__file__ points to source file)
Christian Heimesdd15f6c2008-03-16 00:07:10 +000086 Python 3.0a4: 3110 (WITH_CLEANUP optimization).
Benjamin Petersoneec3d712008-06-11 15:59:43 +000087 Python 3.0a5: 3130 (lexical exception stacking, including POP_EXCEPT)
Antoine Pitrouf289ae62008-12-18 11:06:25 +000088 Python 3.1a0: 3140 (optimize list, set and dict comprehensions:
89 change LIST_APPEND and SET_ADD, add MAP_ADD)
Jeffrey Yasskin9de7ec72009-02-25 02:25:04 +000090 Python 3.1a0: 3150 (optimize conditional branches:
91 introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE)
Benjamin Peterson876b2f22009-06-28 03:18:59 +000092 Python 3.2a0: 3160 (add SETUP_WITH)
Tim Peters36515e22001-11-18 04:06:29 +000093*/
Guido van Rossum3ddee711991-12-16 13:06:34 +000094
Benjamin Peterson876b2f22009-06-28 03:18:59 +000095#define MAGIC (3160 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum96774c12000-05-01 20:19:08 +000096/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000097 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000098 compiler works which are enabled by command line switches. */
99static long pyc_magic = MAGIC;
100
Guido van Rossum25ce5661997-08-02 03:10:38 +0000101/* See _PyImport_FixupExtension() below */
102static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000103
Guido van Rossum771c6c81997-10-31 18:37:24 +0000104/* This table is defined in config.c: */
105extern struct _inittab _PyImport_Inittab[];
106
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000107/* Method from Parser/tokenizer.c */
Guido van Rossum40d20bc2007-10-22 00:09:51 +0000108extern char * PyTokenizer_FindEncoding(int);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000109
Guido van Rossum771c6c81997-10-31 18:37:24 +0000110struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +0000111
Guido van Rossumed1170e1999-12-20 21:23:41 +0000112/* these tables define the module suffixes that Python recognizes */
113struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +0000114
Guido van Rossumed1170e1999-12-20 21:23:41 +0000115static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +0000116 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000117#ifdef MS_WINDOWS
Jack Jansenc88da1f2002-05-28 10:58:19 +0000118 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000119#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000120 {".pyc", "rb", PY_COMPILED},
121 {0, 0}
122};
123
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000124
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000125/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000126
127void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000128_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000129{
Guido van Rossumed1170e1999-12-20 21:23:41 +0000130 const struct filedescr *scan;
131 struct filedescr *filetab;
132 int countD = 0;
133 int countS = 0;
134
135 /* prepare _PyImport_Filetab: copy entries from
136 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
137 */
Guido van Rossum04110fb2007-08-24 16:32:05 +0000138#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossumed1170e1999-12-20 21:23:41 +0000139 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
140 ++countD;
Guido van Rossum04110fb2007-08-24 16:32:05 +0000141#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000142 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
143 ++countS;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000144 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000145 if (filetab == NULL)
146 Py_FatalError("Can't initialize import file table.");
Guido van Rossum04110fb2007-08-24 16:32:05 +0000147#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossumed1170e1999-12-20 21:23:41 +0000148 memcpy(filetab, _PyImport_DynLoadFiletab,
149 countD * sizeof(struct filedescr));
Guido van Rossum04110fb2007-08-24 16:32:05 +0000150#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000151 memcpy(filetab + countD, _PyImport_StandardFiletab,
152 countS * sizeof(struct filedescr));
153 filetab[countD + countS].suffix = NULL;
154
155 _PyImport_Filetab = filetab;
156
Guido van Rossum0824f631997-03-11 18:37:35 +0000157 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000158 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
159 for (; filetab->suffix != NULL; filetab++) {
160 if (strcmp(filetab->suffix, ".pyc") == 0)
161 filetab->suffix = ".pyo";
Guido van Rossum0824f631997-03-11 18:37:35 +0000162 }
163 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000164
Guido van Rossum572dbf82007-04-27 23:53:51 +0000165 {
Guido van Rossum96774c12000-05-01 20:19:08 +0000166 /* Fix the pyc_magic so that byte compiled code created
167 using the all-Unicode method doesn't interfere with
168 code created in normal operation mode. */
169 pyc_magic = MAGIC + 1;
170 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000171}
172
Guido van Rossum25ce5661997-08-02 03:10:38 +0000173void
Just van Rossum52e14d62002-12-30 22:08:05 +0000174_PyImportHooks_Init(void)
175{
176 PyObject *v, *path_hooks = NULL, *zimpimport;
177 int err = 0;
178
179 /* adding sys.path_hooks and sys.path_importer_cache, setting up
180 zipimport */
Christian Heimes9cd17752007-11-18 19:35:23 +0000181 if (PyType_Ready(&PyNullImporter_Type) < 0)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000182 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000183
184 if (Py_VerboseFlag)
185 PySys_WriteStderr("# installing zipimport hook\n");
186
187 v = PyList_New(0);
188 if (v == NULL)
189 goto error;
190 err = PySys_SetObject("meta_path", v);
191 Py_DECREF(v);
192 if (err)
193 goto error;
194 v = PyDict_New();
195 if (v == NULL)
196 goto error;
197 err = PySys_SetObject("path_importer_cache", v);
198 Py_DECREF(v);
199 if (err)
200 goto error;
201 path_hooks = PyList_New(0);
202 if (path_hooks == NULL)
203 goto error;
204 err = PySys_SetObject("path_hooks", path_hooks);
205 if (err) {
206 error:
207 PyErr_Print();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000208 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
209 "path_importer_cache, or NullImporter failed"
210 );
Just van Rossum52e14d62002-12-30 22:08:05 +0000211 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000212
Just van Rossum52e14d62002-12-30 22:08:05 +0000213 zimpimport = PyImport_ImportModule("zipimport");
214 if (zimpimport == NULL) {
215 PyErr_Clear(); /* No zip import module -- okay */
216 if (Py_VerboseFlag)
217 PySys_WriteStderr("# can't import zipimport\n");
218 }
219 else {
220 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
221 "zipimporter");
222 Py_DECREF(zimpimport);
223 if (zipimporter == NULL) {
224 PyErr_Clear(); /* No zipimporter object -- okay */
225 if (Py_VerboseFlag)
226 PySys_WriteStderr(
Fred Drake1e5fc552003-07-11 15:01:02 +0000227 "# can't import zipimport.zipimporter\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000228 }
229 else {
230 /* sys.path_hooks.append(zipimporter) */
231 err = PyList_Append(path_hooks, zipimporter);
232 Py_DECREF(zipimporter);
233 if (err)
234 goto error;
235 if (Py_VerboseFlag)
236 PySys_WriteStderr(
237 "# installed zipimport hook\n");
238 }
239 }
240 Py_DECREF(path_hooks);
241}
242
243void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000244_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000245{
246 Py_XDECREF(extensions);
247 extensions = NULL;
Barry Warsaw84294482000-10-03 16:02:05 +0000248 PyMem_DEL(_PyImport_Filetab);
249 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000250}
251
252
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000253/* Locking primitives to prevent parallel imports of the same module
254 in different threads to return with a partially loaded module.
255 These calls are serialized by the global interpreter lock. */
256
257#ifdef WITH_THREAD
258
Guido van Rossum49b56061998-10-01 20:42:43 +0000259#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000260
Guido van Rossum65d5b571998-12-21 19:32:43 +0000261static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000262static long import_lock_thread = -1;
263static int import_lock_level = 0;
264
265static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000266lock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000267{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000268 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000269 if (me == -1)
270 return; /* Too bad */
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000271 if (import_lock == NULL) {
Guido van Rossum65d5b571998-12-21 19:32:43 +0000272 import_lock = PyThread_allocate_lock();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000273 if (import_lock == NULL)
274 return; /* Nothing much we can do. */
275 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000276 if (import_lock_thread == me) {
277 import_lock_level++;
278 return;
279 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000280 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
281 {
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000282 PyThreadState *tstate = PyEval_SaveThread();
Guido van Rossum65d5b571998-12-21 19:32:43 +0000283 PyThread_acquire_lock(import_lock, 1);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000284 PyEval_RestoreThread(tstate);
285 }
286 import_lock_thread = me;
287 import_lock_level = 1;
288}
289
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000290static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000291unlock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000292{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000293 long me = PyThread_get_thread_ident();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000294 if (me == -1 || import_lock == NULL)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000295 return 0; /* Too bad */
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000296 if (import_lock_thread != me)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000297 return -1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000298 import_lock_level--;
299 if (import_lock_level == 0) {
300 import_lock_thread = -1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000301 PyThread_release_lock(import_lock);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000302 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000303 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000304}
305
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000306/* This function is called from PyOS_AfterFork to ensure that newly
307 created child processes do not share locks with the parent. */
308
309void
310_PyImport_ReInitLock(void)
311{
312#ifdef _AIX
313 if (import_lock != NULL)
314 import_lock = PyThread_allocate_lock();
315#endif
316}
317
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000318#else
319
320#define lock_import()
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000321#define unlock_import() 0
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000322
323#endif
324
Tim Peters69232342001-08-30 05:16:13 +0000325static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000326imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000327{
Tim Peters69232342001-08-30 05:16:13 +0000328#ifdef WITH_THREAD
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000329 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000330#else
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000331 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000332#endif
333}
334
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000335static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000336imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000337{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000338#ifdef WITH_THREAD
339 lock_import();
340#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000341 Py_INCREF(Py_None);
342 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000343}
344
345static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000346imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000347{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000348#ifdef WITH_THREAD
349 if (unlock_import() < 0) {
350 PyErr_SetString(PyExc_RuntimeError,
351 "not holding the import lock");
352 return NULL;
353 }
354#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000355 Py_INCREF(Py_None);
356 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000357}
358
Guido van Rossumd8faa362007-04-27 19:54:29 +0000359static void
360imp_modules_reloading_clear(void)
361{
362 PyInterpreterState *interp = PyThreadState_Get()->interp;
363 if (interp->modules_reloading != NULL)
364 PyDict_Clear(interp->modules_reloading);
365}
366
Guido van Rossum25ce5661997-08-02 03:10:38 +0000367/* Helper for sys */
368
369PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000370PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000371{
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000372 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000373 if (interp->modules == NULL)
374 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
375 return interp->modules;
376}
377
Guido van Rossum3f5da241990-12-20 15:06:42 +0000378
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000379/* List of names to clear in sys */
380static char* sys_deletes[] = {
Collin Winter670e6922007-03-21 02:57:17 +0000381 "path", "argv", "ps1", "ps2",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000382 "last_type", "last_value", "last_traceback",
Just van Rossum52e14d62002-12-30 22:08:05 +0000383 "path_hooks", "path_importer_cache", "meta_path",
Christian Heimes7b3ce6a2008-01-31 14:31:45 +0000384 /* misc stuff */
385 "flags", "float_info",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000386 NULL
387};
388
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000389static char* sys_files[] = {
390 "stdin", "__stdin__",
391 "stdout", "__stdout__",
392 "stderr", "__stderr__",
393 NULL
394};
395
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000396
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000397/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000398
Guido van Rossum3f5da241990-12-20 15:06:42 +0000399void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000400PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000401{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000402 Py_ssize_t pos, ndone;
Guido van Rossum758eec01998-01-19 21:58:26 +0000403 char *name;
404 PyObject *key, *value, *dict;
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000405 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000406 PyObject *modules = interp->modules;
407
408 if (modules == NULL)
409 return; /* Already done */
410
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000411 /* Delete some special variables first. These are common
412 places where user values hide and people complain when their
413 destructors fail. Since the modules containing them are
414 deleted *last* of all, they would come too late in the normal
415 destruction order. Sigh. */
416
Georg Brandl1a3284e2007-12-02 09:40:06 +0000417 value = PyDict_GetItemString(modules, "builtins");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000418 if (value != NULL && PyModule_Check(value)) {
419 dict = PyModule_GetDict(value);
420 if (Py_VerboseFlag)
Georg Brandl1a3284e2007-12-02 09:40:06 +0000421 PySys_WriteStderr("# clear builtins._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000422 PyDict_SetItemString(dict, "_", Py_None);
423 }
424 value = PyDict_GetItemString(modules, "sys");
425 if (value != NULL && PyModule_Check(value)) {
426 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000427 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000428 dict = PyModule_GetDict(value);
429 for (p = sys_deletes; *p != NULL; p++) {
430 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000431 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000432 PyDict_SetItemString(dict, *p, Py_None);
433 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000434 for (p = sys_files; *p != NULL; p+=2) {
435 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000436 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000437 v = PyDict_GetItemString(dict, *(p+1));
438 if (v == NULL)
439 v = Py_None;
440 PyDict_SetItemString(dict, *p, v);
441 }
442 }
443
444 /* First, delete __main__ */
445 value = PyDict_GetItemString(modules, "__main__");
446 if (value != NULL && PyModule_Check(value)) {
447 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000448 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000449 _PyModule_Clear(value);
450 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000451 }
452
Georg Brandl1a3284e2007-12-02 09:40:06 +0000453 /* The special treatment of "builtins" here is because even
Guido van Rossum758eec01998-01-19 21:58:26 +0000454 when it's not referenced as a module, its dictionary is
455 referenced by almost every module's __builtins__. Since
456 deleting a module clears its dictionary (even if there are
Georg Brandl1a3284e2007-12-02 09:40:06 +0000457 references left to it), we need to delete the "builtins"
Guido van Rossum758eec01998-01-19 21:58:26 +0000458 module last. Likewise, we don't delete sys until the very
459 end because it is implicitly referenced (e.g. by print).
460
461 Also note that we 'delete' modules by replacing their entry
462 in the modules dict with None, rather than really deleting
463 them; this avoids a rehash of the modules dictionary and
464 also marks them as "non existent" so they won't be
465 re-imported. */
466
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000467 /* Next, repeatedly delete modules with a reference count of
Georg Brandl1a3284e2007-12-02 09:40:06 +0000468 one (skipping builtins and sys) and delete them */
Guido van Rossum758eec01998-01-19 21:58:26 +0000469 do {
470 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000471 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000472 while (PyDict_Next(modules, &pos, &key, &value)) {
473 if (value->ob_refcnt != 1)
474 continue;
Neal Norwitz80e7f272007-08-26 06:45:23 +0000475 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +0000476 name = _PyUnicode_AsString(key);
Georg Brandl1a3284e2007-12-02 09:40:06 +0000477 if (strcmp(name, "builtins") == 0)
Guido van Rossum758eec01998-01-19 21:58:26 +0000478 continue;
479 if (strcmp(name, "sys") == 0)
480 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000481 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000482 PySys_WriteStderr(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000483 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000484 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000485 PyDict_SetItem(modules, key, Py_None);
486 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000487 }
488 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000489 } while (ndone > 0);
490
Georg Brandl1a3284e2007-12-02 09:40:06 +0000491 /* Next, delete all modules (still skipping builtins and sys) */
Guido van Rossum758eec01998-01-19 21:58:26 +0000492 pos = 0;
493 while (PyDict_Next(modules, &pos, &key, &value)) {
Neal Norwitz80e7f272007-08-26 06:45:23 +0000494 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +0000495 name = _PyUnicode_AsString(key);
Georg Brandl1a3284e2007-12-02 09:40:06 +0000496 if (strcmp(name, "builtins") == 0)
Guido van Rossum758eec01998-01-19 21:58:26 +0000497 continue;
498 if (strcmp(name, "sys") == 0)
499 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000500 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000501 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000502 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000503 PyDict_SetItem(modules, key, Py_None);
504 }
505 }
506
Georg Brandl1a3284e2007-12-02 09:40:06 +0000507 /* Next, delete sys and builtins (in that order) */
Guido van Rossum758eec01998-01-19 21:58:26 +0000508 value = PyDict_GetItemString(modules, "sys");
509 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000510 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000511 PySys_WriteStderr("# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000512 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000513 PyDict_SetItemString(modules, "sys", Py_None);
514 }
Georg Brandl1a3284e2007-12-02 09:40:06 +0000515 value = PyDict_GetItemString(modules, "builtins");
Guido van Rossum758eec01998-01-19 21:58:26 +0000516 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000517 if (Py_VerboseFlag)
Georg Brandl1a3284e2007-12-02 09:40:06 +0000518 PySys_WriteStderr("# cleanup builtins\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000519 _PyModule_Clear(value);
Georg Brandl1a3284e2007-12-02 09:40:06 +0000520 PyDict_SetItemString(modules, "builtins", Py_None);
Guido van Rossum758eec01998-01-19 21:58:26 +0000521 }
522
523 /* Finally, clear and delete the modules directory */
524 PyDict_Clear(modules);
525 interp->modules = NULL;
526 Py_DECREF(modules);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000527 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000528}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000529
530
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000531/* Helper for pythonrun.c -- return magic number */
532
533long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000534PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000535{
Guido van Rossum96774c12000-05-01 20:19:08 +0000536 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000537}
538
539
Guido van Rossum25ce5661997-08-02 03:10:38 +0000540/* Magic for extension modules (built-in as well as dynamically
541 loaded). To prevent initializing an extension module more than
542 once, we keep a static dictionary 'extensions' keyed by module name
543 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000544 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000545 dictionary is stored by calling _PyImport_FixupExtension()
546 immediately after the module initialization function succeeds. A
547 copy can be retrieved from there by calling
Martin v. Löwis1a214512008-06-11 05:26:20 +0000548 _PyImport_FindExtension().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000549
Martin v. Löwis1a214512008-06-11 05:26:20 +0000550 Modules which do support multiple multiple initialization set
551 their m_size field to a non-negative number (indicating the size
552 of the module-specific state). They are still recorded in the
553 extensions dictionary, to avoid loading shared libraries twice.
554*/
555
556int
557_PyImport_FixupExtension(PyObject *mod, char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000558{
Martin v. Löwis1a214512008-06-11 05:26:20 +0000559 PyObject *modules, *dict;
560 struct PyModuleDef *def;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000561 if (extensions == NULL) {
562 extensions = PyDict_New();
563 if (extensions == NULL)
Martin v. Löwis1a214512008-06-11 05:26:20 +0000564 return -1;
565 }
566 if (mod == NULL || !PyModule_Check(mod)) {
567 PyErr_BadInternalCall();
568 return -1;
569 }
570 def = PyModule_GetDef(mod);
571 if (!def) {
572 PyErr_BadInternalCall();
573 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000574 }
575 modules = PyImport_GetModuleDict();
Martin v. Löwis1a214512008-06-11 05:26:20 +0000576 if (PyDict_SetItemString(modules, name, mod) < 0)
577 return -1;
578 if (_PyState_AddModule(mod, def) < 0) {
579 PyDict_DelItemString(modules, name);
580 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000581 }
Martin v. Löwis1a214512008-06-11 05:26:20 +0000582 if (def->m_size == -1) {
583 if (def->m_base.m_copy) {
584 /* Somebody already imported the module,
585 likely under a different name.
586 XXX this should really not happen. */
587 Py_DECREF(def->m_base.m_copy);
588 def->m_base.m_copy = NULL;
589 }
590 dict = PyModule_GetDict(mod);
591 if (dict == NULL)
592 return -1;
593 def->m_base.m_copy = PyDict_Copy(dict);
594 if (def->m_base.m_copy == NULL)
595 return -1;
596 }
597 PyDict_SetItemString(extensions, filename, (PyObject*)def);
598 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000599}
600
601PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000602_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000603{
Martin v. Löwis1a214512008-06-11 05:26:20 +0000604 PyObject *mod, *mdict;
605 PyModuleDef* def;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000606 if (extensions == NULL)
607 return NULL;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000608 def = (PyModuleDef*)PyDict_GetItemString(extensions, filename);
609 if (def == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000610 return NULL;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000611 if (def->m_size == -1) {
612 /* Module does not support repeated initialization */
613 if (def->m_base.m_copy == NULL)
614 return NULL;
615 mod = PyImport_AddModule(name);
616 if (mod == NULL)
617 return NULL;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000618 mdict = PyModule_GetDict(mod);
619 if (mdict == NULL)
620 return NULL;
621 if (PyDict_Update(mdict, def->m_base.m_copy))
622 return NULL;
623 }
624 else {
625 if (def->m_base.m_init == NULL)
626 return NULL;
627 mod = def->m_base.m_init();
628 if (mod == NULL)
629 return NULL;
630 PyDict_SetItemString(PyImport_GetModuleDict(), name, mod);
Benjamin Petersonad956532008-09-04 02:28:15 +0000631 Py_DECREF(mod);
Martin v. Löwis1a214512008-06-11 05:26:20 +0000632 }
633 if (_PyState_AddModule(mod, def) < 0) {
634 PyDict_DelItemString(PyImport_GetModuleDict(), name);
635 Py_DECREF(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000636 return NULL;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000637 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000638 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000639 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Martin v. Löwis1a214512008-06-11 05:26:20 +0000640 name, filename);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000641 return mod;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000642
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000643}
644
645
646/* Get the module object corresponding to a module name.
647 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000648 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000649 Because the former action is most common, THIS DOES NOT RETURN A
650 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000651
Guido van Rossum79f25d91997-04-29 20:08:16 +0000652PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000653PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000654{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000655 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000656 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000657
Guido van Rossum25ce5661997-08-02 03:10:38 +0000658 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000659 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000660 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000661 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000662 if (m == NULL)
663 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000664 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000665 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000666 return NULL;
667 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000669
670 return m;
671}
672
Tim Peters1cd70172004-08-02 03:52:12 +0000673/* Remove name from sys.modules, if it's there. */
674static void
675_RemoveModule(const char *name)
676{
677 PyObject *modules = PyImport_GetModuleDict();
678 if (PyDict_GetItemString(modules, name) == NULL)
679 return;
680 if (PyDict_DelItemString(modules, name) < 0)
681 Py_FatalError("import: deleting existing key in"
682 "sys.modules failed");
683}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000684
Christian Heimes3b06e532008-01-07 20:12:44 +0000685static PyObject * get_sourcefile(const char *file);
686
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000687/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000688 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
689 * removed from sys.modules, to avoid leaving damaged module objects
690 * in sys.modules. The caller may wish to restore the original
691 * module object (if any) in this case; PyImport_ReloadModule is an
692 * example.
693 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000694PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000695PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000696{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000697 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
698}
699
700PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000701PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000702{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000703 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000704 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000705
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000707 if (m == NULL)
708 return NULL;
Jeremy Hyltonecd91292004-01-02 23:25:32 +0000709 /* If the module is being reloaded, we get the old module back
710 and re-use its dict to exec the new code. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000711 d = PyModule_GetDict(m);
712 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
713 if (PyDict_SetItemString(d, "__builtins__",
714 PyEval_GetBuiltins()) != 0)
Tim Peters1cd70172004-08-02 03:52:12 +0000715 goto error;
Guido van Rossum6135a871995-01-09 17:53:26 +0000716 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000717 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000718 v = NULL;
719 if (pathname != NULL) {
Christian Heimes3b06e532008-01-07 20:12:44 +0000720 v = get_sourcefile(pathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000721 if (v == NULL)
722 PyErr_Clear();
723 }
724 if (v == NULL) {
725 v = ((PyCodeObject *)co)->co_filename;
726 Py_INCREF(v);
727 }
728 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000729 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000730 Py_DECREF(v);
731
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000732 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000733 if (v == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000734 goto error;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000735 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000736
Guido van Rossum25ce5661997-08-02 03:10:38 +0000737 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000738 PyErr_Format(PyExc_ImportError,
739 "Loaded module %.200s not found in sys.modules",
740 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000741 return NULL;
742 }
743
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000745
746 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000747
748 error:
749 _RemoveModule(name);
750 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000751}
752
753
754/* Given a pathname for a Python source file, fill a buffer with the
755 pathname for the corresponding compiled file. Return the pathname
756 for the compiled file, or NULL if there's no space in the buffer.
757 Doesn't set an exception. */
758
759static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000760make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000761{
Tim Petersc1731372001-08-04 08:12:36 +0000762 size_t len = strlen(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000763 if (len+2 > buflen)
764 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000765
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000766#ifdef MS_WINDOWS
Tim Petersc1731372001-08-04 08:12:36 +0000767 /* Treat .pyw as if it were .py. The case of ".pyw" must match
768 that used in _PyImport_StandardFiletab. */
769 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
770 --len; /* pretend 'w' isn't there */
771#endif
772 memcpy(buf, pathname, len);
773 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
774 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000775
776 return buf;
777}
778
779
780/* Given a pathname for a Python source file, its time of last
781 modification, and a pathname for a compiled file, check whether the
782 compiled file represents the same version of the source. If so,
783 return a FILE pointer for the compiled file, positioned just after
784 the header; if not, return NULL.
785 Doesn't set an exception. */
786
787static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000788check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000789{
790 FILE *fp;
791 long magic;
792 long pyc_mtime;
793
794 fp = fopen(cpathname, "rb");
795 if (fp == NULL)
796 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000798 if (magic != pyc_magic) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000799 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000800 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000801 fclose(fp);
802 return NULL;
803 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000804 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000805 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000806 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000807 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000808 fclose(fp);
809 return NULL;
810 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000811 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000812 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000813 return fp;
814}
815
816
817/* Read a code object from a file and check it for validity */
818
Guido van Rossum79f25d91997-04-29 20:08:16 +0000819static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000820read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000821{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000822 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000823
Tim Petersd9b9ac82001-01-28 00:27:39 +0000824 co = PyMarshal_ReadLastObjectFromFile(fp);
Armin Rigo01ab2792004-03-26 15:09:27 +0000825 if (co == NULL)
826 return NULL;
827 if (!PyCode_Check(co)) {
828 PyErr_Format(PyExc_ImportError,
829 "Non-code object in %.200s", cpathname);
830 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000831 return NULL;
832 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000833 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000834}
835
836
837/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000838 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000839
Guido van Rossum79f25d91997-04-29 20:08:16 +0000840static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000841load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000842{
843 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000844 PyCodeObject *co;
845 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000846
Guido van Rossum79f25d91997-04-29 20:08:16 +0000847 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000848 if (magic != pyc_magic) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000849 PyErr_Format(PyExc_ImportError,
850 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000851 return NULL;
852 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000853 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000854 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000855 if (co == NULL)
856 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000857 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000858 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000859 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000860 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000861 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000862
863 return m;
864}
865
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000866/* Parse a source file and return the corresponding code object */
867
Guido van Rossum79f25d91997-04-29 20:08:16 +0000868static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000869parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000870{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000871 PyCodeObject *co = NULL;
872 mod_ty mod;
Christian Heimes4d6ec852008-03-26 22:34:47 +0000873 PyCompilerFlags flags;
Thomas Wouters89f507f2006-12-13 04:49:30 +0000874 PyArena *arena = PyArena_New();
875 if (arena == NULL)
876 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000877
Christian Heimesb1b3efc2008-03-26 23:24:27 +0000878 flags.cf_flags = 0;
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000879 mod = PyParser_ASTFromFile(fp, pathname, NULL,
Christian Heimes4d6ec852008-03-26 22:34:47 +0000880 Py_file_input, 0, 0, &flags,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000881 NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000882 if (mod) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000883 co = PyAST_Compile(mod, pathname, NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000884 }
Thomas Wouters89f507f2006-12-13 04:49:30 +0000885 PyArena_Free(arena);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000886 return co;
887}
888
889
Guido van Rossum55a83382000-09-20 20:31:38 +0000890/* Helper to open a bytecode file for writing in exclusive mode */
891
892static FILE *
Christian Heimes05e8be12008-02-23 18:30:17 +0000893open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +0000894{
895#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
896 /* Use O_EXCL to avoid a race condition when another process tries to
897 write the same file. When that happens, our open() call fails,
898 which is just fine (since it's only a cache).
899 XXX If the file exists and is writable but the directory is not
900 writable, the file will never be written. Oh well.
901 */
902 int fd;
903 (void) unlink(filename);
Tim Peters42c83af2000-09-29 04:03:10 +0000904 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
905#ifdef O_BINARY
906 |O_BINARY /* necessary for Windows */
907#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000908#ifdef __VMS
Christian Heimes05e8be12008-02-23 18:30:17 +0000909 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000910#else
Christian Heimes05e8be12008-02-23 18:30:17 +0000911 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000912#endif
Martin v. Löwis18e16552006-02-15 17:27:45 +0000913 );
Guido van Rossum55a83382000-09-20 20:31:38 +0000914 if (fd < 0)
915 return NULL;
916 return fdopen(fd, "wb");
917#else
918 /* Best we can do -- on Windows this can't happen anyway */
919 return fopen(filename, "wb");
920#endif
921}
922
923
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000924/* Write a compiled module to a file, placing the time of last
925 modification of its source into the header.
926 Errors are ignored, if a write error occurs an attempt is made to
927 remove the file. */
928
929static void
Christian Heimes05e8be12008-02-23 18:30:17 +0000930write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000931{
932 FILE *fp;
Christian Heimes05e8be12008-02-23 18:30:17 +0000933 time_t mtime = srcstat->st_mtime;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +0000934#ifdef MS_WINDOWS /* since Windows uses different permissions */
935 mode_t mode = srcstat->st_mode & ~S_IEXEC;
936#else
937 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
938#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000939
Christian Heimes05e8be12008-02-23 18:30:17 +0000940 fp = open_exclusive(cpathname, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000941 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000942 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000943 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000944 "# can't create %s\n", cpathname);
945 return;
946 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000947 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000948 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000949 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
950 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000951 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000952 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000953 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000954 /* Don't keep partial file */
955 fclose(fp);
956 (void) unlink(cpathname);
957 return;
958 }
959 /* Now write the true mtime */
960 fseek(fp, 4L, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000961 assert(mtime < LONG_MAX);
Martin v. Löwis725507b2006-03-07 12:08:51 +0000962 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000963 fflush(fp);
964 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000965 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000966 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000967}
968
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000969static void
970update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
971{
972 PyObject *constants, *tmp;
973 Py_ssize_t i, n;
974
975 if (PyUnicode_Compare(co->co_filename, oldname))
976 return;
977
978 tmp = co->co_filename;
979 co->co_filename = newname;
980 Py_INCREF(co->co_filename);
981 Py_DECREF(tmp);
982
983 constants = co->co_consts;
984 n = PyTuple_GET_SIZE(constants);
985 for (i = 0; i < n; i++) {
986 tmp = PyTuple_GET_ITEM(constants, i);
987 if (PyCode_Check(tmp))
988 update_code_filenames((PyCodeObject *)tmp,
989 oldname, newname);
990 }
991}
992
993static int
994update_compiled_module(PyCodeObject *co, char *pathname)
995{
996 PyObject *oldname, *newname;
997
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +0000998 newname = PyUnicode_DecodeFSDefault(pathname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000999 if (newname == NULL)
1000 return -1;
1001
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +00001002 if (!PyUnicode_Compare(co->co_filename, newname)) {
1003 Py_DECREF(newname);
1004 return 0;
1005 }
1006
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001007 oldname = co->co_filename;
1008 Py_INCREF(oldname);
1009 update_code_filenames(co, oldname, newname);
1010 Py_DECREF(oldname);
1011 Py_DECREF(newname);
1012 return 1;
1013}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001014
1015/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001016 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
1017 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001018
Guido van Rossum79f25d91997-04-29 20:08:16 +00001019static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001020load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001021{
Christian Heimes05e8be12008-02-23 18:30:17 +00001022 struct stat st;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001023 FILE *fpc;
1024 char buf[MAXPATHLEN+1];
1025 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001026 PyCodeObject *co;
1027 PyObject *m;
Christian Heimes05e8be12008-02-23 18:30:17 +00001028
1029 if (fstat(fileno(fp), &st) != 0) {
Neal Norwitz708e51a2005-10-03 04:48:15 +00001030 PyErr_Format(PyExc_RuntimeError,
Christian Heimes05e8be12008-02-23 18:30:17 +00001031 "unable to get file status from '%s'",
Neal Norwitz708e51a2005-10-03 04:48:15 +00001032 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +00001033 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +00001034 }
Fred Drake4c82b232000-06-30 16:18:57 +00001035#if SIZEOF_TIME_T > 4
1036 /* Python's .pyc timestamp handling presumes that the timestamp fits
1037 in 4 bytes. This will be fine until sometime in the year 2038,
1038 when a 4-byte signed time_t will overflow.
1039 */
Christian Heimes05e8be12008-02-23 18:30:17 +00001040 if (st.st_mtime >> 32) {
Fred Drake4c82b232000-06-30 16:18:57 +00001041 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +00001042 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +00001043 return NULL;
1044 }
1045#endif
Tim Peters36515e22001-11-18 04:06:29 +00001046 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +00001047 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001048 if (cpathname != NULL &&
Christian Heimes05e8be12008-02-23 18:30:17 +00001049 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001050 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001051 fclose(fpc);
1052 if (co == NULL)
1053 return NULL;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001054 if (update_compiled_module(co, pathname) < 0)
1055 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001056 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001057 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001058 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +00001059 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001060 }
1061 else {
1062 co = parse_source_module(pathname, fp);
1063 if (co == NULL)
1064 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001065 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001066 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001067 name, pathname);
Christian Heimes790c8232008-01-07 21:14:23 +00001068 if (cpathname) {
1069 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1070 if (ro == NULL || !PyObject_IsTrue(ro))
Christian Heimes05e8be12008-02-23 18:30:17 +00001071 write_compiled_module(co, cpathname, &st);
Christian Heimes790c8232008-01-07 21:14:23 +00001072 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001073 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +00001074 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001075 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001076
1077 return m;
1078}
1079
Christian Heimes3b06e532008-01-07 20:12:44 +00001080/* Get source file -> unicode or None
1081 * Returns the path to the py file if available, else the given path
1082 */
1083static PyObject *
1084get_sourcefile(const char *file)
1085{
1086 char py[MAXPATHLEN + 1];
1087 Py_ssize_t len;
1088 PyObject *u;
1089 struct stat statbuf;
1090
1091 if (!file || !*file) {
1092 Py_RETURN_NONE;
1093 }
1094
1095 len = strlen(file);
Christian Heimes3540b502008-01-11 07:03:05 +00001096 /* match '*.py?' */
1097 if (len > MAXPATHLEN || PyOS_strnicmp(&file[len-4], ".py", 3) != 0) {
Christian Heimes3b06e532008-01-07 20:12:44 +00001098 return PyUnicode_DecodeFSDefault(file);
1099 }
1100
1101 strncpy(py, file, len-1);
Martin v. Löwis5021ebc2008-03-22 22:07:13 +00001102 py[len-1] = '\0';
Christian Heimes3b06e532008-01-07 20:12:44 +00001103 if (stat(py, &statbuf) == 0 &&
1104 S_ISREG(statbuf.st_mode)) {
1105 u = PyUnicode_DecodeFSDefault(py);
1106 }
1107 else {
1108 u = PyUnicode_DecodeFSDefault(file);
1109 }
1110 return u;
1111}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001112
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001113/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001114static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1115static struct filedescr *find_module(char *, char *, PyObject *,
1116 char *, size_t, FILE **, PyObject **);
Christian Heimes3b06e532008-01-07 20:12:44 +00001117static struct _frozen * find_frozen(char *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001118
1119/* Load a package and return its module object WITH INCREMENTED
1120 REFERENCE COUNT */
1121
1122static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001123load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001124{
Tim Peters1cd70172004-08-02 03:52:12 +00001125 PyObject *m, *d;
1126 PyObject *file = NULL;
1127 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001128 int err;
1129 char buf[MAXPATHLEN+1];
1130 FILE *fp = NULL;
1131 struct filedescr *fdp;
1132
1133 m = PyImport_AddModule(name);
1134 if (m == NULL)
1135 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001136 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001137 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001138 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001139 d = PyModule_GetDict(m);
Christian Heimes3b06e532008-01-07 20:12:44 +00001140 file = get_sourcefile(pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001141 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +00001142 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001143 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +00001144 if (path == NULL)
1145 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001146 err = PyDict_SetItemString(d, "__file__", file);
1147 if (err == 0)
1148 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +00001149 if (err != 0)
1150 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001151 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00001152 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001153 if (fdp == NULL) {
1154 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1155 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +00001156 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001157 }
1158 else
1159 m = NULL;
1160 goto cleanup;
1161 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001162 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001163 if (fp != NULL)
1164 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00001165 goto cleanup;
1166
1167 error:
1168 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001169 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001170 Py_XDECREF(path);
1171 Py_XDECREF(file);
1172 return m;
1173}
1174
1175
1176/* Helper to test for built-in module */
1177
1178static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001179is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001180{
1181 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +00001182 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1183 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1184 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001185 return -1;
1186 else
1187 return 1;
1188 }
1189 }
1190 return 0;
1191}
1192
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001193
Just van Rossum52e14d62002-12-30 22:08:05 +00001194/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1195 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001196 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001197 that can handle the path item. Return None if no hook could;
1198 this tells our caller it should fall back to the builtin
1199 import mechanism. Cache the result in path_importer_cache.
1200 Returns a borrowed reference. */
1201
1202static PyObject *
1203get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1204 PyObject *p)
1205{
1206 PyObject *importer;
Martin v. Löwis725507b2006-03-07 12:08:51 +00001207 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001208
1209 /* These conditions are the caller's responsibility: */
1210 assert(PyList_Check(path_hooks));
1211 assert(PyDict_Check(path_importer_cache));
1212
1213 nhooks = PyList_Size(path_hooks);
1214 if (nhooks < 0)
1215 return NULL; /* Shouldn't happen */
1216
1217 importer = PyDict_GetItem(path_importer_cache, p);
1218 if (importer != NULL)
1219 return importer;
1220
1221 /* set path_importer_cache[p] to None to avoid recursion */
1222 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1223 return NULL;
1224
1225 for (j = 0; j < nhooks; j++) {
1226 PyObject *hook = PyList_GetItem(path_hooks, j);
1227 if (hook == NULL)
1228 return NULL;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001229 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
Just van Rossum52e14d62002-12-30 22:08:05 +00001230 if (importer != NULL)
1231 break;
1232
1233 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1234 return NULL;
1235 }
1236 PyErr_Clear();
1237 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001238 if (importer == NULL) {
1239 importer = PyObject_CallFunctionObjArgs(
Christian Heimes9cd17752007-11-18 19:35:23 +00001240 (PyObject *)&PyNullImporter_Type, p, NULL
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001241 );
1242 if (importer == NULL) {
1243 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1244 PyErr_Clear();
1245 return Py_None;
1246 }
1247 }
1248 }
1249 if (importer != NULL) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001250 int err = PyDict_SetItem(path_importer_cache, p, importer);
1251 Py_DECREF(importer);
1252 if (err != 0)
1253 return NULL;
1254 }
1255 return importer;
1256}
1257
Christian Heimes9cd17752007-11-18 19:35:23 +00001258PyAPI_FUNC(PyObject *)
1259PyImport_GetImporter(PyObject *path) {
1260 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
1261
1262 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1263 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1264 importer = get_path_importer(path_importer_cache,
1265 path_hooks, path);
1266 }
1267 }
1268 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1269 return importer;
1270}
1271
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001272/* Search the path (default sys.path) for a module. Return the
1273 corresponding filedescr struct, and (via return arguments) the
1274 pathname and an open file. Return NULL if the module is not found. */
1275
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001276#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001277extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001278 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001279#endif
1280
Martin v. Löwis18e16552006-02-15 17:27:45 +00001281static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001282static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001283static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001284
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001285static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001286find_module(char *fullname, char *subname, PyObject *path, char *buf,
1287 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001288{
Martin v. Löwis725507b2006-03-07 12:08:51 +00001289 Py_ssize_t i, npath;
Fred Drake4c82b232000-06-30 16:18:57 +00001290 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001291 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001292 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001293 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001294 PyObject *path_hooks, *path_importer_cache;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001295 struct stat statbuf;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001296 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1297 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1298 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001299 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001300#if defined(PYOS_OS2)
1301 size_t saved_len;
1302 size_t saved_namelen;
1303 char *saved_buf = NULL;
1304#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001305 if (p_loader != NULL)
1306 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001307
Just van Rossum52e14d62002-12-30 22:08:05 +00001308 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001309 PyErr_SetString(PyExc_OverflowError,
1310 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001311 return NULL;
1312 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001313 strcpy(name, subname);
1314
1315 /* sys.meta_path import hook */
1316 if (p_loader != NULL) {
1317 PyObject *meta_path;
1318
1319 meta_path = PySys_GetObject("meta_path");
1320 if (meta_path == NULL || !PyList_Check(meta_path)) {
1321 PyErr_SetString(PyExc_ImportError,
1322 "sys.meta_path must be a list of "
1323 "import hooks");
1324 return NULL;
1325 }
1326 Py_INCREF(meta_path); /* zap guard */
1327 npath = PyList_Size(meta_path);
1328 for (i = 0; i < npath; i++) {
1329 PyObject *loader;
1330 PyObject *hook = PyList_GetItem(meta_path, i);
1331 loader = PyObject_CallMethod(hook, "find_module",
1332 "sO", fullname,
1333 path != NULL ?
1334 path : Py_None);
1335 if (loader == NULL) {
1336 Py_DECREF(meta_path);
1337 return NULL; /* true error */
1338 }
1339 if (loader != Py_None) {
1340 /* a loader was found */
1341 *p_loader = loader;
1342 Py_DECREF(meta_path);
1343 return &importhookdescr;
1344 }
1345 Py_DECREF(loader);
1346 }
1347 Py_DECREF(meta_path);
1348 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001349
Benjamin Petersond968e272008-11-05 22:48:33 +00001350 if (find_frozen(fullname) != NULL) {
1351 strcpy(buf, fullname);
1352 return &fd_frozen;
Guido van Rossum0506a431998-08-11 15:07:39 +00001353 }
Benjamin Petersond968e272008-11-05 22:48:33 +00001354
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001355 if (path == NULL) {
1356 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001357 strcpy(buf, name);
1358 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001359 }
Guido van Rossumac279101996-08-22 23:10:58 +00001360#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001361 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1362 if (fp != NULL) {
1363 *p_fp = fp;
1364 return fdp;
1365 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001366#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001367 path = PySys_GetObject("path");
1368 }
Benjamin Petersond968e272008-11-05 22:48:33 +00001369
Guido van Rossum79f25d91997-04-29 20:08:16 +00001370 if (path == NULL || !PyList_Check(path)) {
1371 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001372 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001373 return NULL;
1374 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001375
1376 path_hooks = PySys_GetObject("path_hooks");
1377 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1378 PyErr_SetString(PyExc_ImportError,
1379 "sys.path_hooks must be a list of "
1380 "import hooks");
1381 return NULL;
1382 }
1383 path_importer_cache = PySys_GetObject("path_importer_cache");
1384 if (path_importer_cache == NULL ||
1385 !PyDict_Check(path_importer_cache)) {
1386 PyErr_SetString(PyExc_ImportError,
1387 "sys.path_importer_cache must be a dict");
1388 return NULL;
1389 }
1390
Guido van Rossum79f25d91997-04-29 20:08:16 +00001391 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001392 namelen = strlen(name);
1393 for (i = 0; i < npath; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001394 PyObject *v = PyList_GetItem(path, i);
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001395 PyObject *origv = v;
Guido van Rossum6262cc72007-05-09 23:29:27 +00001396 const char *base;
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001397 Py_ssize_t size;
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001398 if (!v)
1399 return NULL;
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +00001400 if (PyUnicode_Check(v)) {
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001401 v = PyUnicode_AsEncodedString(v,
1402 Py_FileSystemDefaultEncoding, NULL);
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +00001403 if (v == NULL)
1404 return NULL;
1405 }
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001406 else if (!PyBytes_Check(v))
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +00001407 continue;
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001408 else
1409 Py_INCREF(v);
1410
Christian Heimes72b710a2008-05-26 13:28:38 +00001411 base = PyBytes_AS_STRING(v);
1412 size = PyBytes_GET_SIZE(v);
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001413 len = size;
Walter Dörwald3430d702002-06-17 10:43:59 +00001414 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001415 Py_DECREF(v);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001416 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001417 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001418 strcpy(buf, base);
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001419 Py_DECREF(v);
1420
Walter Dörwald3430d702002-06-17 10:43:59 +00001421 if (strlen(buf) != len) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001422 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001423 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001424
1425 /* sys.path_hooks import hook */
1426 if (p_loader != NULL) {
1427 PyObject *importer;
1428
1429 importer = get_path_importer(path_importer_cache,
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001430 path_hooks, origv);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001431 if (importer == NULL) {
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001432 return NULL;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001433 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001434 /* Note: importer is a borrowed reference */
1435 if (importer != Py_None) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001436 PyObject *loader;
1437 loader = PyObject_CallMethod(importer,
1438 "find_module",
1439 "s", fullname);
1440 if (loader == NULL)
1441 return NULL; /* error */
1442 if (loader != Py_None) {
1443 /* a loader was found */
1444 *p_loader = loader;
1445 return &importhookdescr;
1446 }
1447 Py_DECREF(loader);
Thomas Wouters477c8d52006-05-27 19:21:47 +00001448 continue;
Just van Rossum52e14d62002-12-30 22:08:05 +00001449 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001450 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001451 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001452
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001453 if (len > 0 && buf[len-1] != SEP
1454#ifdef ALTSEP
1455 && buf[len-1] != ALTSEP
1456#endif
1457 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001458 buf[len++] = SEP;
Guido van Rossum215c3402000-11-13 17:26:32 +00001459 strcpy(buf+len, name);
1460 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001461
1462 /* Check for package import (buf holds a directory name,
1463 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001464#ifdef HAVE_STAT
Walter Dörwald3430d702002-06-17 10:43:59 +00001465 if (stat(buf, &statbuf) == 0 && /* it exists */
1466 S_ISDIR(statbuf.st_mode) && /* it's a directory */
Thomas Wouters477c8d52006-05-27 19:21:47 +00001467 case_ok(buf, len, namelen, name)) { /* case matches */
1468 if (find_init_module(buf)) { /* and has __init__.py */
Thomas Wouters477c8d52006-05-27 19:21:47 +00001469 return &fd_package;
1470 }
1471 else {
1472 char warnstr[MAXPATHLEN+80];
1473 sprintf(warnstr, "Not importing directory "
1474 "'%.*s': missing __init__.py",
1475 MAXPATHLEN, buf);
Skip Montanaro46fc3372007-08-12 11:44:53 +00001476 if (PyErr_WarnEx(PyExc_ImportWarning,
1477 warnstr, 1)) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001478 return NULL;
1479 }
1480 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001481 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001482#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001483#if defined(PYOS_OS2)
1484 /* take a snapshot of the module spec for restoration
1485 * after the 8 character DLL hackery
1486 */
1487 saved_buf = strdup(buf);
1488 saved_len = len;
1489 saved_namelen = namelen;
1490#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001491 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Guido van Rossum04110fb2007-08-24 16:32:05 +00001492#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001493 /* OS/2 limits DLLs to 8 character names (w/o
1494 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001495 * so if the name is longer than that and its a
1496 * dynamically loaded module we're going to try,
1497 * truncate the name before trying
1498 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001499 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001500 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001501 const struct filedescr *scan;
1502 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001503 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001504 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001505 break;
1506 else
1507 scan++;
1508 }
1509 if (scan->suffix != NULL) {
1510 /* yes, so truncate the name */
1511 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001512 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001513 buf[len] = '\0';
1514 }
1515 }
1516#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001517 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001518 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001519 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001520 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001521 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001522 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001523 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001524 if (fp != NULL) {
1525 if (case_ok(buf, len, namelen, name))
1526 break;
1527 else { /* continue search */
1528 fclose(fp);
1529 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001530 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001531 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001532#if defined(PYOS_OS2)
1533 /* restore the saved snapshot */
1534 strcpy(buf, saved_buf);
1535 len = saved_len;
1536 namelen = saved_namelen;
1537#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001538 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001539#if defined(PYOS_OS2)
1540 /* don't need/want the module name snapshot anymore */
1541 if (saved_buf)
1542 {
1543 free(saved_buf);
1544 saved_buf = NULL;
1545 }
1546#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001547 if (fp != NULL)
1548 break;
1549 }
1550 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001551 PyErr_Format(PyExc_ImportError,
1552 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001553 return NULL;
1554 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001555 *p_fp = fp;
1556 return fdp;
1557}
1558
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001559/* Helpers for main.c
1560 * Find the source file corresponding to a named module
1561 */
1562struct filedescr *
1563_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1564 size_t buflen, FILE **p_fp, PyObject **p_loader)
1565{
1566 return find_module((char *) name, (char *) name, path,
1567 buf, buflen, p_fp, p_loader);
1568}
1569
1570PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1571{
1572 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1573}
1574
Martin v. Löwis18e16552006-02-15 17:27:45 +00001575/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001576 * The arguments here are tricky, best shown by example:
1577 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1578 * ^ ^ ^ ^
1579 * |--------------------- buf ---------------------|
1580 * |------------------- len ------------------|
1581 * |------ name -------|
1582 * |----- namelen -----|
1583 * buf is the full path, but len only counts up to (& exclusive of) the
1584 * extension. name is the module name, also exclusive of extension.
1585 *
1586 * We've already done a successful stat() or fopen() on buf, so know that
1587 * there's some match, possibly case-insensitive.
1588 *
Tim Peters50d8d372001-02-28 05:34:27 +00001589 * case_ok() is to return 1 if there's a case-sensitive match for
1590 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1591 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001592 *
Tim Peters50d8d372001-02-28 05:34:27 +00001593 * case_ok() is used to implement case-sensitive import semantics even
1594 * on platforms with case-insensitive filesystems. It's trivial to implement
1595 * for case-sensitive filesystems. It's pretty much a cross-platform
1596 * nightmare for systems with case-insensitive filesystems.
1597 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001598
Tim Peters50d8d372001-02-28 05:34:27 +00001599/* First we may need a pile of platform-specific header files; the sequence
1600 * of #if's here should match the sequence in the body of case_ok().
1601 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001602#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001603#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001604
Tim Peters50d8d372001-02-28 05:34:27 +00001605#elif defined(DJGPP)
1606#include <dir.h>
1607
Jason Tishler7961aa62005-05-20 00:56:54 +00001608#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001609#include <sys/types.h>
1610#include <dirent.h>
1611
Andrew MacIntyred9400542002-02-26 11:41:34 +00001612#elif defined(PYOS_OS2)
1613#define INCL_DOS
1614#define INCL_DOSERRORS
1615#define INCL_NOPMAPI
1616#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00001617#endif
1618
Guido van Rossum0980bd91998-02-13 17:18:36 +00001619static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001620case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001621{
Tim Peters50d8d372001-02-28 05:34:27 +00001622/* Pick a platform-specific implementation; the sequence of #if's here should
1623 * match the sequence just above.
1624 */
1625
Jason Tishler7961aa62005-05-20 00:56:54 +00001626/* MS_WINDOWS */
1627#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001628 WIN32_FIND_DATA data;
1629 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001630
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001631 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001632 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001633
Guido van Rossum0980bd91998-02-13 17:18:36 +00001634 h = FindFirstFile(buf, &data);
1635 if (h == INVALID_HANDLE_VALUE) {
1636 PyErr_Format(PyExc_NameError,
1637 "Can't find file for module %.100s\n(filename %.300s)",
1638 name, buf);
1639 return 0;
1640 }
1641 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001642 return strncmp(data.cFileName, name, namelen) == 0;
1643
1644/* DJGPP */
1645#elif defined(DJGPP)
1646 struct ffblk ffblk;
1647 int done;
1648
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001649 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001650 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001651
1652 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1653 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001654 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001655 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001656 name, buf);
1657 return 0;
1658 }
Tim Peters50d8d372001-02-28 05:34:27 +00001659 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001660
Jason Tishler7961aa62005-05-20 00:56:54 +00001661/* new-fangled macintosh (macosx) or Cygwin */
1662#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001663 DIR *dirp;
1664 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001665 char dirname[MAXPATHLEN + 1];
1666 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001667
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001668 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001669 return 1;
1670
Tim Petersd1e87a82001-03-01 18:12:00 +00001671 /* Copy the dir component into dirname; substitute "." if empty */
1672 if (dirlen <= 0) {
1673 dirname[0] = '.';
1674 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001675 }
1676 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001677 assert(dirlen <= MAXPATHLEN);
1678 memcpy(dirname, buf, dirlen);
1679 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001680 }
1681 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001682 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001683 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001684 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001685 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001686 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001687#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001688 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001689#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001690 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001691#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001692 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001693 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001694 (void)closedir(dirp);
1695 return 1; /* Found */
1696 }
1697 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001698 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001699 }
Tim Peters430f5d42001-03-01 01:30:56 +00001700 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001701
Andrew MacIntyred9400542002-02-26 11:41:34 +00001702/* OS/2 */
1703#elif defined(PYOS_OS2)
1704 HDIR hdir = 1;
1705 ULONG srchcnt = 1;
1706 FILEFINDBUF3 ffbuf;
1707 APIRET rc;
1708
Christian Heimes790c8232008-01-07 21:14:23 +00001709 if (Py_GETENV("PYTHONCASEOK") != NULL)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001710 return 1;
1711
1712 rc = DosFindFirst(buf,
1713 &hdir,
1714 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1715 &ffbuf, sizeof(ffbuf),
1716 &srchcnt,
1717 FIL_STANDARD);
1718 if (rc != NO_ERROR)
1719 return 0;
1720 return strncmp(ffbuf.achName, name, namelen) == 0;
1721
Tim Peters50d8d372001-02-28 05:34:27 +00001722/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1723#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001724 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001725
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001726#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001727}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001728
Guido van Rossum0980bd91998-02-13 17:18:36 +00001729
Guido van Rossum197346f1997-10-31 18:38:52 +00001730#ifdef HAVE_STAT
1731/* Helper to look for __init__.py or __init__.py[co] in potential package */
1732static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001733find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001734{
Tim Peters0f9431f2001-07-05 03:47:53 +00001735 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001736 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001737 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001738 struct stat statbuf;
1739
Tim Peters0f9431f2001-07-05 03:47:53 +00001740/* For calling case_ok(buf, len, namelen, name):
1741 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1742 * ^ ^ ^ ^
1743 * |--------------------- buf ---------------------|
1744 * |------------------- len ------------------|
1745 * |------ name -------|
1746 * |----- namelen -----|
1747 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001748 if (save_len + 13 >= MAXPATHLEN)
1749 return 0;
1750 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001751 pname = buf + i;
1752 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001753 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001754 if (case_ok(buf,
1755 save_len + 9, /* len("/__init__") */
1756 8, /* len("__init__") */
1757 pname)) {
1758 buf[save_len] = '\0';
1759 return 1;
1760 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001761 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001762 i += strlen(pname);
1763 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001764 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001765 if (case_ok(buf,
1766 save_len + 9, /* len("/__init__") */
1767 8, /* len("__init__") */
1768 pname)) {
1769 buf[save_len] = '\0';
1770 return 1;
1771 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001772 }
1773 buf[save_len] = '\0';
1774 return 0;
1775}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001776
Guido van Rossum197346f1997-10-31 18:38:52 +00001777#endif /* HAVE_STAT */
1778
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001779
Tim Petersdbd9ba62000-07-09 03:09:57 +00001780static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001781
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001782/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001783 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001784
Guido van Rossum79f25d91997-04-29 20:08:16 +00001785static PyObject *
Alexandre Vassalottie223eb82009-07-29 20:12:15 +00001786load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001787{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001788 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001789 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001790 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001791
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001792 /* First check that there's an open file (if we need one) */
1793 switch (type) {
1794 case PY_SOURCE:
1795 case PY_COMPILED:
1796 if (fp == NULL) {
1797 PyErr_Format(PyExc_ValueError,
1798 "file object required for import (type code %d)",
1799 type);
1800 return NULL;
1801 }
1802 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001803
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001804 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001805
1806 case PY_SOURCE:
Alexandre Vassalottie223eb82009-07-29 20:12:15 +00001807 m = load_source_module(name, pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001808 break;
1809
1810 case PY_COMPILED:
Alexandre Vassalottie223eb82009-07-29 20:12:15 +00001811 m = load_compiled_module(name, pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001812 break;
1813
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001814#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001815 case C_EXTENSION:
Alexandre Vassalottie223eb82009-07-29 20:12:15 +00001816 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001817 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001818#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001819
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001820 case PKG_DIRECTORY:
Alexandre Vassalottie223eb82009-07-29 20:12:15 +00001821 m = load_package(name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001822 break;
1823
1824 case C_BUILTIN:
1825 case PY_FROZEN:
Alexandre Vassalottie223eb82009-07-29 20:12:15 +00001826 if (pathname != NULL && pathname[0] != '\0')
1827 name = pathname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001828 if (type == C_BUILTIN)
1829 err = init_builtin(name);
1830 else
1831 err = PyImport_ImportFrozenModule(name);
1832 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001833 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001834 if (err == 0) {
1835 PyErr_Format(PyExc_ImportError,
1836 "Purported %s module %.200s not found",
1837 type == C_BUILTIN ?
1838 "builtin" : "frozen",
1839 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001840 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001841 }
1842 modules = PyImport_GetModuleDict();
1843 m = PyDict_GetItemString(modules, name);
1844 if (m == NULL) {
1845 PyErr_Format(
1846 PyExc_ImportError,
1847 "%s module %.200s not properly initialized",
1848 type == C_BUILTIN ?
1849 "builtin" : "frozen",
1850 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001851 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001852 }
1853 Py_INCREF(m);
1854 break;
1855
Just van Rossum52e14d62002-12-30 22:08:05 +00001856 case IMP_HOOK: {
1857 if (loader == NULL) {
1858 PyErr_SetString(PyExc_ImportError,
1859 "import hook without loader");
1860 return NULL;
1861 }
1862 m = PyObject_CallMethod(loader, "load_module", "s", name);
1863 break;
1864 }
1865
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001866 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001867 PyErr_Format(PyExc_ImportError,
1868 "Don't know how to import %.200s (type code %d)",
1869 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001870 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001871
1872 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001873
1874 return m;
1875}
1876
1877
1878/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00001879 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001880 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001881
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001882static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001883init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001884{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001885 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001886
Greg Ward201baee2001-10-04 14:52:06 +00001887 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001888 return 1;
1889
Guido van Rossum771c6c81997-10-31 18:37:24 +00001890 for (p = PyImport_Inittab; p->name != NULL; p++) {
Martin v. Löwis1a214512008-06-11 05:26:20 +00001891 PyObject *mod;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001892 if (strcmp(name, p->name) == 0) {
1893 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001894 PyErr_Format(PyExc_ImportError,
1895 "Cannot re-init internal module %.200s",
1896 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001897 return -1;
1898 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001899 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001900 PySys_WriteStderr("import %s # builtin\n", name);
Martin v. Löwis1a214512008-06-11 05:26:20 +00001901 mod = (*p->initfunc)();
1902 if (mod == 0)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001903 return -1;
Martin v. Löwis1a214512008-06-11 05:26:20 +00001904 if (_PyImport_FixupExtension(mod, name, name) < 0)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001905 return -1;
Martin v. Löwis1a214512008-06-11 05:26:20 +00001906 /* FixupExtension has put the module into sys.modules,
1907 so we can release our own reference. */
1908 Py_DECREF(mod);
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001909 return 1;
1910 }
1911 }
1912 return 0;
1913}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001914
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001915
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001916/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001917
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001918static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001919find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001920{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001921 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001922
Benjamin Petersond968e272008-11-05 22:48:33 +00001923 if (!name)
1924 return NULL;
1925
Guido van Rossum79f25d91997-04-29 20:08:16 +00001926 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001927 if (p->name == NULL)
1928 return NULL;
1929 if (strcmp(p->name, name) == 0)
1930 break;
1931 }
1932 return p;
1933}
1934
Guido van Rossum79f25d91997-04-29 20:08:16 +00001935static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001936get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001937{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001938 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001939 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001940
1941 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001942 PyErr_Format(PyExc_ImportError,
1943 "No such frozen object named %.200s",
1944 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001945 return NULL;
1946 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001947 if (p->code == NULL) {
1948 PyErr_Format(PyExc_ImportError,
1949 "Excluded frozen object named %.200s",
1950 name);
1951 return NULL;
1952 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001953 size = p->size;
1954 if (size < 0)
1955 size = -size;
1956 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001957}
1958
Brett Cannon8d110132009-03-15 02:20:16 +00001959static PyObject *
1960is_frozen_package(char *name)
1961{
1962 struct _frozen *p = find_frozen(name);
1963 int size;
1964
1965 if (p == NULL) {
1966 PyErr_Format(PyExc_ImportError,
1967 "No such frozen object named %.200s",
1968 name);
1969 return NULL;
1970 }
1971
1972 size = p->size;
1973
1974 if (size < 0)
1975 Py_RETURN_TRUE;
1976 else
1977 Py_RETURN_FALSE;
1978}
1979
1980
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001981/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00001982 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001983 an exception set if the initialization failed.
1984 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001985
1986int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001987PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001988{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001989 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001990 PyObject *co;
1991 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001992 int ispackage;
1993 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001994
1995 if (p == NULL)
1996 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001997 if (p->code == NULL) {
1998 PyErr_Format(PyExc_ImportError,
1999 "Excluded frozen object named %.200s",
2000 name);
2001 return -1;
2002 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00002003 size = p->size;
2004 ispackage = (size < 0);
2005 if (ispackage)
2006 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002007 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00002008 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00002009 name, ispackage ? " package" : "");
2010 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002011 if (co == NULL)
2012 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002013 if (!PyCode_Check(co)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002014 PyErr_Format(PyExc_TypeError,
2015 "frozen object %.200s is not a code object",
2016 name);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002017 goto err_return;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002018 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00002019 if (ispackage) {
2020 /* Set __path__ to the package name */
Benjamin Petersond968e272008-11-05 22:48:33 +00002021 PyObject *d, *s, *l;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002022 int err;
2023 m = PyImport_AddModule(name);
2024 if (m == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002025 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002026 d = PyModule_GetDict(m);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002027 s = PyUnicode_InternFromString(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00002028 if (s == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002029 goto err_return;
Benjamin Petersond968e272008-11-05 22:48:33 +00002030 l = PyList_New(1);
2031 if (l == NULL) {
2032 Py_DECREF(s);
2033 goto err_return;
2034 }
2035 PyList_SET_ITEM(l, 0, s);
2036 err = PyDict_SetItemString(d, "__path__", l);
2037 Py_DECREF(l);
Guido van Rossuma5568d31998-03-05 03:45:08 +00002038 if (err != 0)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002039 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002040 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00002041 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002042 if (m == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002043 goto err_return;
2044 Py_DECREF(co);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002045 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002046 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002047err_return:
2048 Py_DECREF(co);
2049 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002050}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002051
2052
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002053/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002054 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002055
Guido van Rossum79f25d91997-04-29 20:08:16 +00002056PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002057PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002058{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002059 PyObject *pname;
2060 PyObject *result;
2061
Martin v. Löwis5b222132007-06-10 09:51:05 +00002062 pname = PyUnicode_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00002063 if (pname == NULL)
2064 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002065 result = PyImport_Import(pname);
2066 Py_DECREF(pname);
2067 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002068}
2069
Christian Heimes072c0f12008-01-03 23:01:04 +00002070/* Import a module without blocking
2071 *
2072 * At first it tries to fetch the module from sys.modules. If the module was
2073 * never loaded before it loads it with PyImport_ImportModule() unless another
2074 * thread holds the import lock. In the latter case the function raises an
2075 * ImportError instead of blocking.
2076 *
2077 * Returns the module object with incremented ref count.
2078 */
2079PyObject *
2080PyImport_ImportModuleNoBlock(const char *name)
2081{
2082 PyObject *result;
2083 PyObject *modules;
2084 long me;
2085
2086 /* Try to get the module from sys.modules[name] */
2087 modules = PyImport_GetModuleDict();
2088 if (modules == NULL)
2089 return NULL;
2090
2091 result = PyDict_GetItemString(modules, name);
2092 if (result != NULL) {
2093 Py_INCREF(result);
2094 return result;
2095 }
2096 else {
2097 PyErr_Clear();
2098 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002099#ifdef WITH_THREAD
Christian Heimes072c0f12008-01-03 23:01:04 +00002100 /* check the import lock
2101 * me might be -1 but I ignore the error here, the lock function
2102 * takes care of the problem */
2103 me = PyThread_get_thread_ident();
2104 if (import_lock_thread == -1 || import_lock_thread == me) {
2105 /* no thread or me is holding the lock */
2106 return PyImport_ImportModule(name);
2107 }
2108 else {
2109 PyErr_Format(PyExc_ImportError,
2110 "Failed to import %.200s because the import lock"
2111 "is held by another thread.",
2112 name);
2113 return NULL;
2114 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002115#else
2116 return PyImport_ImportModule(name);
2117#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002118}
2119
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002120/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002121static PyObject *get_parent(PyObject *globals, char *buf,
2122 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002123static PyObject *load_next(PyObject *mod, PyObject *altmod,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002124 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002125static int mark_miss(char *name);
2126static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002127 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002128static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002129
2130/* The Magnum Opus of dotted-name import :-) */
2131
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002132static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002133import_module_level(char *name, PyObject *globals, PyObject *locals,
2134 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002135{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002136 char buf[MAXPATHLEN+1];
Martin v. Löwis18e16552006-02-15 17:27:45 +00002137 Py_ssize_t buflen = 0;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002138 PyObject *parent, *head, *next, *tail;
2139
Christian Heimes454f37b2008-01-10 00:10:02 +00002140 if (strchr(name, '/') != NULL
2141#ifdef MS_WINDOWS
2142 || strchr(name, '\\') != NULL
2143#endif
2144 ) {
2145 PyErr_SetString(PyExc_ImportError,
2146 "Import by filename is not supported.");
2147 return NULL;
2148 }
2149
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002150 parent = get_parent(globals, buf, &buflen, level);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002151 if (parent == NULL)
2152 return NULL;
2153
2154 head = load_next(parent, Py_None, &name, buf, &buflen);
2155 if (head == NULL)
2156 return NULL;
2157
2158 tail = head;
2159 Py_INCREF(tail);
2160 while (name) {
2161 next = load_next(tail, tail, &name, buf, &buflen);
2162 Py_DECREF(tail);
2163 if (next == NULL) {
2164 Py_DECREF(head);
2165 return NULL;
2166 }
2167 tail = next;
2168 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002169 if (tail == Py_None) {
2170 /* If tail is Py_None, both get_parent and load_next found
2171 an empty module name: someone called __import__("") or
2172 doctored faulty bytecode */
2173 Py_DECREF(tail);
2174 Py_DECREF(head);
2175 PyErr_SetString(PyExc_ValueError,
2176 "Empty module name");
2177 return NULL;
2178 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002179
2180 if (fromlist != NULL) {
2181 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2182 fromlist = NULL;
2183 }
2184
2185 if (fromlist == NULL) {
2186 Py_DECREF(tail);
2187 return head;
2188 }
2189
2190 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002191 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002192 Py_DECREF(tail);
2193 return NULL;
2194 }
2195
2196 return tail;
2197}
2198
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002199PyObject *
2200PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2201 PyObject *fromlist, int level)
2202{
2203 PyObject *result;
2204 lock_import();
2205 result = import_module_level(name, globals, locals, fromlist, level);
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002206 if (unlock_import() < 0) {
2207 Py_XDECREF(result);
2208 PyErr_SetString(PyExc_RuntimeError,
2209 "not holding the import lock");
2210 return NULL;
2211 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002212 return result;
2213}
2214
Fred Drake87590902004-05-28 20:21:36 +00002215/* Return the package that an import is being performed in. If globals comes
2216 from the module foo.bar.bat (not itself a package), this returns the
2217 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002218 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002219
2220 The *name* of the returned package is returned in buf, with the length of
2221 the name in *p_buflen.
2222
2223 If globals doesn't come from a package or a module in a package, or a
2224 corresponding entry is not found in sys.modules, Py_None is returned.
2225*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002226static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002227get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002228{
2229 static PyObject *namestr = NULL;
2230 static PyObject *pathstr = NULL;
Nick Coghlande10c852007-12-04 12:22:52 +00002231 static PyObject *pkgstr = NULL;
2232 PyObject *pkgname, *modname, *modpath, *modules, *parent;
Georg Brandl2ee470f2008-07-16 12:55:28 +00002233 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002234
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002235 if (globals == NULL || !PyDict_Check(globals) || !level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002236 return Py_None;
2237
2238 if (namestr == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002239 namestr = PyUnicode_InternFromString("__name__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002240 if (namestr == NULL)
2241 return NULL;
2242 }
2243 if (pathstr == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002244 pathstr = PyUnicode_InternFromString("__path__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002245 if (pathstr == NULL)
2246 return NULL;
2247 }
Nick Coghlande10c852007-12-04 12:22:52 +00002248 if (pkgstr == NULL) {
2249 pkgstr = PyUnicode_InternFromString("__package__");
2250 if (pkgstr == NULL)
2251 return NULL;
2252 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002253
2254 *buf = '\0';
2255 *p_buflen = 0;
Nick Coghlande10c852007-12-04 12:22:52 +00002256 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002257
Nick Coghlande10c852007-12-04 12:22:52 +00002258 if ((pkgname != NULL) && (pkgname != Py_None)) {
2259 /* __package__ is set, so use it */
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002260 char *pkgname_str;
Nick Coghlande10c852007-12-04 12:22:52 +00002261 Py_ssize_t len;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002262
Nick Coghlande10c852007-12-04 12:22:52 +00002263 if (!PyUnicode_Check(pkgname)) {
2264 PyErr_SetString(PyExc_ValueError,
2265 "__package__ set to non-string");
2266 return NULL;
2267 }
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00002268 pkgname_str = _PyUnicode_AsStringAndSize(pkgname, &len);
Nick Coghlande10c852007-12-04 12:22:52 +00002269 if (len == 0) {
2270 if (level > 0) {
2271 PyErr_SetString(PyExc_ValueError,
2272 "Attempted relative import in non-package");
2273 return NULL;
2274 }
2275 return Py_None;
2276 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002277 if (len > MAXPATHLEN) {
2278 PyErr_SetString(PyExc_ValueError,
Nick Coghlande10c852007-12-04 12:22:52 +00002279 "Package name too long");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002280 return NULL;
2281 }
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002282 strcpy(buf, pkgname_str);
Nick Coghlande10c852007-12-04 12:22:52 +00002283 } else {
2284 /* __package__ not set, so figure it out and set it */
2285 modname = PyDict_GetItem(globals, namestr);
2286 if (modname == NULL || !PyUnicode_Check(modname))
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002287 return Py_None;
Nick Coghlande10c852007-12-04 12:22:52 +00002288
2289 modpath = PyDict_GetItem(globals, pathstr);
2290 if (modpath != NULL) {
2291 /* __path__ is set, so modname is already the package name */
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002292 char *modname_str;
2293 Py_ssize_t len;
Nick Coghlande10c852007-12-04 12:22:52 +00002294 int error;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002295
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00002296 modname_str = _PyUnicode_AsStringAndSize(modname, &len);
Nick Coghlande10c852007-12-04 12:22:52 +00002297 if (len > MAXPATHLEN) {
2298 PyErr_SetString(PyExc_ValueError,
2299 "Module name too long");
2300 return NULL;
2301 }
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002302 strcpy(buf, modname_str);
Nick Coghlande10c852007-12-04 12:22:52 +00002303 error = PyDict_SetItem(globals, pkgstr, modname);
2304 if (error) {
2305 PyErr_SetString(PyExc_ValueError,
2306 "Could not set __package__");
2307 return NULL;
2308 }
2309 } else {
2310 /* Normal module, so work out the package name if any */
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00002311 char *start = _PyUnicode_AsString(modname);
Nick Coghlande10c852007-12-04 12:22:52 +00002312 char *lastdot = strrchr(start, '.');
2313 size_t len;
2314 int error;
2315 if (lastdot == NULL && level > 0) {
2316 PyErr_SetString(PyExc_ValueError,
2317 "Attempted relative import in non-package");
2318 return NULL;
2319 }
2320 if (lastdot == NULL) {
2321 error = PyDict_SetItem(globals, pkgstr, Py_None);
2322 if (error) {
2323 PyErr_SetString(PyExc_ValueError,
2324 "Could not set __package__");
2325 return NULL;
2326 }
2327 return Py_None;
2328 }
2329 len = lastdot - start;
2330 if (len >= MAXPATHLEN) {
2331 PyErr_SetString(PyExc_ValueError,
2332 "Module name too long");
2333 return NULL;
2334 }
2335 strncpy(buf, start, len);
2336 buf[len] = '\0';
2337 pkgname = PyUnicode_FromString(buf);
2338 if (pkgname == NULL) {
2339 return NULL;
2340 }
2341 error = PyDict_SetItem(globals, pkgstr, pkgname);
2342 Py_DECREF(pkgname);
2343 if (error) {
2344 PyErr_SetString(PyExc_ValueError,
2345 "Could not set __package__");
2346 return NULL;
2347 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002348 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002349 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002350 while (--level > 0) {
2351 char *dot = strrchr(buf, '.');
2352 if (dot == NULL) {
2353 PyErr_SetString(PyExc_ValueError,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002354 "Attempted relative import beyond "
2355 "toplevel package");
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002356 return NULL;
2357 }
2358 *dot = '\0';
2359 }
2360 *p_buflen = strlen(buf);
2361
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002362 modules = PyImport_GetModuleDict();
2363 parent = PyDict_GetItemString(modules, buf);
Georg Brandl2ee470f2008-07-16 12:55:28 +00002364 if (parent == NULL) {
2365 if (orig_level < 1) {
2366 PyObject *err_msg = PyBytes_FromFormat(
2367 "Parent module '%.200s' not found "
2368 "while handling absolute import", buf);
2369 if (err_msg == NULL) {
2370 return NULL;
2371 }
2372 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2373 PyBytes_AsString(err_msg), 1)) {
2374 *buf = '\0';
2375 *p_buflen = 0;
2376 parent = Py_None;
2377 }
2378 Py_DECREF(err_msg);
2379 } else {
2380 PyErr_Format(PyExc_SystemError,
2381 "Parent module '%.200s' not loaded, "
2382 "cannot perform relative import", buf);
2383 }
2384 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002385 return parent;
2386 /* We expect, but can't guarantee, if parent != None, that:
2387 - parent.__name__ == buf
2388 - parent.__dict__ is globals
2389 If this is violated... Who cares? */
2390}
2391
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002392/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002393static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002394load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002395 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002396{
2397 char *name = *p_name;
2398 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002399 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002400 char *p;
2401 PyObject *result;
2402
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002403 if (strlen(name) == 0) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002404 /* completely empty module name should only happen in
2405 'from . import' (or '__import__("")')*/
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002406 Py_INCREF(mod);
2407 *p_name = NULL;
2408 return mod;
2409 }
2410
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002411 if (dot == NULL) {
2412 *p_name = NULL;
2413 len = strlen(name);
2414 }
2415 else {
2416 *p_name = dot+1;
2417 len = dot-name;
2418 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002419 if (len == 0) {
2420 PyErr_SetString(PyExc_ValueError,
2421 "Empty module name");
2422 return NULL;
2423 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002424
2425 p = buf + *p_buflen;
2426 if (p != buf)
2427 *p++ = '.';
2428 if (p+len-buf >= MAXPATHLEN) {
2429 PyErr_SetString(PyExc_ValueError,
2430 "Module name too long");
2431 return NULL;
2432 }
2433 strncpy(p, name, len);
2434 p[len] = '\0';
2435 *p_buflen = p+len-buf;
2436
2437 result = import_submodule(mod, p, buf);
2438 if (result == Py_None && altmod != mod) {
2439 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002440 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002441 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002442 if (result != NULL && result != Py_None) {
2443 if (mark_miss(buf) != 0) {
2444 Py_DECREF(result);
2445 return NULL;
2446 }
2447 strncpy(buf, name, len);
2448 buf[len] = '\0';
2449 *p_buflen = len;
2450 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002451 }
2452 if (result == NULL)
2453 return NULL;
2454
2455 if (result == Py_None) {
2456 Py_DECREF(result);
2457 PyErr_Format(PyExc_ImportError,
2458 "No module named %.200s", name);
2459 return NULL;
2460 }
2461
2462 return result;
2463}
2464
2465static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002466mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002467{
2468 PyObject *modules = PyImport_GetModuleDict();
2469 return PyDict_SetItemString(modules, name, Py_None);
2470}
2471
2472static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002473ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002474 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002475{
2476 int i;
2477
2478 if (!PyObject_HasAttrString(mod, "__path__"))
2479 return 1;
2480
2481 for (i = 0; ; i++) {
2482 PyObject *item = PySequence_GetItem(fromlist, i);
2483 int hasit;
2484 if (item == NULL) {
2485 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2486 PyErr_Clear();
2487 return 1;
2488 }
2489 return 0;
2490 }
Martin v. Löwis5b222132007-06-10 09:51:05 +00002491 if (!PyUnicode_Check(item)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002492 PyErr_SetString(PyExc_TypeError,
Neal Norwitz80e7f272007-08-26 06:45:23 +00002493 "Item in ``from list'' not a string");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002494 Py_DECREF(item);
2495 return 0;
2496 }
Martin v. Löwis5b222132007-06-10 09:51:05 +00002497 if (PyUnicode_AS_UNICODE(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002498 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002499 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002500 /* See if the package defines __all__ */
2501 if (recursive)
2502 continue; /* Avoid endless recursion */
2503 all = PyObject_GetAttrString(mod, "__all__");
2504 if (all == NULL)
2505 PyErr_Clear();
2506 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002507 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002508 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002509 if (!ret)
2510 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002511 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002512 continue;
2513 }
2514 hasit = PyObject_HasAttr(mod, item);
2515 if (!hasit) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002516 PyObject *item8;
2517 char *subname;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002518 PyObject *submod;
2519 char *p;
Martin v. Löwis5b222132007-06-10 09:51:05 +00002520 if (!Py_FileSystemDefaultEncoding) {
2521 item8 = PyUnicode_EncodeASCII(PyUnicode_AsUnicode(item),
2522 PyUnicode_GetSize(item),
Martin v. Löwis427dbff2007-06-12 05:53:00 +00002523 NULL);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002524 } else {
Guido van Rossum98297ee2007-11-06 21:34:58 +00002525 item8 = PyUnicode_AsEncodedString(item,
2526 Py_FileSystemDefaultEncoding, NULL);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002527 }
2528 if (!item8) {
2529 PyErr_SetString(PyExc_ValueError, "Cannot encode path item");
2530 return 0;
2531 }
Christian Heimes72b710a2008-05-26 13:28:38 +00002532 subname = PyBytes_AS_STRING(item8);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002533 if (buflen + strlen(subname) >= MAXPATHLEN) {
2534 PyErr_SetString(PyExc_ValueError,
2535 "Module name too long");
2536 Py_DECREF(item);
2537 return 0;
2538 }
2539 p = buf + buflen;
2540 *p++ = '.';
2541 strcpy(p, subname);
2542 submod = import_submodule(mod, subname, buf);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002543 Py_DECREF(item8);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002544 Py_XDECREF(submod);
2545 if (submod == NULL) {
2546 Py_DECREF(item);
2547 return 0;
2548 }
2549 }
2550 Py_DECREF(item);
2551 }
2552
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002553 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002554}
2555
Neil Schemenauer00b09662003-06-16 21:03:07 +00002556static int
2557add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2558 PyObject *modules)
2559{
2560 if (mod == Py_None)
2561 return 1;
2562 /* Irrespective of the success of this load, make a
2563 reference to it in the parent package module. A copy gets
2564 saved in the modules dictionary under the full name, so get a
2565 reference from there, if need be. (The exception is when the
2566 load failed with a SyntaxError -- then there's no trace in
2567 sys.modules. In that case, of course, do nothing extra.) */
2568 if (submod == NULL) {
2569 submod = PyDict_GetItemString(modules, fullname);
2570 if (submod == NULL)
2571 return 1;
2572 }
2573 if (PyModule_Check(mod)) {
2574 /* We can't use setattr here since it can give a
2575 * spurious warning if the submodule name shadows a
2576 * builtin name */
2577 PyObject *dict = PyModule_GetDict(mod);
2578 if (!dict)
2579 return 0;
2580 if (PyDict_SetItemString(dict, subname, submod) < 0)
2581 return 0;
2582 }
2583 else {
2584 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2585 return 0;
2586 }
2587 return 1;
2588}
2589
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002590static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002591import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002592{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002593 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002594 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002595
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002596 /* Require:
2597 if mod == None: subname == fullname
2598 else: mod.__name__ + "." + subname == fullname
2599 */
2600
Tim Peters50d8d372001-02-28 05:34:27 +00002601 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002602 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002603 }
2604 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002605 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002606 char buf[MAXPATHLEN+1];
2607 struct filedescr *fdp;
2608 FILE *fp = NULL;
2609
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002610 if (mod == Py_None)
2611 path = NULL;
2612 else {
2613 path = PyObject_GetAttrString(mod, "__path__");
2614 if (path == NULL) {
2615 PyErr_Clear();
2616 Py_INCREF(Py_None);
2617 return Py_None;
2618 }
2619 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002620
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002621 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002622 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2623 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002624 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002625 if (fdp == NULL) {
2626 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2627 return NULL;
2628 PyErr_Clear();
2629 Py_INCREF(Py_None);
2630 return Py_None;
2631 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002632 m = load_module(fullname, fp, buf, fdp->type, loader);
2633 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002634 if (fp)
2635 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002636 if (!add_submodule(mod, m, fullname, subname, modules)) {
2637 Py_XDECREF(m);
2638 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002639 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002640 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002641
2642 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002643}
2644
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002645
2646/* Re-import a module of any kind and return its module object, WITH
2647 INCREMENTED REFERENCE COUNT */
2648
Guido van Rossum79f25d91997-04-29 20:08:16 +00002649PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002650PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002651{
Guido van Rossumd8faa362007-04-27 19:54:29 +00002652 PyInterpreterState *interp = PyThreadState_Get()->interp;
2653 PyObject *modules_reloading = interp->modules_reloading;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002654 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossumd8faa362007-04-27 19:54:29 +00002655 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002656 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002657 char buf[MAXPATHLEN+1];
2658 struct filedescr *fdp;
2659 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002660 PyObject *newm;
Guido van Rossumd8faa362007-04-27 19:54:29 +00002661
2662 if (modules_reloading == NULL) {
2663 Py_FatalError("PyImport_ReloadModule: "
Guido van Rossume7ba4952007-06-06 23:52:48 +00002664 "no modules_reloading dictionary!");
Guido van Rossumd8faa362007-04-27 19:54:29 +00002665 return NULL;
2666 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002667
Guido van Rossum79f25d91997-04-29 20:08:16 +00002668 if (m == NULL || !PyModule_Check(m)) {
2669 PyErr_SetString(PyExc_TypeError,
2670 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002671 return NULL;
2672 }
Neal Norwitz5616c6d2007-08-26 05:32:41 +00002673 name = (char*)PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002674 if (name == NULL)
2675 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002676 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002677 PyErr_Format(PyExc_ImportError,
2678 "reload(): module %.200s not in sys.modules",
2679 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002680 return NULL;
2681 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00002682 existing_m = PyDict_GetItemString(modules_reloading, name);
2683 if (existing_m != NULL) {
2684 /* Due to a recursive reload, this module is already
2685 being reloaded. */
2686 Py_INCREF(existing_m);
2687 return existing_m;
2688 }
2689 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2690 return NULL;
2691
Guido van Rossum222ef561997-09-06 19:41:09 +00002692 subname = strrchr(name, '.');
2693 if (subname == NULL)
2694 subname = name;
2695 else {
2696 PyObject *parentname, *parent;
Christian Heimesc4cb3b82007-11-04 12:10:01 +00002697 parentname = PyUnicode_FromStringAndSize(name, (subname-name));
Guido van Rossumd8faa362007-04-27 19:54:29 +00002698 if (parentname == NULL) {
2699 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002700 return NULL;
Guido van Rossumd8faa362007-04-27 19:54:29 +00002701 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002702 parent = PyDict_GetItem(modules, parentname);
2703 if (parent == NULL) {
2704 PyErr_Format(PyExc_ImportError,
2705 "reload(): parent %.200s not in sys.modules",
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00002706 _PyUnicode_AsString(parentname));
Georg Brandl0c55f292005-09-14 06:56:20 +00002707 Py_DECREF(parentname);
Guido van Rossume7ba4952007-06-06 23:52:48 +00002708 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002709 return NULL;
2710 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002711 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002712 subname++;
2713 path = PyObject_GetAttrString(parent, "__path__");
2714 if (path == NULL)
2715 PyErr_Clear();
2716 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002717 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002718 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002719 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002720
2721 if (fdp == NULL) {
2722 Py_XDECREF(loader);
Guido van Rossumd8faa362007-04-27 19:54:29 +00002723 imp_modules_reloading_clear();
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002724 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002725 }
2726
2727 newm = load_module(name, fp, buf, fdp->type, loader);
2728 Py_XDECREF(loader);
2729
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002730 if (fp)
2731 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002732 if (newm == NULL) {
2733 /* load_module probably removed name from modules because of
2734 * the error. Put back the original module object. We're
2735 * going to return NULL in this case regardless of whether
2736 * replacing name succeeds, so the return value is ignored.
2737 */
2738 PyDict_SetItemString(modules, name, m);
2739 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00002740 imp_modules_reloading_clear();
Tim Peters1cd70172004-08-02 03:52:12 +00002741 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002742}
2743
2744
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002745/* Higher-level import emulator which emulates the "import" statement
2746 more accurately -- it invokes the __import__() function from the
2747 builtins of the current globals. This means that the import is
2748 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002749 environment, e.g. by "rexec".
2750 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00002751 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00002752 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002753
2754PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002755PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002756{
2757 static PyObject *silly_list = NULL;
2758 static PyObject *builtins_str = NULL;
2759 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002760 PyObject *globals = NULL;
2761 PyObject *import = NULL;
2762 PyObject *builtins = NULL;
2763 PyObject *r = NULL;
2764
2765 /* Initialize constant string objects */
2766 if (silly_list == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002767 import_str = PyUnicode_InternFromString("__import__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002768 if (import_str == NULL)
2769 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +00002770 builtins_str = PyUnicode_InternFromString("__builtins__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002771 if (builtins_str == NULL)
2772 return NULL;
2773 silly_list = Py_BuildValue("[s]", "__doc__");
2774 if (silly_list == NULL)
2775 return NULL;
2776 }
2777
2778 /* Get the builtins from current globals */
2779 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002780 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002781 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002782 builtins = PyObject_GetItem(globals, builtins_str);
2783 if (builtins == NULL)
2784 goto err;
2785 }
2786 else {
2787 /* No globals -- use standard builtins, and fake globals */
2788 PyErr_Clear();
2789
Georg Brandl1a3284e2007-12-02 09:40:06 +00002790 builtins = PyImport_ImportModuleLevel("builtins",
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002791 NULL, NULL, NULL, 0);
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002792 if (builtins == NULL)
2793 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002794 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2795 if (globals == NULL)
2796 goto err;
2797 }
2798
2799 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002800 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002801 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002802 if (import == NULL)
2803 PyErr_SetObject(PyExc_KeyError, import_str);
2804 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002805 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002806 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002807 if (import == NULL)
2808 goto err;
2809
Christian Heimes072c0f12008-01-03 23:01:04 +00002810 /* Call the __import__ function with the proper argument list
2811 * Always use absolute import here. */
2812 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2813 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002814
2815 err:
2816 Py_XDECREF(globals);
2817 Py_XDECREF(builtins);
2818 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002819
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002820 return r;
2821}
2822
2823
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002824/* Module 'imp' provides Python access to the primitives used for
2825 importing modules.
2826*/
2827
Guido van Rossum79f25d91997-04-29 20:08:16 +00002828static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002829imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002830{
2831 char buf[4];
2832
Guido van Rossum96774c12000-05-01 20:19:08 +00002833 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2834 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2835 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2836 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002837
Christian Heimes72b710a2008-05-26 13:28:38 +00002838 return PyBytes_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002839}
2840
Guido van Rossum79f25d91997-04-29 20:08:16 +00002841static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002842imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002843{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002844 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002845 struct filedescr *fdp;
2846
Guido van Rossum79f25d91997-04-29 20:08:16 +00002847 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002848 if (list == NULL)
2849 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002850 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2851 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002852 fdp->suffix, fdp->mode, fdp->type);
2853 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002854 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002855 return NULL;
2856 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002857 if (PyList_Append(list, item) < 0) {
2858 Py_DECREF(list);
2859 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002860 return NULL;
2861 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002862 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002863 }
2864 return list;
2865}
2866
Guido van Rossum79f25d91997-04-29 20:08:16 +00002867static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002868call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002869{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002870 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002871 PyObject *fob, *ret;
Amaury Forgeot d'Arc9a5499b2008-11-11 23:04:59 +00002872 PyObject *pathobj;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002873 struct filedescr *fdp;
2874 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002875 FILE *fp = NULL;
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002876 int fd = -1;
Brett Cannon3bb42d92007-10-20 03:43:15 +00002877 char *found_encoding = NULL;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00002878 char *encoding = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002879
2880 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002881 if (path == Py_None)
2882 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002883 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002884 if (fdp == NULL)
2885 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002886 if (fp != NULL) {
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002887 fd = fileno(fp);
2888 if (fd != -1)
2889 fd = dup(fd);
2890 fclose(fp);
2891 fp = NULL;
2892 }
2893 if (fd != -1) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00002894 if (strchr(fdp->mode, 'b') == NULL) {
Brett Cannon3bb42d92007-10-20 03:43:15 +00002895 /* PyTokenizer_FindEncoding() returns PyMem_MALLOC'ed
2896 memory. */
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002897 found_encoding = PyTokenizer_FindEncoding(fd);
2898 lseek(fd, 0, 0); /* Reset position */
Amaury Forgeot d'Arc1b933ed2008-09-04 22:34:09 +00002899 if (found_encoding == NULL && PyErr_Occurred())
2900 return NULL;
Brett Cannon3bb42d92007-10-20 03:43:15 +00002901 encoding = (found_encoding != NULL) ? found_encoding :
Guido van Rossumce3a72a2007-10-19 23:16:50 +00002902 (char*)PyUnicode_GetDefaultEncoding();
2903 }
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002904 fob = PyFile_FromFd(fd, pathname, fdp->mode, -1,
Guido van Rossume7fc50f2007-12-03 22:54:21 +00002905 (char*)encoding, NULL, NULL, 1);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002906 if (fob == NULL) {
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002907 close(fd);
Brett Cannon3bb42d92007-10-20 03:43:15 +00002908 PyMem_FREE(found_encoding);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002909 return NULL;
2910 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002911 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002912 else {
2913 fob = Py_None;
2914 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002915 }
Amaury Forgeot d'Arc9a5499b2008-11-11 23:04:59 +00002916 pathobj = PyUnicode_DecodeFSDefault(pathname);
2917 ret = Py_BuildValue("NN(ssi)",
2918 fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
Brett Cannon3bb42d92007-10-20 03:43:15 +00002919 PyMem_FREE(found_encoding);
2920
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002921 return ret;
2922}
2923
Guido van Rossum79f25d91997-04-29 20:08:16 +00002924static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002925imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002926{
2927 char *name;
Hirokazu Yamamoto90eaaf62009-01-30 03:15:05 +00002928 PyObject *ret, *path = NULL;
Amaury Forgeot d'Arc9a5499b2008-11-11 23:04:59 +00002929 if (!PyArg_ParseTuple(args, "es|O:find_module",
2930 Py_FileSystemDefaultEncoding, &name,
2931 &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002932 return NULL;
Hirokazu Yamamoto90eaaf62009-01-30 03:15:05 +00002933 ret = call_find_module(name, path);
2934 PyMem_Free(name);
2935 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002936}
2937
2938static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002939imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002940{
2941 char *name;
2942 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002943 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002944 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002945 return NULL;
2946 ret = init_builtin(name);
2947 if (ret < 0)
2948 return NULL;
2949 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002950 Py_INCREF(Py_None);
2951 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002952 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002953 m = PyImport_AddModule(name);
2954 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002955 return m;
2956}
2957
Guido van Rossum79f25d91997-04-29 20:08:16 +00002958static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002959imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002960{
2961 char *name;
2962 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002963 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002964 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002965 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002966 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002967 if (ret < 0)
2968 return NULL;
2969 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002970 Py_INCREF(Py_None);
2971 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002972 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002973 m = PyImport_AddModule(name);
2974 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002975 return m;
2976}
2977
Guido van Rossum79f25d91997-04-29 20:08:16 +00002978static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002979imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002980{
2981 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002982
Guido van Rossum43713e52000-02-29 13:59:29 +00002983 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002984 return NULL;
2985 return get_frozen_object(name);
2986}
2987
Guido van Rossum79f25d91997-04-29 20:08:16 +00002988static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00002989imp_is_frozen_package(PyObject *self, PyObject *args)
2990{
2991 char *name;
2992
2993 if (!PyArg_ParseTuple(args, "s:is_frozen_package", &name))
2994 return NULL;
2995 return is_frozen_package(name);
2996}
2997
2998static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002999imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003000{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003001 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00003002 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003003 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00003004 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003005}
3006
Guido van Rossum79f25d91997-04-29 20:08:16 +00003007static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003008imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003009{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003010 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00003011 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00003012 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003013 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00003014 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00003015 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003016}
3017
3018static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003019get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003020{
3021 FILE *fp;
Guido van Rossumda5b8f22007-06-12 23:30:11 +00003022 if (mode[0] == 'U')
3023 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003024 if (fob == NULL) {
3025 fp = fopen(pathname, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003026 }
3027 else {
Guido van Rossumda5b8f22007-06-12 23:30:11 +00003028 int fd = PyObject_AsFileDescriptor(fob);
3029 if (fd == -1)
3030 return NULL;
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003031 if (!_PyVerify_fd(fd))
3032 goto error;
3033 /* the FILE struct gets a new fd, so that it can be closed
3034 * independently of the file descriptor given
3035 */
3036 fd = dup(fd);
3037 if (fd == -1)
3038 goto error;
Guido van Rossumda5b8f22007-06-12 23:30:11 +00003039 fp = fdopen(fd, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003040 }
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003041 if (fp)
3042 return fp;
3043error:
3044 PyErr_SetFromErrno(PyExc_IOError);
3045 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003046}
3047
Guido van Rossum79f25d91997-04-29 20:08:16 +00003048static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003049imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003050{
3051 char *name;
3052 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003053 PyObject *fob = NULL;
3054 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003055 FILE *fp;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003056 if (!PyArg_ParseTuple(args, "ses|O:load_compiled",
3057 &name,
3058 Py_FileSystemDefaultEncoding, &pathname,
3059 &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003060 return NULL;
3061 fp = get_file(pathname, fob, "rb");
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003062 if (fp == NULL) {
3063 PyMem_Free(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003064 return NULL;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003065 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003066 m = load_compiled_module(name, pathname, fp);
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003067 fclose(fp);
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003068 PyMem_Free(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003069 return m;
3070}
3071
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003072#ifdef HAVE_DYNAMIC_LOADING
3073
Guido van Rossum79f25d91997-04-29 20:08:16 +00003074static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003075imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003076{
3077 char *name;
3078 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003079 PyObject *fob = NULL;
3080 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00003081 FILE *fp = NULL;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003082 if (!PyArg_ParseTuple(args, "ses|O:load_dynamic",
3083 &name,
3084 Py_FileSystemDefaultEncoding, &pathname,
3085 &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003086 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003087 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00003088 fp = get_file(pathname, fob, "r");
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003089 if (fp == NULL) {
3090 PyMem_Free(pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003091 return NULL;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003092 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003093 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00003094 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003095 PyMem_Free(pathname);
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003096 if (fp)
3097 fclose(fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00003098 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003099}
3100
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003101#endif /* HAVE_DYNAMIC_LOADING */
3102
Guido van Rossum79f25d91997-04-29 20:08:16 +00003103static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003104imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003105{
3106 char *name;
3107 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003108 PyObject *fob = NULL;
3109 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003110 FILE *fp;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003111 if (!PyArg_ParseTuple(args, "ses|O:load_source",
3112 &name,
3113 Py_FileSystemDefaultEncoding, &pathname,
3114 &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003115 return NULL;
3116 fp = get_file(pathname, fob, "r");
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003117 if (fp == NULL) {
3118 PyMem_Free(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003119 return NULL;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003120 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003121 m = load_source_module(name, pathname, fp);
Kristján Valur Jónsson92af5d92009-03-31 17:47:50 +00003122 PyMem_Free(pathname);
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003123 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003124 return m;
3125}
3126
Guido van Rossum79f25d91997-04-29 20:08:16 +00003127static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003128imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003129{
3130 char *name;
3131 PyObject *fob;
3132 char *pathname;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003133 PyObject * ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003134 char *suffix; /* Unused */
3135 char *mode;
3136 int type;
3137 FILE *fp;
3138
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003139 if (!PyArg_ParseTuple(args, "sOes(ssi):load_module",
3140 &name, &fob,
3141 Py_FileSystemDefaultEncoding, &pathname,
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003142 &suffix, &mode, &type))
3143 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003144 if (*mode) {
3145 /* Mode must start with 'r' or 'U' and must not contain '+'.
3146 Implicit in this test is the assumption that the mode
3147 may contain other modifiers like 'b' or 't'. */
3148
3149 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00003150 PyErr_Format(PyExc_ValueError,
3151 "invalid file open mode %.200s", mode);
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003152 PyMem_Free(pathname);
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00003153 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003154 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003155 }
3156 if (fob == Py_None)
3157 fp = NULL;
3158 else {
Guido van Rossumda5b8f22007-06-12 23:30:11 +00003159 fp = get_file(NULL, fob, mode);
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003160 if (fp == NULL) {
3161 PyMem_Free(pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003162 return NULL;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003163 }
3164 }
3165 ret = load_module(name, fp, pathname, type, NULL);
3166 PyMem_Free(pathname);
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003167 if (fp)
3168 fclose(fp);
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003169 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003170}
3171
3172static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003173imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003174{
3175 char *name;
3176 char *pathname;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003177 PyObject * ret;
3178 if (!PyArg_ParseTuple(args, "ses:load_package",
3179 &name, Py_FileSystemDefaultEncoding, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003180 return NULL;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003181 ret = load_package(name, pathname);
3182 PyMem_Free(pathname);
3183 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003184}
3185
3186static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003187imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003188{
3189 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00003190 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003191 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003192 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003193}
3194
Christian Heimes13a7a212008-01-07 17:13:09 +00003195static PyObject *
3196imp_reload(PyObject *self, PyObject *v)
3197{
3198 return PyImport_ReloadModule(v);
3199}
3200
3201PyDoc_STRVAR(doc_reload,
3202"reload(module) -> module\n\
3203\n\
3204Reload the module. The module must have been successfully imported before.");
3205
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003206/* Doc strings */
3207
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003208PyDoc_STRVAR(doc_imp,
3209"This module provides the components needed to build your own\n\
3210__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003211
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003212PyDoc_STRVAR(doc_find_module,
3213"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003214Search for a module. If path is omitted or None, search for a\n\
3215built-in, frozen or special module and continue search in sys.path.\n\
3216The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003217package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003218
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003219PyDoc_STRVAR(doc_load_module,
3220"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003221Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003222The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003223
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003224PyDoc_STRVAR(doc_get_magic,
3225"get_magic() -> string\n\
3226Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003227
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003228PyDoc_STRVAR(doc_get_suffixes,
3229"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003230Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003231that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003232
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003233PyDoc_STRVAR(doc_new_module,
3234"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003235Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003236The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003237
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003238PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003239"lock_held() -> boolean\n\
3240Return True if the import lock is currently held, else False.\n\
3241On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003242
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003243PyDoc_STRVAR(doc_acquire_lock,
3244"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003245Acquires the interpreter's import lock for the current thread.\n\
3246This lock should be used by import hooks to ensure thread-safety\n\
3247when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003248On platforms without threads, this function does nothing.");
3249
3250PyDoc_STRVAR(doc_release_lock,
3251"release_lock() -> None\n\
3252Release the interpreter's import lock.\n\
3253On platforms without threads, this function does nothing.");
3254
Guido van Rossum79f25d91997-04-29 20:08:16 +00003255static PyMethodDef imp_methods[] = {
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003256 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3257 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3258 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3259 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3260 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3261 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3262 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3263 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Christian Heimes13a7a212008-01-07 17:13:09 +00003264 {"reload", imp_reload, METH_O, doc_reload},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003265 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00003266 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
Brett Cannon8d110132009-03-15 02:20:16 +00003267 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00003268 {"init_builtin", imp_init_builtin, METH_VARARGS},
3269 {"init_frozen", imp_init_frozen, METH_VARARGS},
3270 {"is_builtin", imp_is_builtin, METH_VARARGS},
3271 {"is_frozen", imp_is_frozen, METH_VARARGS},
3272 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003273#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00003274 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003275#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00003276 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00003277 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003278 {NULL, NULL} /* sentinel */
3279};
3280
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003281static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003282setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003283{
3284 PyObject *v;
3285 int err;
3286
Christian Heimes217cfd12007-12-02 14:31:20 +00003287 v = PyLong_FromLong((long)value);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003288 err = PyDict_SetItemString(d, name, v);
3289 Py_XDECREF(v);
3290 return err;
3291}
3292
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003293typedef struct {
3294 PyObject_HEAD
3295} NullImporter;
3296
3297static int
3298NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3299{
3300 char *path;
Christian Heimes7d3bc0a2007-11-07 17:26:16 +00003301 Py_ssize_t pathlen;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003302
3303 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3304 return -1;
3305
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00003306 if (!PyArg_ParseTuple(args, "es:NullImporter",
3307 Py_FileSystemDefaultEncoding, &path))
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003308 return -1;
3309
Christian Heimes7d3bc0a2007-11-07 17:26:16 +00003310 pathlen = strlen(path);
3311 if (pathlen == 0) {
Georg Brandl8494d572008-07-19 10:13:15 +00003312 PyMem_Free(path);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003313 PyErr_SetString(PyExc_ImportError, "empty pathname");
3314 return -1;
3315 } else {
Hirokazu Yamamoto21cbf5f2009-01-23 07:23:03 +00003316#ifndef MS_WINDOWS
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003317 struct stat statbuf;
3318 int rv;
3319
3320 rv = stat(path, &statbuf);
Georg Brandl8494d572008-07-19 10:13:15 +00003321 PyMem_Free(path);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003322 if (rv == 0) {
3323 /* it exists */
3324 if (S_ISDIR(statbuf.st_mode)) {
3325 /* it's a directory */
3326 PyErr_SetString(PyExc_ImportError,
3327 "existing directory");
3328 return -1;
3329 }
3330 }
Hirokazu Yamamoto21cbf5f2009-01-23 07:23:03 +00003331#else /* MS_WINDOWS */
3332 DWORD rv;
3333 /* see issue1293 and issue3677:
3334 * stat() on Windows doesn't recognise paths like
3335 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
3336 */
3337 rv = GetFileAttributesA(path);
Kristján Valur Jónsson92cb4382009-01-24 10:33:25 +00003338 PyMem_Free(path);
Hirokazu Yamamoto21cbf5f2009-01-23 07:23:03 +00003339 if (rv != INVALID_FILE_ATTRIBUTES) {
3340 /* it exists */
3341 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
3342 /* it's a directory */
3343 PyErr_SetString(PyExc_ImportError,
3344 "existing directory");
3345 return -1;
3346 }
3347 }
3348#endif
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003349 }
3350 return 0;
3351}
3352
3353static PyObject *
3354NullImporter_find_module(NullImporter *self, PyObject *args)
3355{
3356 Py_RETURN_NONE;
3357}
3358
3359static PyMethodDef NullImporter_methods[] = {
3360 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3361 "Always return None"
3362 },
3363 {NULL} /* Sentinel */
3364};
3365
3366
Christian Heimes9cd17752007-11-18 19:35:23 +00003367PyTypeObject PyNullImporter_Type = {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003368 PyVarObject_HEAD_INIT(NULL, 0)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003369 "imp.NullImporter", /*tp_name*/
3370 sizeof(NullImporter), /*tp_basicsize*/
3371 0, /*tp_itemsize*/
3372 0, /*tp_dealloc*/
3373 0, /*tp_print*/
3374 0, /*tp_getattr*/
3375 0, /*tp_setattr*/
Mark Dickinsone94c6792009-02-02 20:36:42 +00003376 0, /*tp_reserved*/
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003377 0, /*tp_repr*/
3378 0, /*tp_as_number*/
3379 0, /*tp_as_sequence*/
3380 0, /*tp_as_mapping*/
3381 0, /*tp_hash */
3382 0, /*tp_call*/
3383 0, /*tp_str*/
3384 0, /*tp_getattro*/
3385 0, /*tp_setattro*/
3386 0, /*tp_as_buffer*/
3387 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3388 "Null importer object", /* tp_doc */
3389 0, /* tp_traverse */
3390 0, /* tp_clear */
3391 0, /* tp_richcompare */
3392 0, /* tp_weaklistoffset */
3393 0, /* tp_iter */
3394 0, /* tp_iternext */
3395 NullImporter_methods, /* tp_methods */
3396 0, /* tp_members */
3397 0, /* tp_getset */
3398 0, /* tp_base */
3399 0, /* tp_dict */
3400 0, /* tp_descr_get */
3401 0, /* tp_descr_set */
3402 0, /* tp_dictoffset */
3403 (initproc)NullImporter_init, /* tp_init */
3404 0, /* tp_alloc */
3405 PyType_GenericNew /* tp_new */
3406};
3407
Martin v. Löwis1a214512008-06-11 05:26:20 +00003408static struct PyModuleDef impmodule = {
3409 PyModuleDef_HEAD_INIT,
3410 "imp",
3411 doc_imp,
3412 0,
3413 imp_methods,
3414 NULL,
3415 NULL,
3416 NULL,
3417 NULL
3418};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003419
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003420PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00003421PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003422{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003423 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003424
Christian Heimes9cd17752007-11-18 19:35:23 +00003425 if (PyType_Ready(&PyNullImporter_Type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00003426 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003427
Martin v. Löwis1a214512008-06-11 05:26:20 +00003428 m = PyModule_Create(&impmodule);
Neal Norwitz1ac754f2006-01-19 06:09:39 +00003429 if (m == NULL)
3430 goto failure;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003431 d = PyModule_GetDict(m);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00003432 if (d == NULL)
3433 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003434
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003435 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3436 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3437 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3438 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3439 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3440 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3441 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3442 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00003443 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00003444 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003445
Christian Heimes9cd17752007-11-18 19:35:23 +00003446 Py_INCREF(&PyNullImporter_Type);
3447 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Martin v. Löwis1a214512008-06-11 05:26:20 +00003448 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003449 failure:
Martin v. Löwis1a214512008-06-11 05:26:20 +00003450 Py_XDECREF(m);
3451 return NULL;
3452
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003453}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003454
3455
Guido van Rossumb18618d2000-05-03 23:44:39 +00003456/* API for embedding applications that want to add their own entries
3457 to the table of built-in modules. This should normally be called
3458 *before* Py_Initialize(). When the table resize fails, -1 is
3459 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003460
3461 After a similar function by Just van Rossum. */
3462
3463int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003464PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003465{
3466 static struct _inittab *our_copy = NULL;
3467 struct _inittab *p;
3468 int i, n;
3469
3470 /* Count the number of entries in both tables */
3471 for (n = 0; newtab[n].name != NULL; n++)
3472 ;
3473 if (n == 0)
3474 return 0; /* Nothing to do */
3475 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3476 ;
3477
3478 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00003479 p = our_copy;
3480 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003481 if (p == NULL)
3482 return -1;
3483
3484 /* Copy the tables into the new memory */
3485 if (our_copy != PyImport_Inittab)
3486 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3487 PyImport_Inittab = our_copy = p;
3488 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3489
3490 return 0;
3491}
3492
3493/* Shorthand to add a single entry given a name and a function */
3494
3495int
Brett Cannona826f322009-04-02 03:41:46 +00003496PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003497{
3498 struct _inittab newtab[2];
3499
3500 memset(newtab, '\0', sizeof newtab);
3501
Brett Cannona826f322009-04-02 03:41:46 +00003502 newtab[0].name = (char *)name;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003503 newtab[0].initfunc = initfunc;
3504
3505 return PyImport_ExtendInittab(newtab);
3506}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003507
3508#ifdef __cplusplus
3509}
3510#endif