blob: 108a1e1b0741c0ba8194609235618286398998cb [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) {
Gregory P. Smitha72aa842012-04-18 16:41:56 -07001270 PyErr_NoMemory();
1271 return NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001272 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001273 strcpy(name, subname);
Just van Rossum52e14d62002-12-30 22:08:05 +00001274
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001275 /* sys.meta_path import hook */
1276 if (p_loader != NULL) {
1277 PyObject *meta_path;
Just van Rossum52e14d62002-12-30 22:08:05 +00001278
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001279 meta_path = PySys_GetObject("meta_path");
1280 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001281 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001282 "sys.meta_path must be a list of "
1283 "import hooks");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001284 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001285 }
1286 Py_INCREF(meta_path); /* zap guard */
1287 npath = PyList_Size(meta_path);
1288 for (i = 0; i < npath; i++) {
1289 PyObject *loader;
1290 PyObject *hook = PyList_GetItem(meta_path, i);
1291 loader = PyObject_CallMethod(hook, "find_module",
1292 "sO", fullname,
1293 path != NULL ?
1294 path : Py_None);
1295 if (loader == NULL) {
1296 Py_DECREF(meta_path);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001297 goto error_exit; /* true error */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001298 }
1299 if (loader != Py_None) {
1300 /* a loader was found */
1301 *p_loader = loader;
1302 Py_DECREF(meta_path);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001303 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001304 return &importhookdescr;
1305 }
1306 Py_DECREF(loader);
1307 }
1308 Py_DECREF(meta_path);
1309 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001310
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001311 if (path != NULL && PyString_Check(path)) {
1312 /* The only type of submodule allowed inside a "frozen"
1313 package are other frozen modules or packages. */
1314 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1315 PyErr_SetString(PyExc_ImportError,
1316 "full frozen module name too long");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001317 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001318 }
1319 strcpy(buf, PyString_AsString(path));
1320 strcat(buf, ".");
1321 strcat(buf, name);
1322 strcpy(name, buf);
1323 if (find_frozen(name) != NULL) {
1324 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001325 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001326 return &fd_frozen;
1327 }
1328 PyErr_Format(PyExc_ImportError,
1329 "No frozen submodule named %.200s", name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001330 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001331 }
1332 if (path == NULL) {
1333 if (is_builtin(name)) {
1334 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001335 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001336 return &fd_builtin;
1337 }
1338 if ((find_frozen(name)) != NULL) {
1339 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001340 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001341 return &fd_frozen;
1342 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001343
Guido van Rossumac279101996-08-22 23:10:58 +00001344#ifdef MS_COREDLL
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001345 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1346 if (fp != NULL) {
1347 *p_fp = fp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001348 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001349 return fdp;
1350 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001351#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001352 path = PySys_GetObject("path");
1353 }
1354 if (path == NULL || !PyList_Check(path)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001355 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001356 "sys.path must be a list of directory names");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001357 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001358 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001359
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001360 path_hooks = PySys_GetObject("path_hooks");
1361 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001362 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001363 "sys.path_hooks must be a list of "
1364 "import hooks");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001365 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001366 }
1367 path_importer_cache = PySys_GetObject("path_importer_cache");
1368 if (path_importer_cache == NULL ||
1369 !PyDict_Check(path_importer_cache)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001370 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001371 "sys.path_importer_cache must be a dict");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001372 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001373 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001374
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001375 npath = PyList_Size(path);
1376 namelen = strlen(name);
1377 for (i = 0; i < npath; i++) {
1378 PyObject *copy = NULL;
1379 PyObject *v = PyList_GetItem(path, i);
1380 if (!v)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001381 goto error_exit;
Walter Dörwald3430d702002-06-17 10:43:59 +00001382#ifdef Py_USING_UNICODE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001383 if (PyUnicode_Check(v)) {
1384 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1385 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1386 if (copy == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001387 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001388 v = copy;
1389 }
1390 else
Walter Dörwald3430d702002-06-17 10:43:59 +00001391#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001392 if (!PyString_Check(v))
1393 continue;
1394 len = PyString_GET_SIZE(v);
1395 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1396 Py_XDECREF(copy);
1397 continue; /* Too long */
1398 }
1399 strcpy(buf, PyString_AS_STRING(v));
1400 if (strlen(buf) != len) {
1401 Py_XDECREF(copy);
1402 continue; /* v contains '\0' */
1403 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001404
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001405 /* sys.path_hooks import hook */
1406 if (p_loader != NULL) {
1407 PyObject *importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001408
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001409 importer = get_path_importer(path_importer_cache,
1410 path_hooks, v);
1411 if (importer == NULL) {
1412 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001413 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001414 }
1415 /* Note: importer is a borrowed reference */
1416 if (importer != Py_None) {
1417 PyObject *loader;
1418 loader = PyObject_CallMethod(importer,
1419 "find_module",
1420 "s", fullname);
1421 Py_XDECREF(copy);
1422 if (loader == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001423 goto error_exit; /* error */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001424 if (loader != Py_None) {
1425 /* a loader was found */
1426 *p_loader = loader;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001427 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001428 return &importhookdescr;
1429 }
1430 Py_DECREF(loader);
1431 continue;
1432 }
1433 }
1434 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001435
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001436 if (len > 0 && buf[len-1] != SEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001437#ifdef ALTSEP
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001438 && buf[len-1] != ALTSEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001439#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001440 )
1441 buf[len++] = SEP;
1442 strcpy(buf+len, name);
1443 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001444
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001445 /* Check for package import (buf holds a directory name,
1446 and there's an __init__ module in that directory */
Jason R. Coombs925ff742012-01-13 17:12:25 -05001447 if (isdir(buf) && /* it's an existing directory */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001448 case_ok(buf, len, namelen, name)) { /* case matches */
1449 if (find_init_module(buf)) { /* and has __init__.py */
1450 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001451 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001452 return &fd_package;
1453 }
1454 else {
1455 char warnstr[MAXPATHLEN+80];
1456 sprintf(warnstr, "Not importing directory "
1457 "'%.*s': missing __init__.py",
1458 MAXPATHLEN, buf);
1459 if (PyErr_Warn(PyExc_ImportWarning,
1460 warnstr)) {
1461 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001462 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001463 }
1464 }
1465 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001466#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001467 /* take a snapshot of the module spec for restoration
1468 * after the 8 character DLL hackery
1469 */
1470 saved_buf = strdup(buf);
1471 saved_len = len;
1472 saved_namelen = namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001473#endif /* PYOS_OS2 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001474 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Georg Brandladd36e52007-08-23 18:08:06 +00001475#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001476 /* OS/2 limits DLLs to 8 character names (w/o
1477 extension)
1478 * so if the name is longer than that and its a
1479 * dynamically loaded module we're going to try,
1480 * truncate the name before trying
1481 */
1482 if (strlen(subname) > 8) {
1483 /* is this an attempt to load a C extension? */
1484 const struct filedescr *scan;
1485 scan = _PyImport_DynLoadFiletab;
1486 while (scan->suffix != NULL) {
1487 if (!strcmp(scan->suffix, fdp->suffix))
1488 break;
1489 else
1490 scan++;
1491 }
1492 if (scan->suffix != NULL) {
1493 /* yes, so truncate the name */
1494 namelen = 8;
1495 len -= strlen(subname) - namelen;
1496 buf[len] = '\0';
1497 }
1498 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001499#endif /* PYOS_OS2 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001500 strcpy(buf+len, fdp->suffix);
1501 if (Py_VerboseFlag > 1)
1502 PySys_WriteStderr("# trying %s\n", buf);
1503 filemode = fdp->mode;
1504 if (filemode[0] == 'U')
1505 filemode = "r" PY_STDIOTEXTMODE;
1506 fp = fopen(buf, filemode);
1507 if (fp != NULL) {
1508 if (case_ok(buf, len, namelen, name))
1509 break;
1510 else { /* continue search */
1511 fclose(fp);
1512 fp = NULL;
1513 }
1514 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001515#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001516 /* restore the saved snapshot */
1517 strcpy(buf, saved_buf);
1518 len = saved_len;
1519 namelen = saved_namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001520#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001521 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001522#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001523 /* don't need/want the module name snapshot anymore */
1524 if (saved_buf)
1525 {
1526 free(saved_buf);
1527 saved_buf = NULL;
1528 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001529#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001530 Py_XDECREF(copy);
1531 if (fp != NULL)
1532 break;
1533 }
1534 if (fp == NULL) {
1535 PyErr_Format(PyExc_ImportError,
1536 "No module named %.200s", name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001537 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001538 }
1539 *p_fp = fp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001540 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001541 return fdp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001542
1543error_exit:
1544 PyMem_FREE(name);
1545 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001546}
1547
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001548/* Helpers for main.c
1549 * Find the source file corresponding to a named module
1550 */
1551struct filedescr *
1552_PyImport_FindModule(const char *name, PyObject *path, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001553 size_t buflen, FILE **p_fp, PyObject **p_loader)
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001554{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001555 return find_module((char *) name, (char *) name, path,
1556 buf, buflen, p_fp, p_loader);
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001557}
1558
1559PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1560{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001561 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001562}
1563
Martin v. Löwis18e16552006-02-15 17:27:45 +00001564/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001565 * The arguments here are tricky, best shown by example:
1566 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1567 * ^ ^ ^ ^
1568 * |--------------------- buf ---------------------|
1569 * |------------------- len ------------------|
1570 * |------ name -------|
1571 * |----- namelen -----|
1572 * buf is the full path, but len only counts up to (& exclusive of) the
1573 * extension. name is the module name, also exclusive of extension.
1574 *
1575 * We've already done a successful stat() or fopen() on buf, so know that
1576 * there's some match, possibly case-insensitive.
1577 *
Tim Peters50d8d372001-02-28 05:34:27 +00001578 * case_ok() is to return 1 if there's a case-sensitive match for
1579 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1580 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001581 *
Tim Peters50d8d372001-02-28 05:34:27 +00001582 * case_ok() is used to implement case-sensitive import semantics even
1583 * on platforms with case-insensitive filesystems. It's trivial to implement
1584 * for case-sensitive filesystems. It's pretty much a cross-platform
1585 * nightmare for systems with case-insensitive filesystems.
1586 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001587
Tim Peters50d8d372001-02-28 05:34:27 +00001588/* First we may need a pile of platform-specific header files; the sequence
1589 * of #if's here should match the sequence in the body of case_ok().
1590 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001591#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001592#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001593
Tim Peters50d8d372001-02-28 05:34:27 +00001594#elif defined(DJGPP)
1595#include <dir.h>
1596
Jason Tishler7961aa62005-05-20 00:56:54 +00001597#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001598#include <sys/types.h>
1599#include <dirent.h>
1600
Andrew MacIntyred9400542002-02-26 11:41:34 +00001601#elif defined(PYOS_OS2)
1602#define INCL_DOS
1603#define INCL_DOSERRORS
1604#define INCL_NOPMAPI
1605#include <os2.h>
1606
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001607#elif defined(RISCOS)
1608#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001609#endif
1610
Guido van Rossum0980bd91998-02-13 17:18:36 +00001611static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001612case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001613{
Tim Peters50d8d372001-02-28 05:34:27 +00001614/* Pick a platform-specific implementation; the sequence of #if's here should
1615 * match the sequence just above.
1616 */
1617
Jason Tishler7961aa62005-05-20 00:56:54 +00001618/* MS_WINDOWS */
1619#if defined(MS_WINDOWS)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001620 WIN32_FIND_DATA data;
1621 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001622
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001623 if (Py_GETENV("PYTHONCASEOK") != NULL)
1624 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001625
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001626 h = FindFirstFile(buf, &data);
1627 if (h == INVALID_HANDLE_VALUE) {
1628 PyErr_Format(PyExc_NameError,
1629 "Can't find file for module %.100s\n(filename %.300s)",
1630 name, buf);
1631 return 0;
1632 }
1633 FindClose(h);
1634 return strncmp(data.cFileName, name, namelen) == 0;
Tim Peters50d8d372001-02-28 05:34:27 +00001635
1636/* DJGPP */
1637#elif defined(DJGPP)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001638 struct ffblk ffblk;
1639 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00001640
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001641 if (Py_GETENV("PYTHONCASEOK") != NULL)
1642 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001643
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001644 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1645 if (done) {
1646 PyErr_Format(PyExc_NameError,
1647 "Can't find file for module %.100s\n(filename %.300s)",
1648 name, buf);
1649 return 0;
1650 }
1651 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001652
Jason Tishler7961aa62005-05-20 00:56:54 +00001653/* new-fangled macintosh (macosx) or Cygwin */
1654#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001655 DIR *dirp;
1656 struct dirent *dp;
1657 char dirname[MAXPATHLEN + 1];
1658 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001659
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001660 if (Py_GETENV("PYTHONCASEOK") != NULL)
1661 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001662
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001663 /* Copy the dir component into dirname; substitute "." if empty */
1664 if (dirlen <= 0) {
1665 dirname[0] = '.';
1666 dirname[1] = '\0';
1667 }
1668 else {
1669 assert(dirlen <= MAXPATHLEN);
1670 memcpy(dirname, buf, dirlen);
1671 dirname[dirlen] = '\0';
1672 }
1673 /* Open the directory and search the entries for an exact match. */
1674 dirp = opendir(dirname);
1675 if (dirp) {
1676 char *nameWithExt = buf + len - namelen;
1677 while ((dp = readdir(dirp)) != NULL) {
1678 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001679#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001680 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001681#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001682 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001683#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001684 if (thislen >= namelen &&
1685 strcmp(dp->d_name, nameWithExt) == 0) {
1686 (void)closedir(dirp);
1687 return 1; /* Found */
1688 }
1689 }
1690 (void)closedir(dirp);
1691 }
1692 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001693
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001694/* RISC OS */
1695#elif defined(RISCOS)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001696 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1697 char buf2[MAXPATHLEN+2];
1698 char *nameWithExt = buf+len-namelen;
1699 int canonlen;
1700 os_error *e;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001701
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001702 if (Py_GETENV("PYTHONCASEOK") != NULL)
1703 return 1;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001704
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001705 /* workaround:
1706 append wildcard, otherwise case of filename wouldn't be touched */
1707 strcpy(buf2, buf);
1708 strcat(buf2, "*");
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001709
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001710 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1711 canonlen = MAXPATHLEN+1-canonlen;
1712 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1713 return 0;
1714 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1715 return 1; /* match */
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001716
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001717 return 0;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001718
Andrew MacIntyred9400542002-02-26 11:41:34 +00001719/* OS/2 */
1720#elif defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001721 HDIR hdir = 1;
1722 ULONG srchcnt = 1;
1723 FILEFINDBUF3 ffbuf;
1724 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001725
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001726 if (Py_GETENV("PYTHONCASEOK") != NULL)
1727 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001728
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001729 rc = DosFindFirst(buf,
1730 &hdir,
1731 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1732 &ffbuf, sizeof(ffbuf),
1733 &srchcnt,
1734 FIL_STANDARD);
1735 if (rc != NO_ERROR)
1736 return 0;
1737 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001738
Tim Peters50d8d372001-02-28 05:34:27 +00001739/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1740#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001741 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001742
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001743#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001744}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001745
Guido van Rossum0980bd91998-02-13 17:18:36 +00001746
Guido van Rossum197346f1997-10-31 18:38:52 +00001747#ifdef HAVE_STAT
1748/* Helper to look for __init__.py or __init__.py[co] in potential package */
1749static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001750find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001751{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001752 const size_t save_len = strlen(buf);
1753 size_t i = save_len;
1754 char *pname; /* pointer to start of __init__ */
1755 struct stat statbuf;
Guido van Rossum197346f1997-10-31 18:38:52 +00001756
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001757/* For calling case_ok(buf, len, namelen, name):
1758 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1759 * ^ ^ ^ ^
1760 * |--------------------- buf ---------------------|
1761 * |------------------- len ------------------|
1762 * |------ name -------|
1763 * |----- namelen -----|
Tim Peters0f9431f2001-07-05 03:47:53 +00001764 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001765 if (save_len + 13 >= MAXPATHLEN)
1766 return 0;
1767 buf[i++] = SEP;
1768 pname = buf + i;
1769 strcpy(pname, "__init__.py");
1770 if (stat(buf, &statbuf) == 0) {
1771 if (case_ok(buf,
1772 save_len + 9, /* len("/__init__") */
1773 8, /* len("__init__") */
1774 pname)) {
1775 buf[save_len] = '\0';
1776 return 1;
1777 }
1778 }
1779 i += strlen(pname);
1780 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
1781 if (stat(buf, &statbuf) == 0) {
1782 if (case_ok(buf,
1783 save_len + 9, /* len("/__init__") */
1784 8, /* len("__init__") */
1785 pname)) {
1786 buf[save_len] = '\0';
1787 return 1;
1788 }
1789 }
1790 buf[save_len] = '\0';
1791 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00001792}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001793
1794#else
1795
1796#ifdef RISCOS
1797static int
1798find_init_module(buf)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001799 char *buf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001800{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001801 int save_len = strlen(buf);
1802 int i = save_len;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001803
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001804 if (save_len + 13 >= MAXPATHLEN)
1805 return 0;
1806 buf[i++] = SEP;
1807 strcpy(buf+i, "__init__/py");
1808 if (isfile(buf)) {
1809 buf[save_len] = '\0';
1810 return 1;
1811 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001812
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001813 if (Py_OptimizeFlag)
1814 strcpy(buf+i, "o");
1815 else
1816 strcpy(buf+i, "c");
1817 if (isfile(buf)) {
1818 buf[save_len] = '\0';
1819 return 1;
1820 }
1821 buf[save_len] = '\0';
1822 return 0;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001823}
1824#endif /*RISCOS*/
1825
Guido van Rossum197346f1997-10-31 18:38:52 +00001826#endif /* HAVE_STAT */
1827
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001828
Tim Petersdbd9ba62000-07-09 03:09:57 +00001829static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001830
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001831/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001832 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001833
Guido van Rossum79f25d91997-04-29 20:08:16 +00001834static PyObject *
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001835load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001836{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001837 PyObject *modules;
1838 PyObject *m;
1839 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001840
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001841 /* First check that there's an open file (if we need one) */
1842 switch (type) {
1843 case PY_SOURCE:
1844 case PY_COMPILED:
1845 if (fp == NULL) {
1846 PyErr_Format(PyExc_ValueError,
1847 "file object required for import (type code %d)",
1848 type);
1849 return NULL;
1850 }
1851 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001852
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001853 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001854
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001855 case PY_SOURCE:
1856 m = load_source_module(name, pathname, fp);
1857 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001858
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001859 case PY_COMPILED:
1860 m = load_compiled_module(name, pathname, fp);
1861 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001862
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001863#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001864 case C_EXTENSION:
1865 m = _PyImport_LoadDynamicModule(name, pathname, fp);
1866 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001867#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001868
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001869 case PKG_DIRECTORY:
1870 m = load_package(name, pathname);
1871 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001872
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001873 case C_BUILTIN:
1874 case PY_FROZEN:
1875 if (pathname != NULL && pathname[0] != '\0')
1876 name = pathname;
1877 if (type == C_BUILTIN)
1878 err = init_builtin(name);
1879 else
1880 err = PyImport_ImportFrozenModule(name);
1881 if (err < 0)
1882 return NULL;
1883 if (err == 0) {
1884 PyErr_Format(PyExc_ImportError,
1885 "Purported %s module %.200s not found",
1886 type == C_BUILTIN ?
1887 "builtin" : "frozen",
1888 name);
1889 return NULL;
1890 }
1891 modules = PyImport_GetModuleDict();
1892 m = PyDict_GetItemString(modules, name);
1893 if (m == NULL) {
1894 PyErr_Format(
1895 PyExc_ImportError,
1896 "%s module %.200s not properly initialized",
1897 type == C_BUILTIN ?
1898 "builtin" : "frozen",
1899 name);
1900 return NULL;
1901 }
1902 Py_INCREF(m);
1903 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001904
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001905 case IMP_HOOK: {
1906 if (loader == NULL) {
1907 PyErr_SetString(PyExc_ImportError,
1908 "import hook without loader");
1909 return NULL;
1910 }
1911 m = PyObject_CallMethod(loader, "load_module", "s", name);
1912 break;
1913 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001914
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001915 default:
1916 PyErr_Format(PyExc_ImportError,
1917 "Don't know how to import %.200s (type code %d)",
1918 name, type);
1919 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001920
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001921 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001922
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001923 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001924}
1925
1926
1927/* Initialize a built-in module.
Brett Cannon5a9aa4f2006-10-03 21:58:55 +00001928 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001929 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001930
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001931static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001932init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001933{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001934 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001935
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001936 if (_PyImport_FindExtension(name, name) != NULL)
1937 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001938
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001939 for (p = PyImport_Inittab; p->name != NULL; p++) {
1940 if (strcmp(name, p->name) == 0) {
1941 if (p->initfunc == NULL) {
1942 PyErr_Format(PyExc_ImportError,
1943 "Cannot re-init internal module %.200s",
1944 name);
1945 return -1;
1946 }
1947 if (Py_VerboseFlag)
1948 PySys_WriteStderr("import %s # builtin\n", name);
1949 (*p->initfunc)();
1950 if (PyErr_Occurred())
1951 return -1;
1952 if (_PyImport_FixupExtension(name, name) == NULL)
1953 return -1;
1954 return 1;
1955 }
1956 }
1957 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001958}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001959
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001960
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001961/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001962
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001963static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001964find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001965{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001966 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001967
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001968 for (p = PyImport_FrozenModules; ; p++) {
1969 if (p->name == NULL)
1970 return NULL;
1971 if (strcmp(p->name, name) == 0)
1972 break;
1973 }
1974 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001975}
1976
Guido van Rossum79f25d91997-04-29 20:08:16 +00001977static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001978get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001979{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001980 struct _frozen *p = find_frozen(name);
1981 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001982
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001983 if (p == NULL) {
1984 PyErr_Format(PyExc_ImportError,
1985 "No such frozen object named %.200s",
1986 name);
1987 return NULL;
1988 }
1989 if (p->code == NULL) {
1990 PyErr_Format(PyExc_ImportError,
1991 "Excluded frozen object named %.200s",
1992 name);
1993 return NULL;
1994 }
1995 size = p->size;
1996 if (size < 0)
1997 size = -size;
1998 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001999}
2000
2001/* Initialize a frozen module.
2002 Return 1 for succes, 0 if the module is not found, and -1 with
2003 an exception set if the initialization failed.
2004 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002005
2006int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002007PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002008{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002009 struct _frozen *p = find_frozen(name);
2010 PyObject *co;
2011 PyObject *m;
2012 int ispackage;
2013 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002014
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002015 if (p == NULL)
2016 return 0;
2017 if (p->code == NULL) {
2018 PyErr_Format(PyExc_ImportError,
2019 "Excluded frozen object named %.200s",
2020 name);
2021 return -1;
2022 }
2023 size = p->size;
2024 ispackage = (size < 0);
2025 if (ispackage)
2026 size = -size;
2027 if (Py_VerboseFlag)
2028 PySys_WriteStderr("import %s # frozen%s\n",
2029 name, ispackage ? " package" : "");
2030 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2031 if (co == NULL)
2032 return -1;
2033 if (!PyCode_Check(co)) {
2034 PyErr_Format(PyExc_TypeError,
2035 "frozen object %.200s is not a code object",
2036 name);
2037 goto err_return;
2038 }
2039 if (ispackage) {
2040 /* Set __path__ to the package name */
2041 PyObject *d, *s;
2042 int err;
2043 m = PyImport_AddModule(name);
2044 if (m == NULL)
2045 goto err_return;
2046 d = PyModule_GetDict(m);
2047 s = PyString_InternFromString(name);
2048 if (s == NULL)
2049 goto err_return;
2050 err = PyDict_SetItemString(d, "__path__", s);
2051 Py_DECREF(s);
2052 if (err != 0)
2053 goto err_return;
2054 }
2055 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
2056 if (m == NULL)
2057 goto err_return;
2058 Py_DECREF(co);
2059 Py_DECREF(m);
2060 return 1;
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002061err_return:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002062 Py_DECREF(co);
2063 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002064}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002065
2066
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002067/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002068 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002069
Guido van Rossum79f25d91997-04-29 20:08:16 +00002070PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002071PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002072{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002073 PyObject *pname;
2074 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002075
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002076 pname = PyString_FromString(name);
2077 if (pname == NULL)
2078 return NULL;
2079 result = PyImport_Import(pname);
2080 Py_DECREF(pname);
2081 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002082}
2083
Christian Heimes000a0742008-01-03 22:16:32 +00002084/* Import a module without blocking
2085 *
2086 * At first it tries to fetch the module from sys.modules. If the module was
2087 * never loaded before it loads it with PyImport_ImportModule() unless another
2088 * thread holds the import lock. In the latter case the function raises an
2089 * ImportError instead of blocking.
2090 *
2091 * Returns the module object with incremented ref count.
2092 */
2093PyObject *
2094PyImport_ImportModuleNoBlock(const char *name)
2095{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002096 PyObject *result;
2097 PyObject *modules;
Victor Stinner871a0fb2011-09-02 00:21:36 +02002098#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002099 long me;
Victor Stinner871a0fb2011-09-02 00:21:36 +02002100#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002101
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002102 /* Try to get the module from sys.modules[name] */
2103 modules = PyImport_GetModuleDict();
2104 if (modules == NULL)
2105 return NULL;
Christian Heimes000a0742008-01-03 22:16:32 +00002106
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002107 result = PyDict_GetItemString(modules, name);
2108 if (result != NULL) {
2109 Py_INCREF(result);
2110 return result;
2111 }
2112 else {
2113 PyErr_Clear();
2114 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002115#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002116 /* check the import lock
2117 * me might be -1 but I ignore the error here, the lock function
2118 * takes care of the problem */
2119 me = PyThread_get_thread_ident();
2120 if (import_lock_thread == -1 || import_lock_thread == me) {
2121 /* no thread or me is holding the lock */
2122 return PyImport_ImportModule(name);
2123 }
2124 else {
2125 PyErr_Format(PyExc_ImportError,
2126 "Failed to import %.200s because the import lock"
2127 "is held by another thread.",
2128 name);
2129 return NULL;
2130 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002131#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002132 return PyImport_ImportModule(name);
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002133#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002134}
2135
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002136/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002137static PyObject *get_parent(PyObject *globals, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002138 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002139static PyObject *load_next(PyObject *mod, PyObject *altmod,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002140 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002141static int mark_miss(char *name);
2142static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002143 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002144static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002145
2146/* The Magnum Opus of dotted-name import :-) */
2147
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002148static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002149import_module_level(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002150 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002151{
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002152 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002153 Py_ssize_t buflen = 0;
2154 PyObject *parent, *head, *next, *tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002155
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002156 if (strchr(name, '/') != NULL
Christian Heimes3403f152008-01-09 19:56:33 +00002157#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002158 || strchr(name, '\\') != NULL
Christian Heimes3403f152008-01-09 19:56:33 +00002159#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002160 ) {
2161 PyErr_SetString(PyExc_ImportError,
2162 "Import by filename is not supported.");
2163 return NULL;
2164 }
Christian Heimes3403f152008-01-09 19:56:33 +00002165
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002166 buf = PyMem_MALLOC(MAXPATHLEN+1);
2167 if (buf == NULL) {
2168 return PyErr_NoMemory();
2169 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002170 parent = get_parent(globals, buf, &buflen, level);
2171 if (parent == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002172 goto error_exit;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002173
Brett Cannoneb3cd302010-05-20 18:37:55 +00002174 head = load_next(parent, level < 0 ? Py_None : parent, &name, buf,
2175 &buflen);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002176 if (head == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002177 goto error_exit;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002178
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002179 tail = head;
2180 Py_INCREF(tail);
2181 while (name) {
2182 next = load_next(tail, tail, &name, buf, &buflen);
2183 Py_DECREF(tail);
2184 if (next == NULL) {
2185 Py_DECREF(head);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002186 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002187 }
2188 tail = next;
2189 }
2190 if (tail == Py_None) {
2191 /* If tail is Py_None, both get_parent and load_next found
2192 an empty module name: someone called __import__("") or
2193 doctored faulty bytecode */
2194 Py_DECREF(tail);
2195 Py_DECREF(head);
2196 PyErr_SetString(PyExc_ValueError,
2197 "Empty module name");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002198 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002199 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002200
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002201 if (fromlist != NULL) {
2202 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2203 fromlist = NULL;
2204 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002205
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002206 if (fromlist == NULL) {
2207 Py_DECREF(tail);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002208 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002209 return head;
2210 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002211
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002212 Py_DECREF(head);
2213 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
2214 Py_DECREF(tail);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002215 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002216 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002217
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002218 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002219 return tail;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002220
2221error_exit:
2222 PyMem_FREE(buf);
2223 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002224}
2225
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002226PyObject *
2227PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002228 PyObject *fromlist, int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002229{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002230 PyObject *result;
2231 _PyImport_AcquireLock();
2232 result = import_module_level(name, globals, locals, fromlist, level);
2233 if (_PyImport_ReleaseLock() < 0) {
2234 Py_XDECREF(result);
2235 PyErr_SetString(PyExc_RuntimeError,
2236 "not holding the import lock");
2237 return NULL;
2238 }
2239 return result;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002240}
2241
Fred Drake87590902004-05-28 20:21:36 +00002242/* Return the package that an import is being performed in. If globals comes
2243 from the module foo.bar.bat (not itself a package), this returns the
2244 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Georg Brandl5f6861d2006-05-28 21:57:35 +00002245 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002246
2247 The *name* of the returned package is returned in buf, with the length of
2248 the name in *p_buflen.
2249
2250 If globals doesn't come from a package or a module in a package, or a
2251 corresponding entry is not found in sys.modules, Py_None is returned.
2252*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002253static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002254get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002255{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002256 static PyObject *namestr = NULL;
2257 static PyObject *pathstr = NULL;
2258 static PyObject *pkgstr = NULL;
2259 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2260 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002261
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002262 if (globals == NULL || !PyDict_Check(globals) || !level)
2263 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002264
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002265 if (namestr == NULL) {
2266 namestr = PyString_InternFromString("__name__");
2267 if (namestr == NULL)
2268 return NULL;
2269 }
2270 if (pathstr == NULL) {
2271 pathstr = PyString_InternFromString("__path__");
2272 if (pathstr == NULL)
2273 return NULL;
2274 }
2275 if (pkgstr == NULL) {
2276 pkgstr = PyString_InternFromString("__package__");
2277 if (pkgstr == NULL)
2278 return NULL;
2279 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002280
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002281 *buf = '\0';
2282 *p_buflen = 0;
2283 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002284
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002285 if ((pkgname != NULL) && (pkgname != Py_None)) {
2286 /* __package__ is set, so use it */
2287 Py_ssize_t len;
2288 if (!PyString_Check(pkgname)) {
2289 PyErr_SetString(PyExc_ValueError,
2290 "__package__ set to non-string");
2291 return NULL;
2292 }
2293 len = PyString_GET_SIZE(pkgname);
2294 if (len == 0) {
2295 if (level > 0) {
2296 PyErr_SetString(PyExc_ValueError,
2297 "Attempted relative import in non-package");
2298 return NULL;
2299 }
2300 return Py_None;
2301 }
2302 if (len > MAXPATHLEN) {
2303 PyErr_SetString(PyExc_ValueError,
2304 "Package name too long");
2305 return NULL;
2306 }
2307 strcpy(buf, PyString_AS_STRING(pkgname));
2308 } else {
2309 /* __package__ not set, so figure it out and set it */
2310 modname = PyDict_GetItem(globals, namestr);
2311 if (modname == NULL || !PyString_Check(modname))
2312 return Py_None;
Brett Cannonb166afc2010-05-05 20:25:47 +00002313
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002314 modpath = PyDict_GetItem(globals, pathstr);
2315 if (modpath != NULL) {
2316 /* __path__ is set, so modname is already the package name */
2317 Py_ssize_t len = PyString_GET_SIZE(modname);
2318 int error;
2319 if (len > MAXPATHLEN) {
2320 PyErr_SetString(PyExc_ValueError,
2321 "Module name too long");
2322 return NULL;
2323 }
2324 strcpy(buf, PyString_AS_STRING(modname));
2325 error = PyDict_SetItem(globals, pkgstr, modname);
2326 if (error) {
2327 PyErr_SetString(PyExc_ValueError,
2328 "Could not set __package__");
2329 return NULL;
2330 }
2331 } else {
2332 /* Normal module, so work out the package name if any */
2333 char *start = PyString_AS_STRING(modname);
2334 char *lastdot = strrchr(start, '.');
2335 size_t len;
2336 int error;
2337 if (lastdot == NULL && level > 0) {
2338 PyErr_SetString(PyExc_ValueError,
2339 "Attempted relative import in non-package");
2340 return NULL;
2341 }
2342 if (lastdot == NULL) {
2343 error = PyDict_SetItem(globals, pkgstr, Py_None);
2344 if (error) {
2345 PyErr_SetString(PyExc_ValueError,
2346 "Could not set __package__");
2347 return NULL;
2348 }
2349 return Py_None;
2350 }
2351 len = lastdot - start;
2352 if (len >= MAXPATHLEN) {
2353 PyErr_SetString(PyExc_ValueError,
2354 "Module name too long");
2355 return NULL;
2356 }
2357 strncpy(buf, start, len);
2358 buf[len] = '\0';
2359 pkgname = PyString_FromString(buf);
2360 if (pkgname == NULL) {
2361 return NULL;
2362 }
2363 error = PyDict_SetItem(globals, pkgstr, pkgname);
2364 Py_DECREF(pkgname);
2365 if (error) {
2366 PyErr_SetString(PyExc_ValueError,
2367 "Could not set __package__");
2368 return NULL;
2369 }
2370 }
2371 }
2372 while (--level > 0) {
2373 char *dot = strrchr(buf, '.');
2374 if (dot == NULL) {
2375 PyErr_SetString(PyExc_ValueError,
2376 "Attempted relative import beyond "
2377 "toplevel package");
2378 return NULL;
2379 }
2380 *dot = '\0';
2381 }
2382 *p_buflen = strlen(buf);
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002383
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002384 modules = PyImport_GetModuleDict();
2385 parent = PyDict_GetItemString(modules, buf);
2386 if (parent == NULL) {
2387 if (orig_level < 1) {
2388 PyObject *err_msg = PyString_FromFormat(
2389 "Parent module '%.200s' not found "
2390 "while handling absolute import", buf);
2391 if (err_msg == NULL) {
2392 return NULL;
2393 }
2394 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2395 PyString_AsString(err_msg), 1)) {
2396 *buf = '\0';
2397 *p_buflen = 0;
2398 parent = Py_None;
2399 }
2400 Py_DECREF(err_msg);
2401 } else {
2402 PyErr_Format(PyExc_SystemError,
2403 "Parent module '%.200s' not loaded, "
2404 "cannot perform relative import", buf);
2405 }
2406 }
2407 return parent;
2408 /* We expect, but can't guarantee, if parent != None, that:
2409 - parent.__name__ == buf
2410 - parent.__dict__ is globals
2411 If this is violated... Who cares? */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002412}
2413
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002414/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002415static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002416load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002417 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002418{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002419 char *name = *p_name;
2420 char *dot = strchr(name, '.');
2421 size_t len;
2422 char *p;
2423 PyObject *result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002424
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002425 if (strlen(name) == 0) {
2426 /* completely empty module name should only happen in
2427 'from . import' (or '__import__("")')*/
2428 Py_INCREF(mod);
2429 *p_name = NULL;
2430 return mod;
2431 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002432
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002433 if (dot == NULL) {
2434 *p_name = NULL;
2435 len = strlen(name);
2436 }
2437 else {
2438 *p_name = dot+1;
2439 len = dot-name;
2440 }
2441 if (len == 0) {
2442 PyErr_SetString(PyExc_ValueError,
2443 "Empty module name");
2444 return NULL;
2445 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002446
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002447 p = buf + *p_buflen;
2448 if (p != buf)
2449 *p++ = '.';
2450 if (p+len-buf >= MAXPATHLEN) {
2451 PyErr_SetString(PyExc_ValueError,
2452 "Module name too long");
2453 return NULL;
2454 }
2455 strncpy(p, name, len);
2456 p[len] = '\0';
2457 *p_buflen = p+len-buf;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002458
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002459 result = import_submodule(mod, p, buf);
2460 if (result == Py_None && altmod != mod) {
2461 Py_DECREF(result);
2462 /* Here, altmod must be None and mod must not be None */
2463 result = import_submodule(altmod, p, p);
2464 if (result != NULL && result != Py_None) {
2465 if (mark_miss(buf) != 0) {
2466 Py_DECREF(result);
2467 return NULL;
2468 }
2469 strncpy(buf, name, len);
2470 buf[len] = '\0';
2471 *p_buflen = len;
2472 }
2473 }
2474 if (result == NULL)
2475 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002476
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002477 if (result == Py_None) {
2478 Py_DECREF(result);
2479 PyErr_Format(PyExc_ImportError,
2480 "No module named %.200s", name);
2481 return NULL;
2482 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002483
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002484 return result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002485}
2486
2487static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002488mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002489{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002490 PyObject *modules = PyImport_GetModuleDict();
2491 return PyDict_SetItemString(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002492}
2493
2494static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002495ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002496 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002497{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002498 int i;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002499
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002500 if (!PyObject_HasAttrString(mod, "__path__"))
2501 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002502
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002503 for (i = 0; ; i++) {
2504 PyObject *item = PySequence_GetItem(fromlist, i);
2505 int hasit;
2506 if (item == NULL) {
2507 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2508 PyErr_Clear();
2509 return 1;
2510 }
2511 return 0;
2512 }
2513 if (!PyString_Check(item)) {
2514 PyErr_SetString(PyExc_TypeError,
2515 "Item in ``from list'' not a string");
2516 Py_DECREF(item);
2517 return 0;
2518 }
2519 if (PyString_AS_STRING(item)[0] == '*') {
2520 PyObject *all;
2521 Py_DECREF(item);
2522 /* See if the package defines __all__ */
2523 if (recursive)
2524 continue; /* Avoid endless recursion */
2525 all = PyObject_GetAttrString(mod, "__all__");
2526 if (all == NULL)
2527 PyErr_Clear();
2528 else {
2529 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
2530 Py_DECREF(all);
2531 if (!ret)
2532 return 0;
2533 }
2534 continue;
2535 }
2536 hasit = PyObject_HasAttr(mod, item);
2537 if (!hasit) {
2538 char *subname = PyString_AS_STRING(item);
2539 PyObject *submod;
2540 char *p;
2541 if (buflen + strlen(subname) >= MAXPATHLEN) {
2542 PyErr_SetString(PyExc_ValueError,
2543 "Module name too long");
2544 Py_DECREF(item);
2545 return 0;
2546 }
2547 p = buf + buflen;
2548 *p++ = '.';
2549 strcpy(p, subname);
2550 submod = import_submodule(mod, subname, buf);
2551 Py_XDECREF(submod);
2552 if (submod == NULL) {
2553 Py_DECREF(item);
2554 return 0;
2555 }
2556 }
2557 Py_DECREF(item);
2558 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002559
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002560 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002561}
2562
Neil Schemenauer00b09662003-06-16 21:03:07 +00002563static int
2564add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002565 PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00002566{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002567 if (mod == Py_None)
2568 return 1;
2569 /* Irrespective of the success of this load, make a
2570 reference to it in the parent package module. A copy gets
2571 saved in the modules dictionary under the full name, so get a
2572 reference from there, if need be. (The exception is when the
2573 load failed with a SyntaxError -- then there's no trace in
2574 sys.modules. In that case, of course, do nothing extra.) */
2575 if (submod == NULL) {
2576 submod = PyDict_GetItemString(modules, fullname);
2577 if (submod == NULL)
2578 return 1;
2579 }
2580 if (PyModule_Check(mod)) {
2581 /* We can't use setattr here since it can give a
2582 * spurious warning if the submodule name shadows a
2583 * builtin name */
2584 PyObject *dict = PyModule_GetDict(mod);
2585 if (!dict)
2586 return 0;
2587 if (PyDict_SetItemString(dict, subname, submod) < 0)
2588 return 0;
2589 }
2590 else {
2591 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2592 return 0;
2593 }
2594 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00002595}
2596
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002597static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002598import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002599{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002600 PyObject *modules = PyImport_GetModuleDict();
2601 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002602
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002603 /* Require:
2604 if mod == None: subname == fullname
2605 else: mod.__name__ + "." + subname == fullname
2606 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002607
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002608 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
2609 Py_INCREF(m);
2610 }
2611 else {
2612 PyObject *path, *loader = NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002613 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002614 struct filedescr *fdp;
2615 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002616
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002617 if (mod == Py_None)
2618 path = NULL;
2619 else {
2620 path = PyObject_GetAttrString(mod, "__path__");
2621 if (path == NULL) {
2622 PyErr_Clear();
2623 Py_INCREF(Py_None);
2624 return Py_None;
2625 }
2626 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002627
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002628 buf = PyMem_MALLOC(MAXPATHLEN+1);
2629 if (buf == NULL) {
2630 return PyErr_NoMemory();
2631 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002632 buf[0] = '\0';
2633 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2634 &fp, &loader);
2635 Py_XDECREF(path);
2636 if (fdp == NULL) {
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002637 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002638 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2639 return NULL;
2640 PyErr_Clear();
2641 Py_INCREF(Py_None);
2642 return Py_None;
2643 }
2644 m = load_module(fullname, fp, buf, fdp->type, loader);
2645 Py_XDECREF(loader);
2646 if (fp)
2647 fclose(fp);
2648 if (!add_submodule(mod, m, fullname, subname, modules)) {
2649 Py_XDECREF(m);
2650 m = NULL;
2651 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002652 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002653 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002654
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002655 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002656}
2657
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002658
2659/* Re-import a module of any kind and return its module object, WITH
2660 INCREMENTED REFERENCE COUNT */
2661
Guido van Rossum79f25d91997-04-29 20:08:16 +00002662PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002663PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002664{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002665 PyInterpreterState *interp = PyThreadState_Get()->interp;
2666 PyObject *modules_reloading = interp->modules_reloading;
2667 PyObject *modules = PyImport_GetModuleDict();
2668 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
2669 char *name, *subname;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002670 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002671 struct filedescr *fdp;
2672 FILE *fp = NULL;
2673 PyObject *newm;
Brett Cannonb166afc2010-05-05 20:25:47 +00002674
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002675 if (modules_reloading == NULL) {
2676 Py_FatalError("PyImport_ReloadModule: "
2677 "no modules_reloading dictionary!");
2678 return NULL;
2679 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002680
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002681 if (m == NULL || !PyModule_Check(m)) {
2682 PyErr_SetString(PyExc_TypeError,
2683 "reload() argument must be module");
2684 return NULL;
2685 }
2686 name = PyModule_GetName(m);
2687 if (name == NULL)
2688 return NULL;
2689 if (m != PyDict_GetItemString(modules, name)) {
2690 PyErr_Format(PyExc_ImportError,
2691 "reload(): module %.200s not in sys.modules",
2692 name);
2693 return NULL;
2694 }
2695 existing_m = PyDict_GetItemString(modules_reloading, name);
2696 if (existing_m != NULL) {
2697 /* Due to a recursive reload, this module is already
2698 being reloaded. */
2699 Py_INCREF(existing_m);
2700 return existing_m;
2701 }
2702 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2703 return NULL;
Collin Winter276887b2007-03-12 16:11:39 +00002704
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002705 subname = strrchr(name, '.');
2706 if (subname == NULL)
2707 subname = name;
2708 else {
2709 PyObject *parentname, *parent;
2710 parentname = PyString_FromStringAndSize(name, (subname-name));
2711 if (parentname == NULL) {
2712 imp_modules_reloading_clear();
2713 return NULL;
2714 }
2715 parent = PyDict_GetItem(modules, parentname);
2716 if (parent == NULL) {
2717 PyErr_Format(PyExc_ImportError,
2718 "reload(): parent %.200s not in sys.modules",
2719 PyString_AS_STRING(parentname));
2720 Py_DECREF(parentname);
2721 imp_modules_reloading_clear();
2722 return NULL;
2723 }
2724 Py_DECREF(parentname);
2725 subname++;
2726 path = PyObject_GetAttrString(parent, "__path__");
2727 if (path == NULL)
2728 PyErr_Clear();
2729 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002730 buf = PyMem_MALLOC(MAXPATHLEN+1);
2731 if (buf == NULL) {
2732 Py_XDECREF(path);
2733 return PyErr_NoMemory();
2734 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002735 buf[0] = '\0';
2736 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
2737 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002738
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002739 if (fdp == NULL) {
2740 Py_XDECREF(loader);
2741 imp_modules_reloading_clear();
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002742 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002743 return NULL;
2744 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002745
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002746 newm = load_module(name, fp, buf, fdp->type, loader);
2747 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002748
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002749 if (fp)
2750 fclose(fp);
2751 if (newm == NULL) {
2752 /* load_module probably removed name from modules because of
2753 * the error. Put back the original module object. We're
2754 * going to return NULL in this case regardless of whether
2755 * replacing name succeeds, so the return value is ignored.
2756 */
2757 PyDict_SetItemString(modules, name, m);
2758 }
2759 imp_modules_reloading_clear();
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002760 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002761 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002762}
2763
2764
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002765/* Higher-level import emulator which emulates the "import" statement
2766 more accurately -- it invokes the __import__() function from the
2767 builtins of the current globals. This means that the import is
2768 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002769 environment, e.g. by "rexec".
2770 A dummy list ["__doc__"] is passed as the 4th argument so that
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002771 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00002772 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002773
2774PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002775PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002776{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002777 static PyObject *silly_list = NULL;
2778 static PyObject *builtins_str = NULL;
2779 static PyObject *import_str = NULL;
2780 PyObject *globals = NULL;
2781 PyObject *import = NULL;
2782 PyObject *builtins = NULL;
2783 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002784
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002785 /* Initialize constant string objects */
2786 if (silly_list == NULL) {
2787 import_str = PyString_InternFromString("__import__");
2788 if (import_str == NULL)
2789 return NULL;
2790 builtins_str = PyString_InternFromString("__builtins__");
2791 if (builtins_str == NULL)
2792 return NULL;
2793 silly_list = Py_BuildValue("[s]", "__doc__");
2794 if (silly_list == NULL)
2795 return NULL;
2796 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002797
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002798 /* Get the builtins from current globals */
2799 globals = PyEval_GetGlobals();
2800 if (globals != NULL) {
2801 Py_INCREF(globals);
2802 builtins = PyObject_GetItem(globals, builtins_str);
2803 if (builtins == NULL)
2804 goto err;
2805 }
2806 else {
2807 /* No globals -- use standard builtins, and fake globals */
2808 builtins = PyImport_ImportModuleLevel("__builtin__",
2809 NULL, NULL, NULL, 0);
2810 if (builtins == NULL)
2811 return NULL;
2812 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2813 if (globals == NULL)
2814 goto err;
2815 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002816
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002817 /* Get the __import__ function from the builtins */
2818 if (PyDict_Check(builtins)) {
2819 import = PyObject_GetItem(builtins, import_str);
2820 if (import == NULL)
2821 PyErr_SetObject(PyExc_KeyError, import_str);
2822 }
2823 else
2824 import = PyObject_GetAttr(builtins, import_str);
2825 if (import == NULL)
2826 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002827
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002828 /* Call the __import__ function with the proper argument list
2829 * Always use absolute import here. */
2830 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2831 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002832
2833 err:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002834 Py_XDECREF(globals);
2835 Py_XDECREF(builtins);
2836 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002837
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002838 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002839}
2840
2841
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002842/* Module 'imp' provides Python access to the primitives used for
2843 importing modules.
2844*/
2845
Guido van Rossum79f25d91997-04-29 20:08:16 +00002846static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002847imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002848{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002849 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002850
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002851 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2852 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2853 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2854 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002855
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002856 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002857}
2858
Guido van Rossum79f25d91997-04-29 20:08:16 +00002859static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002860imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002861{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002862 PyObject *list;
2863 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002864
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002865 list = PyList_New(0);
2866 if (list == NULL)
2867 return NULL;
2868 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2869 PyObject *item = Py_BuildValue("ssi",
2870 fdp->suffix, fdp->mode, fdp->type);
2871 if (item == NULL) {
2872 Py_DECREF(list);
2873 return NULL;
2874 }
2875 if (PyList_Append(list, item) < 0) {
2876 Py_DECREF(list);
2877 Py_DECREF(item);
2878 return NULL;
2879 }
2880 Py_DECREF(item);
2881 }
2882 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002883}
2884
Guido van Rossum79f25d91997-04-29 20:08:16 +00002885static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002886call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002887{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002888 extern int fclose(FILE *);
2889 PyObject *fob, *ret;
2890 struct filedescr *fdp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002891 char *pathname;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002892 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002893
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002894 pathname = PyMem_MALLOC(MAXPATHLEN+1);
2895 if (pathname == NULL) {
2896 return PyErr_NoMemory();
2897 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002898 pathname[0] = '\0';
2899 if (path == Py_None)
2900 path = NULL;
2901 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002902 if (fdp == NULL) {
2903 PyMem_FREE(pathname);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002904 return NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002905 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002906 if (fp != NULL) {
2907 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002908 if (fob == NULL) {
2909 PyMem_FREE(pathname);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002910 return NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002911 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002912 }
2913 else {
2914 fob = Py_None;
2915 Py_INCREF(fob);
2916 }
2917 ret = Py_BuildValue("Os(ssi)",
2918 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
2919 Py_DECREF(fob);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002920 PyMem_FREE(pathname);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002921 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002922}
2923
Guido van Rossum79f25d91997-04-29 20:08:16 +00002924static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002925imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002926{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002927 char *name;
2928 PyObject *path = NULL;
2929 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
2930 return NULL;
2931 return call_find_module(name, path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002932}
2933
2934static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002935imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002936{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002937 char *name;
2938 int ret;
2939 PyObject *m;
2940 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
2941 return NULL;
2942 ret = init_builtin(name);
2943 if (ret < 0)
2944 return NULL;
2945 if (ret == 0) {
2946 Py_INCREF(Py_None);
2947 return Py_None;
2948 }
2949 m = PyImport_AddModule(name);
2950 Py_XINCREF(m);
2951 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002952}
2953
Guido van Rossum79f25d91997-04-29 20:08:16 +00002954static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002955imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002956{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002957 char *name;
2958 int ret;
2959 PyObject *m;
2960 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
2961 return NULL;
2962 ret = PyImport_ImportFrozenModule(name);
2963 if (ret < 0)
2964 return NULL;
2965 if (ret == 0) {
2966 Py_INCREF(Py_None);
2967 return Py_None;
2968 }
2969 m = PyImport_AddModule(name);
2970 Py_XINCREF(m);
2971 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002972}
2973
Guido van Rossum79f25d91997-04-29 20:08:16 +00002974static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002975imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002976{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002977 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002978
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002979 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
2980 return NULL;
2981 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002982}
2983
Guido van Rossum79f25d91997-04-29 20:08:16 +00002984static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002985imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002986{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002987 char *name;
2988 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
2989 return NULL;
2990 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002991}
2992
Guido van Rossum79f25d91997-04-29 20:08:16 +00002993static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002994imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002995{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002996 char *name;
2997 struct _frozen *p;
2998 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
2999 return NULL;
3000 p = find_frozen(name);
3001 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003002}
3003
3004static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003005get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003006{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003007 FILE *fp;
3008 if (fob == NULL) {
3009 if (mode[0] == 'U')
3010 mode = "r" PY_STDIOTEXTMODE;
3011 fp = fopen(pathname, mode);
3012 if (fp == NULL)
3013 PyErr_SetFromErrno(PyExc_IOError);
3014 }
3015 else {
3016 fp = PyFile_AsFile(fob);
3017 if (fp == NULL)
3018 PyErr_SetString(PyExc_ValueError,
3019 "bad/closed file object");
3020 }
3021 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003022}
3023
Guido van Rossum79f25d91997-04-29 20:08:16 +00003024static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003025imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003026{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003027 char *name;
3028 char *pathname;
3029 PyObject *fob = NULL;
3030 PyObject *m;
3031 FILE *fp;
3032 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
3033 &PyFile_Type, &fob))
3034 return NULL;
3035 fp = get_file(pathname, fob, "rb");
3036 if (fp == NULL)
3037 return NULL;
3038 m = load_compiled_module(name, pathname, fp);
3039 if (fob == NULL)
3040 fclose(fp);
3041 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003042}
3043
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003044#ifdef HAVE_DYNAMIC_LOADING
3045
Guido van Rossum79f25d91997-04-29 20:08:16 +00003046static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003047imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003048{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003049 char *name;
3050 char *pathname;
3051 PyObject *fob = NULL;
3052 PyObject *m;
3053 FILE *fp = NULL;
3054 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
3055 &PyFile_Type, &fob))
3056 return NULL;
3057 if (fob) {
3058 fp = get_file(pathname, fob, "r");
3059 if (fp == NULL)
3060 return NULL;
3061 }
3062 m = _PyImport_LoadDynamicModule(name, pathname, fp);
3063 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003064}
3065
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003066#endif /* HAVE_DYNAMIC_LOADING */
3067
Guido van Rossum79f25d91997-04-29 20:08:16 +00003068static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003069imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003070{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003071 char *name;
3072 char *pathname;
3073 PyObject *fob = NULL;
3074 PyObject *m;
3075 FILE *fp;
3076 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
3077 &PyFile_Type, &fob))
3078 return NULL;
3079 fp = get_file(pathname, fob, "r");
3080 if (fp == NULL)
3081 return NULL;
3082 m = load_source_module(name, pathname, fp);
3083 if (fob == NULL)
3084 fclose(fp);
3085 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003086}
3087
Guido van Rossum79f25d91997-04-29 20:08:16 +00003088static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003089imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003090{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003091 char *name;
3092 PyObject *fob;
3093 char *pathname;
3094 char *suffix; /* Unused */
3095 char *mode;
3096 int type;
3097 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003098
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003099 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
3100 &name, &fob, &pathname,
3101 &suffix, &mode, &type))
3102 return NULL;
3103 if (*mode) {
3104 /* Mode must start with 'r' or 'U' and must not contain '+'.
3105 Implicit in this test is the assumption that the mode
3106 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003107
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003108 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3109 PyErr_Format(PyExc_ValueError,
3110 "invalid file open mode %.200s", mode);
3111 return NULL;
3112 }
3113 }
3114 if (fob == Py_None)
3115 fp = NULL;
3116 else {
3117 if (!PyFile_Check(fob)) {
3118 PyErr_SetString(PyExc_ValueError,
3119 "load_module arg#2 should be a file or None");
3120 return NULL;
3121 }
3122 fp = get_file(pathname, fob, mode);
3123 if (fp == NULL)
3124 return NULL;
3125 }
3126 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003127}
3128
3129static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003130imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003131{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003132 char *name;
3133 char *pathname;
3134 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
3135 return NULL;
3136 return load_package(name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003137}
3138
3139static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003140imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003141{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003142 char *name;
3143 if (!PyArg_ParseTuple(args, "s:new_module", &name))
3144 return NULL;
3145 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003146}
3147
Brett Cannon3aa2a492008-08-06 22:28:09 +00003148static PyObject *
3149imp_reload(PyObject *self, PyObject *v)
3150{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003151 return PyImport_ReloadModule(v);
Brett Cannon3aa2a492008-08-06 22:28:09 +00003152}
3153
3154
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003155/* Doc strings */
3156
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003157PyDoc_STRVAR(doc_imp,
3158"This module provides the components needed to build your own\n\
3159__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003160
Brett Cannon3aa2a492008-08-06 22:28:09 +00003161PyDoc_STRVAR(doc_reload,
3162"reload(module) -> module\n\
3163\n\
3164Reload the module. The module must have been successfully imported before.");
3165
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003166PyDoc_STRVAR(doc_find_module,
3167"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003168Search for a module. If path is omitted or None, search for a\n\
3169built-in, frozen or special module and continue search in sys.path.\n\
3170The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003171package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003172
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003173PyDoc_STRVAR(doc_load_module,
3174"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003175Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003176The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003177
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003178PyDoc_STRVAR(doc_get_magic,
3179"get_magic() -> string\n\
3180Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003181
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003182PyDoc_STRVAR(doc_get_suffixes,
3183"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003184Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003185that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003186
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003187PyDoc_STRVAR(doc_new_module,
3188"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003189Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003190The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003191
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003192PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003193"lock_held() -> boolean\n\
3194Return True if the import lock is currently held, else False.\n\
3195On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003196
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003197PyDoc_STRVAR(doc_acquire_lock,
3198"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003199Acquires the interpreter's import lock for the current thread.\n\
3200This lock should be used by import hooks to ensure thread-safety\n\
3201when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003202On platforms without threads, this function does nothing.");
3203
3204PyDoc_STRVAR(doc_release_lock,
3205"release_lock() -> None\n\
3206Release the interpreter's import lock.\n\
3207On platforms without threads, this function does nothing.");
3208
Guido van Rossum79f25d91997-04-29 20:08:16 +00003209static PyMethodDef imp_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003210 {"reload", imp_reload, METH_O, doc_reload},
3211 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3212 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3213 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3214 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3215 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3216 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3217 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3218 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
3219 /* The rest are obsolete */
3220 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3221 {"init_builtin", imp_init_builtin, METH_VARARGS},
3222 {"init_frozen", imp_init_frozen, METH_VARARGS},
3223 {"is_builtin", imp_is_builtin, METH_VARARGS},
3224 {"is_frozen", imp_is_frozen, METH_VARARGS},
3225 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003226#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003227 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003228#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003229 {"load_package", imp_load_package, METH_VARARGS},
3230 {"load_source", imp_load_source, METH_VARARGS},
3231 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003232};
3233
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003234static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003235setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003236{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003237 PyObject *v;
3238 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003239
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003240 v = PyInt_FromLong((long)value);
3241 err = PyDict_SetItemString(d, name, v);
3242 Py_XDECREF(v);
3243 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003244}
3245
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003246typedef struct {
3247 PyObject_HEAD
3248} NullImporter;
3249
3250static int
3251NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3252{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003253 char *path;
3254 Py_ssize_t pathlen;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003255
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003256 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3257 return -1;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003258
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003259 if (!PyArg_ParseTuple(args, "s:NullImporter",
3260 &path))
3261 return -1;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003262
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003263 pathlen = strlen(path);
3264 if (pathlen == 0) {
3265 PyErr_SetString(PyExc_ImportError, "empty pathname");
3266 return -1;
3267 } else {
Jason R. Coombs0737b722012-01-13 17:59:05 -05003268 if(isdir(path)) {
3269 PyErr_SetString(PyExc_ImportError,
3270 "existing directory");
3271 return -1;
3272 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003273 }
3274 return 0;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003275}
3276
3277static PyObject *
3278NullImporter_find_module(NullImporter *self, PyObject *args)
3279{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003280 Py_RETURN_NONE;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003281}
3282
3283static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003284 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3285 "Always return None"
3286 },
3287 {NULL} /* Sentinel */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003288};
3289
3290
Nick Coghlan327a39b2007-11-18 11:56:28 +00003291PyTypeObject PyNullImporter_Type = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003292 PyVarObject_HEAD_INIT(NULL, 0)
3293 "imp.NullImporter", /*tp_name*/
3294 sizeof(NullImporter), /*tp_basicsize*/
3295 0, /*tp_itemsize*/
3296 0, /*tp_dealloc*/
3297 0, /*tp_print*/
3298 0, /*tp_getattr*/
3299 0, /*tp_setattr*/
3300 0, /*tp_compare*/
3301 0, /*tp_repr*/
3302 0, /*tp_as_number*/
3303 0, /*tp_as_sequence*/
3304 0, /*tp_as_mapping*/
3305 0, /*tp_hash */
3306 0, /*tp_call*/
3307 0, /*tp_str*/
3308 0, /*tp_getattro*/
3309 0, /*tp_setattro*/
3310 0, /*tp_as_buffer*/
3311 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3312 "Null importer object", /* tp_doc */
3313 0, /* tp_traverse */
3314 0, /* tp_clear */
3315 0, /* tp_richcompare */
3316 0, /* tp_weaklistoffset */
3317 0, /* tp_iter */
3318 0, /* tp_iternext */
3319 NullImporter_methods, /* tp_methods */
3320 0, /* tp_members */
3321 0, /* tp_getset */
3322 0, /* tp_base */
3323 0, /* tp_dict */
3324 0, /* tp_descr_get */
3325 0, /* tp_descr_set */
3326 0, /* tp_dictoffset */
3327 (initproc)NullImporter_init, /* tp_init */
3328 0, /* tp_alloc */
3329 PyType_GenericNew /* tp_new */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003330};
3331
3332
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003333PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003334initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003335{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003336 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003337
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003338 if (PyType_Ready(&PyNullImporter_Type) < 0)
3339 goto failure;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003340
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003341 m = Py_InitModule4("imp", imp_methods, doc_imp,
3342 NULL, PYTHON_API_VERSION);
3343 if (m == NULL)
3344 goto failure;
3345 d = PyModule_GetDict(m);
3346 if (d == NULL)
3347 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003348
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003349 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3350 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3351 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3352 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3353 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3354 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3355 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3356 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
3357 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
3358 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003359
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003360 Py_INCREF(&PyNullImporter_Type);
3361 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003362 failure:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003363 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003364}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003365
3366
Guido van Rossumb18618d2000-05-03 23:44:39 +00003367/* API for embedding applications that want to add their own entries
3368 to the table of built-in modules. This should normally be called
3369 *before* Py_Initialize(). When the table resize fails, -1 is
3370 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003371
3372 After a similar function by Just van Rossum. */
3373
3374int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003375PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003376{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003377 static struct _inittab *our_copy = NULL;
3378 struct _inittab *p;
3379 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003380
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003381 /* Count the number of entries in both tables */
3382 for (n = 0; newtab[n].name != NULL; n++)
3383 ;
3384 if (n == 0)
3385 return 0; /* Nothing to do */
3386 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3387 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003388
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003389 /* Allocate new memory for the combined table */
3390 p = our_copy;
3391 PyMem_RESIZE(p, struct _inittab, i+n+1);
3392 if (p == NULL)
3393 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003394
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003395 /* Copy the tables into the new memory */
3396 if (our_copy != PyImport_Inittab)
3397 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3398 PyImport_Inittab = our_copy = p;
3399 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003400
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003401 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003402}
3403
3404/* Shorthand to add a single entry given a name and a function */
3405
3406int
Brett Cannonc4f90eb2009-04-02 03:17:39 +00003407PyImport_AppendInittab(const char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003408{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003409 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003410
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003411 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003412
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003413 newtab[0].name = (char *)name;
3414 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003415
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003416 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003417}
Anthony Baxterac6bd462006-04-13 02:06:09 +00003418
3419#ifdef __cplusplus
3420}
3421#endif