blob: 53c9b293e9ed12bd661387ef8c388be53b28566e [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Module definition and import implementation */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00005
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "Python-ast.h"
Kristján Valur Jónsson67387fb2007-04-25 00:17:39 +00007#undef Yield /* undefine macro conflicting with winbase.h */
Neal Norwitzadb69fc2005-12-17 20:54:49 +00008#include "pyarena.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00009#include "pythonrun.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000010#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000011#include "marshal.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000012#include "code.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000013#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000014#include "eval.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000015#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000016#include "importdl.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000017
Guido van Rossum55a83382000-09-20 20:31:38 +000018#ifdef HAVE_FCNTL_H
19#include <fcntl.h>
20#endif
Anthony Baxterac6bd462006-04-13 02:06:09 +000021#ifdef __cplusplus
Brett Cannonb166afc2010-05-05 20:25:47 +000022extern "C" {
Anthony Baxterac6bd462006-04-13 02:06:09 +000023#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000024
Christian Heimes5e8e6d22008-02-23 23:59:45 +000025#ifdef MS_WINDOWS
26/* for stat.st_mode */
27typedef unsigned short mode_t;
28#endif
29
Guido van Rossum21d335e1993-10-15 13:01:11 +000030
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000031/* Magic word to reject .pyc files generated by other Python versions.
32 It should change for each incompatible change to the bytecode.
33
34 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000035 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000036 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000037
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000038 The magic numbers must be spaced apart atleast 2 values, as the
39 -U interpeter flag will cause MAGIC+1 being used. They have been
40 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000041
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000042 There were a variety of old schemes for setting the magic number.
43 The current working scheme is to increment the previous value by
44 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000045
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000046 Known values:
47 Python 1.5: 20121
48 Python 1.5.1: 20121
49 Python 1.5.2: 20121
Skip Montanaro4ec3c262006-03-25 14:12:03 +000050 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000051 Python 2.0: 50823
52 Python 2.0.1: 50823
53 Python 2.1: 60202
54 Python 2.1.1: 60202
55 Python 2.1.2: 60202
56 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000057 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000058 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000059 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000060 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000061 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000062 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000063 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000064 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000065 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000066 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Neal Norwitz0d62a062006-07-30 06:53:31 +000067 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
68 Python 2.5b3: 62111 (fix wrong code: x += yield)
Neal Norwitz9a70f952006-08-04 05:12:19 +000069 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
Antoine Pitrouc83ea132010-05-09 14:46:46 +000070 storing constants that should have been removed)
Neal Norwitzdac090d2006-09-05 03:53:08 +000071 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
Raymond Hettingereffde122007-12-18 18:26:18 +000072 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)
Nick Coghlan7af53be2008-03-07 14:13:28 +000073 Python 2.6a1: 62161 (WITH_CLEANUP optimization)
Antoine Pitroud0c35152008-12-17 00:38:28 +000074 Python 2.7a0: 62171 (optimize list comprehensions/change LIST_APPEND)
Jeffrey Yasskin68d68522009-02-28 19:03:21 +000075 Python 2.7a0: 62181 (optimize conditional branches:
Antoine Pitrouc83ea132010-05-09 14:46:46 +000076 introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE)
Benjamin Peterson1880d8b2009-05-25 13:13:44 +000077 Python 2.7a0 62191 (introduce SETUP_WITH)
Alexandre Vassalottiee936a22010-01-09 23:35:54 +000078 Python 2.7a0 62201 (introduce BUILD_SET)
Alexandre Vassalottib6465472010-01-11 22:36:12 +000079 Python 2.7a0 62211 (introduce MAP_ADD and SET_ADD)
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000080.
Tim Peters36515e22001-11-18 04:06:29 +000081*/
Alexandre Vassalottib6465472010-01-11 22:36:12 +000082#define MAGIC (62211 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000083
Guido van Rossum96774c12000-05-01 20:19:08 +000084/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000085 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000086 compiler works which are enabled by command line switches. */
Christian Heimes61e45902008-03-27 10:35:52 +000087static long pyc_magic = MAGIC;
Guido van Rossum96774c12000-05-01 20:19:08 +000088
Guido van Rossum25ce5661997-08-02 03:10:38 +000089/* See _PyImport_FixupExtension() below */
90static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000091
Guido van Rossum771c6c81997-10-31 18:37:24 +000092/* This table is defined in config.c: */
93extern struct _inittab _PyImport_Inittab[];
94
95struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000096
Guido van Rossumed1170e1999-12-20 21:23:41 +000097/* these tables define the module suffixes that Python recognizes */
98struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +000099
100#ifdef RISCOS
101static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000102 {"/py", "U", PY_SOURCE},
103 {"/pyc", "rb", PY_COMPILED},
104 {0, 0}
Guido van Rossum48a680c2001-03-02 06:34:14 +0000105};
106#else
Guido van Rossumed1170e1999-12-20 21:23:41 +0000107static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000108 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000109#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000110 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000111#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000112 {".pyc", "rb", PY_COMPILED},
113 {0, 0}
Guido van Rossumed1170e1999-12-20 21:23:41 +0000114};
Guido van Rossum48a680c2001-03-02 06:34:14 +0000115#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000116
Jason R. Coombsfa93cf82012-01-13 17:37:18 -0500117#ifdef MS_WINDOWS
Matthias Klose92636bf2012-08-14 17:42:45 +0200118static int isdir(char *path) {
Jason R. Coombs0737b722012-01-13 17:59:05 -0500119 DWORD rv;
120 /* see issue1293 and issue3677:
121 * stat() on Windows doesn't recognise paths like
122 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
123 * Also reference issue6727:
124 * stat() on Windows is broken and doesn't resolve symlinks properly.
125 */
126 rv = GetFileAttributesA(path);
127 return rv != INVALID_FILE_ATTRIBUTES && rv & FILE_ATTRIBUTE_DIRECTORY;
Jason R. Coombsfa93cf82012-01-13 17:37:18 -0500128}
129#else
Jason R. Coombs0e17dfb2012-03-08 09:56:00 -0500130#ifdef HAVE_STAT
Matthias Klose92636bf2012-08-14 17:42:45 +0200131static int isdir(char *path) {
Jason R. Coombs925ff742012-01-13 17:12:25 -0500132 struct stat statbuf;
Jason R. Coombs0737b722012-01-13 17:59:05 -0500133 return stat(path, &statbuf) == 0 && S_ISDIR(statbuf.st_mode);
Jason R. Coombs925ff742012-01-13 17:12:25 -0500134}
135#else
Jason R. Coombsfa93cf82012-01-13 17:37:18 -0500136#ifdef RISCOS
Jason R. Coombs925ff742012-01-13 17:12:25 -0500137/* with RISCOS, isdir is in unixstuff */
Jason R. Coombsfa93cf82012-01-13 17:37:18 -0500138#else
Jason R. Coombs925ff742012-01-13 17:12:25 -0500139int isdir(char *path) {
Jason R. Coombs0737b722012-01-13 17:59:05 -0500140 return 0;
Jason R. Coombs925ff742012-01-13 17:12:25 -0500141}
Jason R. Coombsfa93cf82012-01-13 17:37:18 -0500142#endif /* RISCOS */
143#endif /* HAVE_STAT */
144#endif /* MS_WINDOWS */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000145
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000146/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000147
148void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000149_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000150{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000151 const struct filedescr *scan;
152 struct filedescr *filetab;
153 int countD = 0;
154 int countS = 0;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000155
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000156 /* prepare _PyImport_Filetab: copy entries from
157 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
158 */
Georg Brandladd36e52007-08-23 18:08:06 +0000159#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000160 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
161 ++countD;
Georg Brandladd36e52007-08-23 18:08:06 +0000162#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000163 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
164 ++countS;
165 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
166 if (filetab == NULL)
167 Py_FatalError("Can't initialize import file table.");
Georg Brandladd36e52007-08-23 18:08:06 +0000168#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000169 memcpy(filetab, _PyImport_DynLoadFiletab,
170 countD * sizeof(struct filedescr));
Georg Brandladd36e52007-08-23 18:08:06 +0000171#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000172 memcpy(filetab + countD, _PyImport_StandardFiletab,
173 countS * sizeof(struct filedescr));
174 filetab[countD + countS].suffix = NULL;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000175
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000176 _PyImport_Filetab = filetab;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000177
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000178 if (Py_OptimizeFlag) {
179 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
180 for (; filetab->suffix != NULL; filetab++) {
Guido van Rossum48a680c2001-03-02 06:34:14 +0000181#ifndef RISCOS
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000182 if (strcmp(filetab->suffix, ".pyc") == 0)
183 filetab->suffix = ".pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000184#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000185 if (strcmp(filetab->suffix, "/pyc") == 0)
186 filetab->suffix = "/pyo";
Guido van Rossum48a680c2001-03-02 06:34:14 +0000187#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000188 }
189 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000190
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000191 if (Py_UnicodeFlag) {
192 /* Fix the pyc_magic so that byte compiled code created
193 using the all-Unicode method doesn't interfere with
194 code created in normal operation mode. */
195 pyc_magic = MAGIC + 1;
196 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000197}
198
Guido van Rossum25ce5661997-08-02 03:10:38 +0000199void
Just van Rossum52e14d62002-12-30 22:08:05 +0000200_PyImportHooks_Init(void)
201{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000202 PyObject *v, *path_hooks = NULL, *zimpimport;
203 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000204
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000205 /* adding sys.path_hooks and sys.path_importer_cache, setting up
206 zipimport */
207 if (PyType_Ready(&PyNullImporter_Type) < 0)
208 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000209
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000210 if (Py_VerboseFlag)
211 PySys_WriteStderr("# installing zipimport hook\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000212
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000213 v = PyList_New(0);
214 if (v == NULL)
215 goto error;
216 err = PySys_SetObject("meta_path", v);
217 Py_DECREF(v);
218 if (err)
219 goto error;
220 v = PyDict_New();
221 if (v == NULL)
222 goto error;
223 err = PySys_SetObject("path_importer_cache", v);
224 Py_DECREF(v);
225 if (err)
226 goto error;
227 path_hooks = PyList_New(0);
228 if (path_hooks == NULL)
229 goto error;
230 err = PySys_SetObject("path_hooks", path_hooks);
231 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000232 error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000233 PyErr_Print();
234 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
235 "path_importer_cache, or NullImporter failed"
236 );
237 }
Phillip J. Ebyf7575d02006-07-28 21:12:07 +0000238
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000239 zimpimport = PyImport_ImportModule("zipimport");
240 if (zimpimport == NULL) {
241 PyErr_Clear(); /* No zip import module -- okay */
242 if (Py_VerboseFlag)
243 PySys_WriteStderr("# can't import zipimport\n");
244 }
245 else {
246 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
247 "zipimporter");
248 Py_DECREF(zimpimport);
249 if (zipimporter == NULL) {
250 PyErr_Clear(); /* No zipimporter object -- okay */
251 if (Py_VerboseFlag)
252 PySys_WriteStderr(
253 "# can't import zipimport.zipimporter\n");
254 }
255 else {
256 /* sys.path_hooks.append(zipimporter) */
257 err = PyList_Append(path_hooks, zipimporter);
258 Py_DECREF(zipimporter);
259 if (err)
260 goto error;
261 if (Py_VerboseFlag)
262 PySys_WriteStderr(
263 "# installed zipimport hook\n");
264 }
265 }
266 Py_DECREF(path_hooks);
Just van Rossum52e14d62002-12-30 22:08:05 +0000267}
268
269void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000270_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000271{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000272 Py_XDECREF(extensions);
273 extensions = NULL;
274 PyMem_DEL(_PyImport_Filetab);
275 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000276}
277
278
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000279/* Locking primitives to prevent parallel imports of the same module
280 in different threads to return with a partially loaded module.
281 These calls are serialized by the global interpreter lock. */
282
283#ifdef WITH_THREAD
284
Guido van Rossum49b56061998-10-01 20:42:43 +0000285#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000286
Guido van Rossum65d5b571998-12-21 19:32:43 +0000287static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000288static long import_lock_thread = -1;
289static int import_lock_level = 0;
290
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000291void
292_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000293{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000294 long me = PyThread_get_thread_ident();
295 if (me == -1)
296 return; /* Too bad */
297 if (import_lock == NULL) {
298 import_lock = PyThread_allocate_lock();
299 if (import_lock == NULL)
300 return; /* Nothing much we can do. */
301 }
302 if (import_lock_thread == me) {
303 import_lock_level++;
304 return;
305 }
306 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
307 {
308 PyThreadState *tstate = PyEval_SaveThread();
309 PyThread_acquire_lock(import_lock, 1);
310 PyEval_RestoreThread(tstate);
311 }
312 import_lock_thread = me;
313 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000314}
315
Thomas Woutersc4dcb382009-09-16 19:55:54 +0000316int
317_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000318{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000319 long me = PyThread_get_thread_ident();
320 if (me == -1 || import_lock == NULL)
321 return 0; /* Too bad */
322 if (import_lock_thread != me)
323 return -1;
324 import_lock_level--;
325 if (import_lock_level == 0) {
326 import_lock_thread = -1;
327 PyThread_release_lock(import_lock);
328 }
329 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000330}
331
Gregory P. Smith9e5d1322010-03-01 01:22:39 +0000332/* This function is called from PyOS_AfterFork to ensure that newly
333 created child processes do not share locks with the parent.
334 We now acquire the import lock around fork() calls but on some platforms
335 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000336
337void
338_PyImport_ReInitLock(void)
339{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000340 if (import_lock != NULL)
341 import_lock = PyThread_allocate_lock();
342 import_lock_thread = -1;
343 import_lock_level = 0;
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000344}
345
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000346#endif
347
Tim Peters69232342001-08-30 05:16:13 +0000348static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000349imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000350{
Tim Peters69232342001-08-30 05:16:13 +0000351#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000352 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000353#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000354 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000355#endif
356}
357
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000358static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000359imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000360{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000361#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000362 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000363#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000364 Py_INCREF(Py_None);
365 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000366}
367
368static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000369imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000370{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000371#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000372 if (_PyImport_ReleaseLock() < 0) {
373 PyErr_SetString(PyExc_RuntimeError,
374 "not holding the import lock");
375 return NULL;
376 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000377#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000378 Py_INCREF(Py_None);
379 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000380}
381
Collin Winter276887b2007-03-12 16:11:39 +0000382static void
Neal Norwitz75c7c802007-03-13 05:31:38 +0000383imp_modules_reloading_clear(void)
Collin Winter276887b2007-03-12 16:11:39 +0000384{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000385 PyInterpreterState *interp = PyThreadState_Get()->interp;
386 if (interp->modules_reloading != NULL)
387 PyDict_Clear(interp->modules_reloading);
Collin Winter276887b2007-03-12 16:11:39 +0000388}
389
Guido van Rossum25ce5661997-08-02 03:10:38 +0000390/* Helper for sys */
391
392PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000393PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000394{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000395 PyInterpreterState *interp = PyThreadState_GET()->interp;
396 if (interp->modules == NULL)
397 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
398 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000399}
400
Guido van Rossum3f5da241990-12-20 15:06:42 +0000401
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000402/* List of names to clear in sys */
403static char* sys_deletes[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000404 "path", "argv", "ps1", "ps2", "exitfunc",
405 "exc_type", "exc_value", "exc_traceback",
406 "last_type", "last_value", "last_traceback",
407 "path_hooks", "path_importer_cache", "meta_path",
408 /* misc stuff */
409 "flags", "float_info",
410 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000411};
412
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000413static char* sys_files[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000414 "stdin", "__stdin__",
415 "stdout", "__stdout__",
416 "stderr", "__stderr__",
417 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000418};
419
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000420
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000421/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000422
Guido van Rossum3f5da241990-12-20 15:06:42 +0000423void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000424PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000425{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000426 Py_ssize_t pos, ndone;
427 char *name;
428 PyObject *key, *value, *dict;
429 PyInterpreterState *interp = PyThreadState_GET()->interp;
430 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000431
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000432 if (modules == NULL)
433 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000434
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000435 /* Delete some special variables first. These are common
436 places where user values hide and people complain when their
437 destructors fail. Since the modules containing them are
438 deleted *last* of all, they would come too late in the normal
439 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000440
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000441 value = PyDict_GetItemString(modules, "__builtin__");
442 if (value != NULL && PyModule_Check(value)) {
443 dict = PyModule_GetDict(value);
444 if (Py_VerboseFlag)
445 PySys_WriteStderr("# clear __builtin__._\n");
446 PyDict_SetItemString(dict, "_", Py_None);
447 }
448 value = PyDict_GetItemString(modules, "sys");
449 if (value != NULL && PyModule_Check(value)) {
450 char **p;
451 PyObject *v;
452 dict = PyModule_GetDict(value);
453 for (p = sys_deletes; *p != NULL; p++) {
454 if (Py_VerboseFlag)
455 PySys_WriteStderr("# clear sys.%s\n", *p);
456 PyDict_SetItemString(dict, *p, Py_None);
457 }
458 for (p = sys_files; *p != NULL; p+=2) {
459 if (Py_VerboseFlag)
460 PySys_WriteStderr("# restore sys.%s\n", *p);
461 v = PyDict_GetItemString(dict, *(p+1));
462 if (v == NULL)
463 v = Py_None;
464 PyDict_SetItemString(dict, *p, v);
465 }
466 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000467
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000468 /* First, delete __main__ */
469 value = PyDict_GetItemString(modules, "__main__");
470 if (value != NULL && PyModule_Check(value)) {
471 if (Py_VerboseFlag)
472 PySys_WriteStderr("# cleanup __main__\n");
473 _PyModule_Clear(value);
474 PyDict_SetItemString(modules, "__main__", Py_None);
475 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000476
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000477 /* The special treatment of __builtin__ here is because even
478 when it's not referenced as a module, its dictionary is
479 referenced by almost every module's __builtins__. Since
480 deleting a module clears its dictionary (even if there are
481 references left to it), we need to delete the __builtin__
482 module last. Likewise, we don't delete sys until the very
483 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000484
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000485 Also note that we 'delete' modules by replacing their entry
486 in the modules dict with None, rather than really deleting
487 them; this avoids a rehash of the modules dictionary and
488 also marks them as "non existent" so they won't be
489 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000490
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000491 /* Next, repeatedly delete modules with a reference count of
492 one (skipping __builtin__ and sys) and delete them */
493 do {
494 ndone = 0;
495 pos = 0;
496 while (PyDict_Next(modules, &pos, &key, &value)) {
497 if (value->ob_refcnt != 1)
498 continue;
499 if (PyString_Check(key) && PyModule_Check(value)) {
500 name = PyString_AS_STRING(key);
501 if (strcmp(name, "__builtin__") == 0)
502 continue;
503 if (strcmp(name, "sys") == 0)
504 continue;
505 if (Py_VerboseFlag)
506 PySys_WriteStderr(
507 "# cleanup[1] %s\n", name);
508 _PyModule_Clear(value);
509 PyDict_SetItem(modules, key, Py_None);
510 ndone++;
511 }
512 }
513 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000514
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000515 /* Next, delete all modules (still skipping __builtin__ and sys) */
516 pos = 0;
517 while (PyDict_Next(modules, &pos, &key, &value)) {
518 if (PyString_Check(key) && PyModule_Check(value)) {
519 name = PyString_AS_STRING(key);
520 if (strcmp(name, "__builtin__") == 0)
521 continue;
522 if (strcmp(name, "sys") == 0)
523 continue;
524 if (Py_VerboseFlag)
525 PySys_WriteStderr("# cleanup[2] %s\n", name);
526 _PyModule_Clear(value);
527 PyDict_SetItem(modules, key, Py_None);
528 }
529 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000530
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000531 /* Next, delete sys and __builtin__ (in that order) */
532 value = PyDict_GetItemString(modules, "sys");
533 if (value != NULL && PyModule_Check(value)) {
534 if (Py_VerboseFlag)
535 PySys_WriteStderr("# cleanup sys\n");
536 _PyModule_Clear(value);
537 PyDict_SetItemString(modules, "sys", Py_None);
538 }
539 value = PyDict_GetItemString(modules, "__builtin__");
540 if (value != NULL && PyModule_Check(value)) {
541 if (Py_VerboseFlag)
542 PySys_WriteStderr("# cleanup __builtin__\n");
543 _PyModule_Clear(value);
544 PyDict_SetItemString(modules, "__builtin__", Py_None);
545 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000546
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000547 /* Finally, clear and delete the modules directory */
548 PyDict_Clear(modules);
549 interp->modules = NULL;
550 Py_DECREF(modules);
551 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000552}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000553
554
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000555/* Helper for pythonrun.c -- return magic number */
556
557long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000558PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000559{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000560 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000561}
562
563
Guido van Rossum25ce5661997-08-02 03:10:38 +0000564/* Magic for extension modules (built-in as well as dynamically
565 loaded). To prevent initializing an extension module more than
566 once, we keep a static dictionary 'extensions' keyed by module name
567 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000568 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000569 dictionary is stored by calling _PyImport_FixupExtension()
570 immediately after the module initialization function succeeds. A
571 copy can be retrieved from there by calling
572 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000573
Guido van Rossum79f25d91997-04-29 20:08:16 +0000574PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000575_PyImport_FixupExtension(char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000576{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000577 PyObject *modules, *mod, *dict, *copy;
578 if (extensions == NULL) {
579 extensions = PyDict_New();
580 if (extensions == NULL)
581 return NULL;
582 }
583 modules = PyImport_GetModuleDict();
584 mod = PyDict_GetItemString(modules, name);
585 if (mod == NULL || !PyModule_Check(mod)) {
586 PyErr_Format(PyExc_SystemError,
587 "_PyImport_FixupExtension: module %.200s not loaded", name);
588 return NULL;
589 }
590 dict = PyModule_GetDict(mod);
591 if (dict == NULL)
592 return NULL;
593 copy = PyDict_Copy(dict);
594 if (copy == NULL)
595 return NULL;
596 PyDict_SetItemString(extensions, filename, copy);
597 Py_DECREF(copy);
598 return copy;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000599}
600
601PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000602_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000603{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000604 PyObject *dict, *mod, *mdict;
605 if (extensions == NULL)
606 return NULL;
607 dict = PyDict_GetItemString(extensions, filename);
608 if (dict == NULL)
609 return NULL;
610 mod = PyImport_AddModule(name);
611 if (mod == NULL)
612 return NULL;
613 mdict = PyModule_GetDict(mod);
614 if (mdict == NULL)
615 return NULL;
616 if (PyDict_Update(mdict, dict))
617 return NULL;
618 if (Py_VerboseFlag)
619 PySys_WriteStderr("import %s # previously loaded (%s)\n",
620 name, filename);
621 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000622}
623
624
625/* Get the module object corresponding to a module name.
626 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000627 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000628 Because the former action is most common, THIS DOES NOT RETURN A
629 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000630
Guido van Rossum79f25d91997-04-29 20:08:16 +0000631PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000632PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000633{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000634 PyObject *modules = PyImport_GetModuleDict();
635 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000636
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000637 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
638 PyModule_Check(m))
639 return m;
640 m = PyModule_New(name);
641 if (m == NULL)
642 return NULL;
643 if (PyDict_SetItemString(modules, name, m) != 0) {
644 Py_DECREF(m);
645 return NULL;
646 }
647 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000648
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000649 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000650}
651
Tim Peters1cd70172004-08-02 03:52:12 +0000652/* Remove name from sys.modules, if it's there. */
653static void
Benjamin Peterson06638732010-03-25 23:27:16 +0000654remove_module(const char *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000655{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000656 PyObject *modules = PyImport_GetModuleDict();
657 if (PyDict_GetItemString(modules, name) == NULL)
658 return;
659 if (PyDict_DelItemString(modules, name) < 0)
660 Py_FatalError("import: deleting existing key in"
661 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000662}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000663
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000664/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000665 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
666 * removed from sys.modules, to avoid leaving damaged module objects
667 * in sys.modules. The caller may wish to restore the original
668 * module object (if any) in this case; PyImport_ReloadModule is an
669 * example.
670 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000671PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000672PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000673{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000674 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000675}
676
677PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000678PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000679{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000680 PyObject *modules = PyImport_GetModuleDict();
681 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000682
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000683 m = PyImport_AddModule(name);
684 if (m == NULL)
685 return NULL;
686 /* If the module is being reloaded, we get the old module back
687 and re-use its dict to exec the new code. */
688 d = PyModule_GetDict(m);
689 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
690 if (PyDict_SetItemString(d, "__builtins__",
691 PyEval_GetBuiltins()) != 0)
692 goto error;
693 }
694 /* Remember the filename as the __file__ attribute */
695 v = NULL;
696 if (pathname != NULL) {
697 v = PyString_FromString(pathname);
698 if (v == NULL)
699 PyErr_Clear();
700 }
701 if (v == NULL) {
702 v = ((PyCodeObject *)co)->co_filename;
703 Py_INCREF(v);
704 }
705 if (PyDict_SetItemString(d, "__file__", v) != 0)
706 PyErr_Clear(); /* Not important enough to report */
707 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000708
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000709 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
710 if (v == NULL)
711 goto error;
712 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000713
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000714 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
715 PyErr_Format(PyExc_ImportError,
716 "Loaded module %.200s not found in sys.modules",
717 name);
718 return NULL;
719 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000720
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000721 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000722
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000723 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000724
725 error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000726 remove_module(name);
727 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000728}
729
730
731/* Given a pathname for a Python source file, fill a buffer with the
732 pathname for the corresponding compiled file. Return the pathname
733 for the compiled file, or NULL if there's no space in the buffer.
734 Doesn't set an exception. */
735
736static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000737make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000738{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000739 size_t len = strlen(pathname);
740 if (len+2 > buflen)
741 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000742
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000743#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000744 /* Treat .pyw as if it were .py. The case of ".pyw" must match
745 that used in _PyImport_StandardFiletab. */
746 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
747 --len; /* pretend 'w' isn't there */
Tim Petersc1731372001-08-04 08:12:36 +0000748#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000749 memcpy(buf, pathname, len);
750 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
751 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000752
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000753 return buf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000754}
755
756
757/* Given a pathname for a Python source file, its time of last
758 modification, and a pathname for a compiled file, check whether the
759 compiled file represents the same version of the source. If so,
760 return a FILE pointer for the compiled file, positioned just after
761 the header; if not, return NULL.
762 Doesn't set an exception. */
763
764static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000765check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000766{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000767 FILE *fp;
768 long magic;
769 long pyc_mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000770
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000771 fp = fopen(cpathname, "rb");
772 if (fp == NULL)
773 return NULL;
774 magic = PyMarshal_ReadLongFromFile(fp);
775 if (magic != pyc_magic) {
776 if (Py_VerboseFlag)
777 PySys_WriteStderr("# %s has bad magic\n", cpathname);
778 fclose(fp);
779 return NULL;
780 }
781 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
782 if (pyc_mtime != mtime) {
783 if (Py_VerboseFlag)
784 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
785 fclose(fp);
786 return NULL;
787 }
788 if (Py_VerboseFlag)
789 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
790 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000791}
792
793
794/* Read a code object from a file and check it for validity */
795
Guido van Rossum79f25d91997-04-29 20:08:16 +0000796static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000797read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000798{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000799 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000800
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000801 co = PyMarshal_ReadLastObjectFromFile(fp);
802 if (co == NULL)
803 return NULL;
804 if (!PyCode_Check(co)) {
805 PyErr_Format(PyExc_ImportError,
806 "Non-code object in %.200s", cpathname);
807 Py_DECREF(co);
808 return NULL;
809 }
810 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000811}
812
813
814/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000815 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000816
Guido van Rossum79f25d91997-04-29 20:08:16 +0000817static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000818load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000819{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000820 long magic;
821 PyCodeObject *co;
822 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000823
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000824 magic = PyMarshal_ReadLongFromFile(fp);
825 if (magic != pyc_magic) {
826 PyErr_Format(PyExc_ImportError,
827 "Bad magic number in %.200s", cpathname);
828 return NULL;
829 }
830 (void) PyMarshal_ReadLongFromFile(fp);
831 co = read_compiled_module(cpathname, fp);
832 if (co == NULL)
833 return NULL;
834 if (Py_VerboseFlag)
835 PySys_WriteStderr("import %s # precompiled from %s\n",
836 name, cpathname);
837 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
838 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000839
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000840 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000841}
842
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000843/* Parse a source file and return the corresponding code object */
844
Guido van Rossum79f25d91997-04-29 20:08:16 +0000845static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000846parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000847{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000848 PyCodeObject *co = NULL;
849 mod_ty mod;
850 PyCompilerFlags flags;
851 PyArena *arena = PyArena_New();
852 if (arena == NULL)
853 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000854
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000855 flags.cf_flags = 0;
Christian Heimes7f23d862008-03-26 22:51:58 +0000856
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000857 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, &flags,
858 NULL, arena);
859 if (mod) {
860 co = PyAST_Compile(mod, pathname, NULL, arena);
861 }
862 PyArena_Free(arena);
863 return co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000864}
865
866
Guido van Rossum55a83382000-09-20 20:31:38 +0000867/* Helper to open a bytecode file for writing in exclusive mode */
868
869static FILE *
Christian Heimes40346852008-02-23 17:52:07 +0000870open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +0000871{
872#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000873 /* Use O_EXCL to avoid a race condition when another process tries to
874 write the same file. When that happens, our open() call fails,
875 which is just fine (since it's only a cache).
876 XXX If the file exists and is writable but the directory is not
877 writable, the file will never be written. Oh well.
878 */
879 int fd;
880 (void) unlink(filename);
881 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
Tim Peters42c83af2000-09-29 04:03:10 +0000882#ifdef O_BINARY
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000883 |O_BINARY /* necessary for Windows */
Tim Peters42c83af2000-09-29 04:03:10 +0000884#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000885#ifdef __VMS
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000886 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000887#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000888 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000889#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000890 );
891 if (fd < 0)
892 return NULL;
893 return fdopen(fd, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +0000894#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000895 /* Best we can do -- on Windows this can't happen anyway */
896 return fopen(filename, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +0000897#endif
898}
899
900
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000901/* Write a compiled module to a file, placing the time of last
902 modification of its source into the header.
903 Errors are ignored, if a write error occurs an attempt is made to
904 remove the file. */
905
906static void
Christian Heimes40346852008-02-23 17:52:07 +0000907write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000908{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000909 FILE *fp;
910 time_t mtime = srcstat->st_mtime;
R. David Murray3310a102009-07-07 09:54:16 +0000911#ifdef MS_WINDOWS /* since Windows uses different permissions */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000912 mode_t mode = srcstat->st_mode & ~S_IEXEC;
R. David Murray3310a102009-07-07 09:54:16 +0000913#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000914 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
Brett Cannonb166afc2010-05-05 20:25:47 +0000915#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000916
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000917 fp = open_exclusive(cpathname, mode);
918 if (fp == NULL) {
919 if (Py_VerboseFlag)
920 PySys_WriteStderr(
921 "# can't create %s\n", cpathname);
922 return;
923 }
924 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
925 /* First write a 0 for mtime */
926 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
927 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
928 if (fflush(fp) != 0 || ferror(fp)) {
929 if (Py_VerboseFlag)
930 PySys_WriteStderr("# can't write %s\n", cpathname);
931 /* Don't keep partial file */
932 fclose(fp);
933 (void) unlink(cpathname);
934 return;
935 }
Antoine Pitrou6f25d752012-01-25 15:38:32 +0100936 /* Now write the true mtime (as a 32-bit field) */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000937 fseek(fp, 4L, 0);
Antoine Pitrou6f25d752012-01-25 15:38:32 +0100938 assert(mtime <= 0xFFFFFFFF);
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000939 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
940 fflush(fp);
941 fclose(fp);
942 if (Py_VerboseFlag)
943 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000944}
945
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000946static void
947update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
948{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000949 PyObject *constants, *tmp;
950 Py_ssize_t i, n;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000951
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000952 if (!_PyString_Eq(co->co_filename, oldname))
953 return;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000954
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000955 tmp = co->co_filename;
956 co->co_filename = newname;
957 Py_INCREF(co->co_filename);
958 Py_DECREF(tmp);
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000959
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000960 constants = co->co_consts;
961 n = PyTuple_GET_SIZE(constants);
962 for (i = 0; i < n; i++) {
963 tmp = PyTuple_GET_ITEM(constants, i);
964 if (PyCode_Check(tmp))
965 update_code_filenames((PyCodeObject *)tmp,
966 oldname, newname);
967 }
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000968}
969
970static int
971update_compiled_module(PyCodeObject *co, char *pathname)
972{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000973 PyObject *oldname, *newname;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000974
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000975 if (strcmp(PyString_AsString(co->co_filename), pathname) == 0)
976 return 0;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000977
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000978 newname = PyString_FromString(pathname);
979 if (newname == NULL)
980 return -1;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000981
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000982 oldname = co->co_filename;
983 Py_INCREF(oldname);
984 update_code_filenames(co, oldname, newname);
985 Py_DECREF(oldname);
986 Py_DECREF(newname);
987 return 1;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000988}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000989
990/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000991 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
992 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000993
Guido van Rossum79f25d91997-04-29 20:08:16 +0000994static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000995load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000996{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000997 struct stat st;
998 FILE *fpc;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -0700999 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001000 char *cpathname;
Antoine Pitrou284fa082012-05-09 13:24:31 +02001001 PyCodeObject *co = NULL;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001002 PyObject *m;
Brett Cannonb166afc2010-05-05 20:25:47 +00001003
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001004 if (fstat(fileno(fp), &st) != 0) {
1005 PyErr_Format(PyExc_RuntimeError,
1006 "unable to get file status from '%s'",
1007 pathname);
1008 return NULL;
1009 }
Antoine Pitrou0e5fd592012-01-25 03:31:39 +01001010 if (sizeof st.st_mtime > 4) {
1011 /* Python's .pyc timestamp handling presumes that the timestamp fits
1012 in 4 bytes. Since the code only does an equality comparison,
1013 ordering is not important and we can safely ignore the higher bits
1014 (collisions are extremely unlikely).
1015 */
1016 st.st_mtime &= 0xFFFFFFFF;
1017 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001018 buf = PyMem_MALLOC(MAXPATHLEN+1);
1019 if (buf == NULL) {
1020 return PyErr_NoMemory();
1021 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001022 cpathname = make_compiled_pathname(pathname, buf,
1023 (size_t)MAXPATHLEN + 1);
1024 if (cpathname != NULL &&
1025 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
1026 co = read_compiled_module(cpathname, fpc);
1027 fclose(fpc);
1028 if (co == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001029 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001030 if (update_compiled_module(co, pathname) < 0)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001031 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001032 if (Py_VerboseFlag)
1033 PySys_WriteStderr("import %s # precompiled from %s\n",
1034 name, cpathname);
1035 pathname = cpathname;
1036 }
1037 else {
1038 co = parse_source_module(pathname, fp);
1039 if (co == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001040 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001041 if (Py_VerboseFlag)
1042 PySys_WriteStderr("import %s # from %s\n",
1043 name, pathname);
1044 if (cpathname) {
1045 PyObject *ro = PySys_GetObject("dont_write_bytecode");
Antoine Pitrouc5bef752012-08-15 23:16:51 +02001046 int b = (ro == NULL) ? 0 : PyObject_IsTrue(ro);
1047 if (b < 0)
1048 goto error_exit;
1049 if (!b)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001050 write_compiled_module(co, cpathname, &st);
1051 }
1052 }
1053 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
1054 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001055
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001056 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001057 return m;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001058
1059error_exit:
Antoine Pitrou284fa082012-05-09 13:24:31 +02001060 Py_XDECREF(co);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001061 PyMem_FREE(buf);
1062 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001063}
1064
1065
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001066/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001067static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1068static struct filedescr *find_module(char *, char *, PyObject *,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001069 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001070static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001071
1072/* Load a package and return its module object WITH INCREMENTED
1073 REFERENCE COUNT */
1074
1075static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001076load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001077{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001078 PyObject *m, *d;
1079 PyObject *file = NULL;
1080 PyObject *path = NULL;
1081 int err;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001082 char *buf = NULL;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001083 FILE *fp = NULL;
1084 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001085
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001086 m = PyImport_AddModule(name);
1087 if (m == NULL)
1088 return NULL;
1089 if (Py_VerboseFlag)
1090 PySys_WriteStderr("import %s # directory %s\n",
1091 name, pathname);
1092 d = PyModule_GetDict(m);
1093 file = PyString_FromString(pathname);
1094 if (file == NULL)
1095 goto error;
1096 path = Py_BuildValue("[O]", file);
1097 if (path == NULL)
1098 goto error;
1099 err = PyDict_SetItemString(d, "__file__", file);
1100 if (err == 0)
1101 err = PyDict_SetItemString(d, "__path__", path);
1102 if (err != 0)
1103 goto error;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001104 buf = PyMem_MALLOC(MAXPATHLEN+1);
1105 if (buf == NULL) {
1106 PyErr_NoMemory();
1107 goto error;
1108 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001109 buf[0] = '\0';
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001110 fdp = find_module(name, "__init__", path, buf, MAXPATHLEN+1, &fp, NULL);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001111 if (fdp == NULL) {
1112 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1113 PyErr_Clear();
1114 Py_INCREF(m);
1115 }
1116 else
1117 m = NULL;
1118 goto cleanup;
1119 }
1120 m = load_module(name, fp, buf, fdp->type, NULL);
1121 if (fp != NULL)
1122 fclose(fp);
1123 goto cleanup;
Tim Peters1cd70172004-08-02 03:52:12 +00001124
1125 error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001126 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001127 cleanup:
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001128 if (buf)
1129 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001130 Py_XDECREF(path);
1131 Py_XDECREF(file);
1132 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001133}
1134
1135
1136/* Helper to test for built-in module */
1137
1138static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001139is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001140{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001141 int i;
1142 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1143 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1144 if (PyImport_Inittab[i].initfunc == NULL)
1145 return -1;
1146 else
1147 return 1;
1148 }
1149 }
1150 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001151}
1152
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001153
Just van Rossum52e14d62002-12-30 22:08:05 +00001154/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1155 possibly by fetching it from the path_importer_cache dict. If it
Brett Cannon94b69f62006-09-28 22:10:14 +00001156 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001157 that can handle the path item. Return None if no hook could;
1158 this tells our caller it should fall back to the builtin
1159 import mechanism. Cache the result in path_importer_cache.
1160 Returns a borrowed reference. */
1161
1162static PyObject *
1163get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001164 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001165{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001166 PyObject *importer;
1167 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001168
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001169 /* These conditions are the caller's responsibility: */
1170 assert(PyList_Check(path_hooks));
1171 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001172
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001173 nhooks = PyList_Size(path_hooks);
1174 if (nhooks < 0)
1175 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001176
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001177 importer = PyDict_GetItem(path_importer_cache, p);
1178 if (importer != NULL)
1179 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001180
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001181 /* set path_importer_cache[p] to None to avoid recursion */
1182 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1183 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001184
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001185 for (j = 0; j < nhooks; j++) {
1186 PyObject *hook = PyList_GetItem(path_hooks, j);
1187 if (hook == NULL)
1188 return NULL;
1189 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1190 if (importer != NULL)
1191 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001192
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001193 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1194 return NULL;
1195 }
1196 PyErr_Clear();
1197 }
1198 if (importer == NULL) {
1199 importer = PyObject_CallFunctionObjArgs(
1200 (PyObject *)&PyNullImporter_Type, p, NULL
1201 );
1202 if (importer == NULL) {
1203 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1204 PyErr_Clear();
1205 return Py_None;
1206 }
1207 }
1208 }
1209 if (importer != NULL) {
1210 int err = PyDict_SetItem(path_importer_cache, p, importer);
1211 Py_DECREF(importer);
1212 if (err != 0)
1213 return NULL;
1214 }
1215 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001216}
1217
Nick Coghlan327a39b2007-11-18 11:56:28 +00001218PyAPI_FUNC(PyObject *)
1219PyImport_GetImporter(PyObject *path) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001220 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Nick Coghlan327a39b2007-11-18 11:56:28 +00001221
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001222 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1223 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1224 importer = get_path_importer(path_importer_cache,
1225 path_hooks, path);
1226 }
1227 }
1228 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1229 return importer;
Nick Coghlan327a39b2007-11-18 11:56:28 +00001230}
1231
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001232/* Search the path (default sys.path) for a module. Return the
1233 corresponding filedescr struct, and (via return arguments) the
1234 pathname and an open file. Return NULL if the module is not found. */
1235
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001236#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001237extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001238 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001239#endif
1240
Martin v. Löwis18e16552006-02-15 17:27:45 +00001241static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001242static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001243static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001244
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001245static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001246find_module(char *fullname, char *subname, PyObject *path, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001247 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001248{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001249 Py_ssize_t i, npath;
1250 size_t len, namelen;
1251 struct filedescr *fdp = NULL;
1252 char *filemode;
1253 FILE *fp = NULL;
1254 PyObject *path_hooks, *path_importer_cache;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001255 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1256 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1257 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001258 char *name;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001259#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001260 size_t saved_len;
1261 size_t saved_namelen;
1262 char *saved_buf = NULL;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001263#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001264 if (p_loader != NULL)
1265 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001266
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001267 if (strlen(subname) > MAXPATHLEN) {
1268 PyErr_SetString(PyExc_OverflowError,
1269 "module name is too long");
1270 return NULL;
1271 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001272 name = PyMem_MALLOC(MAXPATHLEN+1);
1273 if (name == NULL) {
Gregory P. Smitha72aa842012-04-18 16:41:56 -07001274 PyErr_NoMemory();
1275 return NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001276 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001277 strcpy(name, subname);
Just van Rossum52e14d62002-12-30 22:08:05 +00001278
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001279 /* sys.meta_path import hook */
1280 if (p_loader != NULL) {
1281 PyObject *meta_path;
Just van Rossum52e14d62002-12-30 22:08:05 +00001282
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001283 meta_path = PySys_GetObject("meta_path");
1284 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001285 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001286 "sys.meta_path must be a list of "
1287 "import hooks");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001288 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001289 }
1290 Py_INCREF(meta_path); /* zap guard */
1291 npath = PyList_Size(meta_path);
1292 for (i = 0; i < npath; i++) {
1293 PyObject *loader;
1294 PyObject *hook = PyList_GetItem(meta_path, i);
1295 loader = PyObject_CallMethod(hook, "find_module",
1296 "sO", fullname,
1297 path != NULL ?
1298 path : Py_None);
1299 if (loader == NULL) {
1300 Py_DECREF(meta_path);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001301 goto error_exit; /* true error */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001302 }
1303 if (loader != Py_None) {
1304 /* a loader was found */
1305 *p_loader = loader;
1306 Py_DECREF(meta_path);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001307 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001308 return &importhookdescr;
1309 }
1310 Py_DECREF(loader);
1311 }
1312 Py_DECREF(meta_path);
1313 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001314
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001315 if (path != NULL && PyString_Check(path)) {
1316 /* The only type of submodule allowed inside a "frozen"
1317 package are other frozen modules or packages. */
1318 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1319 PyErr_SetString(PyExc_ImportError,
1320 "full frozen module name too long");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001321 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001322 }
1323 strcpy(buf, PyString_AsString(path));
1324 strcat(buf, ".");
1325 strcat(buf, name);
1326 strcpy(name, buf);
1327 if (find_frozen(name) != NULL) {
1328 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001329 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001330 return &fd_frozen;
1331 }
1332 PyErr_Format(PyExc_ImportError,
1333 "No frozen submodule named %.200s", name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001334 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001335 }
1336 if (path == NULL) {
1337 if (is_builtin(name)) {
1338 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001339 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001340 return &fd_builtin;
1341 }
1342 if ((find_frozen(name)) != NULL) {
1343 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001344 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001345 return &fd_frozen;
1346 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001347
Guido van Rossumac279101996-08-22 23:10:58 +00001348#ifdef MS_COREDLL
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001349 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1350 if (fp != NULL) {
1351 *p_fp = fp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001352 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001353 return fdp;
1354 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001355#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001356 path = PySys_GetObject("path");
1357 }
1358 if (path == NULL || !PyList_Check(path)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001359 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001360 "sys.path must be a list of directory names");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001361 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001362 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001363
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001364 path_hooks = PySys_GetObject("path_hooks");
1365 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001366 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001367 "sys.path_hooks must be a list of "
1368 "import hooks");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001369 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001370 }
1371 path_importer_cache = PySys_GetObject("path_importer_cache");
1372 if (path_importer_cache == NULL ||
1373 !PyDict_Check(path_importer_cache)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001374 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001375 "sys.path_importer_cache must be a dict");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001376 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001377 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001378
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001379 npath = PyList_Size(path);
1380 namelen = strlen(name);
1381 for (i = 0; i < npath; i++) {
1382 PyObject *copy = NULL;
1383 PyObject *v = PyList_GetItem(path, i);
1384 if (!v)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001385 goto error_exit;
Walter Dörwald3430d702002-06-17 10:43:59 +00001386#ifdef Py_USING_UNICODE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001387 if (PyUnicode_Check(v)) {
1388 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1389 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1390 if (copy == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001391 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001392 v = copy;
1393 }
1394 else
Walter Dörwald3430d702002-06-17 10:43:59 +00001395#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001396 if (!PyString_Check(v))
1397 continue;
1398 len = PyString_GET_SIZE(v);
1399 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1400 Py_XDECREF(copy);
1401 continue; /* Too long */
1402 }
1403 strcpy(buf, PyString_AS_STRING(v));
1404 if (strlen(buf) != len) {
1405 Py_XDECREF(copy);
1406 continue; /* v contains '\0' */
1407 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001408
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001409 /* sys.path_hooks import hook */
1410 if (p_loader != NULL) {
1411 PyObject *importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001412
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001413 importer = get_path_importer(path_importer_cache,
1414 path_hooks, v);
1415 if (importer == NULL) {
1416 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001417 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001418 }
1419 /* Note: importer is a borrowed reference */
1420 if (importer != Py_None) {
1421 PyObject *loader;
1422 loader = PyObject_CallMethod(importer,
1423 "find_module",
1424 "s", fullname);
1425 Py_XDECREF(copy);
1426 if (loader == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001427 goto error_exit; /* error */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001428 if (loader != Py_None) {
1429 /* a loader was found */
1430 *p_loader = loader;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001431 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001432 return &importhookdescr;
1433 }
1434 Py_DECREF(loader);
1435 continue;
1436 }
1437 }
1438 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001439
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001440 if (len > 0 && buf[len-1] != SEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001441#ifdef ALTSEP
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001442 && buf[len-1] != ALTSEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001443#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001444 )
1445 buf[len++] = SEP;
1446 strcpy(buf+len, name);
1447 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001448
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001449 /* Check for package import (buf holds a directory name,
1450 and there's an __init__ module in that directory */
Jason R. Coombs925ff742012-01-13 17:12:25 -05001451 if (isdir(buf) && /* it's an existing directory */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001452 case_ok(buf, len, namelen, name)) { /* case matches */
1453 if (find_init_module(buf)) { /* and has __init__.py */
1454 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001455 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001456 return &fd_package;
1457 }
1458 else {
1459 char warnstr[MAXPATHLEN+80];
1460 sprintf(warnstr, "Not importing directory "
1461 "'%.*s': missing __init__.py",
1462 MAXPATHLEN, buf);
1463 if (PyErr_Warn(PyExc_ImportWarning,
1464 warnstr)) {
1465 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001466 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001467 }
1468 }
1469 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001470#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001471 /* take a snapshot of the module spec for restoration
1472 * after the 8 character DLL hackery
1473 */
1474 saved_buf = strdup(buf);
1475 saved_len = len;
1476 saved_namelen = namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001477#endif /* PYOS_OS2 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001478 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Georg Brandladd36e52007-08-23 18:08:06 +00001479#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001480 /* OS/2 limits DLLs to 8 character names (w/o
1481 extension)
1482 * so if the name is longer than that and its a
1483 * dynamically loaded module we're going to try,
1484 * truncate the name before trying
1485 */
1486 if (strlen(subname) > 8) {
1487 /* is this an attempt to load a C extension? */
1488 const struct filedescr *scan;
1489 scan = _PyImport_DynLoadFiletab;
1490 while (scan->suffix != NULL) {
1491 if (!strcmp(scan->suffix, fdp->suffix))
1492 break;
1493 else
1494 scan++;
1495 }
1496 if (scan->suffix != NULL) {
1497 /* yes, so truncate the name */
1498 namelen = 8;
1499 len -= strlen(subname) - namelen;
1500 buf[len] = '\0';
1501 }
1502 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001503#endif /* PYOS_OS2 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001504 strcpy(buf+len, fdp->suffix);
1505 if (Py_VerboseFlag > 1)
1506 PySys_WriteStderr("# trying %s\n", buf);
1507 filemode = fdp->mode;
1508 if (filemode[0] == 'U')
1509 filemode = "r" PY_STDIOTEXTMODE;
1510 fp = fopen(buf, filemode);
1511 if (fp != NULL) {
1512 if (case_ok(buf, len, namelen, name))
1513 break;
1514 else { /* continue search */
1515 fclose(fp);
1516 fp = NULL;
1517 }
1518 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001519#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001520 /* restore the saved snapshot */
1521 strcpy(buf, saved_buf);
1522 len = saved_len;
1523 namelen = saved_namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001524#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001525 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001526#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001527 /* don't need/want the module name snapshot anymore */
1528 if (saved_buf)
1529 {
1530 free(saved_buf);
1531 saved_buf = NULL;
1532 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001533#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001534 Py_XDECREF(copy);
1535 if (fp != NULL)
1536 break;
1537 }
1538 if (fp == NULL) {
1539 PyErr_Format(PyExc_ImportError,
1540 "No module named %.200s", name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001541 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001542 }
1543 *p_fp = fp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001544 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001545 return fdp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001546
1547error_exit:
1548 PyMem_FREE(name);
1549 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001550}
1551
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001552/* Helpers for main.c
1553 * Find the source file corresponding to a named module
1554 */
1555struct filedescr *
1556_PyImport_FindModule(const char *name, PyObject *path, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001557 size_t buflen, FILE **p_fp, PyObject **p_loader)
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001558{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001559 return find_module((char *) name, (char *) name, path,
1560 buf, buflen, p_fp, p_loader);
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001561}
1562
1563PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1564{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001565 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001566}
1567
Martin v. Löwis18e16552006-02-15 17:27:45 +00001568/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001569 * The arguments here are tricky, best shown by example:
1570 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1571 * ^ ^ ^ ^
1572 * |--------------------- buf ---------------------|
1573 * |------------------- len ------------------|
1574 * |------ name -------|
1575 * |----- namelen -----|
1576 * buf is the full path, but len only counts up to (& exclusive of) the
1577 * extension. name is the module name, also exclusive of extension.
1578 *
1579 * We've already done a successful stat() or fopen() on buf, so know that
1580 * there's some match, possibly case-insensitive.
1581 *
Tim Peters50d8d372001-02-28 05:34:27 +00001582 * case_ok() is to return 1 if there's a case-sensitive match for
1583 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1584 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001585 *
Tim Peters50d8d372001-02-28 05:34:27 +00001586 * case_ok() is used to implement case-sensitive import semantics even
1587 * on platforms with case-insensitive filesystems. It's trivial to implement
1588 * for case-sensitive filesystems. It's pretty much a cross-platform
1589 * nightmare for systems with case-insensitive filesystems.
1590 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001591
Tim Peters50d8d372001-02-28 05:34:27 +00001592/* First we may need a pile of platform-specific header files; the sequence
1593 * of #if's here should match the sequence in the body of case_ok().
1594 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001595#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001596#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001597
Tim Peters50d8d372001-02-28 05:34:27 +00001598#elif defined(DJGPP)
1599#include <dir.h>
1600
Jason Tishler7961aa62005-05-20 00:56:54 +00001601#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001602#include <sys/types.h>
1603#include <dirent.h>
1604
Andrew MacIntyred9400542002-02-26 11:41:34 +00001605#elif defined(PYOS_OS2)
1606#define INCL_DOS
1607#define INCL_DOSERRORS
1608#define INCL_NOPMAPI
1609#include <os2.h>
1610
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001611#elif defined(RISCOS)
1612#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001613#endif
1614
Guido van Rossum0980bd91998-02-13 17:18:36 +00001615static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001616case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001617{
Tim Peters50d8d372001-02-28 05:34:27 +00001618/* Pick a platform-specific implementation; the sequence of #if's here should
1619 * match the sequence just above.
1620 */
1621
Jason Tishler7961aa62005-05-20 00:56:54 +00001622/* MS_WINDOWS */
1623#if defined(MS_WINDOWS)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001624 WIN32_FIND_DATA data;
1625 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001626
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001627 if (Py_GETENV("PYTHONCASEOK") != NULL)
1628 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001629
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001630 h = FindFirstFile(buf, &data);
1631 if (h == INVALID_HANDLE_VALUE) {
1632 PyErr_Format(PyExc_NameError,
1633 "Can't find file for module %.100s\n(filename %.300s)",
1634 name, buf);
1635 return 0;
1636 }
1637 FindClose(h);
1638 return strncmp(data.cFileName, name, namelen) == 0;
Tim Peters50d8d372001-02-28 05:34:27 +00001639
1640/* DJGPP */
1641#elif defined(DJGPP)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001642 struct ffblk ffblk;
1643 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00001644
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001645 if (Py_GETENV("PYTHONCASEOK") != NULL)
1646 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001647
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001648 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1649 if (done) {
1650 PyErr_Format(PyExc_NameError,
1651 "Can't find file for module %.100s\n(filename %.300s)",
1652 name, buf);
1653 return 0;
1654 }
1655 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001656
Jason Tishler7961aa62005-05-20 00:56:54 +00001657/* new-fangled macintosh (macosx) or Cygwin */
1658#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001659 DIR *dirp;
1660 struct dirent *dp;
1661 char dirname[MAXPATHLEN + 1];
1662 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001663
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001664 if (Py_GETENV("PYTHONCASEOK") != NULL)
1665 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001666
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001667 /* Copy the dir component into dirname; substitute "." if empty */
1668 if (dirlen <= 0) {
1669 dirname[0] = '.';
1670 dirname[1] = '\0';
1671 }
1672 else {
1673 assert(dirlen <= MAXPATHLEN);
1674 memcpy(dirname, buf, dirlen);
1675 dirname[dirlen] = '\0';
1676 }
1677 /* Open the directory and search the entries for an exact match. */
1678 dirp = opendir(dirname);
1679 if (dirp) {
1680 char *nameWithExt = buf + len - namelen;
1681 while ((dp = readdir(dirp)) != NULL) {
1682 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001683#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001684 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001685#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001686 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001687#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001688 if (thislen >= namelen &&
1689 strcmp(dp->d_name, nameWithExt) == 0) {
1690 (void)closedir(dirp);
1691 return 1; /* Found */
1692 }
1693 }
1694 (void)closedir(dirp);
1695 }
1696 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001697
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001698/* RISC OS */
1699#elif defined(RISCOS)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001700 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1701 char buf2[MAXPATHLEN+2];
1702 char *nameWithExt = buf+len-namelen;
1703 int canonlen;
1704 os_error *e;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001705
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001706 if (Py_GETENV("PYTHONCASEOK") != NULL)
1707 return 1;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001708
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001709 /* workaround:
1710 append wildcard, otherwise case of filename wouldn't be touched */
1711 strcpy(buf2, buf);
1712 strcat(buf2, "*");
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001713
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001714 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1715 canonlen = MAXPATHLEN+1-canonlen;
1716 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1717 return 0;
1718 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1719 return 1; /* match */
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001720
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001721 return 0;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001722
Andrew MacIntyred9400542002-02-26 11:41:34 +00001723/* OS/2 */
1724#elif defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001725 HDIR hdir = 1;
1726 ULONG srchcnt = 1;
1727 FILEFINDBUF3 ffbuf;
1728 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001729
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001730 if (Py_GETENV("PYTHONCASEOK") != NULL)
1731 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001732
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001733 rc = DosFindFirst(buf,
1734 &hdir,
1735 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1736 &ffbuf, sizeof(ffbuf),
1737 &srchcnt,
1738 FIL_STANDARD);
1739 if (rc != NO_ERROR)
1740 return 0;
1741 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001742
Tim Peters50d8d372001-02-28 05:34:27 +00001743/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1744#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001745 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001746
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001747#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001748}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001749
Guido van Rossum0980bd91998-02-13 17:18:36 +00001750
Guido van Rossum197346f1997-10-31 18:38:52 +00001751#ifdef HAVE_STAT
1752/* Helper to look for __init__.py or __init__.py[co] in potential package */
1753static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001754find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001755{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001756 const size_t save_len = strlen(buf);
1757 size_t i = save_len;
1758 char *pname; /* pointer to start of __init__ */
1759 struct stat statbuf;
Guido van Rossum197346f1997-10-31 18:38:52 +00001760
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001761/* For calling case_ok(buf, len, namelen, name):
1762 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1763 * ^ ^ ^ ^
1764 * |--------------------- buf ---------------------|
1765 * |------------------- len ------------------|
1766 * |------ name -------|
1767 * |----- namelen -----|
Tim Peters0f9431f2001-07-05 03:47:53 +00001768 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001769 if (save_len + 13 >= MAXPATHLEN)
1770 return 0;
1771 buf[i++] = SEP;
1772 pname = buf + i;
1773 strcpy(pname, "__init__.py");
1774 if (stat(buf, &statbuf) == 0) {
1775 if (case_ok(buf,
1776 save_len + 9, /* len("/__init__") */
1777 8, /* len("__init__") */
1778 pname)) {
1779 buf[save_len] = '\0';
1780 return 1;
1781 }
1782 }
1783 i += strlen(pname);
1784 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
1785 if (stat(buf, &statbuf) == 0) {
1786 if (case_ok(buf,
1787 save_len + 9, /* len("/__init__") */
1788 8, /* len("__init__") */
1789 pname)) {
1790 buf[save_len] = '\0';
1791 return 1;
1792 }
1793 }
1794 buf[save_len] = '\0';
1795 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00001796}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001797
1798#else
1799
1800#ifdef RISCOS
1801static int
1802find_init_module(buf)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001803 char *buf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001804{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001805 int save_len = strlen(buf);
1806 int i = save_len;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001807
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001808 if (save_len + 13 >= MAXPATHLEN)
1809 return 0;
1810 buf[i++] = SEP;
1811 strcpy(buf+i, "__init__/py");
1812 if (isfile(buf)) {
1813 buf[save_len] = '\0';
1814 return 1;
1815 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001816
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001817 if (Py_OptimizeFlag)
1818 strcpy(buf+i, "o");
1819 else
1820 strcpy(buf+i, "c");
1821 if (isfile(buf)) {
1822 buf[save_len] = '\0';
1823 return 1;
1824 }
1825 buf[save_len] = '\0';
1826 return 0;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001827}
1828#endif /*RISCOS*/
1829
Guido van Rossum197346f1997-10-31 18:38:52 +00001830#endif /* HAVE_STAT */
1831
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001832
Tim Petersdbd9ba62000-07-09 03:09:57 +00001833static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001834
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001835/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001836 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001837
Guido van Rossum79f25d91997-04-29 20:08:16 +00001838static PyObject *
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001839load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001840{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001841 PyObject *modules;
1842 PyObject *m;
1843 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001844
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001845 /* First check that there's an open file (if we need one) */
1846 switch (type) {
1847 case PY_SOURCE:
1848 case PY_COMPILED:
1849 if (fp == NULL) {
1850 PyErr_Format(PyExc_ValueError,
1851 "file object required for import (type code %d)",
1852 type);
1853 return NULL;
1854 }
1855 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001856
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001857 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001858
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001859 case PY_SOURCE:
1860 m = load_source_module(name, pathname, fp);
1861 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001862
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001863 case PY_COMPILED:
1864 m = load_compiled_module(name, pathname, fp);
1865 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001866
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001867#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001868 case C_EXTENSION:
1869 m = _PyImport_LoadDynamicModule(name, pathname, fp);
1870 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001871#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001872
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001873 case PKG_DIRECTORY:
1874 m = load_package(name, pathname);
1875 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001876
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001877 case C_BUILTIN:
1878 case PY_FROZEN:
1879 if (pathname != NULL && pathname[0] != '\0')
1880 name = pathname;
1881 if (type == C_BUILTIN)
1882 err = init_builtin(name);
1883 else
1884 err = PyImport_ImportFrozenModule(name);
1885 if (err < 0)
1886 return NULL;
1887 if (err == 0) {
1888 PyErr_Format(PyExc_ImportError,
1889 "Purported %s module %.200s not found",
1890 type == C_BUILTIN ?
1891 "builtin" : "frozen",
1892 name);
1893 return NULL;
1894 }
1895 modules = PyImport_GetModuleDict();
1896 m = PyDict_GetItemString(modules, name);
1897 if (m == NULL) {
1898 PyErr_Format(
1899 PyExc_ImportError,
1900 "%s module %.200s not properly initialized",
1901 type == C_BUILTIN ?
1902 "builtin" : "frozen",
1903 name);
1904 return NULL;
1905 }
1906 Py_INCREF(m);
1907 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001908
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001909 case IMP_HOOK: {
1910 if (loader == NULL) {
1911 PyErr_SetString(PyExc_ImportError,
1912 "import hook without loader");
1913 return NULL;
1914 }
1915 m = PyObject_CallMethod(loader, "load_module", "s", name);
1916 break;
1917 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001918
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001919 default:
1920 PyErr_Format(PyExc_ImportError,
1921 "Don't know how to import %.200s (type code %d)",
1922 name, type);
1923 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001924
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001925 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001926
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001927 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001928}
1929
1930
1931/* Initialize a built-in module.
Brett Cannon5a9aa4f2006-10-03 21:58:55 +00001932 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001933 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001934
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001935static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001936init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001937{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001938 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001939
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001940 if (_PyImport_FindExtension(name, name) != NULL)
1941 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001942
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001943 for (p = PyImport_Inittab; p->name != NULL; p++) {
1944 if (strcmp(name, p->name) == 0) {
1945 if (p->initfunc == NULL) {
1946 PyErr_Format(PyExc_ImportError,
1947 "Cannot re-init internal module %.200s",
1948 name);
1949 return -1;
1950 }
1951 if (Py_VerboseFlag)
1952 PySys_WriteStderr("import %s # builtin\n", name);
1953 (*p->initfunc)();
1954 if (PyErr_Occurred())
1955 return -1;
1956 if (_PyImport_FixupExtension(name, name) == NULL)
1957 return -1;
1958 return 1;
1959 }
1960 }
1961 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001962}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001963
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001964
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001965/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001966
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001967static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001968find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001969{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001970 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001971
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001972 for (p = PyImport_FrozenModules; ; p++) {
1973 if (p->name == NULL)
1974 return NULL;
1975 if (strcmp(p->name, name) == 0)
1976 break;
1977 }
1978 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001979}
1980
Guido van Rossum79f25d91997-04-29 20:08:16 +00001981static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001982get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001983{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001984 struct _frozen *p = find_frozen(name);
1985 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001986
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001987 if (p == NULL) {
1988 PyErr_Format(PyExc_ImportError,
1989 "No such frozen object named %.200s",
1990 name);
1991 return NULL;
1992 }
1993 if (p->code == NULL) {
1994 PyErr_Format(PyExc_ImportError,
1995 "Excluded frozen object named %.200s",
1996 name);
1997 return NULL;
1998 }
1999 size = p->size;
2000 if (size < 0)
2001 size = -size;
2002 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002003}
2004
2005/* Initialize a frozen module.
2006 Return 1 for succes, 0 if the module is not found, and -1 with
2007 an exception set if the initialization failed.
2008 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002009
2010int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002011PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002012{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002013 struct _frozen *p = find_frozen(name);
2014 PyObject *co;
2015 PyObject *m;
2016 int ispackage;
2017 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002018
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002019 if (p == NULL)
2020 return 0;
2021 if (p->code == NULL) {
2022 PyErr_Format(PyExc_ImportError,
2023 "Excluded frozen object named %.200s",
2024 name);
2025 return -1;
2026 }
2027 size = p->size;
2028 ispackage = (size < 0);
2029 if (ispackage)
2030 size = -size;
2031 if (Py_VerboseFlag)
2032 PySys_WriteStderr("import %s # frozen%s\n",
2033 name, ispackage ? " package" : "");
2034 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2035 if (co == NULL)
2036 return -1;
2037 if (!PyCode_Check(co)) {
2038 PyErr_Format(PyExc_TypeError,
2039 "frozen object %.200s is not a code object",
2040 name);
2041 goto err_return;
2042 }
2043 if (ispackage) {
2044 /* Set __path__ to the package name */
2045 PyObject *d, *s;
2046 int err;
2047 m = PyImport_AddModule(name);
2048 if (m == NULL)
2049 goto err_return;
2050 d = PyModule_GetDict(m);
2051 s = PyString_InternFromString(name);
2052 if (s == NULL)
2053 goto err_return;
2054 err = PyDict_SetItemString(d, "__path__", s);
2055 Py_DECREF(s);
2056 if (err != 0)
2057 goto err_return;
2058 }
2059 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
2060 if (m == NULL)
2061 goto err_return;
2062 Py_DECREF(co);
2063 Py_DECREF(m);
2064 return 1;
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002065err_return:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002066 Py_DECREF(co);
2067 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002068}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002069
2070
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002071/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002072 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002073
Guido van Rossum79f25d91997-04-29 20:08:16 +00002074PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002075PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002076{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002077 PyObject *pname;
2078 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002079
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002080 pname = PyString_FromString(name);
2081 if (pname == NULL)
2082 return NULL;
2083 result = PyImport_Import(pname);
2084 Py_DECREF(pname);
2085 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002086}
2087
Christian Heimes000a0742008-01-03 22:16:32 +00002088/* Import a module without blocking
2089 *
2090 * At first it tries to fetch the module from sys.modules. If the module was
2091 * never loaded before it loads it with PyImport_ImportModule() unless another
2092 * thread holds the import lock. In the latter case the function raises an
2093 * ImportError instead of blocking.
2094 *
2095 * Returns the module object with incremented ref count.
2096 */
2097PyObject *
2098PyImport_ImportModuleNoBlock(const char *name)
2099{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002100 PyObject *result;
2101 PyObject *modules;
Victor Stinner871a0fb2011-09-02 00:21:36 +02002102#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002103 long me;
Victor Stinner871a0fb2011-09-02 00:21:36 +02002104#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002105
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002106 /* Try to get the module from sys.modules[name] */
2107 modules = PyImport_GetModuleDict();
2108 if (modules == NULL)
2109 return NULL;
Christian Heimes000a0742008-01-03 22:16:32 +00002110
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002111 result = PyDict_GetItemString(modules, name);
2112 if (result != NULL) {
2113 Py_INCREF(result);
2114 return result;
2115 }
2116 else {
2117 PyErr_Clear();
2118 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002119#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002120 /* check the import lock
2121 * me might be -1 but I ignore the error here, the lock function
2122 * takes care of the problem */
2123 me = PyThread_get_thread_ident();
2124 if (import_lock_thread == -1 || import_lock_thread == me) {
2125 /* no thread or me is holding the lock */
2126 return PyImport_ImportModule(name);
2127 }
2128 else {
2129 PyErr_Format(PyExc_ImportError,
2130 "Failed to import %.200s because the import lock"
2131 "is held by another thread.",
2132 name);
2133 return NULL;
2134 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002135#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002136 return PyImport_ImportModule(name);
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002137#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002138}
2139
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002140/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002141static PyObject *get_parent(PyObject *globals, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002142 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002143static PyObject *load_next(PyObject *mod, PyObject *altmod,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002144 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002145static int mark_miss(char *name);
2146static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002147 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002148static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002149
2150/* The Magnum Opus of dotted-name import :-) */
2151
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002152static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002153import_module_level(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002154 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002155{
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002156 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002157 Py_ssize_t buflen = 0;
2158 PyObject *parent, *head, *next, *tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002159
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002160 if (strchr(name, '/') != NULL
Christian Heimes3403f152008-01-09 19:56:33 +00002161#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002162 || strchr(name, '\\') != NULL
Christian Heimes3403f152008-01-09 19:56:33 +00002163#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002164 ) {
2165 PyErr_SetString(PyExc_ImportError,
2166 "Import by filename is not supported.");
2167 return NULL;
2168 }
Christian Heimes3403f152008-01-09 19:56:33 +00002169
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002170 buf = PyMem_MALLOC(MAXPATHLEN+1);
2171 if (buf == NULL) {
2172 return PyErr_NoMemory();
2173 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002174 parent = get_parent(globals, buf, &buflen, level);
2175 if (parent == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002176 goto error_exit;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002177
Brett Cannoneb3cd302010-05-20 18:37:55 +00002178 head = load_next(parent, level < 0 ? Py_None : parent, &name, buf,
2179 &buflen);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002180 if (head == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002181 goto error_exit;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002182
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002183 tail = head;
2184 Py_INCREF(tail);
2185 while (name) {
2186 next = load_next(tail, tail, &name, buf, &buflen);
2187 Py_DECREF(tail);
2188 if (next == NULL) {
2189 Py_DECREF(head);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002190 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002191 }
2192 tail = next;
2193 }
2194 if (tail == Py_None) {
2195 /* If tail is Py_None, both get_parent and load_next found
2196 an empty module name: someone called __import__("") or
2197 doctored faulty bytecode */
2198 Py_DECREF(tail);
2199 Py_DECREF(head);
2200 PyErr_SetString(PyExc_ValueError,
2201 "Empty module name");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002202 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002203 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002204
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002205 if (fromlist != NULL) {
Antoine Pitrouc5bef752012-08-15 23:16:51 +02002206 int b = (fromlist == Py_None) ? 0 : PyObject_IsTrue(fromlist);
2207 if (b < 0) {
2208 Py_DECREF(tail);
2209 Py_DECREF(head);
2210 goto error_exit;
2211 }
2212 if (!b)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002213 fromlist = NULL;
2214 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002215
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002216 if (fromlist == NULL) {
2217 Py_DECREF(tail);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002218 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002219 return head;
2220 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002221
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002222 Py_DECREF(head);
2223 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
2224 Py_DECREF(tail);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002225 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002226 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002227
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002228 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002229 return tail;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002230
2231error_exit:
2232 PyMem_FREE(buf);
2233 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002234}
2235
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002236PyObject *
2237PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002238 PyObject *fromlist, int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002239{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002240 PyObject *result;
2241 _PyImport_AcquireLock();
2242 result = import_module_level(name, globals, locals, fromlist, level);
2243 if (_PyImport_ReleaseLock() < 0) {
2244 Py_XDECREF(result);
2245 PyErr_SetString(PyExc_RuntimeError,
2246 "not holding the import lock");
2247 return NULL;
2248 }
2249 return result;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002250}
2251
Fred Drake87590902004-05-28 20:21:36 +00002252/* Return the package that an import is being performed in. If globals comes
2253 from the module foo.bar.bat (not itself a package), this returns the
2254 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Georg Brandl5f6861d2006-05-28 21:57:35 +00002255 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002256
2257 The *name* of the returned package is returned in buf, with the length of
2258 the name in *p_buflen.
2259
2260 If globals doesn't come from a package or a module in a package, or a
2261 corresponding entry is not found in sys.modules, Py_None is returned.
2262*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002263static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002264get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002265{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002266 static PyObject *namestr = NULL;
2267 static PyObject *pathstr = NULL;
2268 static PyObject *pkgstr = NULL;
2269 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2270 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002271
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002272 if (globals == NULL || !PyDict_Check(globals) || !level)
2273 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002274
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002275 if (namestr == NULL) {
2276 namestr = PyString_InternFromString("__name__");
2277 if (namestr == NULL)
2278 return NULL;
2279 }
2280 if (pathstr == NULL) {
2281 pathstr = PyString_InternFromString("__path__");
2282 if (pathstr == NULL)
2283 return NULL;
2284 }
2285 if (pkgstr == NULL) {
2286 pkgstr = PyString_InternFromString("__package__");
2287 if (pkgstr == NULL)
2288 return NULL;
2289 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002290
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002291 *buf = '\0';
2292 *p_buflen = 0;
2293 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002294
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002295 if ((pkgname != NULL) && (pkgname != Py_None)) {
2296 /* __package__ is set, so use it */
2297 Py_ssize_t len;
2298 if (!PyString_Check(pkgname)) {
2299 PyErr_SetString(PyExc_ValueError,
2300 "__package__ set to non-string");
2301 return NULL;
2302 }
2303 len = PyString_GET_SIZE(pkgname);
2304 if (len == 0) {
2305 if (level > 0) {
2306 PyErr_SetString(PyExc_ValueError,
2307 "Attempted relative import in non-package");
2308 return NULL;
2309 }
2310 return Py_None;
2311 }
2312 if (len > MAXPATHLEN) {
2313 PyErr_SetString(PyExc_ValueError,
2314 "Package name too long");
2315 return NULL;
2316 }
2317 strcpy(buf, PyString_AS_STRING(pkgname));
2318 } else {
2319 /* __package__ not set, so figure it out and set it */
2320 modname = PyDict_GetItem(globals, namestr);
2321 if (modname == NULL || !PyString_Check(modname))
2322 return Py_None;
Brett Cannonb166afc2010-05-05 20:25:47 +00002323
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002324 modpath = PyDict_GetItem(globals, pathstr);
2325 if (modpath != NULL) {
2326 /* __path__ is set, so modname is already the package name */
2327 Py_ssize_t len = PyString_GET_SIZE(modname);
2328 int error;
2329 if (len > MAXPATHLEN) {
2330 PyErr_SetString(PyExc_ValueError,
2331 "Module name too long");
2332 return NULL;
2333 }
2334 strcpy(buf, PyString_AS_STRING(modname));
2335 error = PyDict_SetItem(globals, pkgstr, modname);
2336 if (error) {
2337 PyErr_SetString(PyExc_ValueError,
2338 "Could not set __package__");
2339 return NULL;
2340 }
2341 } else {
2342 /* Normal module, so work out the package name if any */
2343 char *start = PyString_AS_STRING(modname);
2344 char *lastdot = strrchr(start, '.');
2345 size_t len;
2346 int error;
2347 if (lastdot == NULL && level > 0) {
2348 PyErr_SetString(PyExc_ValueError,
2349 "Attempted relative import in non-package");
2350 return NULL;
2351 }
2352 if (lastdot == NULL) {
2353 error = PyDict_SetItem(globals, pkgstr, Py_None);
2354 if (error) {
2355 PyErr_SetString(PyExc_ValueError,
2356 "Could not set __package__");
2357 return NULL;
2358 }
2359 return Py_None;
2360 }
2361 len = lastdot - start;
2362 if (len >= MAXPATHLEN) {
2363 PyErr_SetString(PyExc_ValueError,
2364 "Module name too long");
2365 return NULL;
2366 }
2367 strncpy(buf, start, len);
2368 buf[len] = '\0';
2369 pkgname = PyString_FromString(buf);
2370 if (pkgname == NULL) {
2371 return NULL;
2372 }
2373 error = PyDict_SetItem(globals, pkgstr, pkgname);
2374 Py_DECREF(pkgname);
2375 if (error) {
2376 PyErr_SetString(PyExc_ValueError,
2377 "Could not set __package__");
2378 return NULL;
2379 }
2380 }
2381 }
2382 while (--level > 0) {
2383 char *dot = strrchr(buf, '.');
2384 if (dot == NULL) {
2385 PyErr_SetString(PyExc_ValueError,
2386 "Attempted relative import beyond "
2387 "toplevel package");
2388 return NULL;
2389 }
2390 *dot = '\0';
2391 }
2392 *p_buflen = strlen(buf);
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002393
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002394 modules = PyImport_GetModuleDict();
2395 parent = PyDict_GetItemString(modules, buf);
2396 if (parent == NULL) {
2397 if (orig_level < 1) {
2398 PyObject *err_msg = PyString_FromFormat(
2399 "Parent module '%.200s' not found "
2400 "while handling absolute import", buf);
2401 if (err_msg == NULL) {
2402 return NULL;
2403 }
2404 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2405 PyString_AsString(err_msg), 1)) {
2406 *buf = '\0';
2407 *p_buflen = 0;
2408 parent = Py_None;
2409 }
2410 Py_DECREF(err_msg);
2411 } else {
2412 PyErr_Format(PyExc_SystemError,
2413 "Parent module '%.200s' not loaded, "
2414 "cannot perform relative import", buf);
2415 }
2416 }
2417 return parent;
2418 /* We expect, but can't guarantee, if parent != None, that:
2419 - parent.__name__ == buf
2420 - parent.__dict__ is globals
2421 If this is violated... Who cares? */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002422}
2423
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002424/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002425static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002426load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002427 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002428{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002429 char *name = *p_name;
2430 char *dot = strchr(name, '.');
2431 size_t len;
2432 char *p;
2433 PyObject *result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002434
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002435 if (strlen(name) == 0) {
2436 /* completely empty module name should only happen in
2437 'from . import' (or '__import__("")')*/
2438 Py_INCREF(mod);
2439 *p_name = NULL;
2440 return mod;
2441 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002442
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002443 if (dot == NULL) {
2444 *p_name = NULL;
2445 len = strlen(name);
2446 }
2447 else {
2448 *p_name = dot+1;
2449 len = dot-name;
2450 }
2451 if (len == 0) {
2452 PyErr_SetString(PyExc_ValueError,
2453 "Empty module name");
2454 return NULL;
2455 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002456
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002457 p = buf + *p_buflen;
2458 if (p != buf)
2459 *p++ = '.';
2460 if (p+len-buf >= MAXPATHLEN) {
2461 PyErr_SetString(PyExc_ValueError,
2462 "Module name too long");
2463 return NULL;
2464 }
2465 strncpy(p, name, len);
2466 p[len] = '\0';
2467 *p_buflen = p+len-buf;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002468
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002469 result = import_submodule(mod, p, buf);
2470 if (result == Py_None && altmod != mod) {
2471 Py_DECREF(result);
2472 /* Here, altmod must be None and mod must not be None */
2473 result = import_submodule(altmod, p, p);
2474 if (result != NULL && result != Py_None) {
2475 if (mark_miss(buf) != 0) {
2476 Py_DECREF(result);
2477 return NULL;
2478 }
2479 strncpy(buf, name, len);
2480 buf[len] = '\0';
2481 *p_buflen = len;
2482 }
2483 }
2484 if (result == NULL)
2485 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002486
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002487 if (result == Py_None) {
2488 Py_DECREF(result);
2489 PyErr_Format(PyExc_ImportError,
2490 "No module named %.200s", name);
2491 return NULL;
2492 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002493
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002494 return result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002495}
2496
2497static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002498mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002499{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002500 PyObject *modules = PyImport_GetModuleDict();
2501 return PyDict_SetItemString(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002502}
2503
2504static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002505ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002506 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002507{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002508 int i;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002509
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002510 if (!PyObject_HasAttrString(mod, "__path__"))
2511 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002512
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002513 for (i = 0; ; i++) {
2514 PyObject *item = PySequence_GetItem(fromlist, i);
2515 int hasit;
2516 if (item == NULL) {
2517 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2518 PyErr_Clear();
2519 return 1;
2520 }
2521 return 0;
2522 }
2523 if (!PyString_Check(item)) {
2524 PyErr_SetString(PyExc_TypeError,
2525 "Item in ``from list'' not a string");
2526 Py_DECREF(item);
2527 return 0;
2528 }
2529 if (PyString_AS_STRING(item)[0] == '*') {
2530 PyObject *all;
2531 Py_DECREF(item);
2532 /* See if the package defines __all__ */
2533 if (recursive)
2534 continue; /* Avoid endless recursion */
2535 all = PyObject_GetAttrString(mod, "__all__");
2536 if (all == NULL)
2537 PyErr_Clear();
2538 else {
2539 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
2540 Py_DECREF(all);
2541 if (!ret)
2542 return 0;
2543 }
2544 continue;
2545 }
2546 hasit = PyObject_HasAttr(mod, item);
2547 if (!hasit) {
2548 char *subname = PyString_AS_STRING(item);
2549 PyObject *submod;
2550 char *p;
2551 if (buflen + strlen(subname) >= MAXPATHLEN) {
2552 PyErr_SetString(PyExc_ValueError,
2553 "Module name too long");
2554 Py_DECREF(item);
2555 return 0;
2556 }
2557 p = buf + buflen;
2558 *p++ = '.';
2559 strcpy(p, subname);
2560 submod = import_submodule(mod, subname, buf);
2561 Py_XDECREF(submod);
2562 if (submod == NULL) {
2563 Py_DECREF(item);
2564 return 0;
2565 }
2566 }
2567 Py_DECREF(item);
2568 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002569
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002570 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002571}
2572
Neil Schemenauer00b09662003-06-16 21:03:07 +00002573static int
2574add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002575 PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00002576{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002577 if (mod == Py_None)
2578 return 1;
2579 /* Irrespective of the success of this load, make a
2580 reference to it in the parent package module. A copy gets
2581 saved in the modules dictionary under the full name, so get a
2582 reference from there, if need be. (The exception is when the
2583 load failed with a SyntaxError -- then there's no trace in
2584 sys.modules. In that case, of course, do nothing extra.) */
2585 if (submod == NULL) {
2586 submod = PyDict_GetItemString(modules, fullname);
2587 if (submod == NULL)
2588 return 1;
2589 }
2590 if (PyModule_Check(mod)) {
2591 /* We can't use setattr here since it can give a
2592 * spurious warning if the submodule name shadows a
2593 * builtin name */
2594 PyObject *dict = PyModule_GetDict(mod);
2595 if (!dict)
2596 return 0;
2597 if (PyDict_SetItemString(dict, subname, submod) < 0)
2598 return 0;
2599 }
2600 else {
2601 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2602 return 0;
2603 }
2604 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00002605}
2606
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002607static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002608import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002609{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002610 PyObject *modules = PyImport_GetModuleDict();
2611 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002612
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002613 /* Require:
2614 if mod == None: subname == fullname
2615 else: mod.__name__ + "." + subname == fullname
2616 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002617
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002618 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
2619 Py_INCREF(m);
2620 }
2621 else {
2622 PyObject *path, *loader = NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002623 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002624 struct filedescr *fdp;
2625 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002626
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002627 if (mod == Py_None)
2628 path = NULL;
2629 else {
2630 path = PyObject_GetAttrString(mod, "__path__");
2631 if (path == NULL) {
2632 PyErr_Clear();
2633 Py_INCREF(Py_None);
2634 return Py_None;
2635 }
2636 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002637
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002638 buf = PyMem_MALLOC(MAXPATHLEN+1);
2639 if (buf == NULL) {
2640 return PyErr_NoMemory();
2641 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002642 buf[0] = '\0';
2643 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2644 &fp, &loader);
2645 Py_XDECREF(path);
2646 if (fdp == NULL) {
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002647 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002648 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2649 return NULL;
2650 PyErr_Clear();
2651 Py_INCREF(Py_None);
2652 return Py_None;
2653 }
2654 m = load_module(fullname, fp, buf, fdp->type, loader);
2655 Py_XDECREF(loader);
2656 if (fp)
2657 fclose(fp);
2658 if (!add_submodule(mod, m, fullname, subname, modules)) {
2659 Py_XDECREF(m);
2660 m = NULL;
2661 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002662 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002663 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002664
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002665 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002666}
2667
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002668
2669/* Re-import a module of any kind and return its module object, WITH
2670 INCREMENTED REFERENCE COUNT */
2671
Guido van Rossum79f25d91997-04-29 20:08:16 +00002672PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002673PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002674{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002675 PyInterpreterState *interp = PyThreadState_Get()->interp;
2676 PyObject *modules_reloading = interp->modules_reloading;
2677 PyObject *modules = PyImport_GetModuleDict();
2678 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
2679 char *name, *subname;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002680 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002681 struct filedescr *fdp;
2682 FILE *fp = NULL;
2683 PyObject *newm;
Brett Cannonb166afc2010-05-05 20:25:47 +00002684
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002685 if (modules_reloading == NULL) {
2686 Py_FatalError("PyImport_ReloadModule: "
2687 "no modules_reloading dictionary!");
2688 return NULL;
2689 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002690
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002691 if (m == NULL || !PyModule_Check(m)) {
2692 PyErr_SetString(PyExc_TypeError,
2693 "reload() argument must be module");
2694 return NULL;
2695 }
2696 name = PyModule_GetName(m);
2697 if (name == NULL)
2698 return NULL;
2699 if (m != PyDict_GetItemString(modules, name)) {
2700 PyErr_Format(PyExc_ImportError,
2701 "reload(): module %.200s not in sys.modules",
2702 name);
2703 return NULL;
2704 }
2705 existing_m = PyDict_GetItemString(modules_reloading, name);
2706 if (existing_m != NULL) {
2707 /* Due to a recursive reload, this module is already
2708 being reloaded. */
2709 Py_INCREF(existing_m);
2710 return existing_m;
2711 }
2712 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2713 return NULL;
Collin Winter276887b2007-03-12 16:11:39 +00002714
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002715 subname = strrchr(name, '.');
2716 if (subname == NULL)
2717 subname = name;
2718 else {
2719 PyObject *parentname, *parent;
2720 parentname = PyString_FromStringAndSize(name, (subname-name));
2721 if (parentname == NULL) {
2722 imp_modules_reloading_clear();
2723 return NULL;
2724 }
2725 parent = PyDict_GetItem(modules, parentname);
2726 if (parent == NULL) {
2727 PyErr_Format(PyExc_ImportError,
2728 "reload(): parent %.200s not in sys.modules",
2729 PyString_AS_STRING(parentname));
2730 Py_DECREF(parentname);
2731 imp_modules_reloading_clear();
2732 return NULL;
2733 }
2734 Py_DECREF(parentname);
2735 subname++;
2736 path = PyObject_GetAttrString(parent, "__path__");
2737 if (path == NULL)
2738 PyErr_Clear();
2739 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002740 buf = PyMem_MALLOC(MAXPATHLEN+1);
2741 if (buf == NULL) {
2742 Py_XDECREF(path);
2743 return PyErr_NoMemory();
2744 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002745 buf[0] = '\0';
2746 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
2747 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002748
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002749 if (fdp == NULL) {
2750 Py_XDECREF(loader);
2751 imp_modules_reloading_clear();
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002752 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002753 return NULL;
2754 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002755
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002756 newm = load_module(name, fp, buf, fdp->type, loader);
2757 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002758
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002759 if (fp)
2760 fclose(fp);
2761 if (newm == NULL) {
2762 /* load_module probably removed name from modules because of
2763 * the error. Put back the original module object. We're
2764 * going to return NULL in this case regardless of whether
2765 * replacing name succeeds, so the return value is ignored.
2766 */
2767 PyDict_SetItemString(modules, name, m);
2768 }
2769 imp_modules_reloading_clear();
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002770 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002771 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002772}
2773
2774
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002775/* Higher-level import emulator which emulates the "import" statement
2776 more accurately -- it invokes the __import__() function from the
2777 builtins of the current globals. This means that the import is
2778 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002779 environment, e.g. by "rexec".
2780 A dummy list ["__doc__"] is passed as the 4th argument so that
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002781 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00002782 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002783
2784PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002785PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002786{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002787 static PyObject *silly_list = NULL;
2788 static PyObject *builtins_str = NULL;
2789 static PyObject *import_str = NULL;
2790 PyObject *globals = NULL;
2791 PyObject *import = NULL;
2792 PyObject *builtins = NULL;
2793 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002794
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002795 /* Initialize constant string objects */
2796 if (silly_list == NULL) {
2797 import_str = PyString_InternFromString("__import__");
2798 if (import_str == NULL)
2799 return NULL;
2800 builtins_str = PyString_InternFromString("__builtins__");
2801 if (builtins_str == NULL)
2802 return NULL;
2803 silly_list = Py_BuildValue("[s]", "__doc__");
2804 if (silly_list == NULL)
2805 return NULL;
2806 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002807
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002808 /* Get the builtins from current globals */
2809 globals = PyEval_GetGlobals();
2810 if (globals != NULL) {
2811 Py_INCREF(globals);
2812 builtins = PyObject_GetItem(globals, builtins_str);
2813 if (builtins == NULL)
2814 goto err;
2815 }
2816 else {
2817 /* No globals -- use standard builtins, and fake globals */
2818 builtins = PyImport_ImportModuleLevel("__builtin__",
2819 NULL, NULL, NULL, 0);
2820 if (builtins == NULL)
2821 return NULL;
2822 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2823 if (globals == NULL)
2824 goto err;
2825 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002826
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002827 /* Get the __import__ function from the builtins */
2828 if (PyDict_Check(builtins)) {
2829 import = PyObject_GetItem(builtins, import_str);
2830 if (import == NULL)
2831 PyErr_SetObject(PyExc_KeyError, import_str);
2832 }
2833 else
2834 import = PyObject_GetAttr(builtins, import_str);
2835 if (import == NULL)
2836 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002837
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002838 /* Call the __import__ function with the proper argument list
2839 * Always use absolute import here. */
2840 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2841 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002842
2843 err:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002844 Py_XDECREF(globals);
2845 Py_XDECREF(builtins);
2846 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002847
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002848 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002849}
2850
2851
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002852/* Module 'imp' provides Python access to the primitives used for
2853 importing modules.
2854*/
2855
Guido van Rossum79f25d91997-04-29 20:08:16 +00002856static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002857imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002858{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002859 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002860
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002861 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2862 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2863 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2864 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002865
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002866 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002867}
2868
Guido van Rossum79f25d91997-04-29 20:08:16 +00002869static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002870imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002871{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002872 PyObject *list;
2873 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002874
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002875 list = PyList_New(0);
2876 if (list == NULL)
2877 return NULL;
2878 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2879 PyObject *item = Py_BuildValue("ssi",
2880 fdp->suffix, fdp->mode, fdp->type);
2881 if (item == NULL) {
2882 Py_DECREF(list);
2883 return NULL;
2884 }
2885 if (PyList_Append(list, item) < 0) {
2886 Py_DECREF(list);
2887 Py_DECREF(item);
2888 return NULL;
2889 }
2890 Py_DECREF(item);
2891 }
2892 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002893}
2894
Guido van Rossum79f25d91997-04-29 20:08:16 +00002895static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002896call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002897{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002898 extern int fclose(FILE *);
2899 PyObject *fob, *ret;
2900 struct filedescr *fdp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002901 char *pathname;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002902 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002903
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002904 pathname = PyMem_MALLOC(MAXPATHLEN+1);
2905 if (pathname == NULL) {
2906 return PyErr_NoMemory();
2907 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002908 pathname[0] = '\0';
2909 if (path == Py_None)
2910 path = NULL;
2911 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002912 if (fdp == NULL) {
2913 PyMem_FREE(pathname);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002914 return NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002915 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002916 if (fp != NULL) {
2917 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002918 if (fob == NULL) {
2919 PyMem_FREE(pathname);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002920 return NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002921 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002922 }
2923 else {
2924 fob = Py_None;
2925 Py_INCREF(fob);
2926 }
2927 ret = Py_BuildValue("Os(ssi)",
2928 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
2929 Py_DECREF(fob);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002930 PyMem_FREE(pathname);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002931 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002932}
2933
Guido van Rossum79f25d91997-04-29 20:08:16 +00002934static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002935imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002936{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002937 char *name;
2938 PyObject *path = NULL;
2939 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
2940 return NULL;
2941 return call_find_module(name, path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002942}
2943
2944static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002945imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002946{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002947 char *name;
2948 int ret;
2949 PyObject *m;
2950 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
2951 return NULL;
2952 ret = init_builtin(name);
2953 if (ret < 0)
2954 return NULL;
2955 if (ret == 0) {
2956 Py_INCREF(Py_None);
2957 return Py_None;
2958 }
2959 m = PyImport_AddModule(name);
2960 Py_XINCREF(m);
2961 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002962}
2963
Guido van Rossum79f25d91997-04-29 20:08:16 +00002964static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002965imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002966{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002967 char *name;
2968 int ret;
2969 PyObject *m;
2970 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
2971 return NULL;
2972 ret = PyImport_ImportFrozenModule(name);
2973 if (ret < 0)
2974 return NULL;
2975 if (ret == 0) {
2976 Py_INCREF(Py_None);
2977 return Py_None;
2978 }
2979 m = PyImport_AddModule(name);
2980 Py_XINCREF(m);
2981 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002982}
2983
Guido van Rossum79f25d91997-04-29 20:08:16 +00002984static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002985imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002986{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002987 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002988
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002989 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
2990 return NULL;
2991 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002992}
2993
Guido van Rossum79f25d91997-04-29 20:08:16 +00002994static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002995imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002996{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002997 char *name;
2998 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
2999 return NULL;
3000 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003001}
3002
Guido van Rossum79f25d91997-04-29 20:08:16 +00003003static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003004imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003005{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003006 char *name;
3007 struct _frozen *p;
3008 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
3009 return NULL;
3010 p = find_frozen(name);
3011 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003012}
3013
3014static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003015get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003016{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003017 FILE *fp;
3018 if (fob == NULL) {
3019 if (mode[0] == 'U')
3020 mode = "r" PY_STDIOTEXTMODE;
3021 fp = fopen(pathname, mode);
3022 if (fp == NULL)
3023 PyErr_SetFromErrno(PyExc_IOError);
3024 }
3025 else {
3026 fp = PyFile_AsFile(fob);
3027 if (fp == NULL)
3028 PyErr_SetString(PyExc_ValueError,
3029 "bad/closed file object");
3030 }
3031 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003032}
3033
Guido van Rossum79f25d91997-04-29 20:08:16 +00003034static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003035imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003036{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003037 char *name;
3038 char *pathname;
3039 PyObject *fob = NULL;
3040 PyObject *m;
3041 FILE *fp;
3042 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
3043 &PyFile_Type, &fob))
3044 return NULL;
3045 fp = get_file(pathname, fob, "rb");
3046 if (fp == NULL)
3047 return NULL;
3048 m = load_compiled_module(name, pathname, fp);
3049 if (fob == NULL)
3050 fclose(fp);
3051 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003052}
3053
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003054#ifdef HAVE_DYNAMIC_LOADING
3055
Guido van Rossum79f25d91997-04-29 20:08:16 +00003056static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003057imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003058{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003059 char *name;
3060 char *pathname;
3061 PyObject *fob = NULL;
3062 PyObject *m;
3063 FILE *fp = NULL;
3064 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
3065 &PyFile_Type, &fob))
3066 return NULL;
3067 if (fob) {
3068 fp = get_file(pathname, fob, "r");
3069 if (fp == NULL)
3070 return NULL;
3071 }
3072 m = _PyImport_LoadDynamicModule(name, pathname, fp);
3073 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003074}
3075
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003076#endif /* HAVE_DYNAMIC_LOADING */
3077
Guido van Rossum79f25d91997-04-29 20:08:16 +00003078static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003079imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003080{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003081 char *name;
3082 char *pathname;
3083 PyObject *fob = NULL;
3084 PyObject *m;
3085 FILE *fp;
3086 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
3087 &PyFile_Type, &fob))
3088 return NULL;
3089 fp = get_file(pathname, fob, "r");
3090 if (fp == NULL)
3091 return NULL;
3092 m = load_source_module(name, pathname, fp);
3093 if (fob == NULL)
3094 fclose(fp);
3095 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003096}
3097
Guido van Rossum79f25d91997-04-29 20:08:16 +00003098static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003099imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003100{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003101 char *name;
3102 PyObject *fob;
3103 char *pathname;
3104 char *suffix; /* Unused */
3105 char *mode;
3106 int type;
3107 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003108
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003109 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
3110 &name, &fob, &pathname,
3111 &suffix, &mode, &type))
3112 return NULL;
3113 if (*mode) {
3114 /* Mode must start with 'r' or 'U' and must not contain '+'.
3115 Implicit in this test is the assumption that the mode
3116 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003117
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003118 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3119 PyErr_Format(PyExc_ValueError,
3120 "invalid file open mode %.200s", mode);
3121 return NULL;
3122 }
3123 }
3124 if (fob == Py_None)
3125 fp = NULL;
3126 else {
3127 if (!PyFile_Check(fob)) {
3128 PyErr_SetString(PyExc_ValueError,
3129 "load_module arg#2 should be a file or None");
3130 return NULL;
3131 }
3132 fp = get_file(pathname, fob, mode);
3133 if (fp == NULL)
3134 return NULL;
3135 }
3136 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003137}
3138
3139static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003140imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003141{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003142 char *name;
3143 char *pathname;
3144 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
3145 return NULL;
3146 return load_package(name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003147}
3148
3149static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003150imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003151{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003152 char *name;
3153 if (!PyArg_ParseTuple(args, "s:new_module", &name))
3154 return NULL;
3155 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003156}
3157
Brett Cannon3aa2a492008-08-06 22:28:09 +00003158static PyObject *
3159imp_reload(PyObject *self, PyObject *v)
3160{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003161 return PyImport_ReloadModule(v);
Brett Cannon3aa2a492008-08-06 22:28:09 +00003162}
3163
3164
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003165/* Doc strings */
3166
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003167PyDoc_STRVAR(doc_imp,
3168"This module provides the components needed to build your own\n\
3169__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003170
Brett Cannon3aa2a492008-08-06 22:28:09 +00003171PyDoc_STRVAR(doc_reload,
3172"reload(module) -> module\n\
3173\n\
3174Reload the module. The module must have been successfully imported before.");
3175
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003176PyDoc_STRVAR(doc_find_module,
3177"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003178Search for a module. If path is omitted or None, search for a\n\
3179built-in, frozen or special module and continue search in sys.path.\n\
3180The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003181package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003182
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003183PyDoc_STRVAR(doc_load_module,
3184"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003185Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003186The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003187
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003188PyDoc_STRVAR(doc_get_magic,
3189"get_magic() -> string\n\
3190Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003191
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003192PyDoc_STRVAR(doc_get_suffixes,
3193"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003194Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003195that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003196
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003197PyDoc_STRVAR(doc_new_module,
3198"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003199Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003200The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003201
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003202PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003203"lock_held() -> boolean\n\
3204Return True if the import lock is currently held, else False.\n\
3205On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003206
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003207PyDoc_STRVAR(doc_acquire_lock,
3208"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003209Acquires the interpreter's import lock for the current thread.\n\
3210This lock should be used by import hooks to ensure thread-safety\n\
3211when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003212On platforms without threads, this function does nothing.");
3213
3214PyDoc_STRVAR(doc_release_lock,
3215"release_lock() -> None\n\
3216Release the interpreter's import lock.\n\
3217On platforms without threads, this function does nothing.");
3218
Guido van Rossum79f25d91997-04-29 20:08:16 +00003219static PyMethodDef imp_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003220 {"reload", imp_reload, METH_O, doc_reload},
3221 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3222 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3223 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3224 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3225 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3226 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3227 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3228 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
3229 /* The rest are obsolete */
3230 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3231 {"init_builtin", imp_init_builtin, METH_VARARGS},
3232 {"init_frozen", imp_init_frozen, METH_VARARGS},
3233 {"is_builtin", imp_is_builtin, METH_VARARGS},
3234 {"is_frozen", imp_is_frozen, METH_VARARGS},
3235 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003236#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003237 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003238#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003239 {"load_package", imp_load_package, METH_VARARGS},
3240 {"load_source", imp_load_source, METH_VARARGS},
3241 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003242};
3243
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003244static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003245setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003246{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003247 PyObject *v;
3248 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003249
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003250 v = PyInt_FromLong((long)value);
3251 err = PyDict_SetItemString(d, name, v);
3252 Py_XDECREF(v);
3253 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003254}
3255
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003256typedef struct {
3257 PyObject_HEAD
3258} NullImporter;
3259
3260static int
3261NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3262{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003263 char *path;
3264 Py_ssize_t pathlen;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003265
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003266 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3267 return -1;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003268
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003269 if (!PyArg_ParseTuple(args, "s:NullImporter",
3270 &path))
3271 return -1;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003272
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003273 pathlen = strlen(path);
3274 if (pathlen == 0) {
3275 PyErr_SetString(PyExc_ImportError, "empty pathname");
3276 return -1;
3277 } else {
Jason R. Coombs0737b722012-01-13 17:59:05 -05003278 if(isdir(path)) {
3279 PyErr_SetString(PyExc_ImportError,
3280 "existing directory");
3281 return -1;
3282 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003283 }
3284 return 0;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003285}
3286
3287static PyObject *
3288NullImporter_find_module(NullImporter *self, PyObject *args)
3289{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003290 Py_RETURN_NONE;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003291}
3292
3293static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003294 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3295 "Always return None"
3296 },
3297 {NULL} /* Sentinel */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003298};
3299
3300
Nick Coghlan327a39b2007-11-18 11:56:28 +00003301PyTypeObject PyNullImporter_Type = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003302 PyVarObject_HEAD_INIT(NULL, 0)
3303 "imp.NullImporter", /*tp_name*/
3304 sizeof(NullImporter), /*tp_basicsize*/
3305 0, /*tp_itemsize*/
3306 0, /*tp_dealloc*/
3307 0, /*tp_print*/
3308 0, /*tp_getattr*/
3309 0, /*tp_setattr*/
3310 0, /*tp_compare*/
3311 0, /*tp_repr*/
3312 0, /*tp_as_number*/
3313 0, /*tp_as_sequence*/
3314 0, /*tp_as_mapping*/
3315 0, /*tp_hash */
3316 0, /*tp_call*/
3317 0, /*tp_str*/
3318 0, /*tp_getattro*/
3319 0, /*tp_setattro*/
3320 0, /*tp_as_buffer*/
3321 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3322 "Null importer object", /* tp_doc */
3323 0, /* tp_traverse */
3324 0, /* tp_clear */
3325 0, /* tp_richcompare */
3326 0, /* tp_weaklistoffset */
3327 0, /* tp_iter */
3328 0, /* tp_iternext */
3329 NullImporter_methods, /* tp_methods */
3330 0, /* tp_members */
3331 0, /* tp_getset */
3332 0, /* tp_base */
3333 0, /* tp_dict */
3334 0, /* tp_descr_get */
3335 0, /* tp_descr_set */
3336 0, /* tp_dictoffset */
3337 (initproc)NullImporter_init, /* tp_init */
3338 0, /* tp_alloc */
3339 PyType_GenericNew /* tp_new */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003340};
3341
3342
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003343PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003344initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003345{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003346 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003347
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003348 if (PyType_Ready(&PyNullImporter_Type) < 0)
3349 goto failure;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003350
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003351 m = Py_InitModule4("imp", imp_methods, doc_imp,
3352 NULL, PYTHON_API_VERSION);
3353 if (m == NULL)
3354 goto failure;
3355 d = PyModule_GetDict(m);
3356 if (d == NULL)
3357 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003358
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003359 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3360 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3361 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3362 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3363 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3364 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3365 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3366 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
3367 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
3368 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003369
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003370 Py_INCREF(&PyNullImporter_Type);
3371 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003372 failure:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003373 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003374}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003375
3376
Guido van Rossumb18618d2000-05-03 23:44:39 +00003377/* API for embedding applications that want to add their own entries
3378 to the table of built-in modules. This should normally be called
3379 *before* Py_Initialize(). When the table resize fails, -1 is
3380 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003381
3382 After a similar function by Just van Rossum. */
3383
3384int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003385PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003386{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003387 static struct _inittab *our_copy = NULL;
3388 struct _inittab *p;
3389 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003390
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003391 /* Count the number of entries in both tables */
3392 for (n = 0; newtab[n].name != NULL; n++)
3393 ;
3394 if (n == 0)
3395 return 0; /* Nothing to do */
3396 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3397 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003398
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003399 /* Allocate new memory for the combined table */
3400 p = our_copy;
3401 PyMem_RESIZE(p, struct _inittab, i+n+1);
3402 if (p == NULL)
3403 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003404
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003405 /* Copy the tables into the new memory */
3406 if (our_copy != PyImport_Inittab)
3407 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3408 PyImport_Inittab = our_copy = p;
3409 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003410
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003411 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003412}
3413
3414/* Shorthand to add a single entry given a name and a function */
3415
3416int
Brett Cannonc4f90eb2009-04-02 03:17:39 +00003417PyImport_AppendInittab(const char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003418{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003419 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003420
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003421 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003422
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003423 newtab[0].name = (char *)name;
3424 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003425
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003426 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003427}
Anthony Baxterac6bd462006-04-13 02:06:09 +00003428
3429#ifdef __cplusplus
3430}
3431#endif