blob: 23dd7b4d0892a6c278c4809f9d89548f012e6647 [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;
934 mode_t mode = srcstat->st_mode;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000935
Christian Heimes05e8be12008-02-23 18:30:17 +0000936 fp = open_exclusive(cpathname, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000937 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000938 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000939 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000940 "# can't create %s\n", cpathname);
941 return;
942 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000943 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000944 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000945 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
946 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000947 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000949 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000950 /* Don't keep partial file */
951 fclose(fp);
952 (void) unlink(cpathname);
953 return;
954 }
955 /* Now write the true mtime */
956 fseek(fp, 4L, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000957 assert(mtime < LONG_MAX);
Martin v. Löwis725507b2006-03-07 12:08:51 +0000958 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000959 fflush(fp);
960 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000961 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000962 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000963}
964
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000965static void
966update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
967{
968 PyObject *constants, *tmp;
969 Py_ssize_t i, n;
970
971 if (PyUnicode_Compare(co->co_filename, oldname))
972 return;
973
974 tmp = co->co_filename;
975 co->co_filename = newname;
976 Py_INCREF(co->co_filename);
977 Py_DECREF(tmp);
978
979 constants = co->co_consts;
980 n = PyTuple_GET_SIZE(constants);
981 for (i = 0; i < n; i++) {
982 tmp = PyTuple_GET_ITEM(constants, i);
983 if (PyCode_Check(tmp))
984 update_code_filenames((PyCodeObject *)tmp,
985 oldname, newname);
986 }
987}
988
989static int
990update_compiled_module(PyCodeObject *co, char *pathname)
991{
992 PyObject *oldname, *newname;
993
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +0000994 newname = PyUnicode_DecodeFSDefault(pathname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000995 if (newname == NULL)
996 return -1;
997
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +0000998 if (!PyUnicode_Compare(co->co_filename, newname)) {
999 Py_DECREF(newname);
1000 return 0;
1001 }
1002
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001003 oldname = co->co_filename;
1004 Py_INCREF(oldname);
1005 update_code_filenames(co, oldname, newname);
1006 Py_DECREF(oldname);
1007 Py_DECREF(newname);
1008 return 1;
1009}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001010
1011/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001012 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
1013 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001014
Guido van Rossum79f25d91997-04-29 20:08:16 +00001015static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001016load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001017{
Christian Heimes05e8be12008-02-23 18:30:17 +00001018 struct stat st;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001019 FILE *fpc;
1020 char buf[MAXPATHLEN+1];
1021 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001022 PyCodeObject *co;
1023 PyObject *m;
Christian Heimes05e8be12008-02-23 18:30:17 +00001024
1025 if (fstat(fileno(fp), &st) != 0) {
Neal Norwitz708e51a2005-10-03 04:48:15 +00001026 PyErr_Format(PyExc_RuntimeError,
Christian Heimes05e8be12008-02-23 18:30:17 +00001027 "unable to get file status from '%s'",
Neal Norwitz708e51a2005-10-03 04:48:15 +00001028 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +00001029 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +00001030 }
Fred Drake4c82b232000-06-30 16:18:57 +00001031#if SIZEOF_TIME_T > 4
1032 /* Python's .pyc timestamp handling presumes that the timestamp fits
1033 in 4 bytes. This will be fine until sometime in the year 2038,
1034 when a 4-byte signed time_t will overflow.
1035 */
Christian Heimes05e8be12008-02-23 18:30:17 +00001036 if (st.st_mtime >> 32) {
Fred Drake4c82b232000-06-30 16:18:57 +00001037 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +00001038 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +00001039 return NULL;
1040 }
1041#endif
Tim Peters36515e22001-11-18 04:06:29 +00001042 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +00001043 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001044 if (cpathname != NULL &&
Christian Heimes05e8be12008-02-23 18:30:17 +00001045 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001046 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001047 fclose(fpc);
1048 if (co == NULL)
1049 return NULL;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001050 if (update_compiled_module(co, pathname) < 0)
1051 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001052 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001053 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001054 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +00001055 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001056 }
1057 else {
1058 co = parse_source_module(pathname, fp);
1059 if (co == NULL)
1060 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001061 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001062 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001063 name, pathname);
Christian Heimes790c8232008-01-07 21:14:23 +00001064 if (cpathname) {
1065 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1066 if (ro == NULL || !PyObject_IsTrue(ro))
Christian Heimes05e8be12008-02-23 18:30:17 +00001067 write_compiled_module(co, cpathname, &st);
Christian Heimes790c8232008-01-07 21:14:23 +00001068 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001069 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +00001070 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001071 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001072
1073 return m;
1074}
1075
Christian Heimes3b06e532008-01-07 20:12:44 +00001076/* Get source file -> unicode or None
1077 * Returns the path to the py file if available, else the given path
1078 */
1079static PyObject *
1080get_sourcefile(const char *file)
1081{
1082 char py[MAXPATHLEN + 1];
1083 Py_ssize_t len;
1084 PyObject *u;
1085 struct stat statbuf;
1086
1087 if (!file || !*file) {
1088 Py_RETURN_NONE;
1089 }
1090
1091 len = strlen(file);
Christian Heimes3540b502008-01-11 07:03:05 +00001092 /* match '*.py?' */
1093 if (len > MAXPATHLEN || PyOS_strnicmp(&file[len-4], ".py", 3) != 0) {
Christian Heimes3b06e532008-01-07 20:12:44 +00001094 return PyUnicode_DecodeFSDefault(file);
1095 }
1096
1097 strncpy(py, file, len-1);
Martin v. Löwis5021ebc2008-03-22 22:07:13 +00001098 py[len-1] = '\0';
Christian Heimes3b06e532008-01-07 20:12:44 +00001099 if (stat(py, &statbuf) == 0 &&
1100 S_ISREG(statbuf.st_mode)) {
1101 u = PyUnicode_DecodeFSDefault(py);
1102 }
1103 else {
1104 u = PyUnicode_DecodeFSDefault(file);
1105 }
1106 return u;
1107}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001108
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001109/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001110static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1111static struct filedescr *find_module(char *, char *, PyObject *,
1112 char *, size_t, FILE **, PyObject **);
Christian Heimes3b06e532008-01-07 20:12:44 +00001113static struct _frozen * find_frozen(char *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001114
1115/* Load a package and return its module object WITH INCREMENTED
1116 REFERENCE COUNT */
1117
1118static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001119load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001120{
Tim Peters1cd70172004-08-02 03:52:12 +00001121 PyObject *m, *d;
1122 PyObject *file = NULL;
1123 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001124 int err;
1125 char buf[MAXPATHLEN+1];
1126 FILE *fp = NULL;
1127 struct filedescr *fdp;
1128
1129 m = PyImport_AddModule(name);
1130 if (m == NULL)
1131 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001132 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001133 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001134 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001135 d = PyModule_GetDict(m);
Christian Heimes3b06e532008-01-07 20:12:44 +00001136 file = get_sourcefile(pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001137 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +00001138 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001139 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +00001140 if (path == NULL)
1141 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001142 err = PyDict_SetItemString(d, "__file__", file);
1143 if (err == 0)
1144 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +00001145 if (err != 0)
1146 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001147 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00001148 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001149 if (fdp == NULL) {
1150 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1151 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +00001152 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001153 }
1154 else
1155 m = NULL;
1156 goto cleanup;
1157 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001158 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001159 if (fp != NULL)
1160 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00001161 goto cleanup;
1162
1163 error:
1164 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001165 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001166 Py_XDECREF(path);
1167 Py_XDECREF(file);
1168 return m;
1169}
1170
1171
1172/* Helper to test for built-in module */
1173
1174static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001175is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001176{
1177 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +00001178 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1179 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1180 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001181 return -1;
1182 else
1183 return 1;
1184 }
1185 }
1186 return 0;
1187}
1188
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001189
Just van Rossum52e14d62002-12-30 22:08:05 +00001190/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1191 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001192 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001193 that can handle the path item. Return None if no hook could;
1194 this tells our caller it should fall back to the builtin
1195 import mechanism. Cache the result in path_importer_cache.
1196 Returns a borrowed reference. */
1197
1198static PyObject *
1199get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1200 PyObject *p)
1201{
1202 PyObject *importer;
Martin v. Löwis725507b2006-03-07 12:08:51 +00001203 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001204
1205 /* These conditions are the caller's responsibility: */
1206 assert(PyList_Check(path_hooks));
1207 assert(PyDict_Check(path_importer_cache));
1208
1209 nhooks = PyList_Size(path_hooks);
1210 if (nhooks < 0)
1211 return NULL; /* Shouldn't happen */
1212
1213 importer = PyDict_GetItem(path_importer_cache, p);
1214 if (importer != NULL)
1215 return importer;
1216
1217 /* set path_importer_cache[p] to None to avoid recursion */
1218 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1219 return NULL;
1220
1221 for (j = 0; j < nhooks; j++) {
1222 PyObject *hook = PyList_GetItem(path_hooks, j);
1223 if (hook == NULL)
1224 return NULL;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001225 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
Just van Rossum52e14d62002-12-30 22:08:05 +00001226 if (importer != NULL)
1227 break;
1228
1229 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1230 return NULL;
1231 }
1232 PyErr_Clear();
1233 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001234 if (importer == NULL) {
1235 importer = PyObject_CallFunctionObjArgs(
Christian Heimes9cd17752007-11-18 19:35:23 +00001236 (PyObject *)&PyNullImporter_Type, p, NULL
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001237 );
1238 if (importer == NULL) {
1239 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1240 PyErr_Clear();
1241 return Py_None;
1242 }
1243 }
1244 }
1245 if (importer != NULL) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001246 int err = PyDict_SetItem(path_importer_cache, p, importer);
1247 Py_DECREF(importer);
1248 if (err != 0)
1249 return NULL;
1250 }
1251 return importer;
1252}
1253
Christian Heimes9cd17752007-11-18 19:35:23 +00001254PyAPI_FUNC(PyObject *)
1255PyImport_GetImporter(PyObject *path) {
1256 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
1257
1258 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1259 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1260 importer = get_path_importer(path_importer_cache,
1261 path_hooks, path);
1262 }
1263 }
1264 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1265 return importer;
1266}
1267
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001268/* Search the path (default sys.path) for a module. Return the
1269 corresponding filedescr struct, and (via return arguments) the
1270 pathname and an open file. Return NULL if the module is not found. */
1271
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001272#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001273extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001274 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001275#endif
1276
Martin v. Löwis18e16552006-02-15 17:27:45 +00001277static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001278static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001279static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001280
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001281static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001282find_module(char *fullname, char *subname, PyObject *path, char *buf,
1283 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001284{
Martin v. Löwis725507b2006-03-07 12:08:51 +00001285 Py_ssize_t i, npath;
Fred Drake4c82b232000-06-30 16:18:57 +00001286 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001287 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001288 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001289 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001290 PyObject *path_hooks, *path_importer_cache;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001291 struct stat statbuf;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001292 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1293 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1294 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001295 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001296#if defined(PYOS_OS2)
1297 size_t saved_len;
1298 size_t saved_namelen;
1299 char *saved_buf = NULL;
1300#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001301 if (p_loader != NULL)
1302 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001303
Just van Rossum52e14d62002-12-30 22:08:05 +00001304 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001305 PyErr_SetString(PyExc_OverflowError,
1306 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001307 return NULL;
1308 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001309 strcpy(name, subname);
1310
1311 /* sys.meta_path import hook */
1312 if (p_loader != NULL) {
1313 PyObject *meta_path;
1314
1315 meta_path = PySys_GetObject("meta_path");
1316 if (meta_path == NULL || !PyList_Check(meta_path)) {
1317 PyErr_SetString(PyExc_ImportError,
1318 "sys.meta_path must be a list of "
1319 "import hooks");
1320 return NULL;
1321 }
1322 Py_INCREF(meta_path); /* zap guard */
1323 npath = PyList_Size(meta_path);
1324 for (i = 0; i < npath; i++) {
1325 PyObject *loader;
1326 PyObject *hook = PyList_GetItem(meta_path, i);
1327 loader = PyObject_CallMethod(hook, "find_module",
1328 "sO", fullname,
1329 path != NULL ?
1330 path : Py_None);
1331 if (loader == NULL) {
1332 Py_DECREF(meta_path);
1333 return NULL; /* true error */
1334 }
1335 if (loader != Py_None) {
1336 /* a loader was found */
1337 *p_loader = loader;
1338 Py_DECREF(meta_path);
1339 return &importhookdescr;
1340 }
1341 Py_DECREF(loader);
1342 }
1343 Py_DECREF(meta_path);
1344 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001345
Benjamin Petersond968e272008-11-05 22:48:33 +00001346 if (find_frozen(fullname) != NULL) {
1347 strcpy(buf, fullname);
1348 return &fd_frozen;
Guido van Rossum0506a431998-08-11 15:07:39 +00001349 }
Benjamin Petersond968e272008-11-05 22:48:33 +00001350
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001351 if (path == NULL) {
1352 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001353 strcpy(buf, name);
1354 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001355 }
Guido van Rossumac279101996-08-22 23:10:58 +00001356#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001357 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1358 if (fp != NULL) {
1359 *p_fp = fp;
1360 return fdp;
1361 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001362#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001363 path = PySys_GetObject("path");
1364 }
Benjamin Petersond968e272008-11-05 22:48:33 +00001365
Guido van Rossum79f25d91997-04-29 20:08:16 +00001366 if (path == NULL || !PyList_Check(path)) {
1367 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001368 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001369 return NULL;
1370 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001371
1372 path_hooks = PySys_GetObject("path_hooks");
1373 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1374 PyErr_SetString(PyExc_ImportError,
1375 "sys.path_hooks must be a list of "
1376 "import hooks");
1377 return NULL;
1378 }
1379 path_importer_cache = PySys_GetObject("path_importer_cache");
1380 if (path_importer_cache == NULL ||
1381 !PyDict_Check(path_importer_cache)) {
1382 PyErr_SetString(PyExc_ImportError,
1383 "sys.path_importer_cache must be a dict");
1384 return NULL;
1385 }
1386
Guido van Rossum79f25d91997-04-29 20:08:16 +00001387 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001388 namelen = strlen(name);
1389 for (i = 0; i < npath; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001390 PyObject *v = PyList_GetItem(path, i);
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001391 PyObject *origv = v;
Guido van Rossum6262cc72007-05-09 23:29:27 +00001392 const char *base;
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001393 Py_ssize_t size;
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001394 if (!v)
1395 return NULL;
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +00001396 if (PyUnicode_Check(v)) {
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001397 v = PyUnicode_AsEncodedString(v,
1398 Py_FileSystemDefaultEncoding, NULL);
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +00001399 if (v == NULL)
1400 return NULL;
1401 }
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001402 else if (!PyBytes_Check(v))
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +00001403 continue;
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001404 else
1405 Py_INCREF(v);
1406
Christian Heimes72b710a2008-05-26 13:28:38 +00001407 base = PyBytes_AS_STRING(v);
1408 size = PyBytes_GET_SIZE(v);
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001409 len = size;
Walter Dörwald3430d702002-06-17 10:43:59 +00001410 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001411 Py_DECREF(v);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001412 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001413 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001414 strcpy(buf, base);
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001415 Py_DECREF(v);
1416
Walter Dörwald3430d702002-06-17 10:43:59 +00001417 if (strlen(buf) != len) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001418 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001419 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001420
1421 /* sys.path_hooks import hook */
1422 if (p_loader != NULL) {
1423 PyObject *importer;
1424
1425 importer = get_path_importer(path_importer_cache,
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001426 path_hooks, origv);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001427 if (importer == NULL) {
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001428 return NULL;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001429 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001430 /* Note: importer is a borrowed reference */
1431 if (importer != Py_None) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001432 PyObject *loader;
1433 loader = PyObject_CallMethod(importer,
1434 "find_module",
1435 "s", fullname);
1436 if (loader == NULL)
1437 return NULL; /* error */
1438 if (loader != Py_None) {
1439 /* a loader was found */
1440 *p_loader = loader;
1441 return &importhookdescr;
1442 }
1443 Py_DECREF(loader);
Thomas Wouters477c8d52006-05-27 19:21:47 +00001444 continue;
Just van Rossum52e14d62002-12-30 22:08:05 +00001445 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001446 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001447 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001448
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001449 if (len > 0 && buf[len-1] != SEP
1450#ifdef ALTSEP
1451 && buf[len-1] != ALTSEP
1452#endif
1453 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001454 buf[len++] = SEP;
Guido van Rossum215c3402000-11-13 17:26:32 +00001455 strcpy(buf+len, name);
1456 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001457
1458 /* Check for package import (buf holds a directory name,
1459 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001460#ifdef HAVE_STAT
Walter Dörwald3430d702002-06-17 10:43:59 +00001461 if (stat(buf, &statbuf) == 0 && /* it exists */
1462 S_ISDIR(statbuf.st_mode) && /* it's a directory */
Thomas Wouters477c8d52006-05-27 19:21:47 +00001463 case_ok(buf, len, namelen, name)) { /* case matches */
1464 if (find_init_module(buf)) { /* and has __init__.py */
Thomas Wouters477c8d52006-05-27 19:21:47 +00001465 return &fd_package;
1466 }
1467 else {
1468 char warnstr[MAXPATHLEN+80];
1469 sprintf(warnstr, "Not importing directory "
1470 "'%.*s': missing __init__.py",
1471 MAXPATHLEN, buf);
Skip Montanaro46fc3372007-08-12 11:44:53 +00001472 if (PyErr_WarnEx(PyExc_ImportWarning,
1473 warnstr, 1)) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001474 return NULL;
1475 }
1476 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001477 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001478#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001479#if defined(PYOS_OS2)
1480 /* take a snapshot of the module spec for restoration
1481 * after the 8 character DLL hackery
1482 */
1483 saved_buf = strdup(buf);
1484 saved_len = len;
1485 saved_namelen = namelen;
1486#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001487 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Guido van Rossum04110fb2007-08-24 16:32:05 +00001488#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001489 /* OS/2 limits DLLs to 8 character names (w/o
1490 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001491 * so if the name is longer than that and its a
1492 * dynamically loaded module we're going to try,
1493 * truncate the name before trying
1494 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001495 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001496 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001497 const struct filedescr *scan;
1498 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001499 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001500 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001501 break;
1502 else
1503 scan++;
1504 }
1505 if (scan->suffix != NULL) {
1506 /* yes, so truncate the name */
1507 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001508 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001509 buf[len] = '\0';
1510 }
1511 }
1512#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001513 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001514 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001515 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001516 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001517 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001518 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001519 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001520 if (fp != NULL) {
1521 if (case_ok(buf, len, namelen, name))
1522 break;
1523 else { /* continue search */
1524 fclose(fp);
1525 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001526 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001527 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001528#if defined(PYOS_OS2)
1529 /* restore the saved snapshot */
1530 strcpy(buf, saved_buf);
1531 len = saved_len;
1532 namelen = saved_namelen;
1533#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001534 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001535#if defined(PYOS_OS2)
1536 /* don't need/want the module name snapshot anymore */
1537 if (saved_buf)
1538 {
1539 free(saved_buf);
1540 saved_buf = NULL;
1541 }
1542#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001543 if (fp != NULL)
1544 break;
1545 }
1546 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001547 PyErr_Format(PyExc_ImportError,
1548 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001549 return NULL;
1550 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001551 *p_fp = fp;
1552 return fdp;
1553}
1554
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001555/* Helpers for main.c
1556 * Find the source file corresponding to a named module
1557 */
1558struct filedescr *
1559_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1560 size_t buflen, FILE **p_fp, PyObject **p_loader)
1561{
1562 return find_module((char *) name, (char *) name, path,
1563 buf, buflen, p_fp, p_loader);
1564}
1565
1566PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1567{
1568 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1569}
1570
Martin v. Löwis18e16552006-02-15 17:27:45 +00001571/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001572 * The arguments here are tricky, best shown by example:
1573 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1574 * ^ ^ ^ ^
1575 * |--------------------- buf ---------------------|
1576 * |------------------- len ------------------|
1577 * |------ name -------|
1578 * |----- namelen -----|
1579 * buf is the full path, but len only counts up to (& exclusive of) the
1580 * extension. name is the module name, also exclusive of extension.
1581 *
1582 * We've already done a successful stat() or fopen() on buf, so know that
1583 * there's some match, possibly case-insensitive.
1584 *
Tim Peters50d8d372001-02-28 05:34:27 +00001585 * case_ok() is to return 1 if there's a case-sensitive match for
1586 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1587 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001588 *
Tim Peters50d8d372001-02-28 05:34:27 +00001589 * case_ok() is used to implement case-sensitive import semantics even
1590 * on platforms with case-insensitive filesystems. It's trivial to implement
1591 * for case-sensitive filesystems. It's pretty much a cross-platform
1592 * nightmare for systems with case-insensitive filesystems.
1593 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001594
Tim Peters50d8d372001-02-28 05:34:27 +00001595/* First we may need a pile of platform-specific header files; the sequence
1596 * of #if's here should match the sequence in the body of case_ok().
1597 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001598#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001599#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001600
Tim Peters50d8d372001-02-28 05:34:27 +00001601#elif defined(DJGPP)
1602#include <dir.h>
1603
Jason Tishler7961aa62005-05-20 00:56:54 +00001604#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001605#include <sys/types.h>
1606#include <dirent.h>
1607
Andrew MacIntyred9400542002-02-26 11:41:34 +00001608#elif defined(PYOS_OS2)
1609#define INCL_DOS
1610#define INCL_DOSERRORS
1611#define INCL_NOPMAPI
1612#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00001613#endif
1614
Guido van Rossum0980bd91998-02-13 17:18:36 +00001615static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001616case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001617{
Tim Peters50d8d372001-02-28 05:34:27 +00001618/* Pick a platform-specific implementation; the sequence of #if's here should
1619 * match the sequence just above.
1620 */
1621
Jason Tishler7961aa62005-05-20 00:56:54 +00001622/* MS_WINDOWS */
1623#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001624 WIN32_FIND_DATA data;
1625 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001626
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001627 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001628 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001629
Guido van Rossum0980bd91998-02-13 17:18:36 +00001630 h = FindFirstFile(buf, &data);
1631 if (h == INVALID_HANDLE_VALUE) {
1632 PyErr_Format(PyExc_NameError,
1633 "Can't find file for module %.100s\n(filename %.300s)",
1634 name, buf);
1635 return 0;
1636 }
1637 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001638 return strncmp(data.cFileName, name, namelen) == 0;
1639
1640/* DJGPP */
1641#elif defined(DJGPP)
1642 struct ffblk ffblk;
1643 int done;
1644
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001645 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001646 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001647
1648 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1649 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001650 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001651 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001652 name, buf);
1653 return 0;
1654 }
Tim Peters50d8d372001-02-28 05:34:27 +00001655 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001656
Jason Tishler7961aa62005-05-20 00:56:54 +00001657/* new-fangled macintosh (macosx) or Cygwin */
1658#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001659 DIR *dirp;
1660 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001661 char dirname[MAXPATHLEN + 1];
1662 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001663
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001664 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001665 return 1;
1666
Tim Petersd1e87a82001-03-01 18:12:00 +00001667 /* Copy the dir component into dirname; substitute "." if empty */
1668 if (dirlen <= 0) {
1669 dirname[0] = '.';
1670 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001671 }
1672 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001673 assert(dirlen <= MAXPATHLEN);
1674 memcpy(dirname, buf, dirlen);
1675 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001676 }
1677 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001678 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001679 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001680 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001681 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001682 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001683#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001684 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001685#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001686 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001687#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001688 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001689 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001690 (void)closedir(dirp);
1691 return 1; /* Found */
1692 }
1693 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001694 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001695 }
Tim Peters430f5d42001-03-01 01:30:56 +00001696 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001697
Andrew MacIntyred9400542002-02-26 11:41:34 +00001698/* OS/2 */
1699#elif defined(PYOS_OS2)
1700 HDIR hdir = 1;
1701 ULONG srchcnt = 1;
1702 FILEFINDBUF3 ffbuf;
1703 APIRET rc;
1704
Christian Heimes790c8232008-01-07 21:14:23 +00001705 if (Py_GETENV("PYTHONCASEOK") != NULL)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001706 return 1;
1707
1708 rc = DosFindFirst(buf,
1709 &hdir,
1710 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1711 &ffbuf, sizeof(ffbuf),
1712 &srchcnt,
1713 FIL_STANDARD);
1714 if (rc != NO_ERROR)
1715 return 0;
1716 return strncmp(ffbuf.achName, name, namelen) == 0;
1717
Tim Peters50d8d372001-02-28 05:34:27 +00001718/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1719#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001720 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001721
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001722#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001723}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001724
Guido van Rossum0980bd91998-02-13 17:18:36 +00001725
Guido van Rossum197346f1997-10-31 18:38:52 +00001726#ifdef HAVE_STAT
1727/* Helper to look for __init__.py or __init__.py[co] in potential package */
1728static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001729find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001730{
Tim Peters0f9431f2001-07-05 03:47:53 +00001731 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001732 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001733 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001734 struct stat statbuf;
1735
Tim Peters0f9431f2001-07-05 03:47:53 +00001736/* For calling case_ok(buf, len, namelen, name):
1737 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1738 * ^ ^ ^ ^
1739 * |--------------------- buf ---------------------|
1740 * |------------------- len ------------------|
1741 * |------ name -------|
1742 * |----- namelen -----|
1743 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001744 if (save_len + 13 >= MAXPATHLEN)
1745 return 0;
1746 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001747 pname = buf + i;
1748 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001749 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001750 if (case_ok(buf,
1751 save_len + 9, /* len("/__init__") */
1752 8, /* len("__init__") */
1753 pname)) {
1754 buf[save_len] = '\0';
1755 return 1;
1756 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001757 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001758 i += strlen(pname);
1759 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001760 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001761 if (case_ok(buf,
1762 save_len + 9, /* len("/__init__") */
1763 8, /* len("__init__") */
1764 pname)) {
1765 buf[save_len] = '\0';
1766 return 1;
1767 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001768 }
1769 buf[save_len] = '\0';
1770 return 0;
1771}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001772
Guido van Rossum197346f1997-10-31 18:38:52 +00001773#endif /* HAVE_STAT */
1774
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001775
Tim Petersdbd9ba62000-07-09 03:09:57 +00001776static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001777
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001778/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001779 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001780
Guido van Rossum79f25d91997-04-29 20:08:16 +00001781static PyObject *
Just van Rossum52e14d62002-12-30 22:08:05 +00001782load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001783{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001784 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001785 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001786 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001787
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001788 /* First check that there's an open file (if we need one) */
1789 switch (type) {
1790 case PY_SOURCE:
1791 case PY_COMPILED:
1792 if (fp == NULL) {
1793 PyErr_Format(PyExc_ValueError,
1794 "file object required for import (type code %d)",
1795 type);
1796 return NULL;
1797 }
1798 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001799
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001800 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001801
1802 case PY_SOURCE:
1803 m = load_source_module(name, buf, fp);
1804 break;
1805
1806 case PY_COMPILED:
1807 m = load_compiled_module(name, buf, fp);
1808 break;
1809
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001810#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001811 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001812 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001813 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001814#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001815
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001816 case PKG_DIRECTORY:
1817 m = load_package(name, buf);
1818 break;
1819
1820 case C_BUILTIN:
1821 case PY_FROZEN:
Guido van Rossuma5568d31998-03-05 03:45:08 +00001822 if (buf != NULL && buf[0] != '\0')
1823 name = buf;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001824 if (type == C_BUILTIN)
1825 err = init_builtin(name);
1826 else
1827 err = PyImport_ImportFrozenModule(name);
1828 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001829 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001830 if (err == 0) {
1831 PyErr_Format(PyExc_ImportError,
1832 "Purported %s module %.200s not found",
1833 type == C_BUILTIN ?
1834 "builtin" : "frozen",
1835 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001836 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001837 }
1838 modules = PyImport_GetModuleDict();
1839 m = PyDict_GetItemString(modules, name);
1840 if (m == NULL) {
1841 PyErr_Format(
1842 PyExc_ImportError,
1843 "%s module %.200s not properly initialized",
1844 type == C_BUILTIN ?
1845 "builtin" : "frozen",
1846 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001847 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001848 }
1849 Py_INCREF(m);
1850 break;
1851
Just van Rossum52e14d62002-12-30 22:08:05 +00001852 case IMP_HOOK: {
1853 if (loader == NULL) {
1854 PyErr_SetString(PyExc_ImportError,
1855 "import hook without loader");
1856 return NULL;
1857 }
1858 m = PyObject_CallMethod(loader, "load_module", "s", name);
1859 break;
1860 }
1861
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001862 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001863 PyErr_Format(PyExc_ImportError,
1864 "Don't know how to import %.200s (type code %d)",
1865 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001866 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001867
1868 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001869
1870 return m;
1871}
1872
1873
1874/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00001875 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001876 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001877
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001878static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001879init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001880{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001881 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001882
Greg Ward201baee2001-10-04 14:52:06 +00001883 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001884 return 1;
1885
Guido van Rossum771c6c81997-10-31 18:37:24 +00001886 for (p = PyImport_Inittab; p->name != NULL; p++) {
Martin v. Löwis1a214512008-06-11 05:26:20 +00001887 PyObject *mod;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001888 if (strcmp(name, p->name) == 0) {
1889 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001890 PyErr_Format(PyExc_ImportError,
1891 "Cannot re-init internal module %.200s",
1892 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001893 return -1;
1894 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001895 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001896 PySys_WriteStderr("import %s # builtin\n", name);
Martin v. Löwis1a214512008-06-11 05:26:20 +00001897 mod = (*p->initfunc)();
1898 if (mod == 0)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001899 return -1;
Martin v. Löwis1a214512008-06-11 05:26:20 +00001900 if (_PyImport_FixupExtension(mod, name, name) < 0)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001901 return -1;
Martin v. Löwis1a214512008-06-11 05:26:20 +00001902 /* FixupExtension has put the module into sys.modules,
1903 so we can release our own reference. */
1904 Py_DECREF(mod);
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001905 return 1;
1906 }
1907 }
1908 return 0;
1909}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001910
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001911
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001912/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001913
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001914static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001915find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001916{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001917 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001918
Benjamin Petersond968e272008-11-05 22:48:33 +00001919 if (!name)
1920 return NULL;
1921
Guido van Rossum79f25d91997-04-29 20:08:16 +00001922 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001923 if (p->name == NULL)
1924 return NULL;
1925 if (strcmp(p->name, name) == 0)
1926 break;
1927 }
1928 return p;
1929}
1930
Guido van Rossum79f25d91997-04-29 20:08:16 +00001931static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001932get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001933{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001934 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001935 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001936
1937 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001938 PyErr_Format(PyExc_ImportError,
1939 "No such frozen object named %.200s",
1940 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001941 return NULL;
1942 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001943 if (p->code == NULL) {
1944 PyErr_Format(PyExc_ImportError,
1945 "Excluded frozen object named %.200s",
1946 name);
1947 return NULL;
1948 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001949 size = p->size;
1950 if (size < 0)
1951 size = -size;
1952 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001953}
1954
Brett Cannon8d110132009-03-15 02:20:16 +00001955static PyObject *
1956is_frozen_package(char *name)
1957{
1958 struct _frozen *p = find_frozen(name);
1959 int size;
1960
1961 if (p == NULL) {
1962 PyErr_Format(PyExc_ImportError,
1963 "No such frozen object named %.200s",
1964 name);
1965 return NULL;
1966 }
1967
1968 size = p->size;
1969
1970 if (size < 0)
1971 Py_RETURN_TRUE;
1972 else
1973 Py_RETURN_FALSE;
1974}
1975
1976
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001977/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00001978 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001979 an exception set if the initialization failed.
1980 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001981
1982int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001983PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001984{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001985 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001986 PyObject *co;
1987 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001988 int ispackage;
1989 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001990
1991 if (p == NULL)
1992 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001993 if (p->code == NULL) {
1994 PyErr_Format(PyExc_ImportError,
1995 "Excluded frozen object named %.200s",
1996 name);
1997 return -1;
1998 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001999 size = p->size;
2000 ispackage = (size < 0);
2001 if (ispackage)
2002 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002003 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00002004 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00002005 name, ispackage ? " package" : "");
2006 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002007 if (co == NULL)
2008 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002009 if (!PyCode_Check(co)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002010 PyErr_Format(PyExc_TypeError,
2011 "frozen object %.200s is not a code object",
2012 name);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002013 goto err_return;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002014 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00002015 if (ispackage) {
2016 /* Set __path__ to the package name */
Benjamin Petersond968e272008-11-05 22:48:33 +00002017 PyObject *d, *s, *l;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002018 int err;
2019 m = PyImport_AddModule(name);
2020 if (m == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002021 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002022 d = PyModule_GetDict(m);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002023 s = PyUnicode_InternFromString(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00002024 if (s == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002025 goto err_return;
Benjamin Petersond968e272008-11-05 22:48:33 +00002026 l = PyList_New(1);
2027 if (l == NULL) {
2028 Py_DECREF(s);
2029 goto err_return;
2030 }
2031 PyList_SET_ITEM(l, 0, s);
2032 err = PyDict_SetItemString(d, "__path__", l);
2033 Py_DECREF(l);
Guido van Rossuma5568d31998-03-05 03:45:08 +00002034 if (err != 0)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002035 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00002036 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00002037 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002038 if (m == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002039 goto err_return;
2040 Py_DECREF(co);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002041 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002042 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002043err_return:
2044 Py_DECREF(co);
2045 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002046}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002047
2048
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002049/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002050 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002051
Guido van Rossum79f25d91997-04-29 20:08:16 +00002052PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002053PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002054{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002055 PyObject *pname;
2056 PyObject *result;
2057
Martin v. Löwis5b222132007-06-10 09:51:05 +00002058 pname = PyUnicode_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00002059 if (pname == NULL)
2060 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002061 result = PyImport_Import(pname);
2062 Py_DECREF(pname);
2063 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002064}
2065
Christian Heimes072c0f12008-01-03 23:01:04 +00002066/* Import a module without blocking
2067 *
2068 * At first it tries to fetch the module from sys.modules. If the module was
2069 * never loaded before it loads it with PyImport_ImportModule() unless another
2070 * thread holds the import lock. In the latter case the function raises an
2071 * ImportError instead of blocking.
2072 *
2073 * Returns the module object with incremented ref count.
2074 */
2075PyObject *
2076PyImport_ImportModuleNoBlock(const char *name)
2077{
2078 PyObject *result;
2079 PyObject *modules;
2080 long me;
2081
2082 /* Try to get the module from sys.modules[name] */
2083 modules = PyImport_GetModuleDict();
2084 if (modules == NULL)
2085 return NULL;
2086
2087 result = PyDict_GetItemString(modules, name);
2088 if (result != NULL) {
2089 Py_INCREF(result);
2090 return result;
2091 }
2092 else {
2093 PyErr_Clear();
2094 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002095#ifdef WITH_THREAD
Christian Heimes072c0f12008-01-03 23:01:04 +00002096 /* check the import lock
2097 * me might be -1 but I ignore the error here, the lock function
2098 * takes care of the problem */
2099 me = PyThread_get_thread_ident();
2100 if (import_lock_thread == -1 || import_lock_thread == me) {
2101 /* no thread or me is holding the lock */
2102 return PyImport_ImportModule(name);
2103 }
2104 else {
2105 PyErr_Format(PyExc_ImportError,
2106 "Failed to import %.200s because the import lock"
2107 "is held by another thread.",
2108 name);
2109 return NULL;
2110 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002111#else
2112 return PyImport_ImportModule(name);
2113#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002114}
2115
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002116/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002117static PyObject *get_parent(PyObject *globals, char *buf,
2118 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002119static PyObject *load_next(PyObject *mod, PyObject *altmod,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002120 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002121static int mark_miss(char *name);
2122static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002123 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002124static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002125
2126/* The Magnum Opus of dotted-name import :-) */
2127
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002128static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002129import_module_level(char *name, PyObject *globals, PyObject *locals,
2130 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002131{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002132 char buf[MAXPATHLEN+1];
Martin v. Löwis18e16552006-02-15 17:27:45 +00002133 Py_ssize_t buflen = 0;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002134 PyObject *parent, *head, *next, *tail;
2135
Christian Heimes454f37b2008-01-10 00:10:02 +00002136 if (strchr(name, '/') != NULL
2137#ifdef MS_WINDOWS
2138 || strchr(name, '\\') != NULL
2139#endif
2140 ) {
2141 PyErr_SetString(PyExc_ImportError,
2142 "Import by filename is not supported.");
2143 return NULL;
2144 }
2145
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002146 parent = get_parent(globals, buf, &buflen, level);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002147 if (parent == NULL)
2148 return NULL;
2149
2150 head = load_next(parent, Py_None, &name, buf, &buflen);
2151 if (head == NULL)
2152 return NULL;
2153
2154 tail = head;
2155 Py_INCREF(tail);
2156 while (name) {
2157 next = load_next(tail, tail, &name, buf, &buflen);
2158 Py_DECREF(tail);
2159 if (next == NULL) {
2160 Py_DECREF(head);
2161 return NULL;
2162 }
2163 tail = next;
2164 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002165 if (tail == Py_None) {
2166 /* If tail is Py_None, both get_parent and load_next found
2167 an empty module name: someone called __import__("") or
2168 doctored faulty bytecode */
2169 Py_DECREF(tail);
2170 Py_DECREF(head);
2171 PyErr_SetString(PyExc_ValueError,
2172 "Empty module name");
2173 return NULL;
2174 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002175
2176 if (fromlist != NULL) {
2177 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2178 fromlist = NULL;
2179 }
2180
2181 if (fromlist == NULL) {
2182 Py_DECREF(tail);
2183 return head;
2184 }
2185
2186 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002187 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002188 Py_DECREF(tail);
2189 return NULL;
2190 }
2191
2192 return tail;
2193}
2194
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002195PyObject *
2196PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2197 PyObject *fromlist, int level)
2198{
2199 PyObject *result;
2200 lock_import();
2201 result = import_module_level(name, globals, locals, fromlist, level);
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002202 if (unlock_import() < 0) {
2203 Py_XDECREF(result);
2204 PyErr_SetString(PyExc_RuntimeError,
2205 "not holding the import lock");
2206 return NULL;
2207 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002208 return result;
2209}
2210
Fred Drake87590902004-05-28 20:21:36 +00002211/* Return the package that an import is being performed in. If globals comes
2212 from the module foo.bar.bat (not itself a package), this returns the
2213 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002214 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002215
2216 The *name* of the returned package is returned in buf, with the length of
2217 the name in *p_buflen.
2218
2219 If globals doesn't come from a package or a module in a package, or a
2220 corresponding entry is not found in sys.modules, Py_None is returned.
2221*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002222static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002223get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002224{
2225 static PyObject *namestr = NULL;
2226 static PyObject *pathstr = NULL;
Nick Coghlande10c852007-12-04 12:22:52 +00002227 static PyObject *pkgstr = NULL;
2228 PyObject *pkgname, *modname, *modpath, *modules, *parent;
Georg Brandl2ee470f2008-07-16 12:55:28 +00002229 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002230
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002231 if (globals == NULL || !PyDict_Check(globals) || !level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002232 return Py_None;
2233
2234 if (namestr == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002235 namestr = PyUnicode_InternFromString("__name__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002236 if (namestr == NULL)
2237 return NULL;
2238 }
2239 if (pathstr == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002240 pathstr = PyUnicode_InternFromString("__path__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002241 if (pathstr == NULL)
2242 return NULL;
2243 }
Nick Coghlande10c852007-12-04 12:22:52 +00002244 if (pkgstr == NULL) {
2245 pkgstr = PyUnicode_InternFromString("__package__");
2246 if (pkgstr == NULL)
2247 return NULL;
2248 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002249
2250 *buf = '\0';
2251 *p_buflen = 0;
Nick Coghlande10c852007-12-04 12:22:52 +00002252 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002253
Nick Coghlande10c852007-12-04 12:22:52 +00002254 if ((pkgname != NULL) && (pkgname != Py_None)) {
2255 /* __package__ is set, so use it */
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002256 char *pkgname_str;
Nick Coghlande10c852007-12-04 12:22:52 +00002257 Py_ssize_t len;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002258
Nick Coghlande10c852007-12-04 12:22:52 +00002259 if (!PyUnicode_Check(pkgname)) {
2260 PyErr_SetString(PyExc_ValueError,
2261 "__package__ set to non-string");
2262 return NULL;
2263 }
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00002264 pkgname_str = _PyUnicode_AsStringAndSize(pkgname, &len);
Nick Coghlande10c852007-12-04 12:22:52 +00002265 if (len == 0) {
2266 if (level > 0) {
2267 PyErr_SetString(PyExc_ValueError,
2268 "Attempted relative import in non-package");
2269 return NULL;
2270 }
2271 return Py_None;
2272 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002273 if (len > MAXPATHLEN) {
2274 PyErr_SetString(PyExc_ValueError,
Nick Coghlande10c852007-12-04 12:22:52 +00002275 "Package name too long");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002276 return NULL;
2277 }
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002278 strcpy(buf, pkgname_str);
Nick Coghlande10c852007-12-04 12:22:52 +00002279 } else {
2280 /* __package__ not set, so figure it out and set it */
2281 modname = PyDict_GetItem(globals, namestr);
2282 if (modname == NULL || !PyUnicode_Check(modname))
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002283 return Py_None;
Nick Coghlande10c852007-12-04 12:22:52 +00002284
2285 modpath = PyDict_GetItem(globals, pathstr);
2286 if (modpath != NULL) {
2287 /* __path__ is set, so modname is already the package name */
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002288 char *modname_str;
2289 Py_ssize_t len;
Nick Coghlande10c852007-12-04 12:22:52 +00002290 int error;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002291
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00002292 modname_str = _PyUnicode_AsStringAndSize(modname, &len);
Nick Coghlande10c852007-12-04 12:22:52 +00002293 if (len > MAXPATHLEN) {
2294 PyErr_SetString(PyExc_ValueError,
2295 "Module name too long");
2296 return NULL;
2297 }
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002298 strcpy(buf, modname_str);
Nick Coghlande10c852007-12-04 12:22:52 +00002299 error = PyDict_SetItem(globals, pkgstr, modname);
2300 if (error) {
2301 PyErr_SetString(PyExc_ValueError,
2302 "Could not set __package__");
2303 return NULL;
2304 }
2305 } else {
2306 /* Normal module, so work out the package name if any */
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00002307 char *start = _PyUnicode_AsString(modname);
Nick Coghlande10c852007-12-04 12:22:52 +00002308 char *lastdot = strrchr(start, '.');
2309 size_t len;
2310 int error;
2311 if (lastdot == NULL && level > 0) {
2312 PyErr_SetString(PyExc_ValueError,
2313 "Attempted relative import in non-package");
2314 return NULL;
2315 }
2316 if (lastdot == NULL) {
2317 error = PyDict_SetItem(globals, pkgstr, Py_None);
2318 if (error) {
2319 PyErr_SetString(PyExc_ValueError,
2320 "Could not set __package__");
2321 return NULL;
2322 }
2323 return Py_None;
2324 }
2325 len = lastdot - start;
2326 if (len >= MAXPATHLEN) {
2327 PyErr_SetString(PyExc_ValueError,
2328 "Module name too long");
2329 return NULL;
2330 }
2331 strncpy(buf, start, len);
2332 buf[len] = '\0';
2333 pkgname = PyUnicode_FromString(buf);
2334 if (pkgname == NULL) {
2335 return NULL;
2336 }
2337 error = PyDict_SetItem(globals, pkgstr, pkgname);
2338 Py_DECREF(pkgname);
2339 if (error) {
2340 PyErr_SetString(PyExc_ValueError,
2341 "Could not set __package__");
2342 return NULL;
2343 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002344 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002345 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002346 while (--level > 0) {
2347 char *dot = strrchr(buf, '.');
2348 if (dot == NULL) {
2349 PyErr_SetString(PyExc_ValueError,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002350 "Attempted relative import beyond "
2351 "toplevel package");
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002352 return NULL;
2353 }
2354 *dot = '\0';
2355 }
2356 *p_buflen = strlen(buf);
2357
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002358 modules = PyImport_GetModuleDict();
2359 parent = PyDict_GetItemString(modules, buf);
Georg Brandl2ee470f2008-07-16 12:55:28 +00002360 if (parent == NULL) {
2361 if (orig_level < 1) {
2362 PyObject *err_msg = PyBytes_FromFormat(
2363 "Parent module '%.200s' not found "
2364 "while handling absolute import", buf);
2365 if (err_msg == NULL) {
2366 return NULL;
2367 }
2368 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2369 PyBytes_AsString(err_msg), 1)) {
2370 *buf = '\0';
2371 *p_buflen = 0;
2372 parent = Py_None;
2373 }
2374 Py_DECREF(err_msg);
2375 } else {
2376 PyErr_Format(PyExc_SystemError,
2377 "Parent module '%.200s' not loaded, "
2378 "cannot perform relative import", buf);
2379 }
2380 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002381 return parent;
2382 /* We expect, but can't guarantee, if parent != None, that:
2383 - parent.__name__ == buf
2384 - parent.__dict__ is globals
2385 If this is violated... Who cares? */
2386}
2387
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002388/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002389static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002390load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002391 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002392{
2393 char *name = *p_name;
2394 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002395 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002396 char *p;
2397 PyObject *result;
2398
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002399 if (strlen(name) == 0) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002400 /* completely empty module name should only happen in
2401 'from . import' (or '__import__("")')*/
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002402 Py_INCREF(mod);
2403 *p_name = NULL;
2404 return mod;
2405 }
2406
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002407 if (dot == NULL) {
2408 *p_name = NULL;
2409 len = strlen(name);
2410 }
2411 else {
2412 *p_name = dot+1;
2413 len = dot-name;
2414 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002415 if (len == 0) {
2416 PyErr_SetString(PyExc_ValueError,
2417 "Empty module name");
2418 return NULL;
2419 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002420
2421 p = buf + *p_buflen;
2422 if (p != buf)
2423 *p++ = '.';
2424 if (p+len-buf >= MAXPATHLEN) {
2425 PyErr_SetString(PyExc_ValueError,
2426 "Module name too long");
2427 return NULL;
2428 }
2429 strncpy(p, name, len);
2430 p[len] = '\0';
2431 *p_buflen = p+len-buf;
2432
2433 result = import_submodule(mod, p, buf);
2434 if (result == Py_None && altmod != mod) {
2435 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002436 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002437 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002438 if (result != NULL && result != Py_None) {
2439 if (mark_miss(buf) != 0) {
2440 Py_DECREF(result);
2441 return NULL;
2442 }
2443 strncpy(buf, name, len);
2444 buf[len] = '\0';
2445 *p_buflen = len;
2446 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002447 }
2448 if (result == NULL)
2449 return NULL;
2450
2451 if (result == Py_None) {
2452 Py_DECREF(result);
2453 PyErr_Format(PyExc_ImportError,
2454 "No module named %.200s", name);
2455 return NULL;
2456 }
2457
2458 return result;
2459}
2460
2461static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002462mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002463{
2464 PyObject *modules = PyImport_GetModuleDict();
2465 return PyDict_SetItemString(modules, name, Py_None);
2466}
2467
2468static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002469ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002470 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002471{
2472 int i;
2473
2474 if (!PyObject_HasAttrString(mod, "__path__"))
2475 return 1;
2476
2477 for (i = 0; ; i++) {
2478 PyObject *item = PySequence_GetItem(fromlist, i);
2479 int hasit;
2480 if (item == NULL) {
2481 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2482 PyErr_Clear();
2483 return 1;
2484 }
2485 return 0;
2486 }
Martin v. Löwis5b222132007-06-10 09:51:05 +00002487 if (!PyUnicode_Check(item)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002488 PyErr_SetString(PyExc_TypeError,
Neal Norwitz80e7f272007-08-26 06:45:23 +00002489 "Item in ``from list'' not a string");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002490 Py_DECREF(item);
2491 return 0;
2492 }
Martin v. Löwis5b222132007-06-10 09:51:05 +00002493 if (PyUnicode_AS_UNICODE(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002494 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002495 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002496 /* See if the package defines __all__ */
2497 if (recursive)
2498 continue; /* Avoid endless recursion */
2499 all = PyObject_GetAttrString(mod, "__all__");
2500 if (all == NULL)
2501 PyErr_Clear();
2502 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002503 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002504 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002505 if (!ret)
2506 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002507 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002508 continue;
2509 }
2510 hasit = PyObject_HasAttr(mod, item);
2511 if (!hasit) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002512 PyObject *item8;
2513 char *subname;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002514 PyObject *submod;
2515 char *p;
Martin v. Löwis5b222132007-06-10 09:51:05 +00002516 if (!Py_FileSystemDefaultEncoding) {
2517 item8 = PyUnicode_EncodeASCII(PyUnicode_AsUnicode(item),
2518 PyUnicode_GetSize(item),
Martin v. Löwis427dbff2007-06-12 05:53:00 +00002519 NULL);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002520 } else {
Guido van Rossum98297ee2007-11-06 21:34:58 +00002521 item8 = PyUnicode_AsEncodedString(item,
2522 Py_FileSystemDefaultEncoding, NULL);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002523 }
2524 if (!item8) {
2525 PyErr_SetString(PyExc_ValueError, "Cannot encode path item");
2526 return 0;
2527 }
Christian Heimes72b710a2008-05-26 13:28:38 +00002528 subname = PyBytes_AS_STRING(item8);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002529 if (buflen + strlen(subname) >= MAXPATHLEN) {
2530 PyErr_SetString(PyExc_ValueError,
2531 "Module name too long");
2532 Py_DECREF(item);
2533 return 0;
2534 }
2535 p = buf + buflen;
2536 *p++ = '.';
2537 strcpy(p, subname);
2538 submod = import_submodule(mod, subname, buf);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002539 Py_DECREF(item8);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002540 Py_XDECREF(submod);
2541 if (submod == NULL) {
2542 Py_DECREF(item);
2543 return 0;
2544 }
2545 }
2546 Py_DECREF(item);
2547 }
2548
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002549 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002550}
2551
Neil Schemenauer00b09662003-06-16 21:03:07 +00002552static int
2553add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2554 PyObject *modules)
2555{
2556 if (mod == Py_None)
2557 return 1;
2558 /* Irrespective of the success of this load, make a
2559 reference to it in the parent package module. A copy gets
2560 saved in the modules dictionary under the full name, so get a
2561 reference from there, if need be. (The exception is when the
2562 load failed with a SyntaxError -- then there's no trace in
2563 sys.modules. In that case, of course, do nothing extra.) */
2564 if (submod == NULL) {
2565 submod = PyDict_GetItemString(modules, fullname);
2566 if (submod == NULL)
2567 return 1;
2568 }
2569 if (PyModule_Check(mod)) {
2570 /* We can't use setattr here since it can give a
2571 * spurious warning if the submodule name shadows a
2572 * builtin name */
2573 PyObject *dict = PyModule_GetDict(mod);
2574 if (!dict)
2575 return 0;
2576 if (PyDict_SetItemString(dict, subname, submod) < 0)
2577 return 0;
2578 }
2579 else {
2580 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2581 return 0;
2582 }
2583 return 1;
2584}
2585
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002586static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002587import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002588{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002589 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002590 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002591
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002592 /* Require:
2593 if mod == None: subname == fullname
2594 else: mod.__name__ + "." + subname == fullname
2595 */
2596
Tim Peters50d8d372001-02-28 05:34:27 +00002597 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002598 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002599 }
2600 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002601 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002602 char buf[MAXPATHLEN+1];
2603 struct filedescr *fdp;
2604 FILE *fp = NULL;
2605
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002606 if (mod == Py_None)
2607 path = NULL;
2608 else {
2609 path = PyObject_GetAttrString(mod, "__path__");
2610 if (path == NULL) {
2611 PyErr_Clear();
2612 Py_INCREF(Py_None);
2613 return Py_None;
2614 }
2615 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002616
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002617 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002618 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2619 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002620 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002621 if (fdp == NULL) {
2622 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2623 return NULL;
2624 PyErr_Clear();
2625 Py_INCREF(Py_None);
2626 return Py_None;
2627 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002628 m = load_module(fullname, fp, buf, fdp->type, loader);
2629 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002630 if (fp)
2631 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002632 if (!add_submodule(mod, m, fullname, subname, modules)) {
2633 Py_XDECREF(m);
2634 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002635 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002636 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002637
2638 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002639}
2640
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002641
2642/* Re-import a module of any kind and return its module object, WITH
2643 INCREMENTED REFERENCE COUNT */
2644
Guido van Rossum79f25d91997-04-29 20:08:16 +00002645PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002646PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002647{
Guido van Rossumd8faa362007-04-27 19:54:29 +00002648 PyInterpreterState *interp = PyThreadState_Get()->interp;
2649 PyObject *modules_reloading = interp->modules_reloading;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002650 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossumd8faa362007-04-27 19:54:29 +00002651 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002652 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002653 char buf[MAXPATHLEN+1];
2654 struct filedescr *fdp;
2655 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002656 PyObject *newm;
Guido van Rossumd8faa362007-04-27 19:54:29 +00002657
2658 if (modules_reloading == NULL) {
2659 Py_FatalError("PyImport_ReloadModule: "
Guido van Rossume7ba4952007-06-06 23:52:48 +00002660 "no modules_reloading dictionary!");
Guido van Rossumd8faa362007-04-27 19:54:29 +00002661 return NULL;
2662 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002663
Guido van Rossum79f25d91997-04-29 20:08:16 +00002664 if (m == NULL || !PyModule_Check(m)) {
2665 PyErr_SetString(PyExc_TypeError,
2666 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002667 return NULL;
2668 }
Neal Norwitz5616c6d2007-08-26 05:32:41 +00002669 name = (char*)PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002670 if (name == NULL)
2671 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002672 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002673 PyErr_Format(PyExc_ImportError,
2674 "reload(): module %.200s not in sys.modules",
2675 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002676 return NULL;
2677 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00002678 existing_m = PyDict_GetItemString(modules_reloading, name);
2679 if (existing_m != NULL) {
2680 /* Due to a recursive reload, this module is already
2681 being reloaded. */
2682 Py_INCREF(existing_m);
2683 return existing_m;
2684 }
2685 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2686 return NULL;
2687
Guido van Rossum222ef561997-09-06 19:41:09 +00002688 subname = strrchr(name, '.');
2689 if (subname == NULL)
2690 subname = name;
2691 else {
2692 PyObject *parentname, *parent;
Christian Heimesc4cb3b82007-11-04 12:10:01 +00002693 parentname = PyUnicode_FromStringAndSize(name, (subname-name));
Guido van Rossumd8faa362007-04-27 19:54:29 +00002694 if (parentname == NULL) {
2695 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002696 return NULL;
Guido van Rossumd8faa362007-04-27 19:54:29 +00002697 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002698 parent = PyDict_GetItem(modules, parentname);
2699 if (parent == NULL) {
2700 PyErr_Format(PyExc_ImportError,
2701 "reload(): parent %.200s not in sys.modules",
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00002702 _PyUnicode_AsString(parentname));
Georg Brandl0c55f292005-09-14 06:56:20 +00002703 Py_DECREF(parentname);
Guido van Rossume7ba4952007-06-06 23:52:48 +00002704 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002705 return NULL;
2706 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002707 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002708 subname++;
2709 path = PyObject_GetAttrString(parent, "__path__");
2710 if (path == NULL)
2711 PyErr_Clear();
2712 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002713 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002714 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002715 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002716
2717 if (fdp == NULL) {
2718 Py_XDECREF(loader);
Guido van Rossumd8faa362007-04-27 19:54:29 +00002719 imp_modules_reloading_clear();
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002720 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002721 }
2722
2723 newm = load_module(name, fp, buf, fdp->type, loader);
2724 Py_XDECREF(loader);
2725
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002726 if (fp)
2727 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002728 if (newm == NULL) {
2729 /* load_module probably removed name from modules because of
2730 * the error. Put back the original module object. We're
2731 * going to return NULL in this case regardless of whether
2732 * replacing name succeeds, so the return value is ignored.
2733 */
2734 PyDict_SetItemString(modules, name, m);
2735 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00002736 imp_modules_reloading_clear();
Tim Peters1cd70172004-08-02 03:52:12 +00002737 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002738}
2739
2740
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002741/* Higher-level import emulator which emulates the "import" statement
2742 more accurately -- it invokes the __import__() function from the
2743 builtins of the current globals. This means that the import is
2744 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002745 environment, e.g. by "rexec".
2746 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00002747 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00002748 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002749
2750PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002751PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002752{
2753 static PyObject *silly_list = NULL;
2754 static PyObject *builtins_str = NULL;
2755 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002756 PyObject *globals = NULL;
2757 PyObject *import = NULL;
2758 PyObject *builtins = NULL;
2759 PyObject *r = NULL;
2760
2761 /* Initialize constant string objects */
2762 if (silly_list == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002763 import_str = PyUnicode_InternFromString("__import__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002764 if (import_str == NULL)
2765 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +00002766 builtins_str = PyUnicode_InternFromString("__builtins__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002767 if (builtins_str == NULL)
2768 return NULL;
2769 silly_list = Py_BuildValue("[s]", "__doc__");
2770 if (silly_list == NULL)
2771 return NULL;
2772 }
2773
2774 /* Get the builtins from current globals */
2775 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002776 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002777 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002778 builtins = PyObject_GetItem(globals, builtins_str);
2779 if (builtins == NULL)
2780 goto err;
2781 }
2782 else {
2783 /* No globals -- use standard builtins, and fake globals */
2784 PyErr_Clear();
2785
Georg Brandl1a3284e2007-12-02 09:40:06 +00002786 builtins = PyImport_ImportModuleLevel("builtins",
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002787 NULL, NULL, NULL, 0);
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002788 if (builtins == NULL)
2789 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002790 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2791 if (globals == NULL)
2792 goto err;
2793 }
2794
2795 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002796 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002797 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002798 if (import == NULL)
2799 PyErr_SetObject(PyExc_KeyError, import_str);
2800 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002801 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002802 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002803 if (import == NULL)
2804 goto err;
2805
Christian Heimes072c0f12008-01-03 23:01:04 +00002806 /* Call the __import__ function with the proper argument list
2807 * Always use absolute import here. */
2808 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2809 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002810
2811 err:
2812 Py_XDECREF(globals);
2813 Py_XDECREF(builtins);
2814 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002815
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002816 return r;
2817}
2818
2819
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002820/* Module 'imp' provides Python access to the primitives used for
2821 importing modules.
2822*/
2823
Guido van Rossum79f25d91997-04-29 20:08:16 +00002824static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002825imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002826{
2827 char buf[4];
2828
Guido van Rossum96774c12000-05-01 20:19:08 +00002829 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2830 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2831 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2832 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002833
Christian Heimes72b710a2008-05-26 13:28:38 +00002834 return PyBytes_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002835}
2836
Guido van Rossum79f25d91997-04-29 20:08:16 +00002837static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002838imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002839{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002840 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002841 struct filedescr *fdp;
2842
Guido van Rossum79f25d91997-04-29 20:08:16 +00002843 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002844 if (list == NULL)
2845 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002846 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2847 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002848 fdp->suffix, fdp->mode, fdp->type);
2849 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002850 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002851 return NULL;
2852 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002853 if (PyList_Append(list, item) < 0) {
2854 Py_DECREF(list);
2855 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002856 return NULL;
2857 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002858 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002859 }
2860 return list;
2861}
2862
Guido van Rossum79f25d91997-04-29 20:08:16 +00002863static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002864call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002865{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002866 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002867 PyObject *fob, *ret;
Amaury Forgeot d'Arc9a5499b2008-11-11 23:04:59 +00002868 PyObject *pathobj;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002869 struct filedescr *fdp;
2870 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002871 FILE *fp = NULL;
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002872 int fd = -1;
Brett Cannon3bb42d92007-10-20 03:43:15 +00002873 char *found_encoding = NULL;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00002874 char *encoding = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002875
2876 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002877 if (path == Py_None)
2878 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002879 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002880 if (fdp == NULL)
2881 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002882 if (fp != NULL) {
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002883 fd = fileno(fp);
2884 if (fd != -1)
2885 fd = dup(fd);
2886 fclose(fp);
2887 fp = NULL;
2888 }
2889 if (fd != -1) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00002890 if (strchr(fdp->mode, 'b') == NULL) {
Brett Cannon3bb42d92007-10-20 03:43:15 +00002891 /* PyTokenizer_FindEncoding() returns PyMem_MALLOC'ed
2892 memory. */
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002893 found_encoding = PyTokenizer_FindEncoding(fd);
2894 lseek(fd, 0, 0); /* Reset position */
Amaury Forgeot d'Arc1b933ed2008-09-04 22:34:09 +00002895 if (found_encoding == NULL && PyErr_Occurred())
2896 return NULL;
Brett Cannon3bb42d92007-10-20 03:43:15 +00002897 encoding = (found_encoding != NULL) ? found_encoding :
Guido van Rossumce3a72a2007-10-19 23:16:50 +00002898 (char*)PyUnicode_GetDefaultEncoding();
2899 }
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002900 fob = PyFile_FromFd(fd, pathname, fdp->mode, -1,
Guido van Rossume7fc50f2007-12-03 22:54:21 +00002901 (char*)encoding, NULL, NULL, 1);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002902 if (fob == NULL) {
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002903 close(fd);
Brett Cannon3bb42d92007-10-20 03:43:15 +00002904 PyMem_FREE(found_encoding);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002905 return NULL;
2906 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002907 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002908 else {
2909 fob = Py_None;
2910 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002911 }
Amaury Forgeot d'Arc9a5499b2008-11-11 23:04:59 +00002912 pathobj = PyUnicode_DecodeFSDefault(pathname);
2913 ret = Py_BuildValue("NN(ssi)",
2914 fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
Brett Cannon3bb42d92007-10-20 03:43:15 +00002915 PyMem_FREE(found_encoding);
2916
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002917 return ret;
2918}
2919
Guido van Rossum79f25d91997-04-29 20:08:16 +00002920static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002921imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002922{
2923 char *name;
Hirokazu Yamamoto90eaaf62009-01-30 03:15:05 +00002924 PyObject *ret, *path = NULL;
Amaury Forgeot d'Arc9a5499b2008-11-11 23:04:59 +00002925 if (!PyArg_ParseTuple(args, "es|O:find_module",
2926 Py_FileSystemDefaultEncoding, &name,
2927 &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002928 return NULL;
Hirokazu Yamamoto90eaaf62009-01-30 03:15:05 +00002929 ret = call_find_module(name, path);
2930 PyMem_Free(name);
2931 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002932}
2933
2934static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002935imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002936{
2937 char *name;
2938 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002939 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002940 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002941 return NULL;
2942 ret = init_builtin(name);
2943 if (ret < 0)
2944 return NULL;
2945 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002946 Py_INCREF(Py_None);
2947 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002948 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002949 m = PyImport_AddModule(name);
2950 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002951 return m;
2952}
2953
Guido van Rossum79f25d91997-04-29 20:08:16 +00002954static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002955imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002956{
2957 char *name;
2958 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002959 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002960 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002961 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002962 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002963 if (ret < 0)
2964 return NULL;
2965 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002966 Py_INCREF(Py_None);
2967 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002968 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002969 m = PyImport_AddModule(name);
2970 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002971 return m;
2972}
2973
Guido van Rossum79f25d91997-04-29 20:08:16 +00002974static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002975imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002976{
2977 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002978
Guido van Rossum43713e52000-02-29 13:59:29 +00002979 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002980 return NULL;
2981 return get_frozen_object(name);
2982}
2983
Guido van Rossum79f25d91997-04-29 20:08:16 +00002984static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00002985imp_is_frozen_package(PyObject *self, PyObject *args)
2986{
2987 char *name;
2988
2989 if (!PyArg_ParseTuple(args, "s:is_frozen_package", &name))
2990 return NULL;
2991 return is_frozen_package(name);
2992}
2993
2994static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002995imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002996{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002997 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002998 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002999 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00003000 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003001}
3002
Guido van Rossum79f25d91997-04-29 20:08:16 +00003003static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003004imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003005{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003006 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00003007 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00003008 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003009 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00003010 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00003011 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003012}
3013
3014static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003015get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003016{
3017 FILE *fp;
Guido van Rossumda5b8f22007-06-12 23:30:11 +00003018 if (mode[0] == 'U')
3019 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003020 if (fob == NULL) {
3021 fp = fopen(pathname, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003022 }
3023 else {
Guido van Rossumda5b8f22007-06-12 23:30:11 +00003024 int fd = PyObject_AsFileDescriptor(fob);
3025 if (fd == -1)
3026 return NULL;
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003027 if (!_PyVerify_fd(fd))
3028 goto error;
3029 /* the FILE struct gets a new fd, so that it can be closed
3030 * independently of the file descriptor given
3031 */
3032 fd = dup(fd);
3033 if (fd == -1)
3034 goto error;
Guido van Rossumda5b8f22007-06-12 23:30:11 +00003035 fp = fdopen(fd, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003036 }
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003037 if (fp)
3038 return fp;
3039error:
3040 PyErr_SetFromErrno(PyExc_IOError);
3041 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003042}
3043
Guido van Rossum79f25d91997-04-29 20:08:16 +00003044static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003045imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003046{
3047 char *name;
3048 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003049 PyObject *fob = NULL;
3050 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003051 FILE *fp;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003052 if (!PyArg_ParseTuple(args, "ses|O:load_compiled",
3053 &name,
3054 Py_FileSystemDefaultEncoding, &pathname,
3055 &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003056 return NULL;
3057 fp = get_file(pathname, fob, "rb");
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003058 if (fp == NULL) {
3059 PyMem_Free(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003060 return NULL;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003061 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003062 m = load_compiled_module(name, pathname, fp);
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003063 fclose(fp);
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003064 PyMem_Free(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003065 return m;
3066}
3067
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003068#ifdef HAVE_DYNAMIC_LOADING
3069
Guido van Rossum79f25d91997-04-29 20:08:16 +00003070static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003071imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003072{
3073 char *name;
3074 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003075 PyObject *fob = NULL;
3076 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00003077 FILE *fp = NULL;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003078 if (!PyArg_ParseTuple(args, "ses|O:load_dynamic",
3079 &name,
3080 Py_FileSystemDefaultEncoding, &pathname,
3081 &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003082 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003083 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00003084 fp = get_file(pathname, fob, "r");
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003085 if (fp == NULL) {
3086 PyMem_Free(pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003087 return NULL;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003088 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003089 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00003090 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003091 PyMem_Free(pathname);
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003092 if (fp)
3093 fclose(fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00003094 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003095}
3096
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003097#endif /* HAVE_DYNAMIC_LOADING */
3098
Guido van Rossum79f25d91997-04-29 20:08:16 +00003099static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003100imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003101{
3102 char *name;
3103 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003104 PyObject *fob = NULL;
3105 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003106 FILE *fp;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003107 if (!PyArg_ParseTuple(args, "ses|O:load_source",
3108 &name,
3109 Py_FileSystemDefaultEncoding, &pathname,
3110 &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003111 return NULL;
3112 fp = get_file(pathname, fob, "r");
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003113 if (fp == NULL) {
3114 PyMem_Free(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003115 return NULL;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003116 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003117 m = load_source_module(name, pathname, fp);
Kristján Valur Jónsson92af5d92009-03-31 17:47:50 +00003118 PyMem_Free(pathname);
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003119 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003120 return m;
3121}
3122
Guido van Rossum79f25d91997-04-29 20:08:16 +00003123static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003124imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003125{
3126 char *name;
3127 PyObject *fob;
3128 char *pathname;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003129 PyObject * ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003130 char *suffix; /* Unused */
3131 char *mode;
3132 int type;
3133 FILE *fp;
3134
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003135 if (!PyArg_ParseTuple(args, "sOes(ssi):load_module",
3136 &name, &fob,
3137 Py_FileSystemDefaultEncoding, &pathname,
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003138 &suffix, &mode, &type))
3139 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003140 if (*mode) {
3141 /* Mode must start with 'r' or 'U' and must not contain '+'.
3142 Implicit in this test is the assumption that the mode
3143 may contain other modifiers like 'b' or 't'. */
3144
3145 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00003146 PyErr_Format(PyExc_ValueError,
3147 "invalid file open mode %.200s", mode);
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003148 PyMem_Free(pathname);
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00003149 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003150 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003151 }
3152 if (fob == Py_None)
3153 fp = NULL;
3154 else {
Guido van Rossumda5b8f22007-06-12 23:30:11 +00003155 fp = get_file(NULL, fob, mode);
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003156 if (fp == NULL) {
3157 PyMem_Free(pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003158 return NULL;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003159 }
3160 }
3161 ret = load_module(name, fp, pathname, type, NULL);
3162 PyMem_Free(pathname);
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003163 if (fp)
3164 fclose(fp);
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003165 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003166}
3167
3168static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003169imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003170{
3171 char *name;
3172 char *pathname;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003173 PyObject * ret;
3174 if (!PyArg_ParseTuple(args, "ses:load_package",
3175 &name, Py_FileSystemDefaultEncoding, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003176 return NULL;
Guido van Rossum0ad59d42009-03-30 22:01:35 +00003177 ret = load_package(name, pathname);
3178 PyMem_Free(pathname);
3179 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003180}
3181
3182static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003183imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003184{
3185 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00003186 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003187 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003188 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003189}
3190
Christian Heimes13a7a212008-01-07 17:13:09 +00003191static PyObject *
3192imp_reload(PyObject *self, PyObject *v)
3193{
3194 return PyImport_ReloadModule(v);
3195}
3196
3197PyDoc_STRVAR(doc_reload,
3198"reload(module) -> module\n\
3199\n\
3200Reload the module. The module must have been successfully imported before.");
3201
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003202/* Doc strings */
3203
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003204PyDoc_STRVAR(doc_imp,
3205"This module provides the components needed to build your own\n\
3206__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003207
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003208PyDoc_STRVAR(doc_find_module,
3209"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003210Search for a module. If path is omitted or None, search for a\n\
3211built-in, frozen or special module and continue search in sys.path.\n\
3212The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003213package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003214
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003215PyDoc_STRVAR(doc_load_module,
3216"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003217Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003218The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003219
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003220PyDoc_STRVAR(doc_get_magic,
3221"get_magic() -> string\n\
3222Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003223
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003224PyDoc_STRVAR(doc_get_suffixes,
3225"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003226Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003227that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003228
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003229PyDoc_STRVAR(doc_new_module,
3230"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003231Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003232The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003233
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003234PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003235"lock_held() -> boolean\n\
3236Return True if the import lock is currently held, else False.\n\
3237On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003238
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003239PyDoc_STRVAR(doc_acquire_lock,
3240"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003241Acquires the interpreter's import lock for the current thread.\n\
3242This lock should be used by import hooks to ensure thread-safety\n\
3243when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003244On platforms without threads, this function does nothing.");
3245
3246PyDoc_STRVAR(doc_release_lock,
3247"release_lock() -> None\n\
3248Release the interpreter's import lock.\n\
3249On platforms without threads, this function does nothing.");
3250
Guido van Rossum79f25d91997-04-29 20:08:16 +00003251static PyMethodDef imp_methods[] = {
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003252 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3253 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3254 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3255 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3256 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3257 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3258 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3259 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Christian Heimes13a7a212008-01-07 17:13:09 +00003260 {"reload", imp_reload, METH_O, doc_reload},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003261 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00003262 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
Brett Cannon8d110132009-03-15 02:20:16 +00003263 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00003264 {"init_builtin", imp_init_builtin, METH_VARARGS},
3265 {"init_frozen", imp_init_frozen, METH_VARARGS},
3266 {"is_builtin", imp_is_builtin, METH_VARARGS},
3267 {"is_frozen", imp_is_frozen, METH_VARARGS},
3268 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003269#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00003270 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003271#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00003272 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00003273 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003274 {NULL, NULL} /* sentinel */
3275};
3276
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003277static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003278setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003279{
3280 PyObject *v;
3281 int err;
3282
Christian Heimes217cfd12007-12-02 14:31:20 +00003283 v = PyLong_FromLong((long)value);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003284 err = PyDict_SetItemString(d, name, v);
3285 Py_XDECREF(v);
3286 return err;
3287}
3288
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003289typedef struct {
3290 PyObject_HEAD
3291} NullImporter;
3292
3293static int
3294NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3295{
3296 char *path;
Christian Heimes7d3bc0a2007-11-07 17:26:16 +00003297 Py_ssize_t pathlen;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003298
3299 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3300 return -1;
3301
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00003302 if (!PyArg_ParseTuple(args, "es:NullImporter",
3303 Py_FileSystemDefaultEncoding, &path))
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003304 return -1;
3305
Christian Heimes7d3bc0a2007-11-07 17:26:16 +00003306 pathlen = strlen(path);
3307 if (pathlen == 0) {
Georg Brandl8494d572008-07-19 10:13:15 +00003308 PyMem_Free(path);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003309 PyErr_SetString(PyExc_ImportError, "empty pathname");
3310 return -1;
3311 } else {
Hirokazu Yamamoto21cbf5f2009-01-23 07:23:03 +00003312#ifndef MS_WINDOWS
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003313 struct stat statbuf;
3314 int rv;
3315
3316 rv = stat(path, &statbuf);
Georg Brandl8494d572008-07-19 10:13:15 +00003317 PyMem_Free(path);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003318 if (rv == 0) {
3319 /* it exists */
3320 if (S_ISDIR(statbuf.st_mode)) {
3321 /* it's a directory */
3322 PyErr_SetString(PyExc_ImportError,
3323 "existing directory");
3324 return -1;
3325 }
3326 }
Hirokazu Yamamoto21cbf5f2009-01-23 07:23:03 +00003327#else /* MS_WINDOWS */
3328 DWORD rv;
3329 /* see issue1293 and issue3677:
3330 * stat() on Windows doesn't recognise paths like
3331 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
3332 */
3333 rv = GetFileAttributesA(path);
Kristján Valur Jónsson92cb4382009-01-24 10:33:25 +00003334 PyMem_Free(path);
Hirokazu Yamamoto21cbf5f2009-01-23 07:23:03 +00003335 if (rv != INVALID_FILE_ATTRIBUTES) {
3336 /* it exists */
3337 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
3338 /* it's a directory */
3339 PyErr_SetString(PyExc_ImportError,
3340 "existing directory");
3341 return -1;
3342 }
3343 }
3344#endif
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003345 }
3346 return 0;
3347}
3348
3349static PyObject *
3350NullImporter_find_module(NullImporter *self, PyObject *args)
3351{
3352 Py_RETURN_NONE;
3353}
3354
3355static PyMethodDef NullImporter_methods[] = {
3356 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3357 "Always return None"
3358 },
3359 {NULL} /* Sentinel */
3360};
3361
3362
Christian Heimes9cd17752007-11-18 19:35:23 +00003363PyTypeObject PyNullImporter_Type = {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003364 PyVarObject_HEAD_INIT(NULL, 0)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003365 "imp.NullImporter", /*tp_name*/
3366 sizeof(NullImporter), /*tp_basicsize*/
3367 0, /*tp_itemsize*/
3368 0, /*tp_dealloc*/
3369 0, /*tp_print*/
3370 0, /*tp_getattr*/
3371 0, /*tp_setattr*/
Mark Dickinsone94c6792009-02-02 20:36:42 +00003372 0, /*tp_reserved*/
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003373 0, /*tp_repr*/
3374 0, /*tp_as_number*/
3375 0, /*tp_as_sequence*/
3376 0, /*tp_as_mapping*/
3377 0, /*tp_hash */
3378 0, /*tp_call*/
3379 0, /*tp_str*/
3380 0, /*tp_getattro*/
3381 0, /*tp_setattro*/
3382 0, /*tp_as_buffer*/
3383 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3384 "Null importer object", /* tp_doc */
3385 0, /* tp_traverse */
3386 0, /* tp_clear */
3387 0, /* tp_richcompare */
3388 0, /* tp_weaklistoffset */
3389 0, /* tp_iter */
3390 0, /* tp_iternext */
3391 NullImporter_methods, /* tp_methods */
3392 0, /* tp_members */
3393 0, /* tp_getset */
3394 0, /* tp_base */
3395 0, /* tp_dict */
3396 0, /* tp_descr_get */
3397 0, /* tp_descr_set */
3398 0, /* tp_dictoffset */
3399 (initproc)NullImporter_init, /* tp_init */
3400 0, /* tp_alloc */
3401 PyType_GenericNew /* tp_new */
3402};
3403
Martin v. Löwis1a214512008-06-11 05:26:20 +00003404static struct PyModuleDef impmodule = {
3405 PyModuleDef_HEAD_INIT,
3406 "imp",
3407 doc_imp,
3408 0,
3409 imp_methods,
3410 NULL,
3411 NULL,
3412 NULL,
3413 NULL
3414};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003415
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003416PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00003417PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003418{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003419 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003420
Christian Heimes9cd17752007-11-18 19:35:23 +00003421 if (PyType_Ready(&PyNullImporter_Type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00003422 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003423
Martin v. Löwis1a214512008-06-11 05:26:20 +00003424 m = PyModule_Create(&impmodule);
Neal Norwitz1ac754f2006-01-19 06:09:39 +00003425 if (m == NULL)
3426 goto failure;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003427 d = PyModule_GetDict(m);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00003428 if (d == NULL)
3429 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003430
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003431 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3432 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3433 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3434 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3435 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3436 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3437 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3438 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00003439 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00003440 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003441
Christian Heimes9cd17752007-11-18 19:35:23 +00003442 Py_INCREF(&PyNullImporter_Type);
3443 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Martin v. Löwis1a214512008-06-11 05:26:20 +00003444 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003445 failure:
Martin v. Löwis1a214512008-06-11 05:26:20 +00003446 Py_XDECREF(m);
3447 return NULL;
3448
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003449}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003450
3451
Guido van Rossumb18618d2000-05-03 23:44:39 +00003452/* API for embedding applications that want to add their own entries
3453 to the table of built-in modules. This should normally be called
3454 *before* Py_Initialize(). When the table resize fails, -1 is
3455 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003456
3457 After a similar function by Just van Rossum. */
3458
3459int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003460PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003461{
3462 static struct _inittab *our_copy = NULL;
3463 struct _inittab *p;
3464 int i, n;
3465
3466 /* Count the number of entries in both tables */
3467 for (n = 0; newtab[n].name != NULL; n++)
3468 ;
3469 if (n == 0)
3470 return 0; /* Nothing to do */
3471 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3472 ;
3473
3474 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00003475 p = our_copy;
3476 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003477 if (p == NULL)
3478 return -1;
3479
3480 /* Copy the tables into the new memory */
3481 if (our_copy != PyImport_Inittab)
3482 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3483 PyImport_Inittab = our_copy = p;
3484 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3485
3486 return 0;
3487}
3488
3489/* Shorthand to add a single entry given a name and a function */
3490
3491int
Brett Cannona826f322009-04-02 03:41:46 +00003492PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003493{
3494 struct _inittab newtab[2];
3495
3496 memset(newtab, '\0', sizeof newtab);
3497
Brett Cannona826f322009-04-02 03:41:46 +00003498 newtab[0].name = (char *)name;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003499 newtab[0].initfunc = initfunc;
3500
3501 return PyImport_ExtendInittab(newtab);
3502}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003503
3504#ifdef __cplusplus
3505}
3506#endif