blob: e95b7c0e6f8facda6caf2daaec0b27b54d647046 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Module definition and import implementation */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00005
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "Python-ast.h"
Kristján Valur Jónsson67387fb2007-04-25 00:17:39 +00007#undef Yield /* undefine macro conflicting with winbase.h */
Neal Norwitzadb69fc2005-12-17 20:54:49 +00008#include "pyarena.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00009#include "pythonrun.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000010#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000011#include "marshal.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000012#include "code.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000013#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000014#include "eval.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000015#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000016#include "importdl.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000017
Guido van Rossum55a83382000-09-20 20:31:38 +000018#ifdef HAVE_FCNTL_H
19#include <fcntl.h>
20#endif
Anthony Baxterac6bd462006-04-13 02:06:09 +000021#ifdef __cplusplus
Brett Cannonb166afc2010-05-05 20:25:47 +000022extern "C" {
Anthony Baxterac6bd462006-04-13 02:06:09 +000023#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000024
Christian Heimes5e8e6d22008-02-23 23:59:45 +000025#ifdef MS_WINDOWS
26/* for stat.st_mode */
27typedef unsigned short mode_t;
28#endif
29
Guido van Rossum21d335e1993-10-15 13:01:11 +000030
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000031/* Magic word to reject .pyc files generated by other Python versions.
32 It should change for each incompatible change to the bytecode.
33
34 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000035 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000036 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000037
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000038 The magic numbers must be spaced apart atleast 2 values, as the
39 -U interpeter flag will cause MAGIC+1 being used. They have been
40 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000041
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000042 There were a variety of old schemes for setting the magic number.
43 The current working scheme is to increment the previous value by
44 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000045
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000046 Known values:
47 Python 1.5: 20121
48 Python 1.5.1: 20121
49 Python 1.5.2: 20121
Skip Montanaro4ec3c262006-03-25 14:12:03 +000050 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000051 Python 2.0: 50823
52 Python 2.0.1: 50823
53 Python 2.1: 60202
54 Python 2.1.1: 60202
55 Python 2.1.2: 60202
56 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000057 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000058 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000059 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000060 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000061 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000062 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000063 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000064 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000065 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000066 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Neal Norwitz0d62a062006-07-30 06:53:31 +000067 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
68 Python 2.5b3: 62111 (fix wrong code: x += yield)
Neal Norwitz9a70f952006-08-04 05:12:19 +000069 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
Antoine Pitrouc83ea132010-05-09 14:46:46 +000070 storing constants that should have been removed)
Neal Norwitzdac090d2006-09-05 03:53:08 +000071 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
Raymond Hettingereffde122007-12-18 18:26:18 +000072 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)
Nick Coghlan7af53be2008-03-07 14:13:28 +000073 Python 2.6a1: 62161 (WITH_CLEANUP optimization)
Antoine Pitroud0c35152008-12-17 00:38:28 +000074 Python 2.7a0: 62171 (optimize list comprehensions/change LIST_APPEND)
Jeffrey Yasskin68d68522009-02-28 19:03:21 +000075 Python 2.7a0: 62181 (optimize conditional branches:
Antoine Pitrouc83ea132010-05-09 14:46:46 +000076 introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE)
Benjamin Peterson1880d8b2009-05-25 13:13:44 +000077 Python 2.7a0 62191 (introduce SETUP_WITH)
Alexandre Vassalottiee936a22010-01-09 23:35:54 +000078 Python 2.7a0 62201 (introduce BUILD_SET)
Alexandre Vassalottib6465472010-01-11 22:36:12 +000079 Python 2.7a0 62211 (introduce MAP_ADD and SET_ADD)
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000080.
Tim Peters36515e22001-11-18 04:06:29 +000081*/
Alexandre Vassalottib6465472010-01-11 22:36:12 +000082#define MAGIC (62211 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000083
Guido van Rossum96774c12000-05-01 20:19:08 +000084/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000085 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000086 compiler works which are enabled by command line switches. */
Christian Heimes61e45902008-03-27 10:35:52 +000087static long pyc_magic = MAGIC;
Guido van Rossum96774c12000-05-01 20:19:08 +000088
Guido van Rossum25ce5661997-08-02 03:10:38 +000089/* See _PyImport_FixupExtension() below */
90static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000091
Guido van Rossum771c6c81997-10-31 18:37:24 +000092/* This table is defined in config.c: */
93extern struct _inittab _PyImport_Inittab[];
94
95struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000096
Guido van Rossumed1170e1999-12-20 21:23:41 +000097/* these tables define the module suffixes that Python recognizes */
98struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +000099
100#ifdef RISCOS
101static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000102 {"/py", "U", PY_SOURCE},
103 {"/pyc", "rb", PY_COMPILED},
104 {0, 0}
Guido van Rossum48a680c2001-03-02 06:34:14 +0000105};
106#else
Guido van Rossumed1170e1999-12-20 21:23:41 +0000107static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000108 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000109#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000110 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000111#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000112 {".pyc", "rb", PY_COMPILED},
113 {0, 0}
Guido van Rossumed1170e1999-12-20 21:23:41 +0000114};
Guido van Rossum48a680c2001-03-02 06:34:14 +0000115#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000116
Jason R. Coombsfa93cf82012-01-13 17:37:18 -0500117#ifdef MS_WINDOWS
Matthias Klose92636bf2012-08-14 17:42:45 +0200118static int isdir(char *path) {
Jason R. Coombs0737b722012-01-13 17:59:05 -0500119 DWORD rv;
120 /* see issue1293 and issue3677:
121 * stat() on Windows doesn't recognise paths like
122 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
123 * Also reference issue6727:
124 * stat() on Windows is broken and doesn't resolve symlinks properly.
125 */
126 rv = GetFileAttributesA(path);
127 return rv != INVALID_FILE_ATTRIBUTES && rv & FILE_ATTRIBUTE_DIRECTORY;
Jason R. Coombsfa93cf82012-01-13 17:37:18 -0500128}
129#else
Jason R. Coombs0e17dfb2012-03-08 09:56:00 -0500130#ifdef HAVE_STAT
Matthias Klose92636bf2012-08-14 17:42:45 +0200131static int isdir(char *path) {
Jason R. Coombs925ff742012-01-13 17:12:25 -0500132 struct stat statbuf;
Jason R. Coombs0737b722012-01-13 17:59:05 -0500133 return stat(path, &statbuf) == 0 && S_ISDIR(statbuf.st_mode);
Jason R. Coombs925ff742012-01-13 17:12:25 -0500134}
135#else
Jason R. Coombsfa93cf82012-01-13 17:37:18 -0500136#ifdef RISCOS
Jason R. Coombs925ff742012-01-13 17:12:25 -0500137/* with RISCOS, isdir is in unixstuff */
Jason R. Coombsfa93cf82012-01-13 17:37:18 -0500138#else
Jason R. Coombs925ff742012-01-13 17:12:25 -0500139int isdir(char *path) {
Jason R. Coombs0737b722012-01-13 17:59:05 -0500140 return 0;
Jason R. Coombs925ff742012-01-13 17:12:25 -0500141}
Jason R. Coombsfa93cf82012-01-13 17:37:18 -0500142#endif /* RISCOS */
143#endif /* HAVE_STAT */
144#endif /* MS_WINDOWS */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000145
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000146/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000147
148void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000149_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000150{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000151 const struct filedescr *scan;
152 struct filedescr *filetab;
153 int countD = 0;
154 int countS = 0;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000155
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000156 /* prepare _PyImport_Filetab: copy entries from
157 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
158 */
Georg Brandladd36e52007-08-23 18:08:06 +0000159#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000160 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
161 ++countD;
Georg Brandladd36e52007-08-23 18:08:06 +0000162#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000163 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
164 ++countS;
165 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
166 if (filetab == NULL)
167 Py_FatalError("Can't initialize import file table.");
Georg Brandladd36e52007-08-23 18:08:06 +0000168#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000169 memcpy(filetab, _PyImport_DynLoadFiletab,
170 countD * sizeof(struct filedescr));
Georg Brandladd36e52007-08-23 18:08:06 +0000171#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000172 memcpy(filetab + countD, _PyImport_StandardFiletab,
173 countS * sizeof(struct filedescr));
174 filetab[countD + countS].suffix = NULL;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000175
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000176 _PyImport_Filetab = filetab;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000177
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000178 if (Py_OptimizeFlag) {
179 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
180 for (; filetab->suffix != NULL; filetab++) {
Guido van Rossum48a680c2001-03-02 06:34:14 +0000181#ifndef RISCOS
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000182 if (strcmp(filetab->suffix, ".pyc") == 0)
183 filetab->suffix = ".pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000184#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000185 if (strcmp(filetab->suffix, "/pyc") == 0)
186 filetab->suffix = "/pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000187#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000188 }
189 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000190
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000191 if (Py_UnicodeFlag) {
192 /* Fix the pyc_magic so that byte compiled code created
193 using the all-Unicode method doesn't interfere with
194 code created in normal operation mode. */
195 pyc_magic = MAGIC + 1;
196 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000197}
198
Guido van Rossum25ce5661997-08-02 03:10:38 +0000199void
Just van Rossum52e14d62002-12-30 22:08:05 +0000200_PyImportHooks_Init(void)
201{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000202 PyObject *v, *path_hooks = NULL, *zimpimport;
203 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000204
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000205 /* adding sys.path_hooks and sys.path_importer_cache, setting up
206 zipimport */
207 if (PyType_Ready(&PyNullImporter_Type) < 0)
208 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000209
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000210 if (Py_VerboseFlag)
211 PySys_WriteStderr("# installing zipimport hook\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000212
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000213 v = PyList_New(0);
214 if (v == NULL)
215 goto error;
216 err = PySys_SetObject("meta_path", v);
217 Py_DECREF(v);
218 if (err)
219 goto error;
220 v = PyDict_New();
221 if (v == NULL)
222 goto error;
223 err = PySys_SetObject("path_importer_cache", v);
224 Py_DECREF(v);
225 if (err)
226 goto error;
227 path_hooks = PyList_New(0);
228 if (path_hooks == NULL)
229 goto error;
230 err = PySys_SetObject("path_hooks", path_hooks);
231 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000232 error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000233 PyErr_Print();
234 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
235 "path_importer_cache, or NullImporter failed"
236 );
237 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000238
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000239 zimpimport = PyImport_ImportModule("zipimport");
240 if (zimpimport == NULL) {
241 PyErr_Clear(); /* No zip import module -- okay */
242 if (Py_VerboseFlag)
243 PySys_WriteStderr("# can't import zipimport\n");
244 }
245 else {
246 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
247 "zipimporter");
248 Py_DECREF(zimpimport);
249 if (zipimporter == NULL) {
250 PyErr_Clear(); /* No zipimporter object -- okay */
251 if (Py_VerboseFlag)
252 PySys_WriteStderr(
253 "# can't import zipimport.zipimporter\n");
254 }
255 else {
256 /* sys.path_hooks.append(zipimporter) */
257 err = PyList_Append(path_hooks, zipimporter);
258 Py_DECREF(zipimporter);
259 if (err)
260 goto error;
261 if (Py_VerboseFlag)
262 PySys_WriteStderr(
263 "# installed zipimport hook\n");
264 }
265 }
266 Py_DECREF(path_hooks);
Just van Rossum52e14d62002-12-30 22:08:05 +0000267}
268
269void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000270_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000271{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000272 Py_XDECREF(extensions);
273 extensions = NULL;
274 PyMem_DEL(_PyImport_Filetab);
275 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000276}
277
278
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000279/* Locking primitives to prevent parallel imports of the same module
280 in different threads to return with a partially loaded module.
281 These calls are serialized by the global interpreter lock. */
282
283#ifdef WITH_THREAD
284
Guido van Rossum49b56061998-10-01 20:42:43 +0000285#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000286
Guido van Rossum65d5b571998-12-21 19:32:43 +0000287static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000288static long import_lock_thread = -1;
289static int import_lock_level = 0;
290
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000291void
292_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000293{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000294 long me = PyThread_get_thread_ident();
295 if (me == -1)
296 return; /* Too bad */
297 if (import_lock == NULL) {
298 import_lock = PyThread_allocate_lock();
299 if (import_lock == NULL)
300 return; /* Nothing much we can do. */
301 }
302 if (import_lock_thread == me) {
303 import_lock_level++;
304 return;
305 }
306 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
307 {
308 PyThreadState *tstate = PyEval_SaveThread();
309 PyThread_acquire_lock(import_lock, 1);
310 PyEval_RestoreThread(tstate);
311 }
312 import_lock_thread = me;
313 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000314}
315
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000316int
317_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000318{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000319 long me = PyThread_get_thread_ident();
320 if (me == -1 || import_lock == NULL)
321 return 0; /* Too bad */
322 if (import_lock_thread != me)
323 return -1;
324 import_lock_level--;
325 if (import_lock_level == 0) {
326 import_lock_thread = -1;
327 PyThread_release_lock(import_lock);
328 }
329 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000330}
331
Gregory P. Smith9e5d1322010-03-01 01:22:39 +0000332/* This function is called from PyOS_AfterFork to ensure that newly
333 created child processes do not share locks with the parent.
334 We now acquire the import lock around fork() calls but on some platforms
335 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000336
337void
338_PyImport_ReInitLock(void)
339{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000340 if (import_lock != NULL)
341 import_lock = PyThread_allocate_lock();
342 import_lock_thread = -1;
343 import_lock_level = 0;
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000344}
345
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000346#endif
347
Tim Peters69232342001-08-30 05:16:13 +0000348static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000349imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000350{
Tim Peters69232342001-08-30 05:16:13 +0000351#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000352 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000353#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000354 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000355#endif
356}
357
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000358static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000359imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000360{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000361#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000362 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000363#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000364 Py_INCREF(Py_None);
365 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000366}
367
368static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000369imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000370{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000371#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000372 if (_PyImport_ReleaseLock() < 0) {
373 PyErr_SetString(PyExc_RuntimeError,
374 "not holding the import lock");
375 return NULL;
376 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000377#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000378 Py_INCREF(Py_None);
379 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000380}
381
Collin Winter276887b2007-03-12 16:11:39 +0000382static void
Neal Norwitz75c7c802007-03-13 05:31:38 +0000383imp_modules_reloading_clear(void)
Collin Winter276887b2007-03-12 16:11:39 +0000384{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000385 PyInterpreterState *interp = PyThreadState_Get()->interp;
386 if (interp->modules_reloading != NULL)
387 PyDict_Clear(interp->modules_reloading);
Collin Winter276887b2007-03-12 16:11:39 +0000388}
389
Guido van Rossum25ce5661997-08-02 03:10:38 +0000390/* Helper for sys */
391
392PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000393PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000394{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000395 PyInterpreterState *interp = PyThreadState_GET()->interp;
396 if (interp->modules == NULL)
397 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
398 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000399}
400
Guido van Rossum3f5da241990-12-20 15:06:42 +0000401
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000402/* List of names to clear in sys */
403static char* sys_deletes[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000404 "path", "argv", "ps1", "ps2", "exitfunc",
405 "exc_type", "exc_value", "exc_traceback",
406 "last_type", "last_value", "last_traceback",
407 "path_hooks", "path_importer_cache", "meta_path",
408 /* misc stuff */
409 "flags", "float_info",
410 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000411};
412
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000413static char* sys_files[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000414 "stdin", "__stdin__",
415 "stdout", "__stdout__",
416 "stderr", "__stderr__",
417 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000418};
419
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000420
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000421/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000422
Guido van Rossum3f5da241990-12-20 15:06:42 +0000423void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000424PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000425{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000426 Py_ssize_t pos, ndone;
427 char *name;
428 PyObject *key, *value, *dict;
429 PyInterpreterState *interp = PyThreadState_GET()->interp;
430 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000431
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000432 if (modules == NULL)
433 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000434
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000435 /* Delete some special variables first. These are common
436 places where user values hide and people complain when their
437 destructors fail. Since the modules containing them are
438 deleted *last* of all, they would come too late in the normal
439 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000440
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000441 value = PyDict_GetItemString(modules, "__builtin__");
442 if (value != NULL && PyModule_Check(value)) {
443 dict = PyModule_GetDict(value);
444 if (Py_VerboseFlag)
445 PySys_WriteStderr("# clear __builtin__._\n");
446 PyDict_SetItemString(dict, "_", Py_None);
447 }
448 value = PyDict_GetItemString(modules, "sys");
449 if (value != NULL && PyModule_Check(value)) {
450 char **p;
451 PyObject *v;
452 dict = PyModule_GetDict(value);
453 for (p = sys_deletes; *p != NULL; p++) {
454 if (Py_VerboseFlag)
455 PySys_WriteStderr("# clear sys.%s\n", *p);
456 PyDict_SetItemString(dict, *p, Py_None);
457 }
458 for (p = sys_files; *p != NULL; p+=2) {
459 if (Py_VerboseFlag)
460 PySys_WriteStderr("# restore sys.%s\n", *p);
461 v = PyDict_GetItemString(dict, *(p+1));
462 if (v == NULL)
463 v = Py_None;
464 PyDict_SetItemString(dict, *p, v);
465 }
466 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000467
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000468 /* First, delete __main__ */
469 value = PyDict_GetItemString(modules, "__main__");
470 if (value != NULL && PyModule_Check(value)) {
471 if (Py_VerboseFlag)
472 PySys_WriteStderr("# cleanup __main__\n");
473 _PyModule_Clear(value);
474 PyDict_SetItemString(modules, "__main__", Py_None);
475 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000476
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000477 /* The special treatment of __builtin__ here is because even
478 when it's not referenced as a module, its dictionary is
479 referenced by almost every module's __builtins__. Since
480 deleting a module clears its dictionary (even if there are
481 references left to it), we need to delete the __builtin__
482 module last. Likewise, we don't delete sys until the very
483 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000484
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000485 Also note that we 'delete' modules by replacing their entry
486 in the modules dict with None, rather than really deleting
487 them; this avoids a rehash of the modules dictionary and
488 also marks them as "non existent" so they won't be
489 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000490
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000491 /* Next, repeatedly delete modules with a reference count of
492 one (skipping __builtin__ and sys) and delete them */
493 do {
494 ndone = 0;
495 pos = 0;
496 while (PyDict_Next(modules, &pos, &key, &value)) {
497 if (value->ob_refcnt != 1)
498 continue;
499 if (PyString_Check(key) && PyModule_Check(value)) {
500 name = PyString_AS_STRING(key);
501 if (strcmp(name, "__builtin__") == 0)
502 continue;
503 if (strcmp(name, "sys") == 0)
504 continue;
505 if (Py_VerboseFlag)
506 PySys_WriteStderr(
507 "# cleanup[1] %s\n", name);
508 _PyModule_Clear(value);
509 PyDict_SetItem(modules, key, Py_None);
510 ndone++;
511 }
512 }
513 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000514
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000515 /* Next, delete all modules (still skipping __builtin__ and sys) */
516 pos = 0;
517 while (PyDict_Next(modules, &pos, &key, &value)) {
518 if (PyString_Check(key) && PyModule_Check(value)) {
519 name = PyString_AS_STRING(key);
520 if (strcmp(name, "__builtin__") == 0)
521 continue;
522 if (strcmp(name, "sys") == 0)
523 continue;
524 if (Py_VerboseFlag)
525 PySys_WriteStderr("# cleanup[2] %s\n", name);
526 _PyModule_Clear(value);
527 PyDict_SetItem(modules, key, Py_None);
528 }
529 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000530
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000531 /* Next, delete sys and __builtin__ (in that order) */
532 value = PyDict_GetItemString(modules, "sys");
533 if (value != NULL && PyModule_Check(value)) {
534 if (Py_VerboseFlag)
535 PySys_WriteStderr("# cleanup sys\n");
536 _PyModule_Clear(value);
537 PyDict_SetItemString(modules, "sys", Py_None);
538 }
539 value = PyDict_GetItemString(modules, "__builtin__");
540 if (value != NULL && PyModule_Check(value)) {
541 if (Py_VerboseFlag)
542 PySys_WriteStderr("# cleanup __builtin__\n");
543 _PyModule_Clear(value);
544 PyDict_SetItemString(modules, "__builtin__", Py_None);
545 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000546
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000547 /* Finally, clear and delete the modules directory */
548 PyDict_Clear(modules);
549 interp->modules = NULL;
550 Py_DECREF(modules);
551 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000552}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000553
554
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000555/* Helper for pythonrun.c -- return magic number */
556
557long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000558PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000559{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000560 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000561}
562
563
Guido van Rossum25ce5661997-08-02 03:10:38 +0000564/* Magic for extension modules (built-in as well as dynamically
565 loaded). To prevent initializing an extension module more than
566 once, we keep a static dictionary 'extensions' keyed by module name
567 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000568 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000569 dictionary is stored by calling _PyImport_FixupExtension()
570 immediately after the module initialization function succeeds. A
571 copy can be retrieved from there by calling
572 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000573
Guido van Rossum79f25d91997-04-29 20:08:16 +0000574PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000575_PyImport_FixupExtension(char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000576{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000577 PyObject *modules, *mod, *dict, *copy;
578 if (extensions == NULL) {
579 extensions = PyDict_New();
580 if (extensions == NULL)
581 return NULL;
582 }
583 modules = PyImport_GetModuleDict();
584 mod = PyDict_GetItemString(modules, name);
585 if (mod == NULL || !PyModule_Check(mod)) {
586 PyErr_Format(PyExc_SystemError,
587 "_PyImport_FixupExtension: module %.200s not loaded", name);
588 return NULL;
589 }
590 dict = PyModule_GetDict(mod);
591 if (dict == NULL)
592 return NULL;
593 copy = PyDict_Copy(dict);
594 if (copy == NULL)
595 return NULL;
596 PyDict_SetItemString(extensions, filename, copy);
597 Py_DECREF(copy);
598 return copy;
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{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000604 PyObject *dict, *mod, *mdict;
605 if (extensions == NULL)
606 return NULL;
607 dict = PyDict_GetItemString(extensions, filename);
608 if (dict == NULL)
609 return NULL;
610 mod = PyImport_AddModule(name);
611 if (mod == NULL)
612 return NULL;
613 mdict = PyModule_GetDict(mod);
614 if (mdict == NULL)
615 return NULL;
616 if (PyDict_Update(mdict, dict))
617 return NULL;
618 if (Py_VerboseFlag)
619 PySys_WriteStderr("import %s # previously loaded (%s)\n",
620 name, filename);
621 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000622}
623
624
625/* Get the module object corresponding to a module name.
626 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000627 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000628 Because the former action is most common, THIS DOES NOT RETURN A
629 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000630
Guido van Rossum79f25d91997-04-29 20:08:16 +0000631PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000632PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000633{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000634 PyObject *modules = PyImport_GetModuleDict();
635 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000636
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000637 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
638 PyModule_Check(m))
639 return m;
640 m = PyModule_New(name);
641 if (m == NULL)
642 return NULL;
643 if (PyDict_SetItemString(modules, name, m) != 0) {
644 Py_DECREF(m);
645 return NULL;
646 }
647 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000648
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000649 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000650}
651
Tim Peters1cd70172004-08-02 03:52:12 +0000652/* Remove name from sys.modules, if it's there. */
653static void
Benjamin Peterson06638732010-03-25 23:27:16 +0000654remove_module(const char *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000655{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000656 PyObject *modules = PyImport_GetModuleDict();
657 if (PyDict_GetItemString(modules, name) == NULL)
658 return;
659 if (PyDict_DelItemString(modules, name) < 0)
660 Py_FatalError("import: deleting existing key in"
661 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000662}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000663
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000664/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000665 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
666 * removed from sys.modules, to avoid leaving damaged module objects
667 * in sys.modules. The caller may wish to restore the original
668 * module object (if any) in this case; PyImport_ReloadModule is an
669 * example.
670 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000671PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000672PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000673{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000674 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000675}
676
677PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000678PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000679{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000680 PyObject *modules = PyImport_GetModuleDict();
681 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000682
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000683 m = PyImport_AddModule(name);
684 if (m == NULL)
685 return NULL;
686 /* If the module is being reloaded, we get the old module back
687 and re-use its dict to exec the new code. */
688 d = PyModule_GetDict(m);
689 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
690 if (PyDict_SetItemString(d, "__builtins__",
691 PyEval_GetBuiltins()) != 0)
692 goto error;
693 }
694 /* Remember the filename as the __file__ attribute */
695 v = NULL;
696 if (pathname != NULL) {
697 v = PyString_FromString(pathname);
698 if (v == NULL)
699 PyErr_Clear();
700 }
701 if (v == NULL) {
702 v = ((PyCodeObject *)co)->co_filename;
703 Py_INCREF(v);
704 }
705 if (PyDict_SetItemString(d, "__file__", v) != 0)
706 PyErr_Clear(); /* Not important enough to report */
707 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000708
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000709 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
710 if (v == NULL)
711 goto error;
712 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000713
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000714 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
715 PyErr_Format(PyExc_ImportError,
716 "Loaded module %.200s not found in sys.modules",
717 name);
718 return NULL;
719 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000720
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000721 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000722
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000723 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000724
725 error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000726 remove_module(name);
727 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000728}
729
730
731/* Given a pathname for a Python source file, fill a buffer with the
732 pathname for the corresponding compiled file. Return the pathname
733 for the compiled file, or NULL if there's no space in the buffer.
734 Doesn't set an exception. */
735
736static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000737make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000738{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000739 size_t len = strlen(pathname);
740 if (len+2 > buflen)
741 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000742
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000743#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000744 /* Treat .pyw as if it were .py. The case of ".pyw" must match
745 that used in _PyImport_StandardFiletab. */
746 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
747 --len; /* pretend 'w' isn't there */
Tim Petersc1731372001-08-04 08:12:36 +0000748#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000749 memcpy(buf, pathname, len);
750 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
751 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000752
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000753 return buf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000754}
755
756
757/* Given a pathname for a Python source file, its time of last
758 modification, and a pathname for a compiled file, check whether the
759 compiled file represents the same version of the source. If so,
760 return a FILE pointer for the compiled file, positioned just after
761 the header; if not, return NULL.
762 Doesn't set an exception. */
763
764static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000765check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000766{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000767 FILE *fp;
768 long magic;
769 long pyc_mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000770
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000771 fp = fopen(cpathname, "rb");
772 if (fp == NULL)
773 return NULL;
774 magic = PyMarshal_ReadLongFromFile(fp);
775 if (magic != pyc_magic) {
776 if (Py_VerboseFlag)
777 PySys_WriteStderr("# %s has bad magic\n", cpathname);
778 fclose(fp);
779 return NULL;
780 }
781 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
782 if (pyc_mtime != mtime) {
783 if (Py_VerboseFlag)
784 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
785 fclose(fp);
786 return NULL;
787 }
788 if (Py_VerboseFlag)
789 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
790 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000791}
792
793
794/* Read a code object from a file and check it for validity */
795
Guido van Rossum79f25d91997-04-29 20:08:16 +0000796static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000797read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000798{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000799 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000800
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000801 co = PyMarshal_ReadLastObjectFromFile(fp);
802 if (co == NULL)
803 return NULL;
804 if (!PyCode_Check(co)) {
805 PyErr_Format(PyExc_ImportError,
806 "Non-code object in %.200s", cpathname);
807 Py_DECREF(co);
808 return NULL;
809 }
810 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000811}
812
813
814/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000815 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000816
Guido van Rossum79f25d91997-04-29 20:08:16 +0000817static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000818load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000819{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000820 long magic;
821 PyCodeObject *co;
822 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000823
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000824 magic = PyMarshal_ReadLongFromFile(fp);
825 if (magic != pyc_magic) {
826 PyErr_Format(PyExc_ImportError,
827 "Bad magic number in %.200s", cpathname);
828 return NULL;
829 }
830 (void) PyMarshal_ReadLongFromFile(fp);
831 co = read_compiled_module(cpathname, fp);
832 if (co == NULL)
833 return NULL;
834 if (Py_VerboseFlag)
835 PySys_WriteStderr("import %s # precompiled from %s\n",
836 name, cpathname);
837 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
838 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000839
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000840 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000841}
842
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000843/* Parse a source file and return the corresponding code object */
844
Guido van Rossum79f25d91997-04-29 20:08:16 +0000845static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000846parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000847{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000848 PyCodeObject *co = NULL;
849 mod_ty mod;
850 PyCompilerFlags flags;
851 PyArena *arena = PyArena_New();
852 if (arena == NULL)
853 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000854
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000855 flags.cf_flags = 0;
Christian Heimes7f23d862008-03-26 22:51:58 +0000856
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000857 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, &flags,
858 NULL, arena);
859 if (mod) {
860 co = PyAST_Compile(mod, pathname, NULL, arena);
861 }
862 PyArena_Free(arena);
863 return co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000864}
865
866
Guido van Rossum55a83382000-09-20 20:31:38 +0000867/* Helper to open a bytecode file for writing in exclusive mode */
868
869static FILE *
Christian Heimes40346852008-02-23 17:52:07 +0000870open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +0000871{
872#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000873 /* Use O_EXCL to avoid a race condition when another process tries to
874 write the same file. When that happens, our open() call fails,
875 which is just fine (since it's only a cache).
876 XXX If the file exists and is writable but the directory is not
877 writable, the file will never be written. Oh well.
878 */
879 int fd;
880 (void) unlink(filename);
881 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
Tim Peters42c83af2000-09-29 04:03:10 +0000882#ifdef O_BINARY
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000883 |O_BINARY /* necessary for Windows */
Tim Peters42c83af2000-09-29 04:03:10 +0000884#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000885#ifdef __VMS
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000886 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000887#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000888 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000889#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000890 );
891 if (fd < 0)
892 return NULL;
893 return fdopen(fd, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +0000894#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000895 /* Best we can do -- on Windows this can't happen anyway */
896 return fopen(filename, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +0000897#endif
898}
899
900
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000901/* Write a compiled module to a file, placing the time of last
902 modification of its source into the header.
903 Errors are ignored, if a write error occurs an attempt is made to
904 remove the file. */
905
906static void
Christian Heimes40346852008-02-23 17:52:07 +0000907write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000908{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000909 FILE *fp;
910 time_t mtime = srcstat->st_mtime;
R. David Murray3310a102009-07-07 09:54:16 +0000911#ifdef MS_WINDOWS /* since Windows uses different permissions */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000912 mode_t mode = srcstat->st_mode & ~S_IEXEC;
R. David Murray3310a102009-07-07 09:54:16 +0000913#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000914 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
Brett Cannonb166afc2010-05-05 20:25:47 +0000915#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000916
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000917 fp = open_exclusive(cpathname, mode);
918 if (fp == NULL) {
919 if (Py_VerboseFlag)
920 PySys_WriteStderr(
921 "# can't create %s\n", cpathname);
922 return;
923 }
924 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
925 /* First write a 0 for mtime */
926 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
927 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
928 if (fflush(fp) != 0 || ferror(fp)) {
929 if (Py_VerboseFlag)
930 PySys_WriteStderr("# can't write %s\n", cpathname);
931 /* Don't keep partial file */
932 fclose(fp);
933 (void) unlink(cpathname);
934 return;
935 }
Antoine Pitrou6f25d752012-01-25 15:38:32 +0100936 /* Now write the true mtime (as a 32-bit field) */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000937 fseek(fp, 4L, 0);
Antoine Pitrou6f25d752012-01-25 15:38:32 +0100938 assert(mtime <= 0xFFFFFFFF);
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000939 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
940 fflush(fp);
941 fclose(fp);
942 if (Py_VerboseFlag)
943 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000944}
945
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000946static void
947update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
948{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000949 PyObject *constants, *tmp;
950 Py_ssize_t i, n;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000951
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000952 if (!_PyString_Eq(co->co_filename, oldname))
953 return;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000954
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000955 tmp = co->co_filename;
956 co->co_filename = newname;
957 Py_INCREF(co->co_filename);
958 Py_DECREF(tmp);
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000959
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000960 constants = co->co_consts;
961 n = PyTuple_GET_SIZE(constants);
962 for (i = 0; i < n; i++) {
963 tmp = PyTuple_GET_ITEM(constants, i);
964 if (PyCode_Check(tmp))
965 update_code_filenames((PyCodeObject *)tmp,
966 oldname, newname);
967 }
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000968}
969
970static int
971update_compiled_module(PyCodeObject *co, char *pathname)
972{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000973 PyObject *oldname, *newname;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000974
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000975 if (strcmp(PyString_AsString(co->co_filename), pathname) == 0)
976 return 0;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000977
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000978 newname = PyString_FromString(pathname);
979 if (newname == NULL)
980 return -1;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000981
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000982 oldname = co->co_filename;
983 Py_INCREF(oldname);
984 update_code_filenames(co, oldname, newname);
985 Py_DECREF(oldname);
986 Py_DECREF(newname);
987 return 1;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000988}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000989
990/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000991 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
992 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000993
Guido van Rossum79f25d91997-04-29 20:08:16 +0000994static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000995load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000996{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000997 struct stat st;
998 FILE *fpc;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -0700999 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001000 char *cpathname;
Antoine Pitrou284fa082012-05-09 13:24:31 +02001001 PyCodeObject *co = NULL;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001002 PyObject *m;
Brett Cannonb166afc2010-05-05 20:25:47 +00001003
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001004 if (fstat(fileno(fp), &st) != 0) {
1005 PyErr_Format(PyExc_RuntimeError,
1006 "unable to get file status from '%s'",
1007 pathname);
1008 return NULL;
1009 }
Antoine Pitrou0e5fd592012-01-25 03:31:39 +01001010 if (sizeof st.st_mtime > 4) {
1011 /* Python's .pyc timestamp handling presumes that the timestamp fits
1012 in 4 bytes. Since the code only does an equality comparison,
1013 ordering is not important and we can safely ignore the higher bits
1014 (collisions are extremely unlikely).
1015 */
1016 st.st_mtime &= 0xFFFFFFFF;
1017 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001018 buf = PyMem_MALLOC(MAXPATHLEN+1);
1019 if (buf == NULL) {
1020 return PyErr_NoMemory();
1021 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001022 cpathname = make_compiled_pathname(pathname, buf,
1023 (size_t)MAXPATHLEN + 1);
1024 if (cpathname != NULL &&
1025 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
1026 co = read_compiled_module(cpathname, fpc);
1027 fclose(fpc);
1028 if (co == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001029 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001030 if (update_compiled_module(co, pathname) < 0)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001031 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001032 if (Py_VerboseFlag)
1033 PySys_WriteStderr("import %s # precompiled from %s\n",
1034 name, cpathname);
1035 pathname = cpathname;
1036 }
1037 else {
1038 co = parse_source_module(pathname, fp);
1039 if (co == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001040 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001041 if (Py_VerboseFlag)
1042 PySys_WriteStderr("import %s # from %s\n",
1043 name, pathname);
1044 if (cpathname) {
1045 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1046 if (ro == NULL || !PyObject_IsTrue(ro))
1047 write_compiled_module(co, cpathname, &st);
1048 }
1049 }
1050 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
1051 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001052
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001053 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001054 return m;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001055
1056error_exit:
Antoine Pitrou284fa082012-05-09 13:24:31 +02001057 Py_XDECREF(co);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001058 PyMem_FREE(buf);
1059 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001060}
1061
1062
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001063/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001064static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1065static struct filedescr *find_module(char *, char *, PyObject *,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001066 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001067static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001068
1069/* Load a package and return its module object WITH INCREMENTED
1070 REFERENCE COUNT */
1071
1072static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001073load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001074{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001075 PyObject *m, *d;
1076 PyObject *file = NULL;
1077 PyObject *path = NULL;
1078 int err;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001079 char *buf = NULL;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001080 FILE *fp = NULL;
1081 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001082
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001083 m = PyImport_AddModule(name);
1084 if (m == NULL)
1085 return NULL;
1086 if (Py_VerboseFlag)
1087 PySys_WriteStderr("import %s # directory %s\n",
1088 name, pathname);
1089 d = PyModule_GetDict(m);
1090 file = PyString_FromString(pathname);
1091 if (file == NULL)
1092 goto error;
1093 path = Py_BuildValue("[O]", file);
1094 if (path == NULL)
1095 goto error;
1096 err = PyDict_SetItemString(d, "__file__", file);
1097 if (err == 0)
1098 err = PyDict_SetItemString(d, "__path__", path);
1099 if (err != 0)
1100 goto error;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001101 buf = PyMem_MALLOC(MAXPATHLEN+1);
1102 if (buf == NULL) {
1103 PyErr_NoMemory();
1104 goto error;
1105 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001106 buf[0] = '\0';
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001107 fdp = find_module(name, "__init__", path, buf, MAXPATHLEN+1, &fp, NULL);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001108 if (fdp == NULL) {
1109 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1110 PyErr_Clear();
1111 Py_INCREF(m);
1112 }
1113 else
1114 m = NULL;
1115 goto cleanup;
1116 }
1117 m = load_module(name, fp, buf, fdp->type, NULL);
1118 if (fp != NULL)
1119 fclose(fp);
1120 goto cleanup;
Tim Peters1cd70172004-08-02 03:52:12 +00001121
1122 error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001123 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001124 cleanup:
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001125 if (buf)
1126 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001127 Py_XDECREF(path);
1128 Py_XDECREF(file);
1129 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001130}
1131
1132
1133/* Helper to test for built-in module */
1134
1135static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001136is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001137{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001138 int i;
1139 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1140 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1141 if (PyImport_Inittab[i].initfunc == NULL)
1142 return -1;
1143 else
1144 return 1;
1145 }
1146 }
1147 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001148}
1149
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001150
Just van Rossum52e14d62002-12-30 22:08:05 +00001151/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1152 possibly by fetching it from the path_importer_cache dict. If it
Brett Cannon94b69f62006-09-28 22:10:14 +00001153 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001154 that can handle the path item. Return None if no hook could;
1155 this tells our caller it should fall back to the builtin
1156 import mechanism. Cache the result in path_importer_cache.
1157 Returns a borrowed reference. */
1158
1159static PyObject *
1160get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001161 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001162{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001163 PyObject *importer;
1164 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001165
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001166 /* These conditions are the caller's responsibility: */
1167 assert(PyList_Check(path_hooks));
1168 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001169
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001170 nhooks = PyList_Size(path_hooks);
1171 if (nhooks < 0)
1172 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001173
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001174 importer = PyDict_GetItem(path_importer_cache, p);
1175 if (importer != NULL)
1176 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001177
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001178 /* set path_importer_cache[p] to None to avoid recursion */
1179 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1180 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001181
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001182 for (j = 0; j < nhooks; j++) {
1183 PyObject *hook = PyList_GetItem(path_hooks, j);
1184 if (hook == NULL)
1185 return NULL;
1186 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1187 if (importer != NULL)
1188 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001189
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001190 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1191 return NULL;
1192 }
1193 PyErr_Clear();
1194 }
1195 if (importer == NULL) {
1196 importer = PyObject_CallFunctionObjArgs(
1197 (PyObject *)&PyNullImporter_Type, p, NULL
1198 );
1199 if (importer == NULL) {
1200 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1201 PyErr_Clear();
1202 return Py_None;
1203 }
1204 }
1205 }
1206 if (importer != NULL) {
1207 int err = PyDict_SetItem(path_importer_cache, p, importer);
1208 Py_DECREF(importer);
1209 if (err != 0)
1210 return NULL;
1211 }
1212 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001213}
1214
Nick Coghlan327a39b2007-11-18 11:56:28 +00001215PyAPI_FUNC(PyObject *)
1216PyImport_GetImporter(PyObject *path) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001217 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Nick Coghlan327a39b2007-11-18 11:56:28 +00001218
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001219 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1220 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1221 importer = get_path_importer(path_importer_cache,
1222 path_hooks, path);
1223 }
1224 }
1225 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1226 return importer;
Nick Coghlan327a39b2007-11-18 11:56:28 +00001227}
1228
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001229/* Search the path (default sys.path) for a module. Return the
1230 corresponding filedescr struct, and (via return arguments) the
1231 pathname and an open file. Return NULL if the module is not found. */
1232
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001233#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001234extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001235 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001236#endif
1237
Martin v. Löwis18e16552006-02-15 17:27:45 +00001238static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001239static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001240static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001241
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001242static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001243find_module(char *fullname, char *subname, PyObject *path, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001244 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001245{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001246 Py_ssize_t i, npath;
1247 size_t len, namelen;
1248 struct filedescr *fdp = NULL;
1249 char *filemode;
1250 FILE *fp = NULL;
1251 PyObject *path_hooks, *path_importer_cache;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001252 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1253 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1254 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001255 char *name;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001256#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001257 size_t saved_len;
1258 size_t saved_namelen;
1259 char *saved_buf = NULL;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001260#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001261 if (p_loader != NULL)
1262 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001263
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001264 if (strlen(subname) > MAXPATHLEN) {
1265 PyErr_SetString(PyExc_OverflowError,
1266 "module name is too long");
1267 return NULL;
1268 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001269 name = PyMem_MALLOC(MAXPATHLEN+1);
1270 if (name == NULL) {
Gregory P. Smitha72aa842012-04-18 16:41:56 -07001271 PyErr_NoMemory();
1272 return NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001273 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001274 strcpy(name, subname);
Just van Rossum52e14d62002-12-30 22:08:05 +00001275
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001276 /* sys.meta_path import hook */
1277 if (p_loader != NULL) {
1278 PyObject *meta_path;
Just van Rossum52e14d62002-12-30 22:08:05 +00001279
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001280 meta_path = PySys_GetObject("meta_path");
1281 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001282 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001283 "sys.meta_path must be a list of "
1284 "import hooks");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001285 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001286 }
1287 Py_INCREF(meta_path); /* zap guard */
1288 npath = PyList_Size(meta_path);
1289 for (i = 0; i < npath; i++) {
1290 PyObject *loader;
1291 PyObject *hook = PyList_GetItem(meta_path, i);
1292 loader = PyObject_CallMethod(hook, "find_module",
1293 "sO", fullname,
1294 path != NULL ?
1295 path : Py_None);
1296 if (loader == NULL) {
1297 Py_DECREF(meta_path);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001298 goto error_exit; /* true error */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001299 }
1300 if (loader != Py_None) {
1301 /* a loader was found */
1302 *p_loader = loader;
1303 Py_DECREF(meta_path);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001304 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001305 return &importhookdescr;
1306 }
1307 Py_DECREF(loader);
1308 }
1309 Py_DECREF(meta_path);
1310 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001311
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001312 if (path != NULL && PyString_Check(path)) {
1313 /* The only type of submodule allowed inside a "frozen"
1314 package are other frozen modules or packages. */
1315 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1316 PyErr_SetString(PyExc_ImportError,
1317 "full frozen module name too long");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001318 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001319 }
1320 strcpy(buf, PyString_AsString(path));
1321 strcat(buf, ".");
1322 strcat(buf, name);
1323 strcpy(name, buf);
1324 if (find_frozen(name) != NULL) {
1325 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001326 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001327 return &fd_frozen;
1328 }
1329 PyErr_Format(PyExc_ImportError,
1330 "No frozen submodule named %.200s", name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001331 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001332 }
1333 if (path == NULL) {
1334 if (is_builtin(name)) {
1335 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001336 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001337 return &fd_builtin;
1338 }
1339 if ((find_frozen(name)) != NULL) {
1340 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001341 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001342 return &fd_frozen;
1343 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001344
Guido van Rossumac279101996-08-22 23:10:58 +00001345#ifdef MS_COREDLL
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001346 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1347 if (fp != NULL) {
1348 *p_fp = fp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001349 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001350 return fdp;
1351 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001352#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001353 path = PySys_GetObject("path");
1354 }
1355 if (path == NULL || !PyList_Check(path)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001356 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001357 "sys.path must be a list of directory names");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001358 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001359 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001360
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001361 path_hooks = PySys_GetObject("path_hooks");
1362 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001363 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001364 "sys.path_hooks must be a list of "
1365 "import hooks");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001366 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001367 }
1368 path_importer_cache = PySys_GetObject("path_importer_cache");
1369 if (path_importer_cache == NULL ||
1370 !PyDict_Check(path_importer_cache)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001371 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001372 "sys.path_importer_cache must be a dict");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001373 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001374 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001375
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001376 npath = PyList_Size(path);
1377 namelen = strlen(name);
1378 for (i = 0; i < npath; i++) {
1379 PyObject *copy = NULL;
1380 PyObject *v = PyList_GetItem(path, i);
1381 if (!v)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001382 goto error_exit;
Walter Dörwald3430d702002-06-17 10:43:59 +00001383#ifdef Py_USING_UNICODE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001384 if (PyUnicode_Check(v)) {
1385 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1386 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1387 if (copy == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001388 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001389 v = copy;
1390 }
1391 else
Walter Dörwald3430d702002-06-17 10:43:59 +00001392#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001393 if (!PyString_Check(v))
1394 continue;
1395 len = PyString_GET_SIZE(v);
1396 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1397 Py_XDECREF(copy);
1398 continue; /* Too long */
1399 }
1400 strcpy(buf, PyString_AS_STRING(v));
1401 if (strlen(buf) != len) {
1402 Py_XDECREF(copy);
1403 continue; /* v contains '\0' */
1404 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001405
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001406 /* sys.path_hooks import hook */
1407 if (p_loader != NULL) {
1408 PyObject *importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001409
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001410 importer = get_path_importer(path_importer_cache,
1411 path_hooks, v);
1412 if (importer == NULL) {
1413 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001414 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001415 }
1416 /* Note: importer is a borrowed reference */
1417 if (importer != Py_None) {
1418 PyObject *loader;
1419 loader = PyObject_CallMethod(importer,
1420 "find_module",
1421 "s", fullname);
1422 Py_XDECREF(copy);
1423 if (loader == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001424 goto error_exit; /* error */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001425 if (loader != Py_None) {
1426 /* a loader was found */
1427 *p_loader = loader;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001428 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001429 return &importhookdescr;
1430 }
1431 Py_DECREF(loader);
1432 continue;
1433 }
1434 }
1435 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001436
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001437 if (len > 0 && buf[len-1] != SEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001438#ifdef ALTSEP
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001439 && buf[len-1] != ALTSEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001440#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001441 )
1442 buf[len++] = SEP;
1443 strcpy(buf+len, name);
1444 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001445
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001446 /* Check for package import (buf holds a directory name,
1447 and there's an __init__ module in that directory */
Jason R. Coombs925ff742012-01-13 17:12:25 -05001448 if (isdir(buf) && /* it's an existing directory */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001449 case_ok(buf, len, namelen, name)) { /* case matches */
1450 if (find_init_module(buf)) { /* and has __init__.py */
1451 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001452 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001453 return &fd_package;
1454 }
1455 else {
1456 char warnstr[MAXPATHLEN+80];
1457 sprintf(warnstr, "Not importing directory "
1458 "'%.*s': missing __init__.py",
1459 MAXPATHLEN, buf);
1460 if (PyErr_Warn(PyExc_ImportWarning,
1461 warnstr)) {
1462 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001463 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001464 }
1465 }
1466 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001467#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001468 /* take a snapshot of the module spec for restoration
1469 * after the 8 character DLL hackery
1470 */
1471 saved_buf = strdup(buf);
1472 saved_len = len;
1473 saved_namelen = namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001474#endif /* PYOS_OS2 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001475 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Georg Brandladd36e52007-08-23 18:08:06 +00001476#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001477 /* OS/2 limits DLLs to 8 character names (w/o
1478 extension)
1479 * so if the name is longer than that and its a
1480 * dynamically loaded module we're going to try,
1481 * truncate the name before trying
1482 */
1483 if (strlen(subname) > 8) {
1484 /* is this an attempt to load a C extension? */
1485 const struct filedescr *scan;
1486 scan = _PyImport_DynLoadFiletab;
1487 while (scan->suffix != NULL) {
1488 if (!strcmp(scan->suffix, fdp->suffix))
1489 break;
1490 else
1491 scan++;
1492 }
1493 if (scan->suffix != NULL) {
1494 /* yes, so truncate the name */
1495 namelen = 8;
1496 len -= strlen(subname) - namelen;
1497 buf[len] = '\0';
1498 }
1499 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001500#endif /* PYOS_OS2 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001501 strcpy(buf+len, fdp->suffix);
1502 if (Py_VerboseFlag > 1)
1503 PySys_WriteStderr("# trying %s\n", buf);
1504 filemode = fdp->mode;
1505 if (filemode[0] == 'U')
1506 filemode = "r" PY_STDIOTEXTMODE;
1507 fp = fopen(buf, filemode);
1508 if (fp != NULL) {
1509 if (case_ok(buf, len, namelen, name))
1510 break;
1511 else { /* continue search */
1512 fclose(fp);
1513 fp = NULL;
1514 }
1515 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001516#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001517 /* restore the saved snapshot */
1518 strcpy(buf, saved_buf);
1519 len = saved_len;
1520 namelen = saved_namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001521#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001522 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001523#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001524 /* don't need/want the module name snapshot anymore */
1525 if (saved_buf)
1526 {
1527 free(saved_buf);
1528 saved_buf = NULL;
1529 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001530#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001531 Py_XDECREF(copy);
1532 if (fp != NULL)
1533 break;
1534 }
1535 if (fp == NULL) {
1536 PyErr_Format(PyExc_ImportError,
1537 "No module named %.200s", name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001538 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001539 }
1540 *p_fp = fp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001541 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001542 return fdp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001543
1544error_exit:
1545 PyMem_FREE(name);
1546 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001547}
1548
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001549/* Helpers for main.c
1550 * Find the source file corresponding to a named module
1551 */
1552struct filedescr *
1553_PyImport_FindModule(const char *name, PyObject *path, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001554 size_t buflen, FILE **p_fp, PyObject **p_loader)
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001555{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001556 return find_module((char *) name, (char *) name, path,
1557 buf, buflen, p_fp, p_loader);
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001558}
1559
1560PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1561{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001562 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001563}
1564
Martin v. Löwis18e16552006-02-15 17:27:45 +00001565/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001566 * The arguments here are tricky, best shown by example:
1567 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1568 * ^ ^ ^ ^
1569 * |--------------------- buf ---------------------|
1570 * |------------------- len ------------------|
1571 * |------ name -------|
1572 * |----- namelen -----|
1573 * buf is the full path, but len only counts up to (& exclusive of) the
1574 * extension. name is the module name, also exclusive of extension.
1575 *
1576 * We've already done a successful stat() or fopen() on buf, so know that
1577 * there's some match, possibly case-insensitive.
1578 *
Tim Peters50d8d372001-02-28 05:34:27 +00001579 * case_ok() is to return 1 if there's a case-sensitive match for
1580 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1581 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001582 *
Tim Peters50d8d372001-02-28 05:34:27 +00001583 * case_ok() is used to implement case-sensitive import semantics even
1584 * on platforms with case-insensitive filesystems. It's trivial to implement
1585 * for case-sensitive filesystems. It's pretty much a cross-platform
1586 * nightmare for systems with case-insensitive filesystems.
1587 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001588
Tim Peters50d8d372001-02-28 05:34:27 +00001589/* First we may need a pile of platform-specific header files; the sequence
1590 * of #if's here should match the sequence in the body of case_ok().
1591 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001592#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001593#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001594
Tim Peters50d8d372001-02-28 05:34:27 +00001595#elif defined(DJGPP)
1596#include <dir.h>
1597
Jason Tishler7961aa62005-05-20 00:56:54 +00001598#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001599#include <sys/types.h>
1600#include <dirent.h>
1601
Andrew MacIntyred9400542002-02-26 11:41:34 +00001602#elif defined(PYOS_OS2)
1603#define INCL_DOS
1604#define INCL_DOSERRORS
1605#define INCL_NOPMAPI
1606#include <os2.h>
1607
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001608#elif defined(RISCOS)
1609#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001610#endif
1611
Guido van Rossum0980bd91998-02-13 17:18:36 +00001612static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001613case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001614{
Tim Peters50d8d372001-02-28 05:34:27 +00001615/* Pick a platform-specific implementation; the sequence of #if's here should
1616 * match the sequence just above.
1617 */
1618
Jason Tishler7961aa62005-05-20 00:56:54 +00001619/* MS_WINDOWS */
1620#if defined(MS_WINDOWS)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001621 WIN32_FIND_DATA data;
1622 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001623
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001624 if (Py_GETENV("PYTHONCASEOK") != NULL)
1625 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001626
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001627 h = FindFirstFile(buf, &data);
1628 if (h == INVALID_HANDLE_VALUE) {
1629 PyErr_Format(PyExc_NameError,
1630 "Can't find file for module %.100s\n(filename %.300s)",
1631 name, buf);
1632 return 0;
1633 }
1634 FindClose(h);
1635 return strncmp(data.cFileName, name, namelen) == 0;
Tim Peters50d8d372001-02-28 05:34:27 +00001636
1637/* DJGPP */
1638#elif defined(DJGPP)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001639 struct ffblk ffblk;
1640 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00001641
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001642 if (Py_GETENV("PYTHONCASEOK") != NULL)
1643 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001644
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001645 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1646 if (done) {
1647 PyErr_Format(PyExc_NameError,
1648 "Can't find file for module %.100s\n(filename %.300s)",
1649 name, buf);
1650 return 0;
1651 }
1652 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001653
Jason Tishler7961aa62005-05-20 00:56:54 +00001654/* new-fangled macintosh (macosx) or Cygwin */
1655#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001656 DIR *dirp;
1657 struct dirent *dp;
1658 char dirname[MAXPATHLEN + 1];
1659 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001660
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001661 if (Py_GETENV("PYTHONCASEOK") != NULL)
1662 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001663
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001664 /* Copy the dir component into dirname; substitute "." if empty */
1665 if (dirlen <= 0) {
1666 dirname[0] = '.';
1667 dirname[1] = '\0';
1668 }
1669 else {
1670 assert(dirlen <= MAXPATHLEN);
1671 memcpy(dirname, buf, dirlen);
1672 dirname[dirlen] = '\0';
1673 }
1674 /* Open the directory and search the entries for an exact match. */
1675 dirp = opendir(dirname);
1676 if (dirp) {
1677 char *nameWithExt = buf + len - namelen;
1678 while ((dp = readdir(dirp)) != NULL) {
1679 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001680#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001681 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001682#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001683 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001684#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001685 if (thislen >= namelen &&
1686 strcmp(dp->d_name, nameWithExt) == 0) {
1687 (void)closedir(dirp);
1688 return 1; /* Found */
1689 }
1690 }
1691 (void)closedir(dirp);
1692 }
1693 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001694
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001695/* RISC OS */
1696#elif defined(RISCOS)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001697 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1698 char buf2[MAXPATHLEN+2];
1699 char *nameWithExt = buf+len-namelen;
1700 int canonlen;
1701 os_error *e;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001702
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001703 if (Py_GETENV("PYTHONCASEOK") != NULL)
1704 return 1;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001705
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001706 /* workaround:
1707 append wildcard, otherwise case of filename wouldn't be touched */
1708 strcpy(buf2, buf);
1709 strcat(buf2, "*");
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001710
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001711 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1712 canonlen = MAXPATHLEN+1-canonlen;
1713 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1714 return 0;
1715 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1716 return 1; /* match */
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001717
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001718 return 0;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001719
Andrew MacIntyred9400542002-02-26 11:41:34 +00001720/* OS/2 */
1721#elif defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001722 HDIR hdir = 1;
1723 ULONG srchcnt = 1;
1724 FILEFINDBUF3 ffbuf;
1725 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001726
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001727 if (Py_GETENV("PYTHONCASEOK") != NULL)
1728 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001729
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001730 rc = DosFindFirst(buf,
1731 &hdir,
1732 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1733 &ffbuf, sizeof(ffbuf),
1734 &srchcnt,
1735 FIL_STANDARD);
1736 if (rc != NO_ERROR)
1737 return 0;
1738 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001739
Tim Peters50d8d372001-02-28 05:34:27 +00001740/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1741#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001742 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001743
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001744#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001745}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001746
Guido van Rossum0980bd91998-02-13 17:18:36 +00001747
Guido van Rossum197346f1997-10-31 18:38:52 +00001748#ifdef HAVE_STAT
1749/* Helper to look for __init__.py or __init__.py[co] in potential package */
1750static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001751find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001752{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001753 const size_t save_len = strlen(buf);
1754 size_t i = save_len;
1755 char *pname; /* pointer to start of __init__ */
1756 struct stat statbuf;
Guido van Rossum197346f1997-10-31 18:38:52 +00001757
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001758/* For calling case_ok(buf, len, namelen, name):
1759 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1760 * ^ ^ ^ ^
1761 * |--------------------- buf ---------------------|
1762 * |------------------- len ------------------|
1763 * |------ name -------|
1764 * |----- namelen -----|
Tim Peters0f9431f2001-07-05 03:47:53 +00001765 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001766 if (save_len + 13 >= MAXPATHLEN)
1767 return 0;
1768 buf[i++] = SEP;
1769 pname = buf + i;
1770 strcpy(pname, "__init__.py");
1771 if (stat(buf, &statbuf) == 0) {
1772 if (case_ok(buf,
1773 save_len + 9, /* len("/__init__") */
1774 8, /* len("__init__") */
1775 pname)) {
1776 buf[save_len] = '\0';
1777 return 1;
1778 }
1779 }
1780 i += strlen(pname);
1781 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
1782 if (stat(buf, &statbuf) == 0) {
1783 if (case_ok(buf,
1784 save_len + 9, /* len("/__init__") */
1785 8, /* len("__init__") */
1786 pname)) {
1787 buf[save_len] = '\0';
1788 return 1;
1789 }
1790 }
1791 buf[save_len] = '\0';
1792 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00001793}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001794
1795#else
1796
1797#ifdef RISCOS
1798static int
1799find_init_module(buf)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001800 char *buf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001801{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001802 int save_len = strlen(buf);
1803 int i = save_len;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001804
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001805 if (save_len + 13 >= MAXPATHLEN)
1806 return 0;
1807 buf[i++] = SEP;
1808 strcpy(buf+i, "__init__/py");
1809 if (isfile(buf)) {
1810 buf[save_len] = '\0';
1811 return 1;
1812 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001813
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001814 if (Py_OptimizeFlag)
1815 strcpy(buf+i, "o");
1816 else
1817 strcpy(buf+i, "c");
1818 if (isfile(buf)) {
1819 buf[save_len] = '\0';
1820 return 1;
1821 }
1822 buf[save_len] = '\0';
1823 return 0;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001824}
1825#endif /*RISCOS*/
1826
Guido van Rossum197346f1997-10-31 18:38:52 +00001827#endif /* HAVE_STAT */
1828
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001829
Tim Petersdbd9ba62000-07-09 03:09:57 +00001830static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001831
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001832/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001833 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001834
Guido van Rossum79f25d91997-04-29 20:08:16 +00001835static PyObject *
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001836load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001837{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001838 PyObject *modules;
1839 PyObject *m;
1840 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001841
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001842 /* First check that there's an open file (if we need one) */
1843 switch (type) {
1844 case PY_SOURCE:
1845 case PY_COMPILED:
1846 if (fp == NULL) {
1847 PyErr_Format(PyExc_ValueError,
1848 "file object required for import (type code %d)",
1849 type);
1850 return NULL;
1851 }
1852 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001853
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001854 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001855
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001856 case PY_SOURCE:
1857 m = load_source_module(name, pathname, fp);
1858 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001859
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001860 case PY_COMPILED:
1861 m = load_compiled_module(name, pathname, fp);
1862 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001863
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001864#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001865 case C_EXTENSION:
1866 m = _PyImport_LoadDynamicModule(name, pathname, fp);
1867 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001868#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001869
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001870 case PKG_DIRECTORY:
1871 m = load_package(name, pathname);
1872 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001873
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001874 case C_BUILTIN:
1875 case PY_FROZEN:
1876 if (pathname != NULL && pathname[0] != '\0')
1877 name = pathname;
1878 if (type == C_BUILTIN)
1879 err = init_builtin(name);
1880 else
1881 err = PyImport_ImportFrozenModule(name);
1882 if (err < 0)
1883 return NULL;
1884 if (err == 0) {
1885 PyErr_Format(PyExc_ImportError,
1886 "Purported %s module %.200s not found",
1887 type == C_BUILTIN ?
1888 "builtin" : "frozen",
1889 name);
1890 return NULL;
1891 }
1892 modules = PyImport_GetModuleDict();
1893 m = PyDict_GetItemString(modules, name);
1894 if (m == NULL) {
1895 PyErr_Format(
1896 PyExc_ImportError,
1897 "%s module %.200s not properly initialized",
1898 type == C_BUILTIN ?
1899 "builtin" : "frozen",
1900 name);
1901 return NULL;
1902 }
1903 Py_INCREF(m);
1904 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001905
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001906 case IMP_HOOK: {
1907 if (loader == NULL) {
1908 PyErr_SetString(PyExc_ImportError,
1909 "import hook without loader");
1910 return NULL;
1911 }
1912 m = PyObject_CallMethod(loader, "load_module", "s", name);
1913 break;
1914 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001915
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001916 default:
1917 PyErr_Format(PyExc_ImportError,
1918 "Don't know how to import %.200s (type code %d)",
1919 name, type);
1920 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001921
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001922 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001923
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001924 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001925}
1926
1927
1928/* Initialize a built-in module.
Brett Cannon5a9aa4f2006-10-03 21:58:55 +00001929 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001930 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001931
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001932static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001933init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001934{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001935 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001936
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001937 if (_PyImport_FindExtension(name, name) != NULL)
1938 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001939
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001940 for (p = PyImport_Inittab; p->name != NULL; p++) {
1941 if (strcmp(name, p->name) == 0) {
1942 if (p->initfunc == NULL) {
1943 PyErr_Format(PyExc_ImportError,
1944 "Cannot re-init internal module %.200s",
1945 name);
1946 return -1;
1947 }
1948 if (Py_VerboseFlag)
1949 PySys_WriteStderr("import %s # builtin\n", name);
1950 (*p->initfunc)();
1951 if (PyErr_Occurred())
1952 return -1;
1953 if (_PyImport_FixupExtension(name, name) == NULL)
1954 return -1;
1955 return 1;
1956 }
1957 }
1958 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001959}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001960
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001961
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001962/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001963
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001964static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001965find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001966{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001967 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001968
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001969 for (p = PyImport_FrozenModules; ; p++) {
1970 if (p->name == NULL)
1971 return NULL;
1972 if (strcmp(p->name, name) == 0)
1973 break;
1974 }
1975 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001976}
1977
Guido van Rossum79f25d91997-04-29 20:08:16 +00001978static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001979get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001980{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001981 struct _frozen *p = find_frozen(name);
1982 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001983
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001984 if (p == NULL) {
1985 PyErr_Format(PyExc_ImportError,
1986 "No such frozen object named %.200s",
1987 name);
1988 return NULL;
1989 }
1990 if (p->code == NULL) {
1991 PyErr_Format(PyExc_ImportError,
1992 "Excluded frozen object named %.200s",
1993 name);
1994 return NULL;
1995 }
1996 size = p->size;
1997 if (size < 0)
1998 size = -size;
1999 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002000}
2001
2002/* Initialize a frozen module.
2003 Return 1 for succes, 0 if the module is not found, and -1 with
2004 an exception set if the initialization failed.
2005 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002006
2007int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002008PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002009{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002010 struct _frozen *p = find_frozen(name);
2011 PyObject *co;
2012 PyObject *m;
2013 int ispackage;
2014 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002015
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002016 if (p == NULL)
2017 return 0;
2018 if (p->code == NULL) {
2019 PyErr_Format(PyExc_ImportError,
2020 "Excluded frozen object named %.200s",
2021 name);
2022 return -1;
2023 }
2024 size = p->size;
2025 ispackage = (size < 0);
2026 if (ispackage)
2027 size = -size;
2028 if (Py_VerboseFlag)
2029 PySys_WriteStderr("import %s # frozen%s\n",
2030 name, ispackage ? " package" : "");
2031 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2032 if (co == NULL)
2033 return -1;
2034 if (!PyCode_Check(co)) {
2035 PyErr_Format(PyExc_TypeError,
2036 "frozen object %.200s is not a code object",
2037 name);
2038 goto err_return;
2039 }
2040 if (ispackage) {
2041 /* Set __path__ to the package name */
2042 PyObject *d, *s;
2043 int err;
2044 m = PyImport_AddModule(name);
2045 if (m == NULL)
2046 goto err_return;
2047 d = PyModule_GetDict(m);
2048 s = PyString_InternFromString(name);
2049 if (s == NULL)
2050 goto err_return;
2051 err = PyDict_SetItemString(d, "__path__", s);
2052 Py_DECREF(s);
2053 if (err != 0)
2054 goto err_return;
2055 }
2056 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
2057 if (m == NULL)
2058 goto err_return;
2059 Py_DECREF(co);
2060 Py_DECREF(m);
2061 return 1;
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002062err_return:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002063 Py_DECREF(co);
2064 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002065}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002066
2067
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002068/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002069 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002070
Guido van Rossum79f25d91997-04-29 20:08:16 +00002071PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002072PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002073{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002074 PyObject *pname;
2075 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002076
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002077 pname = PyString_FromString(name);
2078 if (pname == NULL)
2079 return NULL;
2080 result = PyImport_Import(pname);
2081 Py_DECREF(pname);
2082 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002083}
2084
Christian Heimes000a0742008-01-03 22:16:32 +00002085/* Import a module without blocking
2086 *
2087 * At first it tries to fetch the module from sys.modules. If the module was
2088 * never loaded before it loads it with PyImport_ImportModule() unless another
2089 * thread holds the import lock. In the latter case the function raises an
2090 * ImportError instead of blocking.
2091 *
2092 * Returns the module object with incremented ref count.
2093 */
2094PyObject *
2095PyImport_ImportModuleNoBlock(const char *name)
2096{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002097 PyObject *result;
2098 PyObject *modules;
Victor Stinner871a0fb2011-09-02 00:21:36 +02002099#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002100 long me;
Victor Stinner871a0fb2011-09-02 00:21:36 +02002101#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002102
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002103 /* Try to get the module from sys.modules[name] */
2104 modules = PyImport_GetModuleDict();
2105 if (modules == NULL)
2106 return NULL;
Christian Heimes000a0742008-01-03 22:16:32 +00002107
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002108 result = PyDict_GetItemString(modules, name);
2109 if (result != NULL) {
2110 Py_INCREF(result);
2111 return result;
2112 }
2113 else {
2114 PyErr_Clear();
2115 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002116#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002117 /* check the import lock
2118 * me might be -1 but I ignore the error here, the lock function
2119 * takes care of the problem */
2120 me = PyThread_get_thread_ident();
2121 if (import_lock_thread == -1 || import_lock_thread == me) {
2122 /* no thread or me is holding the lock */
2123 return PyImport_ImportModule(name);
2124 }
2125 else {
2126 PyErr_Format(PyExc_ImportError,
2127 "Failed to import %.200s because the import lock"
2128 "is held by another thread.",
2129 name);
2130 return NULL;
2131 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002132#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002133 return PyImport_ImportModule(name);
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002134#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002135}
2136
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002137/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002138static PyObject *get_parent(PyObject *globals, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002139 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002140static PyObject *load_next(PyObject *mod, PyObject *altmod,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002141 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002142static int mark_miss(char *name);
2143static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002144 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002145static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002146
2147/* The Magnum Opus of dotted-name import :-) */
2148
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002149static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002150import_module_level(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002151 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002152{
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002153 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002154 Py_ssize_t buflen = 0;
2155 PyObject *parent, *head, *next, *tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002156
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002157 if (strchr(name, '/') != NULL
Christian Heimes3403f152008-01-09 19:56:33 +00002158#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002159 || strchr(name, '\\') != NULL
Christian Heimes3403f152008-01-09 19:56:33 +00002160#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002161 ) {
2162 PyErr_SetString(PyExc_ImportError,
2163 "Import by filename is not supported.");
2164 return NULL;
2165 }
Christian Heimes3403f152008-01-09 19:56:33 +00002166
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002167 buf = PyMem_MALLOC(MAXPATHLEN+1);
2168 if (buf == NULL) {
2169 return PyErr_NoMemory();
2170 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002171 parent = get_parent(globals, buf, &buflen, level);
2172 if (parent == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002173 goto error_exit;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002174
Brett Cannoneb3cd302010-05-20 18:37:55 +00002175 head = load_next(parent, level < 0 ? Py_None : parent, &name, buf,
2176 &buflen);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002177 if (head == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002178 goto error_exit;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002179
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002180 tail = head;
2181 Py_INCREF(tail);
2182 while (name) {
2183 next = load_next(tail, tail, &name, buf, &buflen);
2184 Py_DECREF(tail);
2185 if (next == NULL) {
2186 Py_DECREF(head);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002187 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002188 }
2189 tail = next;
2190 }
2191 if (tail == Py_None) {
2192 /* If tail is Py_None, both get_parent and load_next found
2193 an empty module name: someone called __import__("") or
2194 doctored faulty bytecode */
2195 Py_DECREF(tail);
2196 Py_DECREF(head);
2197 PyErr_SetString(PyExc_ValueError,
2198 "Empty module name");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002199 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002200 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002201
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002202 if (fromlist != NULL) {
2203 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2204 fromlist = NULL;
2205 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002206
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002207 if (fromlist == NULL) {
2208 Py_DECREF(tail);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002209 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002210 return head;
2211 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002212
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002213 Py_DECREF(head);
2214 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
2215 Py_DECREF(tail);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002216 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002217 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002218
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002219 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002220 return tail;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002221
2222error_exit:
2223 PyMem_FREE(buf);
2224 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002225}
2226
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002227PyObject *
2228PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002229 PyObject *fromlist, int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002230{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002231 PyObject *result;
2232 _PyImport_AcquireLock();
2233 result = import_module_level(name, globals, locals, fromlist, level);
2234 if (_PyImport_ReleaseLock() < 0) {
2235 Py_XDECREF(result);
2236 PyErr_SetString(PyExc_RuntimeError,
2237 "not holding the import lock");
2238 return NULL;
2239 }
2240 return result;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002241}
2242
Fred Drake87590902004-05-28 20:21:36 +00002243/* Return the package that an import is being performed in. If globals comes
2244 from the module foo.bar.bat (not itself a package), this returns the
2245 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Georg Brandl5f6861d2006-05-28 21:57:35 +00002246 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002247
2248 The *name* of the returned package is returned in buf, with the length of
2249 the name in *p_buflen.
2250
2251 If globals doesn't come from a package or a module in a package, or a
2252 corresponding entry is not found in sys.modules, Py_None is returned.
2253*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002254static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002255get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002256{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002257 static PyObject *namestr = NULL;
2258 static PyObject *pathstr = NULL;
2259 static PyObject *pkgstr = NULL;
2260 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2261 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002262
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002263 if (globals == NULL || !PyDict_Check(globals) || !level)
2264 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002265
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002266 if (namestr == NULL) {
2267 namestr = PyString_InternFromString("__name__");
2268 if (namestr == NULL)
2269 return NULL;
2270 }
2271 if (pathstr == NULL) {
2272 pathstr = PyString_InternFromString("__path__");
2273 if (pathstr == NULL)
2274 return NULL;
2275 }
2276 if (pkgstr == NULL) {
2277 pkgstr = PyString_InternFromString("__package__");
2278 if (pkgstr == NULL)
2279 return NULL;
2280 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002281
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002282 *buf = '\0';
2283 *p_buflen = 0;
2284 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002285
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002286 if ((pkgname != NULL) && (pkgname != Py_None)) {
2287 /* __package__ is set, so use it */
2288 Py_ssize_t len;
2289 if (!PyString_Check(pkgname)) {
2290 PyErr_SetString(PyExc_ValueError,
2291 "__package__ set to non-string");
2292 return NULL;
2293 }
2294 len = PyString_GET_SIZE(pkgname);
2295 if (len == 0) {
2296 if (level > 0) {
2297 PyErr_SetString(PyExc_ValueError,
2298 "Attempted relative import in non-package");
2299 return NULL;
2300 }
2301 return Py_None;
2302 }
2303 if (len > MAXPATHLEN) {
2304 PyErr_SetString(PyExc_ValueError,
2305 "Package name too long");
2306 return NULL;
2307 }
2308 strcpy(buf, PyString_AS_STRING(pkgname));
2309 } else {
2310 /* __package__ not set, so figure it out and set it */
2311 modname = PyDict_GetItem(globals, namestr);
2312 if (modname == NULL || !PyString_Check(modname))
2313 return Py_None;
Brett Cannonb166afc2010-05-05 20:25:47 +00002314
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002315 modpath = PyDict_GetItem(globals, pathstr);
2316 if (modpath != NULL) {
2317 /* __path__ is set, so modname is already the package name */
2318 Py_ssize_t len = PyString_GET_SIZE(modname);
2319 int error;
2320 if (len > MAXPATHLEN) {
2321 PyErr_SetString(PyExc_ValueError,
2322 "Module name too long");
2323 return NULL;
2324 }
2325 strcpy(buf, PyString_AS_STRING(modname));
2326 error = PyDict_SetItem(globals, pkgstr, modname);
2327 if (error) {
2328 PyErr_SetString(PyExc_ValueError,
2329 "Could not set __package__");
2330 return NULL;
2331 }
2332 } else {
2333 /* Normal module, so work out the package name if any */
2334 char *start = PyString_AS_STRING(modname);
2335 char *lastdot = strrchr(start, '.');
2336 size_t len;
2337 int error;
2338 if (lastdot == NULL && level > 0) {
2339 PyErr_SetString(PyExc_ValueError,
2340 "Attempted relative import in non-package");
2341 return NULL;
2342 }
2343 if (lastdot == NULL) {
2344 error = PyDict_SetItem(globals, pkgstr, Py_None);
2345 if (error) {
2346 PyErr_SetString(PyExc_ValueError,
2347 "Could not set __package__");
2348 return NULL;
2349 }
2350 return Py_None;
2351 }
2352 len = lastdot - start;
2353 if (len >= MAXPATHLEN) {
2354 PyErr_SetString(PyExc_ValueError,
2355 "Module name too long");
2356 return NULL;
2357 }
2358 strncpy(buf, start, len);
2359 buf[len] = '\0';
2360 pkgname = PyString_FromString(buf);
2361 if (pkgname == NULL) {
2362 return NULL;
2363 }
2364 error = PyDict_SetItem(globals, pkgstr, pkgname);
2365 Py_DECREF(pkgname);
2366 if (error) {
2367 PyErr_SetString(PyExc_ValueError,
2368 "Could not set __package__");
2369 return NULL;
2370 }
2371 }
2372 }
2373 while (--level > 0) {
2374 char *dot = strrchr(buf, '.');
2375 if (dot == NULL) {
2376 PyErr_SetString(PyExc_ValueError,
2377 "Attempted relative import beyond "
2378 "toplevel package");
2379 return NULL;
2380 }
2381 *dot = '\0';
2382 }
2383 *p_buflen = strlen(buf);
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002384
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002385 modules = PyImport_GetModuleDict();
2386 parent = PyDict_GetItemString(modules, buf);
2387 if (parent == NULL) {
2388 if (orig_level < 1) {
2389 PyObject *err_msg = PyString_FromFormat(
2390 "Parent module '%.200s' not found "
2391 "while handling absolute import", buf);
2392 if (err_msg == NULL) {
2393 return NULL;
2394 }
2395 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2396 PyString_AsString(err_msg), 1)) {
2397 *buf = '\0';
2398 *p_buflen = 0;
2399 parent = Py_None;
2400 }
2401 Py_DECREF(err_msg);
2402 } else {
2403 PyErr_Format(PyExc_SystemError,
2404 "Parent module '%.200s' not loaded, "
2405 "cannot perform relative import", buf);
2406 }
2407 }
2408 return parent;
2409 /* We expect, but can't guarantee, if parent != None, that:
2410 - parent.__name__ == buf
2411 - parent.__dict__ is globals
2412 If this is violated... Who cares? */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002413}
2414
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002415/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002416static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002417load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002418 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002419{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002420 char *name = *p_name;
2421 char *dot = strchr(name, '.');
2422 size_t len;
2423 char *p;
2424 PyObject *result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002425
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002426 if (strlen(name) == 0) {
2427 /* completely empty module name should only happen in
2428 'from . import' (or '__import__("")')*/
2429 Py_INCREF(mod);
2430 *p_name = NULL;
2431 return mod;
2432 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002433
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002434 if (dot == NULL) {
2435 *p_name = NULL;
2436 len = strlen(name);
2437 }
2438 else {
2439 *p_name = dot+1;
2440 len = dot-name;
2441 }
2442 if (len == 0) {
2443 PyErr_SetString(PyExc_ValueError,
2444 "Empty module name");
2445 return NULL;
2446 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002447
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002448 p = buf + *p_buflen;
2449 if (p != buf)
2450 *p++ = '.';
2451 if (p+len-buf >= MAXPATHLEN) {
2452 PyErr_SetString(PyExc_ValueError,
2453 "Module name too long");
2454 return NULL;
2455 }
2456 strncpy(p, name, len);
2457 p[len] = '\0';
2458 *p_buflen = p+len-buf;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002459
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002460 result = import_submodule(mod, p, buf);
2461 if (result == Py_None && altmod != mod) {
2462 Py_DECREF(result);
2463 /* Here, altmod must be None and mod must not be None */
2464 result = import_submodule(altmod, p, p);
2465 if (result != NULL && result != Py_None) {
2466 if (mark_miss(buf) != 0) {
2467 Py_DECREF(result);
2468 return NULL;
2469 }
2470 strncpy(buf, name, len);
2471 buf[len] = '\0';
2472 *p_buflen = len;
2473 }
2474 }
2475 if (result == NULL)
2476 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002477
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002478 if (result == Py_None) {
2479 Py_DECREF(result);
2480 PyErr_Format(PyExc_ImportError,
2481 "No module named %.200s", name);
2482 return NULL;
2483 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002484
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002485 return result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002486}
2487
2488static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002489mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002490{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002491 PyObject *modules = PyImport_GetModuleDict();
2492 return PyDict_SetItemString(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002493}
2494
2495static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002496ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002497 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002498{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002499 int i;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002500
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002501 if (!PyObject_HasAttrString(mod, "__path__"))
2502 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002503
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002504 for (i = 0; ; i++) {
2505 PyObject *item = PySequence_GetItem(fromlist, i);
2506 int hasit;
2507 if (item == NULL) {
2508 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2509 PyErr_Clear();
2510 return 1;
2511 }
2512 return 0;
2513 }
2514 if (!PyString_Check(item)) {
2515 PyErr_SetString(PyExc_TypeError,
2516 "Item in ``from list'' not a string");
2517 Py_DECREF(item);
2518 return 0;
2519 }
2520 if (PyString_AS_STRING(item)[0] == '*') {
2521 PyObject *all;
2522 Py_DECREF(item);
2523 /* See if the package defines __all__ */
2524 if (recursive)
2525 continue; /* Avoid endless recursion */
2526 all = PyObject_GetAttrString(mod, "__all__");
2527 if (all == NULL)
2528 PyErr_Clear();
2529 else {
2530 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
2531 Py_DECREF(all);
2532 if (!ret)
2533 return 0;
2534 }
2535 continue;
2536 }
2537 hasit = PyObject_HasAttr(mod, item);
2538 if (!hasit) {
2539 char *subname = PyString_AS_STRING(item);
2540 PyObject *submod;
2541 char *p;
2542 if (buflen + strlen(subname) >= MAXPATHLEN) {
2543 PyErr_SetString(PyExc_ValueError,
2544 "Module name too long");
2545 Py_DECREF(item);
2546 return 0;
2547 }
2548 p = buf + buflen;
2549 *p++ = '.';
2550 strcpy(p, subname);
2551 submod = import_submodule(mod, subname, buf);
2552 Py_XDECREF(submod);
2553 if (submod == NULL) {
2554 Py_DECREF(item);
2555 return 0;
2556 }
2557 }
2558 Py_DECREF(item);
2559 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002560
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002561 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002562}
2563
Neil Schemenauer00b09662003-06-16 21:03:07 +00002564static int
2565add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002566 PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00002567{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002568 if (mod == Py_None)
2569 return 1;
2570 /* Irrespective of the success of this load, make a
2571 reference to it in the parent package module. A copy gets
2572 saved in the modules dictionary under the full name, so get a
2573 reference from there, if need be. (The exception is when the
2574 load failed with a SyntaxError -- then there's no trace in
2575 sys.modules. In that case, of course, do nothing extra.) */
2576 if (submod == NULL) {
2577 submod = PyDict_GetItemString(modules, fullname);
2578 if (submod == NULL)
2579 return 1;
2580 }
2581 if (PyModule_Check(mod)) {
2582 /* We can't use setattr here since it can give a
2583 * spurious warning if the submodule name shadows a
2584 * builtin name */
2585 PyObject *dict = PyModule_GetDict(mod);
2586 if (!dict)
2587 return 0;
2588 if (PyDict_SetItemString(dict, subname, submod) < 0)
2589 return 0;
2590 }
2591 else {
2592 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2593 return 0;
2594 }
2595 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00002596}
2597
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002598static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002599import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002600{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002601 PyObject *modules = PyImport_GetModuleDict();
2602 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002603
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002604 /* Require:
2605 if mod == None: subname == fullname
2606 else: mod.__name__ + "." + subname == fullname
2607 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002608
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002609 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
2610 Py_INCREF(m);
2611 }
2612 else {
2613 PyObject *path, *loader = NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002614 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002615 struct filedescr *fdp;
2616 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002617
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002618 if (mod == Py_None)
2619 path = NULL;
2620 else {
2621 path = PyObject_GetAttrString(mod, "__path__");
2622 if (path == NULL) {
2623 PyErr_Clear();
2624 Py_INCREF(Py_None);
2625 return Py_None;
2626 }
2627 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002628
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002629 buf = PyMem_MALLOC(MAXPATHLEN+1);
2630 if (buf == NULL) {
2631 return PyErr_NoMemory();
2632 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002633 buf[0] = '\0';
2634 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2635 &fp, &loader);
2636 Py_XDECREF(path);
2637 if (fdp == NULL) {
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002638 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002639 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2640 return NULL;
2641 PyErr_Clear();
2642 Py_INCREF(Py_None);
2643 return Py_None;
2644 }
2645 m = load_module(fullname, fp, buf, fdp->type, loader);
2646 Py_XDECREF(loader);
2647 if (fp)
2648 fclose(fp);
2649 if (!add_submodule(mod, m, fullname, subname, modules)) {
2650 Py_XDECREF(m);
2651 m = NULL;
2652 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002653 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002654 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002655
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002656 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002657}
2658
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002659
2660/* Re-import a module of any kind and return its module object, WITH
2661 INCREMENTED REFERENCE COUNT */
2662
Guido van Rossum79f25d91997-04-29 20:08:16 +00002663PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002664PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002665{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002666 PyInterpreterState *interp = PyThreadState_Get()->interp;
2667 PyObject *modules_reloading = interp->modules_reloading;
2668 PyObject *modules = PyImport_GetModuleDict();
2669 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
2670 char *name, *subname;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002671 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002672 struct filedescr *fdp;
2673 FILE *fp = NULL;
2674 PyObject *newm;
Brett Cannonb166afc2010-05-05 20:25:47 +00002675
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002676 if (modules_reloading == NULL) {
2677 Py_FatalError("PyImport_ReloadModule: "
2678 "no modules_reloading dictionary!");
2679 return NULL;
2680 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002681
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002682 if (m == NULL || !PyModule_Check(m)) {
2683 PyErr_SetString(PyExc_TypeError,
2684 "reload() argument must be module");
2685 return NULL;
2686 }
2687 name = PyModule_GetName(m);
2688 if (name == NULL)
2689 return NULL;
2690 if (m != PyDict_GetItemString(modules, name)) {
2691 PyErr_Format(PyExc_ImportError,
2692 "reload(): module %.200s not in sys.modules",
2693 name);
2694 return NULL;
2695 }
2696 existing_m = PyDict_GetItemString(modules_reloading, name);
2697 if (existing_m != NULL) {
2698 /* Due to a recursive reload, this module is already
2699 being reloaded. */
2700 Py_INCREF(existing_m);
2701 return existing_m;
2702 }
2703 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2704 return NULL;
Collin Winter276887b2007-03-12 16:11:39 +00002705
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002706 subname = strrchr(name, '.');
2707 if (subname == NULL)
2708 subname = name;
2709 else {
2710 PyObject *parentname, *parent;
2711 parentname = PyString_FromStringAndSize(name, (subname-name));
2712 if (parentname == NULL) {
2713 imp_modules_reloading_clear();
2714 return NULL;
2715 }
2716 parent = PyDict_GetItem(modules, parentname);
2717 if (parent == NULL) {
2718 PyErr_Format(PyExc_ImportError,
2719 "reload(): parent %.200s not in sys.modules",
2720 PyString_AS_STRING(parentname));
2721 Py_DECREF(parentname);
2722 imp_modules_reloading_clear();
2723 return NULL;
2724 }
2725 Py_DECREF(parentname);
2726 subname++;
2727 path = PyObject_GetAttrString(parent, "__path__");
2728 if (path == NULL)
2729 PyErr_Clear();
2730 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002731 buf = PyMem_MALLOC(MAXPATHLEN+1);
2732 if (buf == NULL) {
2733 Py_XDECREF(path);
2734 return PyErr_NoMemory();
2735 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002736 buf[0] = '\0';
2737 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
2738 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002739
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002740 if (fdp == NULL) {
2741 Py_XDECREF(loader);
2742 imp_modules_reloading_clear();
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002743 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002744 return NULL;
2745 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002746
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002747 newm = load_module(name, fp, buf, fdp->type, loader);
2748 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002749
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002750 if (fp)
2751 fclose(fp);
2752 if (newm == NULL) {
2753 /* load_module probably removed name from modules because of
2754 * the error. Put back the original module object. We're
2755 * going to return NULL in this case regardless of whether
2756 * replacing name succeeds, so the return value is ignored.
2757 */
2758 PyDict_SetItemString(modules, name, m);
2759 }
2760 imp_modules_reloading_clear();
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002761 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002762 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002763}
2764
2765
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002766/* Higher-level import emulator which emulates the "import" statement
2767 more accurately -- it invokes the __import__() function from the
2768 builtins of the current globals. This means that the import is
2769 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002770 environment, e.g. by "rexec".
2771 A dummy list ["__doc__"] is passed as the 4th argument so that
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002772 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00002773 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002774
2775PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002776PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002777{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002778 static PyObject *silly_list = NULL;
2779 static PyObject *builtins_str = NULL;
2780 static PyObject *import_str = NULL;
2781 PyObject *globals = NULL;
2782 PyObject *import = NULL;
2783 PyObject *builtins = NULL;
2784 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002785
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002786 /* Initialize constant string objects */
2787 if (silly_list == NULL) {
2788 import_str = PyString_InternFromString("__import__");
2789 if (import_str == NULL)
2790 return NULL;
2791 builtins_str = PyString_InternFromString("__builtins__");
2792 if (builtins_str == NULL)
2793 return NULL;
2794 silly_list = Py_BuildValue("[s]", "__doc__");
2795 if (silly_list == NULL)
2796 return NULL;
2797 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002798
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002799 /* Get the builtins from current globals */
2800 globals = PyEval_GetGlobals();
2801 if (globals != NULL) {
2802 Py_INCREF(globals);
2803 builtins = PyObject_GetItem(globals, builtins_str);
2804 if (builtins == NULL)
2805 goto err;
2806 }
2807 else {
2808 /* No globals -- use standard builtins, and fake globals */
2809 builtins = PyImport_ImportModuleLevel("__builtin__",
2810 NULL, NULL, NULL, 0);
2811 if (builtins == NULL)
2812 return NULL;
2813 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2814 if (globals == NULL)
2815 goto err;
2816 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002817
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002818 /* Get the __import__ function from the builtins */
2819 if (PyDict_Check(builtins)) {
2820 import = PyObject_GetItem(builtins, import_str);
2821 if (import == NULL)
2822 PyErr_SetObject(PyExc_KeyError, import_str);
2823 }
2824 else
2825 import = PyObject_GetAttr(builtins, import_str);
2826 if (import == NULL)
2827 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002828
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002829 /* Call the __import__ function with the proper argument list
2830 * Always use absolute import here. */
2831 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2832 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002833
2834 err:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002835 Py_XDECREF(globals);
2836 Py_XDECREF(builtins);
2837 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002838
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002839 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002840}
2841
2842
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002843/* Module 'imp' provides Python access to the primitives used for
2844 importing modules.
2845*/
2846
Guido van Rossum79f25d91997-04-29 20:08:16 +00002847static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002848imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002849{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002850 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002851
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002852 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2853 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2854 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2855 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002856
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002857 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002858}
2859
Guido van Rossum79f25d91997-04-29 20:08:16 +00002860static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002861imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002862{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002863 PyObject *list;
2864 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002865
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002866 list = PyList_New(0);
2867 if (list == NULL)
2868 return NULL;
2869 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2870 PyObject *item = Py_BuildValue("ssi",
2871 fdp->suffix, fdp->mode, fdp->type);
2872 if (item == NULL) {
2873 Py_DECREF(list);
2874 return NULL;
2875 }
2876 if (PyList_Append(list, item) < 0) {
2877 Py_DECREF(list);
2878 Py_DECREF(item);
2879 return NULL;
2880 }
2881 Py_DECREF(item);
2882 }
2883 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002884}
2885
Guido van Rossum79f25d91997-04-29 20:08:16 +00002886static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002887call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002888{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002889 extern int fclose(FILE *);
2890 PyObject *fob, *ret;
2891 struct filedescr *fdp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002892 char *pathname;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002893 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002894
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002895 pathname = PyMem_MALLOC(MAXPATHLEN+1);
2896 if (pathname == NULL) {
2897 return PyErr_NoMemory();
2898 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002899 pathname[0] = '\0';
2900 if (path == Py_None)
2901 path = NULL;
2902 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002903 if (fdp == NULL) {
2904 PyMem_FREE(pathname);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002905 return NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002906 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002907 if (fp != NULL) {
2908 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002909 if (fob == NULL) {
2910 PyMem_FREE(pathname);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002911 return NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002912 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002913 }
2914 else {
2915 fob = Py_None;
2916 Py_INCREF(fob);
2917 }
2918 ret = Py_BuildValue("Os(ssi)",
2919 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
2920 Py_DECREF(fob);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002921 PyMem_FREE(pathname);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002922 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002923}
2924
Guido van Rossum79f25d91997-04-29 20:08:16 +00002925static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002926imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002927{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002928 char *name;
2929 PyObject *path = NULL;
2930 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
2931 return NULL;
2932 return call_find_module(name, path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002933}
2934
2935static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002936imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002937{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002938 char *name;
2939 int ret;
2940 PyObject *m;
2941 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
2942 return NULL;
2943 ret = init_builtin(name);
2944 if (ret < 0)
2945 return NULL;
2946 if (ret == 0) {
2947 Py_INCREF(Py_None);
2948 return Py_None;
2949 }
2950 m = PyImport_AddModule(name);
2951 Py_XINCREF(m);
2952 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002953}
2954
Guido van Rossum79f25d91997-04-29 20:08:16 +00002955static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002956imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002957{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002958 char *name;
2959 int ret;
2960 PyObject *m;
2961 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
2962 return NULL;
2963 ret = PyImport_ImportFrozenModule(name);
2964 if (ret < 0)
2965 return NULL;
2966 if (ret == 0) {
2967 Py_INCREF(Py_None);
2968 return Py_None;
2969 }
2970 m = PyImport_AddModule(name);
2971 Py_XINCREF(m);
2972 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002973}
2974
Guido van Rossum79f25d91997-04-29 20:08:16 +00002975static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002976imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002977{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002978 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002979
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002980 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
2981 return NULL;
2982 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002983}
2984
Guido van Rossum79f25d91997-04-29 20:08:16 +00002985static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002986imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002987{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002988 char *name;
2989 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
2990 return NULL;
2991 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002992}
2993
Guido van Rossum79f25d91997-04-29 20:08:16 +00002994static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002995imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002996{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002997 char *name;
2998 struct _frozen *p;
2999 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
3000 return NULL;
3001 p = find_frozen(name);
3002 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003003}
3004
3005static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003006get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003007{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003008 FILE *fp;
3009 if (fob == NULL) {
3010 if (mode[0] == 'U')
3011 mode = "r" PY_STDIOTEXTMODE;
3012 fp = fopen(pathname, mode);
3013 if (fp == NULL)
3014 PyErr_SetFromErrno(PyExc_IOError);
3015 }
3016 else {
3017 fp = PyFile_AsFile(fob);
3018 if (fp == NULL)
3019 PyErr_SetString(PyExc_ValueError,
3020 "bad/closed file object");
3021 }
3022 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003023}
3024
Guido van Rossum79f25d91997-04-29 20:08:16 +00003025static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003026imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003027{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003028 char *name;
3029 char *pathname;
3030 PyObject *fob = NULL;
3031 PyObject *m;
3032 FILE *fp;
3033 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
3034 &PyFile_Type, &fob))
3035 return NULL;
3036 fp = get_file(pathname, fob, "rb");
3037 if (fp == NULL)
3038 return NULL;
3039 m = load_compiled_module(name, pathname, fp);
3040 if (fob == NULL)
3041 fclose(fp);
3042 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003043}
3044
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003045#ifdef HAVE_DYNAMIC_LOADING
3046
Guido van Rossum79f25d91997-04-29 20:08:16 +00003047static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003048imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003049{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003050 char *name;
3051 char *pathname;
3052 PyObject *fob = NULL;
3053 PyObject *m;
3054 FILE *fp = NULL;
3055 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
3056 &PyFile_Type, &fob))
3057 return NULL;
3058 if (fob) {
3059 fp = get_file(pathname, fob, "r");
3060 if (fp == NULL)
3061 return NULL;
3062 }
3063 m = _PyImport_LoadDynamicModule(name, pathname, fp);
3064 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003065}
3066
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003067#endif /* HAVE_DYNAMIC_LOADING */
3068
Guido van Rossum79f25d91997-04-29 20:08:16 +00003069static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003070imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003071{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003072 char *name;
3073 char *pathname;
3074 PyObject *fob = NULL;
3075 PyObject *m;
3076 FILE *fp;
3077 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
3078 &PyFile_Type, &fob))
3079 return NULL;
3080 fp = get_file(pathname, fob, "r");
3081 if (fp == NULL)
3082 return NULL;
3083 m = load_source_module(name, pathname, fp);
3084 if (fob == NULL)
3085 fclose(fp);
3086 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003087}
3088
Guido van Rossum79f25d91997-04-29 20:08:16 +00003089static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003090imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003091{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003092 char *name;
3093 PyObject *fob;
3094 char *pathname;
3095 char *suffix; /* Unused */
3096 char *mode;
3097 int type;
3098 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003099
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003100 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
3101 &name, &fob, &pathname,
3102 &suffix, &mode, &type))
3103 return NULL;
3104 if (*mode) {
3105 /* Mode must start with 'r' or 'U' and must not contain '+'.
3106 Implicit in this test is the assumption that the mode
3107 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003108
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003109 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3110 PyErr_Format(PyExc_ValueError,
3111 "invalid file open mode %.200s", mode);
3112 return NULL;
3113 }
3114 }
3115 if (fob == Py_None)
3116 fp = NULL;
3117 else {
3118 if (!PyFile_Check(fob)) {
3119 PyErr_SetString(PyExc_ValueError,
3120 "load_module arg#2 should be a file or None");
3121 return NULL;
3122 }
3123 fp = get_file(pathname, fob, mode);
3124 if (fp == NULL)
3125 return NULL;
3126 }
3127 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003128}
3129
3130static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003131imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003132{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003133 char *name;
3134 char *pathname;
3135 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
3136 return NULL;
3137 return load_package(name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003138}
3139
3140static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003141imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003142{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003143 char *name;
3144 if (!PyArg_ParseTuple(args, "s:new_module", &name))
3145 return NULL;
3146 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003147}
3148
Brett Cannon3aa2a492008-08-06 22:28:09 +00003149static PyObject *
3150imp_reload(PyObject *self, PyObject *v)
3151{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003152 return PyImport_ReloadModule(v);
Brett Cannon3aa2a492008-08-06 22:28:09 +00003153}
3154
3155
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003156/* Doc strings */
3157
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003158PyDoc_STRVAR(doc_imp,
3159"This module provides the components needed to build your own\n\
3160__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003161
Brett Cannon3aa2a492008-08-06 22:28:09 +00003162PyDoc_STRVAR(doc_reload,
3163"reload(module) -> module\n\
3164\n\
3165Reload the module. The module must have been successfully imported before.");
3166
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003167PyDoc_STRVAR(doc_find_module,
3168"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003169Search for a module. If path is omitted or None, search for a\n\
3170built-in, frozen or special module and continue search in sys.path.\n\
3171The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003172package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003173
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003174PyDoc_STRVAR(doc_load_module,
3175"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003176Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003177The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003178
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003179PyDoc_STRVAR(doc_get_magic,
3180"get_magic() -> string\n\
3181Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003182
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003183PyDoc_STRVAR(doc_get_suffixes,
3184"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003185Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003186that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003187
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003188PyDoc_STRVAR(doc_new_module,
3189"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003190Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003191The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003192
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003193PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003194"lock_held() -> boolean\n\
3195Return True if the import lock is currently held, else False.\n\
3196On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003197
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003198PyDoc_STRVAR(doc_acquire_lock,
3199"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003200Acquires the interpreter's import lock for the current thread.\n\
3201This lock should be used by import hooks to ensure thread-safety\n\
3202when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003203On platforms without threads, this function does nothing.");
3204
3205PyDoc_STRVAR(doc_release_lock,
3206"release_lock() -> None\n\
3207Release the interpreter's import lock.\n\
3208On platforms without threads, this function does nothing.");
3209
Guido van Rossum79f25d91997-04-29 20:08:16 +00003210static PyMethodDef imp_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003211 {"reload", imp_reload, METH_O, doc_reload},
3212 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3213 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3214 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3215 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3216 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3217 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3218 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3219 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
3220 /* The rest are obsolete */
3221 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3222 {"init_builtin", imp_init_builtin, METH_VARARGS},
3223 {"init_frozen", imp_init_frozen, METH_VARARGS},
3224 {"is_builtin", imp_is_builtin, METH_VARARGS},
3225 {"is_frozen", imp_is_frozen, METH_VARARGS},
3226 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003227#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003228 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003229#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003230 {"load_package", imp_load_package, METH_VARARGS},
3231 {"load_source", imp_load_source, METH_VARARGS},
3232 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003233};
3234
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003235static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003236setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003237{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003238 PyObject *v;
3239 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003240
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003241 v = PyInt_FromLong((long)value);
3242 err = PyDict_SetItemString(d, name, v);
3243 Py_XDECREF(v);
3244 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003245}
3246
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003247typedef struct {
3248 PyObject_HEAD
3249} NullImporter;
3250
3251static int
3252NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3253{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003254 char *path;
3255 Py_ssize_t pathlen;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003256
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003257 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3258 return -1;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003259
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003260 if (!PyArg_ParseTuple(args, "s:NullImporter",
3261 &path))
3262 return -1;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003263
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003264 pathlen = strlen(path);
3265 if (pathlen == 0) {
3266 PyErr_SetString(PyExc_ImportError, "empty pathname");
3267 return -1;
3268 } else {
Jason R. Coombs0737b722012-01-13 17:59:05 -05003269 if(isdir(path)) {
3270 PyErr_SetString(PyExc_ImportError,
3271 "existing directory");
3272 return -1;
3273 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003274 }
3275 return 0;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003276}
3277
3278static PyObject *
3279NullImporter_find_module(NullImporter *self, PyObject *args)
3280{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003281 Py_RETURN_NONE;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003282}
3283
3284static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003285 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3286 "Always return None"
3287 },
3288 {NULL} /* Sentinel */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003289};
3290
3291
Nick Coghlan327a39b2007-11-18 11:56:28 +00003292PyTypeObject PyNullImporter_Type = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003293 PyVarObject_HEAD_INIT(NULL, 0)
3294 "imp.NullImporter", /*tp_name*/
3295 sizeof(NullImporter), /*tp_basicsize*/
3296 0, /*tp_itemsize*/
3297 0, /*tp_dealloc*/
3298 0, /*tp_print*/
3299 0, /*tp_getattr*/
3300 0, /*tp_setattr*/
3301 0, /*tp_compare*/
3302 0, /*tp_repr*/
3303 0, /*tp_as_number*/
3304 0, /*tp_as_sequence*/
3305 0, /*tp_as_mapping*/
3306 0, /*tp_hash */
3307 0, /*tp_call*/
3308 0, /*tp_str*/
3309 0, /*tp_getattro*/
3310 0, /*tp_setattro*/
3311 0, /*tp_as_buffer*/
3312 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3313 "Null importer object", /* tp_doc */
3314 0, /* tp_traverse */
3315 0, /* tp_clear */
3316 0, /* tp_richcompare */
3317 0, /* tp_weaklistoffset */
3318 0, /* tp_iter */
3319 0, /* tp_iternext */
3320 NullImporter_methods, /* tp_methods */
3321 0, /* tp_members */
3322 0, /* tp_getset */
3323 0, /* tp_base */
3324 0, /* tp_dict */
3325 0, /* tp_descr_get */
3326 0, /* tp_descr_set */
3327 0, /* tp_dictoffset */
3328 (initproc)NullImporter_init, /* tp_init */
3329 0, /* tp_alloc */
3330 PyType_GenericNew /* tp_new */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003331};
3332
3333
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003334PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003335initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003336{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003337 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003338
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003339 if (PyType_Ready(&PyNullImporter_Type) < 0)
3340 goto failure;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003341
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003342 m = Py_InitModule4("imp", imp_methods, doc_imp,
3343 NULL, PYTHON_API_VERSION);
3344 if (m == NULL)
3345 goto failure;
3346 d = PyModule_GetDict(m);
3347 if (d == NULL)
3348 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003349
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003350 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3351 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3352 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3353 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3354 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3355 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3356 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3357 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
3358 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
3359 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003360
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003361 Py_INCREF(&PyNullImporter_Type);
3362 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003363 failure:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003364 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003365}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003366
3367
Guido van Rossumb18618d2000-05-03 23:44:39 +00003368/* API for embedding applications that want to add their own entries
3369 to the table of built-in modules. This should normally be called
3370 *before* Py_Initialize(). When the table resize fails, -1 is
3371 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003372
3373 After a similar function by Just van Rossum. */
3374
3375int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003376PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003377{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003378 static struct _inittab *our_copy = NULL;
3379 struct _inittab *p;
3380 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003381
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003382 /* Count the number of entries in both tables */
3383 for (n = 0; newtab[n].name != NULL; n++)
3384 ;
3385 if (n == 0)
3386 return 0; /* Nothing to do */
3387 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3388 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003389
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003390 /* Allocate new memory for the combined table */
3391 p = our_copy;
3392 PyMem_RESIZE(p, struct _inittab, i+n+1);
3393 if (p == NULL)
3394 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003395
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003396 /* Copy the tables into the new memory */
3397 if (our_copy != PyImport_Inittab)
3398 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3399 PyImport_Inittab = our_copy = p;
3400 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003401
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003402 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003403}
3404
3405/* Shorthand to add a single entry given a name and a function */
3406
3407int
Brett Cannonc4f90eb2009-04-02 03:17:39 +00003408PyImport_AppendInittab(const char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003409{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003410 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003411
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003412 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003413
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003414 newtab[0].name = (char *)name;
3415 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003416
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003417 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003418}
Anthony Baxterac6bd462006-04-13 02:06:09 +00003419
3420#ifdef __cplusplus
3421}
3422#endif