blob: 4d8a610c3dd2733ab62d3f57bcb038af3fb95f56 [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
118int 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
Jason R. Coombs925ff742012-01-13 17:12:25 -0500131int isdir(char *path) {
132 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;
1001 PyCodeObject *co;
1002 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:
1057 PyMem_FREE(buf);
1058 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001059}
1060
1061
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001062/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001063static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1064static struct filedescr *find_module(char *, char *, PyObject *,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001065 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001066static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001067
1068/* Load a package and return its module object WITH INCREMENTED
1069 REFERENCE COUNT */
1070
1071static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001072load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001073{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001074 PyObject *m, *d;
1075 PyObject *file = NULL;
1076 PyObject *path = NULL;
1077 int err;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001078 char *buf = NULL;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001079 FILE *fp = NULL;
1080 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001081
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001082 m = PyImport_AddModule(name);
1083 if (m == NULL)
1084 return NULL;
1085 if (Py_VerboseFlag)
1086 PySys_WriteStderr("import %s # directory %s\n",
1087 name, pathname);
1088 d = PyModule_GetDict(m);
1089 file = PyString_FromString(pathname);
1090 if (file == NULL)
1091 goto error;
1092 path = Py_BuildValue("[O]", file);
1093 if (path == NULL)
1094 goto error;
1095 err = PyDict_SetItemString(d, "__file__", file);
1096 if (err == 0)
1097 err = PyDict_SetItemString(d, "__path__", path);
1098 if (err != 0)
1099 goto error;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001100 buf = PyMem_MALLOC(MAXPATHLEN+1);
1101 if (buf == NULL) {
1102 PyErr_NoMemory();
1103 goto error;
1104 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001105 buf[0] = '\0';
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001106 fdp = find_module(name, "__init__", path, buf, MAXPATHLEN+1, &fp, NULL);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001107 if (fdp == NULL) {
1108 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1109 PyErr_Clear();
1110 Py_INCREF(m);
1111 }
1112 else
1113 m = NULL;
1114 goto cleanup;
1115 }
1116 m = load_module(name, fp, buf, fdp->type, NULL);
1117 if (fp != NULL)
1118 fclose(fp);
1119 goto cleanup;
Tim Peters1cd70172004-08-02 03:52:12 +00001120
1121 error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001122 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001123 cleanup:
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001124 if (buf)
1125 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001126 Py_XDECREF(path);
1127 Py_XDECREF(file);
1128 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001129}
1130
1131
1132/* Helper to test for built-in module */
1133
1134static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001135is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001136{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001137 int i;
1138 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1139 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1140 if (PyImport_Inittab[i].initfunc == NULL)
1141 return -1;
1142 else
1143 return 1;
1144 }
1145 }
1146 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001147}
1148
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001149
Just van Rossum52e14d62002-12-30 22:08:05 +00001150/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1151 possibly by fetching it from the path_importer_cache dict. If it
Brett Cannon94b69f62006-09-28 22:10:14 +00001152 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001153 that can handle the path item. Return None if no hook could;
1154 this tells our caller it should fall back to the builtin
1155 import mechanism. Cache the result in path_importer_cache.
1156 Returns a borrowed reference. */
1157
1158static PyObject *
1159get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001160 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001161{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001162 PyObject *importer;
1163 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001164
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001165 /* These conditions are the caller's responsibility: */
1166 assert(PyList_Check(path_hooks));
1167 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001168
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001169 nhooks = PyList_Size(path_hooks);
1170 if (nhooks < 0)
1171 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001172
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001173 importer = PyDict_GetItem(path_importer_cache, p);
1174 if (importer != NULL)
1175 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001176
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001177 /* set path_importer_cache[p] to None to avoid recursion */
1178 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1179 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001180
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001181 for (j = 0; j < nhooks; j++) {
1182 PyObject *hook = PyList_GetItem(path_hooks, j);
1183 if (hook == NULL)
1184 return NULL;
1185 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1186 if (importer != NULL)
1187 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001188
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001189 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1190 return NULL;
1191 }
1192 PyErr_Clear();
1193 }
1194 if (importer == NULL) {
1195 importer = PyObject_CallFunctionObjArgs(
1196 (PyObject *)&PyNullImporter_Type, p, NULL
1197 );
1198 if (importer == NULL) {
1199 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1200 PyErr_Clear();
1201 return Py_None;
1202 }
1203 }
1204 }
1205 if (importer != NULL) {
1206 int err = PyDict_SetItem(path_importer_cache, p, importer);
1207 Py_DECREF(importer);
1208 if (err != 0)
1209 return NULL;
1210 }
1211 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001212}
1213
Nick Coghlan327a39b2007-11-18 11:56:28 +00001214PyAPI_FUNC(PyObject *)
1215PyImport_GetImporter(PyObject *path) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001216 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Nick Coghlan327a39b2007-11-18 11:56:28 +00001217
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001218 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1219 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1220 importer = get_path_importer(path_importer_cache,
1221 path_hooks, path);
1222 }
1223 }
1224 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1225 return importer;
Nick Coghlan327a39b2007-11-18 11:56:28 +00001226}
1227
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001228/* Search the path (default sys.path) for a module. Return the
1229 corresponding filedescr struct, and (via return arguments) the
1230 pathname and an open file. Return NULL if the module is not found. */
1231
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001232#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001233extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001234 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001235#endif
1236
Martin v. Löwis18e16552006-02-15 17:27:45 +00001237static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001238static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001239static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001240
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001241static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001242find_module(char *fullname, char *subname, PyObject *path, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001243 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001244{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001245 Py_ssize_t i, npath;
1246 size_t len, namelen;
1247 struct filedescr *fdp = NULL;
1248 char *filemode;
1249 FILE *fp = NULL;
1250 PyObject *path_hooks, *path_importer_cache;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001251 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1252 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1253 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001254 char *name;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001255#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001256 size_t saved_len;
1257 size_t saved_namelen;
1258 char *saved_buf = NULL;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001259#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001260 if (p_loader != NULL)
1261 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001262
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001263 if (strlen(subname) > MAXPATHLEN) {
1264 PyErr_SetString(PyExc_OverflowError,
1265 "module name is too long");
1266 return NULL;
1267 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001268 name = PyMem_MALLOC(MAXPATHLEN+1);
1269 if (name == NULL) {
1270 return PyErr_NoMemory();
1271 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001272 strcpy(name, subname);
Just van Rossum52e14d62002-12-30 22:08:05 +00001273
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001274 /* sys.meta_path import hook */
1275 if (p_loader != NULL) {
1276 PyObject *meta_path;
Just van Rossum52e14d62002-12-30 22:08:05 +00001277
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001278 meta_path = PySys_GetObject("meta_path");
1279 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001280 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001281 "sys.meta_path must be a list of "
1282 "import hooks");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001283 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001284 }
1285 Py_INCREF(meta_path); /* zap guard */
1286 npath = PyList_Size(meta_path);
1287 for (i = 0; i < npath; i++) {
1288 PyObject *loader;
1289 PyObject *hook = PyList_GetItem(meta_path, i);
1290 loader = PyObject_CallMethod(hook, "find_module",
1291 "sO", fullname,
1292 path != NULL ?
1293 path : Py_None);
1294 if (loader == NULL) {
1295 Py_DECREF(meta_path);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001296 goto error_exit; /* true error */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001297 }
1298 if (loader != Py_None) {
1299 /* a loader was found */
1300 *p_loader = loader;
1301 Py_DECREF(meta_path);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001302 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001303 return &importhookdescr;
1304 }
1305 Py_DECREF(loader);
1306 }
1307 Py_DECREF(meta_path);
1308 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001309
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001310 if (path != NULL && PyString_Check(path)) {
1311 /* The only type of submodule allowed inside a "frozen"
1312 package are other frozen modules or packages. */
1313 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1314 PyErr_SetString(PyExc_ImportError,
1315 "full frozen module name too long");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001316 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001317 }
1318 strcpy(buf, PyString_AsString(path));
1319 strcat(buf, ".");
1320 strcat(buf, name);
1321 strcpy(name, buf);
1322 if (find_frozen(name) != NULL) {
1323 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001324 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001325 return &fd_frozen;
1326 }
1327 PyErr_Format(PyExc_ImportError,
1328 "No frozen submodule named %.200s", name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001329 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001330 }
1331 if (path == NULL) {
1332 if (is_builtin(name)) {
1333 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001334 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001335 return &fd_builtin;
1336 }
1337 if ((find_frozen(name)) != NULL) {
1338 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001339 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001340 return &fd_frozen;
1341 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001342
Guido van Rossumac279101996-08-22 23:10:58 +00001343#ifdef MS_COREDLL
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001344 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1345 if (fp != NULL) {
1346 *p_fp = fp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001347 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001348 return fdp;
1349 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001350#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001351 path = PySys_GetObject("path");
1352 }
1353 if (path == NULL || !PyList_Check(path)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001354 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001355 "sys.path must be a list of directory names");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001356 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001357 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001358
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001359 path_hooks = PySys_GetObject("path_hooks");
1360 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001361 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001362 "sys.path_hooks must be a list of "
1363 "import hooks");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001364 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001365 }
1366 path_importer_cache = PySys_GetObject("path_importer_cache");
1367 if (path_importer_cache == NULL ||
1368 !PyDict_Check(path_importer_cache)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001369 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001370 "sys.path_importer_cache must be a dict");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001371 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001372 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001373
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001374 npath = PyList_Size(path);
1375 namelen = strlen(name);
1376 for (i = 0; i < npath; i++) {
1377 PyObject *copy = NULL;
1378 PyObject *v = PyList_GetItem(path, i);
1379 if (!v)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001380 goto error_exit;
Walter Dörwald3430d702002-06-17 10:43:59 +00001381#ifdef Py_USING_UNICODE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001382 if (PyUnicode_Check(v)) {
1383 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1384 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1385 if (copy == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001386 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001387 v = copy;
1388 }
1389 else
Walter Dörwald3430d702002-06-17 10:43:59 +00001390#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001391 if (!PyString_Check(v))
1392 continue;
1393 len = PyString_GET_SIZE(v);
1394 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1395 Py_XDECREF(copy);
1396 continue; /* Too long */
1397 }
1398 strcpy(buf, PyString_AS_STRING(v));
1399 if (strlen(buf) != len) {
1400 Py_XDECREF(copy);
1401 continue; /* v contains '\0' */
1402 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001403
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001404 /* sys.path_hooks import hook */
1405 if (p_loader != NULL) {
1406 PyObject *importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001407
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001408 importer = get_path_importer(path_importer_cache,
1409 path_hooks, v);
1410 if (importer == NULL) {
1411 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001412 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001413 }
1414 /* Note: importer is a borrowed reference */
1415 if (importer != Py_None) {
1416 PyObject *loader;
1417 loader = PyObject_CallMethod(importer,
1418 "find_module",
1419 "s", fullname);
1420 Py_XDECREF(copy);
1421 if (loader == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001422 goto error_exit; /* error */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001423 if (loader != Py_None) {
1424 /* a loader was found */
1425 *p_loader = loader;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001426 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001427 return &importhookdescr;
1428 }
1429 Py_DECREF(loader);
1430 continue;
1431 }
1432 }
1433 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001434
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001435 if (len > 0 && buf[len-1] != SEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001436#ifdef ALTSEP
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001437 && buf[len-1] != ALTSEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001438#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001439 )
1440 buf[len++] = SEP;
1441 strcpy(buf+len, name);
1442 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001443
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001444 /* Check for package import (buf holds a directory name,
1445 and there's an __init__ module in that directory */
Jason R. Coombs925ff742012-01-13 17:12:25 -05001446 if (isdir(buf) && /* it's an existing directory */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001447 case_ok(buf, len, namelen, name)) { /* case matches */
1448 if (find_init_module(buf)) { /* and has __init__.py */
1449 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001450 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001451 return &fd_package;
1452 }
1453 else {
1454 char warnstr[MAXPATHLEN+80];
1455 sprintf(warnstr, "Not importing directory "
1456 "'%.*s': missing __init__.py",
1457 MAXPATHLEN, buf);
1458 if (PyErr_Warn(PyExc_ImportWarning,
1459 warnstr)) {
1460 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001461 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001462 }
1463 }
1464 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001465#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001466 /* take a snapshot of the module spec for restoration
1467 * after the 8 character DLL hackery
1468 */
1469 saved_buf = strdup(buf);
1470 saved_len = len;
1471 saved_namelen = namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001472#endif /* PYOS_OS2 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001473 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Georg Brandladd36e52007-08-23 18:08:06 +00001474#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001475 /* OS/2 limits DLLs to 8 character names (w/o
1476 extension)
1477 * so if the name is longer than that and its a
1478 * dynamically loaded module we're going to try,
1479 * truncate the name before trying
1480 */
1481 if (strlen(subname) > 8) {
1482 /* is this an attempt to load a C extension? */
1483 const struct filedescr *scan;
1484 scan = _PyImport_DynLoadFiletab;
1485 while (scan->suffix != NULL) {
1486 if (!strcmp(scan->suffix, fdp->suffix))
1487 break;
1488 else
1489 scan++;
1490 }
1491 if (scan->suffix != NULL) {
1492 /* yes, so truncate the name */
1493 namelen = 8;
1494 len -= strlen(subname) - namelen;
1495 buf[len] = '\0';
1496 }
1497 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001498#endif /* PYOS_OS2 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001499 strcpy(buf+len, fdp->suffix);
1500 if (Py_VerboseFlag > 1)
1501 PySys_WriteStderr("# trying %s\n", buf);
1502 filemode = fdp->mode;
1503 if (filemode[0] == 'U')
1504 filemode = "r" PY_STDIOTEXTMODE;
1505 fp = fopen(buf, filemode);
1506 if (fp != NULL) {
1507 if (case_ok(buf, len, namelen, name))
1508 break;
1509 else { /* continue search */
1510 fclose(fp);
1511 fp = NULL;
1512 }
1513 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001514#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001515 /* restore the saved snapshot */
1516 strcpy(buf, saved_buf);
1517 len = saved_len;
1518 namelen = saved_namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001519#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001520 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001521#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001522 /* don't need/want the module name snapshot anymore */
1523 if (saved_buf)
1524 {
1525 free(saved_buf);
1526 saved_buf = NULL;
1527 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001528#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001529 Py_XDECREF(copy);
1530 if (fp != NULL)
1531 break;
1532 }
1533 if (fp == NULL) {
1534 PyErr_Format(PyExc_ImportError,
1535 "No module named %.200s", name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001536 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001537 }
1538 *p_fp = fp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001539 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001540 return fdp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001541
1542error_exit:
1543 PyMem_FREE(name);
1544 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001545}
1546
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001547/* Helpers for main.c
1548 * Find the source file corresponding to a named module
1549 */
1550struct filedescr *
1551_PyImport_FindModule(const char *name, PyObject *path, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001552 size_t buflen, FILE **p_fp, PyObject **p_loader)
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001553{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001554 return find_module((char *) name, (char *) name, path,
1555 buf, buflen, p_fp, p_loader);
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001556}
1557
1558PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1559{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001560 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001561}
1562
Martin v. Löwis18e16552006-02-15 17:27:45 +00001563/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001564 * The arguments here are tricky, best shown by example:
1565 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1566 * ^ ^ ^ ^
1567 * |--------------------- buf ---------------------|
1568 * |------------------- len ------------------|
1569 * |------ name -------|
1570 * |----- namelen -----|
1571 * buf is the full path, but len only counts up to (& exclusive of) the
1572 * extension. name is the module name, also exclusive of extension.
1573 *
1574 * We've already done a successful stat() or fopen() on buf, so know that
1575 * there's some match, possibly case-insensitive.
1576 *
Tim Peters50d8d372001-02-28 05:34:27 +00001577 * case_ok() is to return 1 if there's a case-sensitive match for
1578 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1579 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001580 *
Tim Peters50d8d372001-02-28 05:34:27 +00001581 * case_ok() is used to implement case-sensitive import semantics even
1582 * on platforms with case-insensitive filesystems. It's trivial to implement
1583 * for case-sensitive filesystems. It's pretty much a cross-platform
1584 * nightmare for systems with case-insensitive filesystems.
1585 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001586
Tim Peters50d8d372001-02-28 05:34:27 +00001587/* First we may need a pile of platform-specific header files; the sequence
1588 * of #if's here should match the sequence in the body of case_ok().
1589 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001590#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001591#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001592
Tim Peters50d8d372001-02-28 05:34:27 +00001593#elif defined(DJGPP)
1594#include <dir.h>
1595
Jason Tishler7961aa62005-05-20 00:56:54 +00001596#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001597#include <sys/types.h>
1598#include <dirent.h>
1599
Andrew MacIntyred9400542002-02-26 11:41:34 +00001600#elif defined(PYOS_OS2)
1601#define INCL_DOS
1602#define INCL_DOSERRORS
1603#define INCL_NOPMAPI
1604#include <os2.h>
1605
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001606#elif defined(RISCOS)
1607#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001608#endif
1609
Guido van Rossum0980bd91998-02-13 17:18:36 +00001610static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001611case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001612{
Tim Peters50d8d372001-02-28 05:34:27 +00001613/* Pick a platform-specific implementation; the sequence of #if's here should
1614 * match the sequence just above.
1615 */
1616
Jason Tishler7961aa62005-05-20 00:56:54 +00001617/* MS_WINDOWS */
1618#if defined(MS_WINDOWS)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001619 WIN32_FIND_DATA data;
1620 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001621
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001622 if (Py_GETENV("PYTHONCASEOK") != NULL)
1623 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001624
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001625 h = FindFirstFile(buf, &data);
1626 if (h == INVALID_HANDLE_VALUE) {
1627 PyErr_Format(PyExc_NameError,
1628 "Can't find file for module %.100s\n(filename %.300s)",
1629 name, buf);
1630 return 0;
1631 }
1632 FindClose(h);
1633 return strncmp(data.cFileName, name, namelen) == 0;
Tim Peters50d8d372001-02-28 05:34:27 +00001634
1635/* DJGPP */
1636#elif defined(DJGPP)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001637 struct ffblk ffblk;
1638 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00001639
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001640 if (Py_GETENV("PYTHONCASEOK") != NULL)
1641 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001642
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001643 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1644 if (done) {
1645 PyErr_Format(PyExc_NameError,
1646 "Can't find file for module %.100s\n(filename %.300s)",
1647 name, buf);
1648 return 0;
1649 }
1650 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001651
Jason Tishler7961aa62005-05-20 00:56:54 +00001652/* new-fangled macintosh (macosx) or Cygwin */
1653#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001654 DIR *dirp;
1655 struct dirent *dp;
1656 char dirname[MAXPATHLEN + 1];
1657 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001658
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001659 if (Py_GETENV("PYTHONCASEOK") != NULL)
1660 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001661
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001662 /* Copy the dir component into dirname; substitute "." if empty */
1663 if (dirlen <= 0) {
1664 dirname[0] = '.';
1665 dirname[1] = '\0';
1666 }
1667 else {
1668 assert(dirlen <= MAXPATHLEN);
1669 memcpy(dirname, buf, dirlen);
1670 dirname[dirlen] = '\0';
1671 }
1672 /* Open the directory and search the entries for an exact match. */
1673 dirp = opendir(dirname);
1674 if (dirp) {
1675 char *nameWithExt = buf + len - namelen;
1676 while ((dp = readdir(dirp)) != NULL) {
1677 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001678#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001679 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001680#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001681 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001682#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001683 if (thislen >= namelen &&
1684 strcmp(dp->d_name, nameWithExt) == 0) {
1685 (void)closedir(dirp);
1686 return 1; /* Found */
1687 }
1688 }
1689 (void)closedir(dirp);
1690 }
1691 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001692
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001693/* RISC OS */
1694#elif defined(RISCOS)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001695 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1696 char buf2[MAXPATHLEN+2];
1697 char *nameWithExt = buf+len-namelen;
1698 int canonlen;
1699 os_error *e;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001700
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001701 if (Py_GETENV("PYTHONCASEOK") != NULL)
1702 return 1;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001703
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001704 /* workaround:
1705 append wildcard, otherwise case of filename wouldn't be touched */
1706 strcpy(buf2, buf);
1707 strcat(buf2, "*");
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001708
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001709 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1710 canonlen = MAXPATHLEN+1-canonlen;
1711 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1712 return 0;
1713 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1714 return 1; /* match */
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001715
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001716 return 0;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001717
Andrew MacIntyred9400542002-02-26 11:41:34 +00001718/* OS/2 */
1719#elif defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001720 HDIR hdir = 1;
1721 ULONG srchcnt = 1;
1722 FILEFINDBUF3 ffbuf;
1723 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001724
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001725 if (Py_GETENV("PYTHONCASEOK") != NULL)
1726 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001727
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001728 rc = DosFindFirst(buf,
1729 &hdir,
1730 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1731 &ffbuf, sizeof(ffbuf),
1732 &srchcnt,
1733 FIL_STANDARD);
1734 if (rc != NO_ERROR)
1735 return 0;
1736 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001737
Tim Peters50d8d372001-02-28 05:34:27 +00001738/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1739#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001740 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001741
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001742#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001743}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001744
Guido van Rossum0980bd91998-02-13 17:18:36 +00001745
Guido van Rossum197346f1997-10-31 18:38:52 +00001746#ifdef HAVE_STAT
1747/* Helper to look for __init__.py or __init__.py[co] in potential package */
1748static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001749find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001750{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001751 const size_t save_len = strlen(buf);
1752 size_t i = save_len;
1753 char *pname; /* pointer to start of __init__ */
1754 struct stat statbuf;
Guido van Rossum197346f1997-10-31 18:38:52 +00001755
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001756/* For calling case_ok(buf, len, namelen, name):
1757 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1758 * ^ ^ ^ ^
1759 * |--------------------- buf ---------------------|
1760 * |------------------- len ------------------|
1761 * |------ name -------|
1762 * |----- namelen -----|
Tim Peters0f9431f2001-07-05 03:47:53 +00001763 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001764 if (save_len + 13 >= MAXPATHLEN)
1765 return 0;
1766 buf[i++] = SEP;
1767 pname = buf + i;
1768 strcpy(pname, "__init__.py");
1769 if (stat(buf, &statbuf) == 0) {
1770 if (case_ok(buf,
1771 save_len + 9, /* len("/__init__") */
1772 8, /* len("__init__") */
1773 pname)) {
1774 buf[save_len] = '\0';
1775 return 1;
1776 }
1777 }
1778 i += strlen(pname);
1779 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
1780 if (stat(buf, &statbuf) == 0) {
1781 if (case_ok(buf,
1782 save_len + 9, /* len("/__init__") */
1783 8, /* len("__init__") */
1784 pname)) {
1785 buf[save_len] = '\0';
1786 return 1;
1787 }
1788 }
1789 buf[save_len] = '\0';
1790 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00001791}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001792
1793#else
1794
1795#ifdef RISCOS
1796static int
1797find_init_module(buf)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001798 char *buf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001799{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001800 int save_len = strlen(buf);
1801 int i = save_len;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001802
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001803 if (save_len + 13 >= MAXPATHLEN)
1804 return 0;
1805 buf[i++] = SEP;
1806 strcpy(buf+i, "__init__/py");
1807 if (isfile(buf)) {
1808 buf[save_len] = '\0';
1809 return 1;
1810 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001811
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001812 if (Py_OptimizeFlag)
1813 strcpy(buf+i, "o");
1814 else
1815 strcpy(buf+i, "c");
1816 if (isfile(buf)) {
1817 buf[save_len] = '\0';
1818 return 1;
1819 }
1820 buf[save_len] = '\0';
1821 return 0;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001822}
1823#endif /*RISCOS*/
1824
Guido van Rossum197346f1997-10-31 18:38:52 +00001825#endif /* HAVE_STAT */
1826
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001827
Tim Petersdbd9ba62000-07-09 03:09:57 +00001828static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001829
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001830/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001831 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001832
Guido van Rossum79f25d91997-04-29 20:08:16 +00001833static PyObject *
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001834load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001835{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001836 PyObject *modules;
1837 PyObject *m;
1838 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001839
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001840 /* First check that there's an open file (if we need one) */
1841 switch (type) {
1842 case PY_SOURCE:
1843 case PY_COMPILED:
1844 if (fp == NULL) {
1845 PyErr_Format(PyExc_ValueError,
1846 "file object required for import (type code %d)",
1847 type);
1848 return NULL;
1849 }
1850 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001851
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001852 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001853
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001854 case PY_SOURCE:
1855 m = load_source_module(name, pathname, fp);
1856 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001857
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001858 case PY_COMPILED:
1859 m = load_compiled_module(name, pathname, fp);
1860 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001861
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001862#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001863 case C_EXTENSION:
1864 m = _PyImport_LoadDynamicModule(name, pathname, fp);
1865 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001866#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001867
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001868 case PKG_DIRECTORY:
1869 m = load_package(name, pathname);
1870 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001871
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001872 case C_BUILTIN:
1873 case PY_FROZEN:
1874 if (pathname != NULL && pathname[0] != '\0')
1875 name = pathname;
1876 if (type == C_BUILTIN)
1877 err = init_builtin(name);
1878 else
1879 err = PyImport_ImportFrozenModule(name);
1880 if (err < 0)
1881 return NULL;
1882 if (err == 0) {
1883 PyErr_Format(PyExc_ImportError,
1884 "Purported %s module %.200s not found",
1885 type == C_BUILTIN ?
1886 "builtin" : "frozen",
1887 name);
1888 return NULL;
1889 }
1890 modules = PyImport_GetModuleDict();
1891 m = PyDict_GetItemString(modules, name);
1892 if (m == NULL) {
1893 PyErr_Format(
1894 PyExc_ImportError,
1895 "%s module %.200s not properly initialized",
1896 type == C_BUILTIN ?
1897 "builtin" : "frozen",
1898 name);
1899 return NULL;
1900 }
1901 Py_INCREF(m);
1902 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001903
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001904 case IMP_HOOK: {
1905 if (loader == NULL) {
1906 PyErr_SetString(PyExc_ImportError,
1907 "import hook without loader");
1908 return NULL;
1909 }
1910 m = PyObject_CallMethod(loader, "load_module", "s", name);
1911 break;
1912 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001913
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001914 default:
1915 PyErr_Format(PyExc_ImportError,
1916 "Don't know how to import %.200s (type code %d)",
1917 name, type);
1918 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001919
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001920 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001921
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001922 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001923}
1924
1925
1926/* Initialize a built-in module.
Brett Cannon5a9aa4f2006-10-03 21:58:55 +00001927 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001928 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001929
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001930static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001931init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001932{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001933 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001934
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001935 if (_PyImport_FindExtension(name, name) != NULL)
1936 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001937
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001938 for (p = PyImport_Inittab; p->name != NULL; p++) {
1939 if (strcmp(name, p->name) == 0) {
1940 if (p->initfunc == NULL) {
1941 PyErr_Format(PyExc_ImportError,
1942 "Cannot re-init internal module %.200s",
1943 name);
1944 return -1;
1945 }
1946 if (Py_VerboseFlag)
1947 PySys_WriteStderr("import %s # builtin\n", name);
1948 (*p->initfunc)();
1949 if (PyErr_Occurred())
1950 return -1;
1951 if (_PyImport_FixupExtension(name, name) == NULL)
1952 return -1;
1953 return 1;
1954 }
1955 }
1956 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001957}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001958
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001959
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001960/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001961
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001962static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001963find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001964{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001965 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001966
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001967 for (p = PyImport_FrozenModules; ; p++) {
1968 if (p->name == NULL)
1969 return NULL;
1970 if (strcmp(p->name, name) == 0)
1971 break;
1972 }
1973 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001974}
1975
Guido van Rossum79f25d91997-04-29 20:08:16 +00001976static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001977get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001978{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001979 struct _frozen *p = find_frozen(name);
1980 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001981
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001982 if (p == NULL) {
1983 PyErr_Format(PyExc_ImportError,
1984 "No such frozen object named %.200s",
1985 name);
1986 return NULL;
1987 }
1988 if (p->code == NULL) {
1989 PyErr_Format(PyExc_ImportError,
1990 "Excluded frozen object named %.200s",
1991 name);
1992 return NULL;
1993 }
1994 size = p->size;
1995 if (size < 0)
1996 size = -size;
1997 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001998}
1999
2000/* Initialize a frozen module.
2001 Return 1 for succes, 0 if the module is not found, and -1 with
2002 an exception set if the initialization failed.
2003 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002004
2005int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002006PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002007{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002008 struct _frozen *p = find_frozen(name);
2009 PyObject *co;
2010 PyObject *m;
2011 int ispackage;
2012 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002013
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002014 if (p == NULL)
2015 return 0;
2016 if (p->code == NULL) {
2017 PyErr_Format(PyExc_ImportError,
2018 "Excluded frozen object named %.200s",
2019 name);
2020 return -1;
2021 }
2022 size = p->size;
2023 ispackage = (size < 0);
2024 if (ispackage)
2025 size = -size;
2026 if (Py_VerboseFlag)
2027 PySys_WriteStderr("import %s # frozen%s\n",
2028 name, ispackage ? " package" : "");
2029 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2030 if (co == NULL)
2031 return -1;
2032 if (!PyCode_Check(co)) {
2033 PyErr_Format(PyExc_TypeError,
2034 "frozen object %.200s is not a code object",
2035 name);
2036 goto err_return;
2037 }
2038 if (ispackage) {
2039 /* Set __path__ to the package name */
2040 PyObject *d, *s;
2041 int err;
2042 m = PyImport_AddModule(name);
2043 if (m == NULL)
2044 goto err_return;
2045 d = PyModule_GetDict(m);
2046 s = PyString_InternFromString(name);
2047 if (s == NULL)
2048 goto err_return;
2049 err = PyDict_SetItemString(d, "__path__", s);
2050 Py_DECREF(s);
2051 if (err != 0)
2052 goto err_return;
2053 }
2054 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
2055 if (m == NULL)
2056 goto err_return;
2057 Py_DECREF(co);
2058 Py_DECREF(m);
2059 return 1;
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002060err_return:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002061 Py_DECREF(co);
2062 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002063}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002064
2065
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002066/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002067 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002068
Guido van Rossum79f25d91997-04-29 20:08:16 +00002069PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002070PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002071{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002072 PyObject *pname;
2073 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002074
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002075 pname = PyString_FromString(name);
2076 if (pname == NULL)
2077 return NULL;
2078 result = PyImport_Import(pname);
2079 Py_DECREF(pname);
2080 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002081}
2082
Christian Heimes000a0742008-01-03 22:16:32 +00002083/* Import a module without blocking
2084 *
2085 * At first it tries to fetch the module from sys.modules. If the module was
2086 * never loaded before it loads it with PyImport_ImportModule() unless another
2087 * thread holds the import lock. In the latter case the function raises an
2088 * ImportError instead of blocking.
2089 *
2090 * Returns the module object with incremented ref count.
2091 */
2092PyObject *
2093PyImport_ImportModuleNoBlock(const char *name)
2094{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002095 PyObject *result;
2096 PyObject *modules;
Victor Stinner871a0fb2011-09-02 00:21:36 +02002097#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002098 long me;
Victor Stinner871a0fb2011-09-02 00:21:36 +02002099#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002100
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002101 /* Try to get the module from sys.modules[name] */
2102 modules = PyImport_GetModuleDict();
2103 if (modules == NULL)
2104 return NULL;
Christian Heimes000a0742008-01-03 22:16:32 +00002105
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002106 result = PyDict_GetItemString(modules, name);
2107 if (result != NULL) {
2108 Py_INCREF(result);
2109 return result;
2110 }
2111 else {
2112 PyErr_Clear();
2113 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002114#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002115 /* check the import lock
2116 * me might be -1 but I ignore the error here, the lock function
2117 * takes care of the problem */
2118 me = PyThread_get_thread_ident();
2119 if (import_lock_thread == -1 || import_lock_thread == me) {
2120 /* no thread or me is holding the lock */
2121 return PyImport_ImportModule(name);
2122 }
2123 else {
2124 PyErr_Format(PyExc_ImportError,
2125 "Failed to import %.200s because the import lock"
2126 "is held by another thread.",
2127 name);
2128 return NULL;
2129 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002130#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002131 return PyImport_ImportModule(name);
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002132#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002133}
2134
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002135/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002136static PyObject *get_parent(PyObject *globals, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002137 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002138static PyObject *load_next(PyObject *mod, PyObject *altmod,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002139 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002140static int mark_miss(char *name);
2141static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002142 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002143static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002144
2145/* The Magnum Opus of dotted-name import :-) */
2146
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002147static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002148import_module_level(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002149 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002150{
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002151 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002152 Py_ssize_t buflen = 0;
2153 PyObject *parent, *head, *next, *tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002154
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002155 if (strchr(name, '/') != NULL
Christian Heimes3403f152008-01-09 19:56:33 +00002156#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002157 || strchr(name, '\\') != NULL
Christian Heimes3403f152008-01-09 19:56:33 +00002158#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002159 ) {
2160 PyErr_SetString(PyExc_ImportError,
2161 "Import by filename is not supported.");
2162 return NULL;
2163 }
Christian Heimes3403f152008-01-09 19:56:33 +00002164
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002165 buf = PyMem_MALLOC(MAXPATHLEN+1);
2166 if (buf == NULL) {
2167 return PyErr_NoMemory();
2168 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002169 parent = get_parent(globals, buf, &buflen, level);
2170 if (parent == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002171 goto error_exit;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002172
Brett Cannoneb3cd302010-05-20 18:37:55 +00002173 head = load_next(parent, level < 0 ? Py_None : parent, &name, buf,
2174 &buflen);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002175 if (head == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002176 goto error_exit;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002177
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002178 tail = head;
2179 Py_INCREF(tail);
2180 while (name) {
2181 next = load_next(tail, tail, &name, buf, &buflen);
2182 Py_DECREF(tail);
2183 if (next == NULL) {
2184 Py_DECREF(head);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002185 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002186 }
2187 tail = next;
2188 }
2189 if (tail == Py_None) {
2190 /* If tail is Py_None, both get_parent and load_next found
2191 an empty module name: someone called __import__("") or
2192 doctored faulty bytecode */
2193 Py_DECREF(tail);
2194 Py_DECREF(head);
2195 PyErr_SetString(PyExc_ValueError,
2196 "Empty module name");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002197 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002198 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002199
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002200 if (fromlist != NULL) {
2201 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2202 fromlist = NULL;
2203 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002204
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002205 if (fromlist == NULL) {
2206 Py_DECREF(tail);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002207 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002208 return head;
2209 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002210
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002211 Py_DECREF(head);
2212 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
2213 Py_DECREF(tail);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002214 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002215 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002216
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002217 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002218 return tail;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002219
2220error_exit:
2221 PyMem_FREE(buf);
2222 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002223}
2224
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002225PyObject *
2226PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002227 PyObject *fromlist, int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002228{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002229 PyObject *result;
2230 _PyImport_AcquireLock();
2231 result = import_module_level(name, globals, locals, fromlist, level);
2232 if (_PyImport_ReleaseLock() < 0) {
2233 Py_XDECREF(result);
2234 PyErr_SetString(PyExc_RuntimeError,
2235 "not holding the import lock");
2236 return NULL;
2237 }
2238 return result;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002239}
2240
Fred Drake87590902004-05-28 20:21:36 +00002241/* Return the package that an import is being performed in. If globals comes
2242 from the module foo.bar.bat (not itself a package), this returns the
2243 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Georg Brandl5f6861d2006-05-28 21:57:35 +00002244 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002245
2246 The *name* of the returned package is returned in buf, with the length of
2247 the name in *p_buflen.
2248
2249 If globals doesn't come from a package or a module in a package, or a
2250 corresponding entry is not found in sys.modules, Py_None is returned.
2251*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002252static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002253get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002254{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002255 static PyObject *namestr = NULL;
2256 static PyObject *pathstr = NULL;
2257 static PyObject *pkgstr = NULL;
2258 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2259 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002260
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002261 if (globals == NULL || !PyDict_Check(globals) || !level)
2262 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002263
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002264 if (namestr == NULL) {
2265 namestr = PyString_InternFromString("__name__");
2266 if (namestr == NULL)
2267 return NULL;
2268 }
2269 if (pathstr == NULL) {
2270 pathstr = PyString_InternFromString("__path__");
2271 if (pathstr == NULL)
2272 return NULL;
2273 }
2274 if (pkgstr == NULL) {
2275 pkgstr = PyString_InternFromString("__package__");
2276 if (pkgstr == NULL)
2277 return NULL;
2278 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002279
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002280 *buf = '\0';
2281 *p_buflen = 0;
2282 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002283
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002284 if ((pkgname != NULL) && (pkgname != Py_None)) {
2285 /* __package__ is set, so use it */
2286 Py_ssize_t len;
2287 if (!PyString_Check(pkgname)) {
2288 PyErr_SetString(PyExc_ValueError,
2289 "__package__ set to non-string");
2290 return NULL;
2291 }
2292 len = PyString_GET_SIZE(pkgname);
2293 if (len == 0) {
2294 if (level > 0) {
2295 PyErr_SetString(PyExc_ValueError,
2296 "Attempted relative import in non-package");
2297 return NULL;
2298 }
2299 return Py_None;
2300 }
2301 if (len > MAXPATHLEN) {
2302 PyErr_SetString(PyExc_ValueError,
2303 "Package name too long");
2304 return NULL;
2305 }
2306 strcpy(buf, PyString_AS_STRING(pkgname));
2307 } else {
2308 /* __package__ not set, so figure it out and set it */
2309 modname = PyDict_GetItem(globals, namestr);
2310 if (modname == NULL || !PyString_Check(modname))
2311 return Py_None;
Brett Cannonb166afc2010-05-05 20:25:47 +00002312
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002313 modpath = PyDict_GetItem(globals, pathstr);
2314 if (modpath != NULL) {
2315 /* __path__ is set, so modname is already the package name */
2316 Py_ssize_t len = PyString_GET_SIZE(modname);
2317 int error;
2318 if (len > MAXPATHLEN) {
2319 PyErr_SetString(PyExc_ValueError,
2320 "Module name too long");
2321 return NULL;
2322 }
2323 strcpy(buf, PyString_AS_STRING(modname));
2324 error = PyDict_SetItem(globals, pkgstr, modname);
2325 if (error) {
2326 PyErr_SetString(PyExc_ValueError,
2327 "Could not set __package__");
2328 return NULL;
2329 }
2330 } else {
2331 /* Normal module, so work out the package name if any */
2332 char *start = PyString_AS_STRING(modname);
2333 char *lastdot = strrchr(start, '.');
2334 size_t len;
2335 int error;
2336 if (lastdot == NULL && level > 0) {
2337 PyErr_SetString(PyExc_ValueError,
2338 "Attempted relative import in non-package");
2339 return NULL;
2340 }
2341 if (lastdot == NULL) {
2342 error = PyDict_SetItem(globals, pkgstr, Py_None);
2343 if (error) {
2344 PyErr_SetString(PyExc_ValueError,
2345 "Could not set __package__");
2346 return NULL;
2347 }
2348 return Py_None;
2349 }
2350 len = lastdot - start;
2351 if (len >= MAXPATHLEN) {
2352 PyErr_SetString(PyExc_ValueError,
2353 "Module name too long");
2354 return NULL;
2355 }
2356 strncpy(buf, start, len);
2357 buf[len] = '\0';
2358 pkgname = PyString_FromString(buf);
2359 if (pkgname == NULL) {
2360 return NULL;
2361 }
2362 error = PyDict_SetItem(globals, pkgstr, pkgname);
2363 Py_DECREF(pkgname);
2364 if (error) {
2365 PyErr_SetString(PyExc_ValueError,
2366 "Could not set __package__");
2367 return NULL;
2368 }
2369 }
2370 }
2371 while (--level > 0) {
2372 char *dot = strrchr(buf, '.');
2373 if (dot == NULL) {
2374 PyErr_SetString(PyExc_ValueError,
2375 "Attempted relative import beyond "
2376 "toplevel package");
2377 return NULL;
2378 }
2379 *dot = '\0';
2380 }
2381 *p_buflen = strlen(buf);
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002382
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002383 modules = PyImport_GetModuleDict();
2384 parent = PyDict_GetItemString(modules, buf);
2385 if (parent == NULL) {
2386 if (orig_level < 1) {
2387 PyObject *err_msg = PyString_FromFormat(
2388 "Parent module '%.200s' not found "
2389 "while handling absolute import", buf);
2390 if (err_msg == NULL) {
2391 return NULL;
2392 }
2393 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2394 PyString_AsString(err_msg), 1)) {
2395 *buf = '\0';
2396 *p_buflen = 0;
2397 parent = Py_None;
2398 }
2399 Py_DECREF(err_msg);
2400 } else {
2401 PyErr_Format(PyExc_SystemError,
2402 "Parent module '%.200s' not loaded, "
2403 "cannot perform relative import", buf);
2404 }
2405 }
2406 return parent;
2407 /* We expect, but can't guarantee, if parent != None, that:
2408 - parent.__name__ == buf
2409 - parent.__dict__ is globals
2410 If this is violated... Who cares? */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002411}
2412
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002413/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002414static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002415load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002416 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002417{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002418 char *name = *p_name;
2419 char *dot = strchr(name, '.');
2420 size_t len;
2421 char *p;
2422 PyObject *result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002423
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002424 if (strlen(name) == 0) {
2425 /* completely empty module name should only happen in
2426 'from . import' (or '__import__("")')*/
2427 Py_INCREF(mod);
2428 *p_name = NULL;
2429 return mod;
2430 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002431
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002432 if (dot == NULL) {
2433 *p_name = NULL;
2434 len = strlen(name);
2435 }
2436 else {
2437 *p_name = dot+1;
2438 len = dot-name;
2439 }
2440 if (len == 0) {
2441 PyErr_SetString(PyExc_ValueError,
2442 "Empty module name");
2443 return NULL;
2444 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002445
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002446 p = buf + *p_buflen;
2447 if (p != buf)
2448 *p++ = '.';
2449 if (p+len-buf >= MAXPATHLEN) {
2450 PyErr_SetString(PyExc_ValueError,
2451 "Module name too long");
2452 return NULL;
2453 }
2454 strncpy(p, name, len);
2455 p[len] = '\0';
2456 *p_buflen = p+len-buf;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002457
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002458 result = import_submodule(mod, p, buf);
2459 if (result == Py_None && altmod != mod) {
2460 Py_DECREF(result);
2461 /* Here, altmod must be None and mod must not be None */
2462 result = import_submodule(altmod, p, p);
2463 if (result != NULL && result != Py_None) {
2464 if (mark_miss(buf) != 0) {
2465 Py_DECREF(result);
2466 return NULL;
2467 }
2468 strncpy(buf, name, len);
2469 buf[len] = '\0';
2470 *p_buflen = len;
2471 }
2472 }
2473 if (result == NULL)
2474 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002475
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002476 if (result == Py_None) {
2477 Py_DECREF(result);
2478 PyErr_Format(PyExc_ImportError,
2479 "No module named %.200s", name);
2480 return NULL;
2481 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002482
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002483 return result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002484}
2485
2486static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002487mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002488{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002489 PyObject *modules = PyImport_GetModuleDict();
2490 return PyDict_SetItemString(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002491}
2492
2493static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002494ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002495 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002496{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002497 int i;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002498
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002499 if (!PyObject_HasAttrString(mod, "__path__"))
2500 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002501
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002502 for (i = 0; ; i++) {
2503 PyObject *item = PySequence_GetItem(fromlist, i);
2504 int hasit;
2505 if (item == NULL) {
2506 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2507 PyErr_Clear();
2508 return 1;
2509 }
2510 return 0;
2511 }
2512 if (!PyString_Check(item)) {
2513 PyErr_SetString(PyExc_TypeError,
2514 "Item in ``from list'' not a string");
2515 Py_DECREF(item);
2516 return 0;
2517 }
2518 if (PyString_AS_STRING(item)[0] == '*') {
2519 PyObject *all;
2520 Py_DECREF(item);
2521 /* See if the package defines __all__ */
2522 if (recursive)
2523 continue; /* Avoid endless recursion */
2524 all = PyObject_GetAttrString(mod, "__all__");
2525 if (all == NULL)
2526 PyErr_Clear();
2527 else {
2528 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
2529 Py_DECREF(all);
2530 if (!ret)
2531 return 0;
2532 }
2533 continue;
2534 }
2535 hasit = PyObject_HasAttr(mod, item);
2536 if (!hasit) {
2537 char *subname = PyString_AS_STRING(item);
2538 PyObject *submod;
2539 char *p;
2540 if (buflen + strlen(subname) >= MAXPATHLEN) {
2541 PyErr_SetString(PyExc_ValueError,
2542 "Module name too long");
2543 Py_DECREF(item);
2544 return 0;
2545 }
2546 p = buf + buflen;
2547 *p++ = '.';
2548 strcpy(p, subname);
2549 submod = import_submodule(mod, subname, buf);
2550 Py_XDECREF(submod);
2551 if (submod == NULL) {
2552 Py_DECREF(item);
2553 return 0;
2554 }
2555 }
2556 Py_DECREF(item);
2557 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002558
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002559 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002560}
2561
Neil Schemenauer00b09662003-06-16 21:03:07 +00002562static int
2563add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002564 PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00002565{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002566 if (mod == Py_None)
2567 return 1;
2568 /* Irrespective of the success of this load, make a
2569 reference to it in the parent package module. A copy gets
2570 saved in the modules dictionary under the full name, so get a
2571 reference from there, if need be. (The exception is when the
2572 load failed with a SyntaxError -- then there's no trace in
2573 sys.modules. In that case, of course, do nothing extra.) */
2574 if (submod == NULL) {
2575 submod = PyDict_GetItemString(modules, fullname);
2576 if (submod == NULL)
2577 return 1;
2578 }
2579 if (PyModule_Check(mod)) {
2580 /* We can't use setattr here since it can give a
2581 * spurious warning if the submodule name shadows a
2582 * builtin name */
2583 PyObject *dict = PyModule_GetDict(mod);
2584 if (!dict)
2585 return 0;
2586 if (PyDict_SetItemString(dict, subname, submod) < 0)
2587 return 0;
2588 }
2589 else {
2590 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2591 return 0;
2592 }
2593 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00002594}
2595
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002596static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002597import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002598{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002599 PyObject *modules = PyImport_GetModuleDict();
2600 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002601
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002602 /* Require:
2603 if mod == None: subname == fullname
2604 else: mod.__name__ + "." + subname == fullname
2605 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002606
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002607 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
2608 Py_INCREF(m);
2609 }
2610 else {
2611 PyObject *path, *loader = NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002612 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002613 struct filedescr *fdp;
2614 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002615
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002616 if (mod == Py_None)
2617 path = NULL;
2618 else {
2619 path = PyObject_GetAttrString(mod, "__path__");
2620 if (path == NULL) {
2621 PyErr_Clear();
2622 Py_INCREF(Py_None);
2623 return Py_None;
2624 }
2625 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002626
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002627 buf = PyMem_MALLOC(MAXPATHLEN+1);
2628 if (buf == NULL) {
2629 return PyErr_NoMemory();
2630 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002631 buf[0] = '\0';
2632 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2633 &fp, &loader);
2634 Py_XDECREF(path);
2635 if (fdp == NULL) {
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002636 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002637 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2638 return NULL;
2639 PyErr_Clear();
2640 Py_INCREF(Py_None);
2641 return Py_None;
2642 }
2643 m = load_module(fullname, fp, buf, fdp->type, loader);
2644 Py_XDECREF(loader);
2645 if (fp)
2646 fclose(fp);
2647 if (!add_submodule(mod, m, fullname, subname, modules)) {
2648 Py_XDECREF(m);
2649 m = NULL;
2650 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002651 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002652 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002653
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002654 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002655}
2656
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002657
2658/* Re-import a module of any kind and return its module object, WITH
2659 INCREMENTED REFERENCE COUNT */
2660
Guido van Rossum79f25d91997-04-29 20:08:16 +00002661PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002662PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002663{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002664 PyInterpreterState *interp = PyThreadState_Get()->interp;
2665 PyObject *modules_reloading = interp->modules_reloading;
2666 PyObject *modules = PyImport_GetModuleDict();
2667 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
2668 char *name, *subname;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002669 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002670 struct filedescr *fdp;
2671 FILE *fp = NULL;
2672 PyObject *newm;
Brett Cannonb166afc2010-05-05 20:25:47 +00002673
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002674 if (modules_reloading == NULL) {
2675 Py_FatalError("PyImport_ReloadModule: "
2676 "no modules_reloading dictionary!");
2677 return NULL;
2678 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002679
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002680 if (m == NULL || !PyModule_Check(m)) {
2681 PyErr_SetString(PyExc_TypeError,
2682 "reload() argument must be module");
2683 return NULL;
2684 }
2685 name = PyModule_GetName(m);
2686 if (name == NULL)
2687 return NULL;
2688 if (m != PyDict_GetItemString(modules, name)) {
2689 PyErr_Format(PyExc_ImportError,
2690 "reload(): module %.200s not in sys.modules",
2691 name);
2692 return NULL;
2693 }
2694 existing_m = PyDict_GetItemString(modules_reloading, name);
2695 if (existing_m != NULL) {
2696 /* Due to a recursive reload, this module is already
2697 being reloaded. */
2698 Py_INCREF(existing_m);
2699 return existing_m;
2700 }
2701 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2702 return NULL;
Collin Winter276887b2007-03-12 16:11:39 +00002703
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002704 subname = strrchr(name, '.');
2705 if (subname == NULL)
2706 subname = name;
2707 else {
2708 PyObject *parentname, *parent;
2709 parentname = PyString_FromStringAndSize(name, (subname-name));
2710 if (parentname == NULL) {
2711 imp_modules_reloading_clear();
2712 return NULL;
2713 }
2714 parent = PyDict_GetItem(modules, parentname);
2715 if (parent == NULL) {
2716 PyErr_Format(PyExc_ImportError,
2717 "reload(): parent %.200s not in sys.modules",
2718 PyString_AS_STRING(parentname));
2719 Py_DECREF(parentname);
2720 imp_modules_reloading_clear();
2721 return NULL;
2722 }
2723 Py_DECREF(parentname);
2724 subname++;
2725 path = PyObject_GetAttrString(parent, "__path__");
2726 if (path == NULL)
2727 PyErr_Clear();
2728 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002729 buf = PyMem_MALLOC(MAXPATHLEN+1);
2730 if (buf == NULL) {
2731 Py_XDECREF(path);
2732 return PyErr_NoMemory();
2733 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002734 buf[0] = '\0';
2735 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
2736 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002737
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002738 if (fdp == NULL) {
2739 Py_XDECREF(loader);
2740 imp_modules_reloading_clear();
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002741 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002742 return NULL;
2743 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002744
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002745 newm = load_module(name, fp, buf, fdp->type, loader);
2746 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002747
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002748 if (fp)
2749 fclose(fp);
2750 if (newm == NULL) {
2751 /* load_module probably removed name from modules because of
2752 * the error. Put back the original module object. We're
2753 * going to return NULL in this case regardless of whether
2754 * replacing name succeeds, so the return value is ignored.
2755 */
2756 PyDict_SetItemString(modules, name, m);
2757 }
2758 imp_modules_reloading_clear();
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002759 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002760 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002761}
2762
2763
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002764/* Higher-level import emulator which emulates the "import" statement
2765 more accurately -- it invokes the __import__() function from the
2766 builtins of the current globals. This means that the import is
2767 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002768 environment, e.g. by "rexec".
2769 A dummy list ["__doc__"] is passed as the 4th argument so that
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002770 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00002771 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002772
2773PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002774PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002775{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002776 static PyObject *silly_list = NULL;
2777 static PyObject *builtins_str = NULL;
2778 static PyObject *import_str = NULL;
2779 PyObject *globals = NULL;
2780 PyObject *import = NULL;
2781 PyObject *builtins = NULL;
2782 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002783
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002784 /* Initialize constant string objects */
2785 if (silly_list == NULL) {
2786 import_str = PyString_InternFromString("__import__");
2787 if (import_str == NULL)
2788 return NULL;
2789 builtins_str = PyString_InternFromString("__builtins__");
2790 if (builtins_str == NULL)
2791 return NULL;
2792 silly_list = Py_BuildValue("[s]", "__doc__");
2793 if (silly_list == NULL)
2794 return NULL;
2795 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002796
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002797 /* Get the builtins from current globals */
2798 globals = PyEval_GetGlobals();
2799 if (globals != NULL) {
2800 Py_INCREF(globals);
2801 builtins = PyObject_GetItem(globals, builtins_str);
2802 if (builtins == NULL)
2803 goto err;
2804 }
2805 else {
2806 /* No globals -- use standard builtins, and fake globals */
2807 builtins = PyImport_ImportModuleLevel("__builtin__",
2808 NULL, NULL, NULL, 0);
2809 if (builtins == NULL)
2810 return NULL;
2811 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2812 if (globals == NULL)
2813 goto err;
2814 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002815
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002816 /* Get the __import__ function from the builtins */
2817 if (PyDict_Check(builtins)) {
2818 import = PyObject_GetItem(builtins, import_str);
2819 if (import == NULL)
2820 PyErr_SetObject(PyExc_KeyError, import_str);
2821 }
2822 else
2823 import = PyObject_GetAttr(builtins, import_str);
2824 if (import == NULL)
2825 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002826
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002827 /* Call the __import__ function with the proper argument list
2828 * Always use absolute import here. */
2829 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2830 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002831
2832 err:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002833 Py_XDECREF(globals);
2834 Py_XDECREF(builtins);
2835 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002836
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002837 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002838}
2839
2840
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002841/* Module 'imp' provides Python access to the primitives used for
2842 importing modules.
2843*/
2844
Guido van Rossum79f25d91997-04-29 20:08:16 +00002845static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002846imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002847{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002848 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002849
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002850 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2851 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2852 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2853 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002854
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002855 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002856}
2857
Guido van Rossum79f25d91997-04-29 20:08:16 +00002858static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002859imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002860{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002861 PyObject *list;
2862 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002863
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002864 list = PyList_New(0);
2865 if (list == NULL)
2866 return NULL;
2867 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2868 PyObject *item = Py_BuildValue("ssi",
2869 fdp->suffix, fdp->mode, fdp->type);
2870 if (item == NULL) {
2871 Py_DECREF(list);
2872 return NULL;
2873 }
2874 if (PyList_Append(list, item) < 0) {
2875 Py_DECREF(list);
2876 Py_DECREF(item);
2877 return NULL;
2878 }
2879 Py_DECREF(item);
2880 }
2881 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002882}
2883
Guido van Rossum79f25d91997-04-29 20:08:16 +00002884static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002885call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002886{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002887 extern int fclose(FILE *);
2888 PyObject *fob, *ret;
2889 struct filedescr *fdp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002890 char *pathname;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002891 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002892
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002893 pathname = PyMem_MALLOC(MAXPATHLEN+1);
2894 if (pathname == NULL) {
2895 return PyErr_NoMemory();
2896 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002897 pathname[0] = '\0';
2898 if (path == Py_None)
2899 path = NULL;
2900 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002901 if (fdp == NULL) {
2902 PyMem_FREE(pathname);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002903 return NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002904 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002905 if (fp != NULL) {
2906 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002907 if (fob == NULL) {
2908 PyMem_FREE(pathname);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002909 return NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002910 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002911 }
2912 else {
2913 fob = Py_None;
2914 Py_INCREF(fob);
2915 }
2916 ret = Py_BuildValue("Os(ssi)",
2917 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
2918 Py_DECREF(fob);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002919 PyMem_FREE(pathname);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002920 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002921}
2922
Guido van Rossum79f25d91997-04-29 20:08:16 +00002923static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002924imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002925{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002926 char *name;
2927 PyObject *path = NULL;
2928 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
2929 return NULL;
2930 return call_find_module(name, path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002931}
2932
2933static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002934imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002935{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002936 char *name;
2937 int ret;
2938 PyObject *m;
2939 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
2940 return NULL;
2941 ret = init_builtin(name);
2942 if (ret < 0)
2943 return NULL;
2944 if (ret == 0) {
2945 Py_INCREF(Py_None);
2946 return Py_None;
2947 }
2948 m = PyImport_AddModule(name);
2949 Py_XINCREF(m);
2950 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002951}
2952
Guido van Rossum79f25d91997-04-29 20:08:16 +00002953static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002954imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002955{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002956 char *name;
2957 int ret;
2958 PyObject *m;
2959 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
2960 return NULL;
2961 ret = PyImport_ImportFrozenModule(name);
2962 if (ret < 0)
2963 return NULL;
2964 if (ret == 0) {
2965 Py_INCREF(Py_None);
2966 return Py_None;
2967 }
2968 m = PyImport_AddModule(name);
2969 Py_XINCREF(m);
2970 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002971}
2972
Guido van Rossum79f25d91997-04-29 20:08:16 +00002973static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002974imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002975{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002976 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002977
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002978 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
2979 return NULL;
2980 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002981}
2982
Guido van Rossum79f25d91997-04-29 20:08:16 +00002983static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002984imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002985{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002986 char *name;
2987 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
2988 return NULL;
2989 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002990}
2991
Guido van Rossum79f25d91997-04-29 20:08:16 +00002992static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002993imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002994{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002995 char *name;
2996 struct _frozen *p;
2997 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
2998 return NULL;
2999 p = find_frozen(name);
3000 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003001}
3002
3003static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003004get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003005{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003006 FILE *fp;
3007 if (fob == NULL) {
3008 if (mode[0] == 'U')
3009 mode = "r" PY_STDIOTEXTMODE;
3010 fp = fopen(pathname, mode);
3011 if (fp == NULL)
3012 PyErr_SetFromErrno(PyExc_IOError);
3013 }
3014 else {
3015 fp = PyFile_AsFile(fob);
3016 if (fp == NULL)
3017 PyErr_SetString(PyExc_ValueError,
3018 "bad/closed file object");
3019 }
3020 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003021}
3022
Guido van Rossum79f25d91997-04-29 20:08:16 +00003023static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003024imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003025{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003026 char *name;
3027 char *pathname;
3028 PyObject *fob = NULL;
3029 PyObject *m;
3030 FILE *fp;
3031 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
3032 &PyFile_Type, &fob))
3033 return NULL;
3034 fp = get_file(pathname, fob, "rb");
3035 if (fp == NULL)
3036 return NULL;
3037 m = load_compiled_module(name, pathname, fp);
3038 if (fob == NULL)
3039 fclose(fp);
3040 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003041}
3042
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003043#ifdef HAVE_DYNAMIC_LOADING
3044
Guido van Rossum79f25d91997-04-29 20:08:16 +00003045static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003046imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003047{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003048 char *name;
3049 char *pathname;
3050 PyObject *fob = NULL;
3051 PyObject *m;
3052 FILE *fp = NULL;
3053 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
3054 &PyFile_Type, &fob))
3055 return NULL;
3056 if (fob) {
3057 fp = get_file(pathname, fob, "r");
3058 if (fp == NULL)
3059 return NULL;
3060 }
3061 m = _PyImport_LoadDynamicModule(name, pathname, fp);
3062 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003063}
3064
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003065#endif /* HAVE_DYNAMIC_LOADING */
3066
Guido van Rossum79f25d91997-04-29 20:08:16 +00003067static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003068imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003069{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003070 char *name;
3071 char *pathname;
3072 PyObject *fob = NULL;
3073 PyObject *m;
3074 FILE *fp;
3075 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
3076 &PyFile_Type, &fob))
3077 return NULL;
3078 fp = get_file(pathname, fob, "r");
3079 if (fp == NULL)
3080 return NULL;
3081 m = load_source_module(name, pathname, fp);
3082 if (fob == NULL)
3083 fclose(fp);
3084 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003085}
3086
Guido van Rossum79f25d91997-04-29 20:08:16 +00003087static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003088imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003089{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003090 char *name;
3091 PyObject *fob;
3092 char *pathname;
3093 char *suffix; /* Unused */
3094 char *mode;
3095 int type;
3096 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003097
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003098 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
3099 &name, &fob, &pathname,
3100 &suffix, &mode, &type))
3101 return NULL;
3102 if (*mode) {
3103 /* Mode must start with 'r' or 'U' and must not contain '+'.
3104 Implicit in this test is the assumption that the mode
3105 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003106
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003107 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3108 PyErr_Format(PyExc_ValueError,
3109 "invalid file open mode %.200s", mode);
3110 return NULL;
3111 }
3112 }
3113 if (fob == Py_None)
3114 fp = NULL;
3115 else {
3116 if (!PyFile_Check(fob)) {
3117 PyErr_SetString(PyExc_ValueError,
3118 "load_module arg#2 should be a file or None");
3119 return NULL;
3120 }
3121 fp = get_file(pathname, fob, mode);
3122 if (fp == NULL)
3123 return NULL;
3124 }
3125 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003126}
3127
3128static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003129imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003130{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003131 char *name;
3132 char *pathname;
3133 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
3134 return NULL;
3135 return load_package(name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003136}
3137
3138static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003139imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003140{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003141 char *name;
3142 if (!PyArg_ParseTuple(args, "s:new_module", &name))
3143 return NULL;
3144 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003145}
3146
Brett Cannon3aa2a492008-08-06 22:28:09 +00003147static PyObject *
3148imp_reload(PyObject *self, PyObject *v)
3149{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003150 return PyImport_ReloadModule(v);
Brett Cannon3aa2a492008-08-06 22:28:09 +00003151}
3152
3153
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003154/* Doc strings */
3155
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003156PyDoc_STRVAR(doc_imp,
3157"This module provides the components needed to build your own\n\
3158__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003159
Brett Cannon3aa2a492008-08-06 22:28:09 +00003160PyDoc_STRVAR(doc_reload,
3161"reload(module) -> module\n\
3162\n\
3163Reload the module. The module must have been successfully imported before.");
3164
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003165PyDoc_STRVAR(doc_find_module,
3166"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003167Search for a module. If path is omitted or None, search for a\n\
3168built-in, frozen or special module and continue search in sys.path.\n\
3169The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003170package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003171
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003172PyDoc_STRVAR(doc_load_module,
3173"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003174Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003175The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003176
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003177PyDoc_STRVAR(doc_get_magic,
3178"get_magic() -> string\n\
3179Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003180
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003181PyDoc_STRVAR(doc_get_suffixes,
3182"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003183Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003184that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003185
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003186PyDoc_STRVAR(doc_new_module,
3187"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003188Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003189The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003190
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003191PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003192"lock_held() -> boolean\n\
3193Return True if the import lock is currently held, else False.\n\
3194On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003195
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003196PyDoc_STRVAR(doc_acquire_lock,
3197"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003198Acquires the interpreter's import lock for the current thread.\n\
3199This lock should be used by import hooks to ensure thread-safety\n\
3200when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003201On platforms without threads, this function does nothing.");
3202
3203PyDoc_STRVAR(doc_release_lock,
3204"release_lock() -> None\n\
3205Release the interpreter's import lock.\n\
3206On platforms without threads, this function does nothing.");
3207
Guido van Rossum79f25d91997-04-29 20:08:16 +00003208static PyMethodDef imp_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003209 {"reload", imp_reload, METH_O, doc_reload},
3210 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3211 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3212 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3213 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3214 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3215 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3216 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3217 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
3218 /* The rest are obsolete */
3219 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3220 {"init_builtin", imp_init_builtin, METH_VARARGS},
3221 {"init_frozen", imp_init_frozen, METH_VARARGS},
3222 {"is_builtin", imp_is_builtin, METH_VARARGS},
3223 {"is_frozen", imp_is_frozen, METH_VARARGS},
3224 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003225#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003226 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003227#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003228 {"load_package", imp_load_package, METH_VARARGS},
3229 {"load_source", imp_load_source, METH_VARARGS},
3230 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003231};
3232
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003233static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003234setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003235{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003236 PyObject *v;
3237 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003238
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003239 v = PyInt_FromLong((long)value);
3240 err = PyDict_SetItemString(d, name, v);
3241 Py_XDECREF(v);
3242 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003243}
3244
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003245typedef struct {
3246 PyObject_HEAD
3247} NullImporter;
3248
3249static int
3250NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3251{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003252 char *path;
3253 Py_ssize_t pathlen;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003254
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003255 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3256 return -1;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003257
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003258 if (!PyArg_ParseTuple(args, "s:NullImporter",
3259 &path))
3260 return -1;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003261
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003262 pathlen = strlen(path);
3263 if (pathlen == 0) {
3264 PyErr_SetString(PyExc_ImportError, "empty pathname");
3265 return -1;
3266 } else {
Jason R. Coombs0737b722012-01-13 17:59:05 -05003267 if(isdir(path)) {
3268 PyErr_SetString(PyExc_ImportError,
3269 "existing directory");
3270 return -1;
3271 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003272 }
3273 return 0;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003274}
3275
3276static PyObject *
3277NullImporter_find_module(NullImporter *self, PyObject *args)
3278{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003279 Py_RETURN_NONE;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003280}
3281
3282static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003283 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3284 "Always return None"
3285 },
3286 {NULL} /* Sentinel */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003287};
3288
3289
Nick Coghlan327a39b2007-11-18 11:56:28 +00003290PyTypeObject PyNullImporter_Type = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003291 PyVarObject_HEAD_INIT(NULL, 0)
3292 "imp.NullImporter", /*tp_name*/
3293 sizeof(NullImporter), /*tp_basicsize*/
3294 0, /*tp_itemsize*/
3295 0, /*tp_dealloc*/
3296 0, /*tp_print*/
3297 0, /*tp_getattr*/
3298 0, /*tp_setattr*/
3299 0, /*tp_compare*/
3300 0, /*tp_repr*/
3301 0, /*tp_as_number*/
3302 0, /*tp_as_sequence*/
3303 0, /*tp_as_mapping*/
3304 0, /*tp_hash */
3305 0, /*tp_call*/
3306 0, /*tp_str*/
3307 0, /*tp_getattro*/
3308 0, /*tp_setattro*/
3309 0, /*tp_as_buffer*/
3310 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3311 "Null importer object", /* tp_doc */
3312 0, /* tp_traverse */
3313 0, /* tp_clear */
3314 0, /* tp_richcompare */
3315 0, /* tp_weaklistoffset */
3316 0, /* tp_iter */
3317 0, /* tp_iternext */
3318 NullImporter_methods, /* tp_methods */
3319 0, /* tp_members */
3320 0, /* tp_getset */
3321 0, /* tp_base */
3322 0, /* tp_dict */
3323 0, /* tp_descr_get */
3324 0, /* tp_descr_set */
3325 0, /* tp_dictoffset */
3326 (initproc)NullImporter_init, /* tp_init */
3327 0, /* tp_alloc */
3328 PyType_GenericNew /* tp_new */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003329};
3330
3331
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003332PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003333initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003334{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003335 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003336
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003337 if (PyType_Ready(&PyNullImporter_Type) < 0)
3338 goto failure;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003339
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003340 m = Py_InitModule4("imp", imp_methods, doc_imp,
3341 NULL, PYTHON_API_VERSION);
3342 if (m == NULL)
3343 goto failure;
3344 d = PyModule_GetDict(m);
3345 if (d == NULL)
3346 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003347
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003348 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3349 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3350 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3351 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3352 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3353 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3354 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3355 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
3356 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
3357 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003358
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003359 Py_INCREF(&PyNullImporter_Type);
3360 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003361 failure:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003362 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003363}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003364
3365
Guido van Rossumb18618d2000-05-03 23:44:39 +00003366/* API for embedding applications that want to add their own entries
3367 to the table of built-in modules. This should normally be called
3368 *before* Py_Initialize(). When the table resize fails, -1 is
3369 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003370
3371 After a similar function by Just van Rossum. */
3372
3373int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003374PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003375{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003376 static struct _inittab *our_copy = NULL;
3377 struct _inittab *p;
3378 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003379
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003380 /* Count the number of entries in both tables */
3381 for (n = 0; newtab[n].name != NULL; n++)
3382 ;
3383 if (n == 0)
3384 return 0; /* Nothing to do */
3385 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3386 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003387
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003388 /* Allocate new memory for the combined table */
3389 p = our_copy;
3390 PyMem_RESIZE(p, struct _inittab, i+n+1);
3391 if (p == NULL)
3392 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003393
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003394 /* Copy the tables into the new memory */
3395 if (our_copy != PyImport_Inittab)
3396 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3397 PyImport_Inittab = our_copy = p;
3398 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003399
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003400 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003401}
3402
3403/* Shorthand to add a single entry given a name and a function */
3404
3405int
Brett Cannonc4f90eb2009-04-02 03:17:39 +00003406PyImport_AppendInittab(const char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003407{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003408 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003409
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003410 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003411
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003412 newtab[0].name = (char *)name;
3413 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003414
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003415 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003416}
Anthony Baxterac6bd462006-04-13 02:06:09 +00003417
3418#ifdef __cplusplus
3419}
3420#endif