blob: 7daba06ad2d7457e0a558fe062919e191d637d29 [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;
Nick Coghlanb48c0282012-10-19 21:58:18 +1000913 /* Issue #6074: We ensure user write access, so we can delete it later
914 * when the source file changes. (On POSIX, this only requires write
915 * access to the directory, on Windows, we need write access to the file
916 * as well)
917 */
918 mode |= _S_IWRITE;
R. David Murray3310a102009-07-07 09:54:16 +0000919#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000920 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
Brett Cannonb166afc2010-05-05 20:25:47 +0000921#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000922
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000923 fp = open_exclusive(cpathname, mode);
924 if (fp == NULL) {
925 if (Py_VerboseFlag)
926 PySys_WriteStderr(
927 "# can't create %s\n", cpathname);
928 return;
929 }
930 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
931 /* First write a 0 for mtime */
932 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
933 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
934 if (fflush(fp) != 0 || ferror(fp)) {
935 if (Py_VerboseFlag)
936 PySys_WriteStderr("# can't write %s\n", cpathname);
937 /* Don't keep partial file */
938 fclose(fp);
939 (void) unlink(cpathname);
940 return;
941 }
Antoine Pitrou6f25d752012-01-25 15:38:32 +0100942 /* Now write the true mtime (as a 32-bit field) */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000943 fseek(fp, 4L, 0);
Antoine Pitrou6f25d752012-01-25 15:38:32 +0100944 assert(mtime <= 0xFFFFFFFF);
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000945 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
946 fflush(fp);
947 fclose(fp);
948 if (Py_VerboseFlag)
949 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000950}
951
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000952static void
953update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
954{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000955 PyObject *constants, *tmp;
956 Py_ssize_t i, n;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000957
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000958 if (!_PyString_Eq(co->co_filename, oldname))
959 return;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000960
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000961 tmp = co->co_filename;
962 co->co_filename = newname;
963 Py_INCREF(co->co_filename);
964 Py_DECREF(tmp);
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000965
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000966 constants = co->co_consts;
967 n = PyTuple_GET_SIZE(constants);
968 for (i = 0; i < n; i++) {
969 tmp = PyTuple_GET_ITEM(constants, i);
970 if (PyCode_Check(tmp))
971 update_code_filenames((PyCodeObject *)tmp,
972 oldname, newname);
973 }
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000974}
975
976static int
977update_compiled_module(PyCodeObject *co, char *pathname)
978{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000979 PyObject *oldname, *newname;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000980
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000981 if (strcmp(PyString_AsString(co->co_filename), pathname) == 0)
982 return 0;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000983
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000984 newname = PyString_FromString(pathname);
985 if (newname == NULL)
986 return -1;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000987
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000988 oldname = co->co_filename;
989 Py_INCREF(oldname);
990 update_code_filenames(co, oldname, newname);
991 Py_DECREF(oldname);
992 Py_DECREF(newname);
993 return 1;
Antoine Pitroue96d4ea2009-01-06 18:10:47 +0000994}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000995
996/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000997 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
998 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000999
Guido van Rossum79f25d91997-04-29 20:08:16 +00001000static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001001load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001002{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001003 struct stat st;
1004 FILE *fpc;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001005 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001006 char *cpathname;
Antoine Pitrou284fa082012-05-09 13:24:31 +02001007 PyCodeObject *co = NULL;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001008 PyObject *m;
Brett Cannonb166afc2010-05-05 20:25:47 +00001009
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001010 if (fstat(fileno(fp), &st) != 0) {
1011 PyErr_Format(PyExc_RuntimeError,
1012 "unable to get file status from '%s'",
1013 pathname);
1014 return NULL;
1015 }
Antoine Pitrou0e5fd592012-01-25 03:31:39 +01001016 if (sizeof st.st_mtime > 4) {
1017 /* Python's .pyc timestamp handling presumes that the timestamp fits
1018 in 4 bytes. Since the code only does an equality comparison,
1019 ordering is not important and we can safely ignore the higher bits
1020 (collisions are extremely unlikely).
1021 */
1022 st.st_mtime &= 0xFFFFFFFF;
1023 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001024 buf = PyMem_MALLOC(MAXPATHLEN+1);
1025 if (buf == NULL) {
1026 return PyErr_NoMemory();
1027 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001028 cpathname = make_compiled_pathname(pathname, buf,
1029 (size_t)MAXPATHLEN + 1);
1030 if (cpathname != NULL &&
1031 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
1032 co = read_compiled_module(cpathname, fpc);
1033 fclose(fpc);
1034 if (co == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001035 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001036 if (update_compiled_module(co, pathname) < 0)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001037 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001038 if (Py_VerboseFlag)
1039 PySys_WriteStderr("import %s # precompiled from %s\n",
1040 name, cpathname);
1041 pathname = cpathname;
1042 }
1043 else {
1044 co = parse_source_module(pathname, fp);
1045 if (co == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001046 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001047 if (Py_VerboseFlag)
1048 PySys_WriteStderr("import %s # from %s\n",
1049 name, pathname);
1050 if (cpathname) {
1051 PyObject *ro = PySys_GetObject("dont_write_bytecode");
Antoine Pitrouc5bef752012-08-15 23:16:51 +02001052 int b = (ro == NULL) ? 0 : PyObject_IsTrue(ro);
1053 if (b < 0)
1054 goto error_exit;
1055 if (!b)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001056 write_compiled_module(co, cpathname, &st);
1057 }
1058 }
1059 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
1060 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001061
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001062 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001063 return m;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001064
1065error_exit:
Antoine Pitrou284fa082012-05-09 13:24:31 +02001066 Py_XDECREF(co);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001067 PyMem_FREE(buf);
1068 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001069}
1070
1071
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001072/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001073static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1074static struct filedescr *find_module(char *, char *, PyObject *,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001075 char *, size_t, FILE **, PyObject **);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001076static struct _frozen *find_frozen(char *name);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001077
1078/* Load a package and return its module object WITH INCREMENTED
1079 REFERENCE COUNT */
1080
1081static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001082load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001083{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001084 PyObject *m, *d;
1085 PyObject *file = NULL;
1086 PyObject *path = NULL;
1087 int err;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001088 char *buf = NULL;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001089 FILE *fp = NULL;
1090 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001091
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001092 m = PyImport_AddModule(name);
1093 if (m == NULL)
1094 return NULL;
1095 if (Py_VerboseFlag)
1096 PySys_WriteStderr("import %s # directory %s\n",
1097 name, pathname);
1098 d = PyModule_GetDict(m);
1099 file = PyString_FromString(pathname);
1100 if (file == NULL)
1101 goto error;
1102 path = Py_BuildValue("[O]", file);
1103 if (path == NULL)
1104 goto error;
1105 err = PyDict_SetItemString(d, "__file__", file);
1106 if (err == 0)
1107 err = PyDict_SetItemString(d, "__path__", path);
1108 if (err != 0)
1109 goto error;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001110 buf = PyMem_MALLOC(MAXPATHLEN+1);
1111 if (buf == NULL) {
1112 PyErr_NoMemory();
1113 goto error;
1114 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001115 buf[0] = '\0';
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001116 fdp = find_module(name, "__init__", path, buf, MAXPATHLEN+1, &fp, NULL);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001117 if (fdp == NULL) {
1118 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1119 PyErr_Clear();
1120 Py_INCREF(m);
1121 }
1122 else
1123 m = NULL;
1124 goto cleanup;
1125 }
1126 m = load_module(name, fp, buf, fdp->type, NULL);
1127 if (fp != NULL)
1128 fclose(fp);
1129 goto cleanup;
Tim Peters1cd70172004-08-02 03:52:12 +00001130
1131 error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001132 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001133 cleanup:
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001134 if (buf)
1135 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001136 Py_XDECREF(path);
1137 Py_XDECREF(file);
1138 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001139}
1140
1141
1142/* Helper to test for built-in module */
1143
1144static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001145is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001146{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001147 int i;
1148 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1149 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1150 if (PyImport_Inittab[i].initfunc == NULL)
1151 return -1;
1152 else
1153 return 1;
1154 }
1155 }
1156 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001157}
1158
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001159
Just van Rossum52e14d62002-12-30 22:08:05 +00001160/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1161 possibly by fetching it from the path_importer_cache dict. If it
Brett Cannon94b69f62006-09-28 22:10:14 +00001162 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001163 that can handle the path item. Return None if no hook could;
1164 this tells our caller it should fall back to the builtin
1165 import mechanism. Cache the result in path_importer_cache.
1166 Returns a borrowed reference. */
1167
1168static PyObject *
1169get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001170 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001171{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001172 PyObject *importer;
1173 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001174
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001175 /* These conditions are the caller's responsibility: */
1176 assert(PyList_Check(path_hooks));
1177 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001178
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001179 nhooks = PyList_Size(path_hooks);
1180 if (nhooks < 0)
1181 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001182
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001183 importer = PyDict_GetItem(path_importer_cache, p);
1184 if (importer != NULL)
1185 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001186
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001187 /* set path_importer_cache[p] to None to avoid recursion */
1188 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1189 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001190
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001191 for (j = 0; j < nhooks; j++) {
1192 PyObject *hook = PyList_GetItem(path_hooks, j);
1193 if (hook == NULL)
1194 return NULL;
1195 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1196 if (importer != NULL)
1197 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001198
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001199 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1200 return NULL;
1201 }
1202 PyErr_Clear();
1203 }
1204 if (importer == NULL) {
1205 importer = PyObject_CallFunctionObjArgs(
1206 (PyObject *)&PyNullImporter_Type, p, NULL
1207 );
1208 if (importer == NULL) {
1209 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1210 PyErr_Clear();
1211 return Py_None;
1212 }
1213 }
1214 }
1215 if (importer != NULL) {
1216 int err = PyDict_SetItem(path_importer_cache, p, importer);
1217 Py_DECREF(importer);
1218 if (err != 0)
1219 return NULL;
1220 }
1221 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001222}
1223
Nick Coghlan327a39b2007-11-18 11:56:28 +00001224PyAPI_FUNC(PyObject *)
1225PyImport_GetImporter(PyObject *path) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001226 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Nick Coghlan327a39b2007-11-18 11:56:28 +00001227
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001228 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1229 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1230 importer = get_path_importer(path_importer_cache,
1231 path_hooks, path);
1232 }
1233 }
1234 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1235 return importer;
Nick Coghlan327a39b2007-11-18 11:56:28 +00001236}
1237
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001238/* Search the path (default sys.path) for a module. Return the
1239 corresponding filedescr struct, and (via return arguments) the
1240 pathname and an open file. Return NULL if the module is not found. */
1241
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001242#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001243extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001244 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001245#endif
1246
Martin v. Löwis18e16552006-02-15 17:27:45 +00001247static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001248static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001249static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001250
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001251static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001252find_module(char *fullname, char *subname, PyObject *path, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001253 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001254{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001255 Py_ssize_t i, npath;
1256 size_t len, namelen;
1257 struct filedescr *fdp = NULL;
1258 char *filemode;
1259 FILE *fp = NULL;
1260 PyObject *path_hooks, *path_importer_cache;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001261 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1262 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1263 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001264 char *name;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001265#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001266 size_t saved_len;
1267 size_t saved_namelen;
1268 char *saved_buf = NULL;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001269#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001270 if (p_loader != NULL)
1271 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001272
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001273 if (strlen(subname) > MAXPATHLEN) {
1274 PyErr_SetString(PyExc_OverflowError,
1275 "module name is too long");
1276 return NULL;
1277 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001278 name = PyMem_MALLOC(MAXPATHLEN+1);
1279 if (name == NULL) {
Gregory P. Smitha72aa842012-04-18 16:41:56 -07001280 PyErr_NoMemory();
1281 return NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001282 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001283 strcpy(name, subname);
Just van Rossum52e14d62002-12-30 22:08:05 +00001284
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001285 /* sys.meta_path import hook */
1286 if (p_loader != NULL) {
1287 PyObject *meta_path;
Just van Rossum52e14d62002-12-30 22:08:05 +00001288
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001289 meta_path = PySys_GetObject("meta_path");
1290 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001291 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001292 "sys.meta_path must be a list of "
1293 "import hooks");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001294 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001295 }
1296 Py_INCREF(meta_path); /* zap guard */
1297 npath = PyList_Size(meta_path);
1298 for (i = 0; i < npath; i++) {
1299 PyObject *loader;
1300 PyObject *hook = PyList_GetItem(meta_path, i);
1301 loader = PyObject_CallMethod(hook, "find_module",
1302 "sO", fullname,
1303 path != NULL ?
1304 path : Py_None);
1305 if (loader == NULL) {
1306 Py_DECREF(meta_path);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001307 goto error_exit; /* true error */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001308 }
1309 if (loader != Py_None) {
1310 /* a loader was found */
1311 *p_loader = loader;
1312 Py_DECREF(meta_path);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001313 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001314 return &importhookdescr;
1315 }
1316 Py_DECREF(loader);
1317 }
1318 Py_DECREF(meta_path);
1319 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001320
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001321 if (path != NULL && PyString_Check(path)) {
1322 /* The only type of submodule allowed inside a "frozen"
1323 package are other frozen modules or packages. */
1324 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1325 PyErr_SetString(PyExc_ImportError,
1326 "full frozen module name too long");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001327 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001328 }
1329 strcpy(buf, PyString_AsString(path));
1330 strcat(buf, ".");
1331 strcat(buf, name);
1332 strcpy(name, buf);
1333 if (find_frozen(name) != NULL) {
1334 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001335 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001336 return &fd_frozen;
1337 }
1338 PyErr_Format(PyExc_ImportError,
1339 "No frozen submodule named %.200s", name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001340 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001341 }
1342 if (path == NULL) {
1343 if (is_builtin(name)) {
1344 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001345 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001346 return &fd_builtin;
1347 }
1348 if ((find_frozen(name)) != NULL) {
1349 strcpy(buf, name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001350 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001351 return &fd_frozen;
1352 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001353
Guido van Rossumac279101996-08-22 23:10:58 +00001354#ifdef MS_COREDLL
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001355 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1356 if (fp != NULL) {
1357 *p_fp = fp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001358 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001359 return fdp;
1360 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001361#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001362 path = PySys_GetObject("path");
1363 }
1364 if (path == NULL || !PyList_Check(path)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001365 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001366 "sys.path must be a list of directory names");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001367 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001368 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001369
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001370 path_hooks = PySys_GetObject("path_hooks");
1371 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001372 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001373 "sys.path_hooks must be a list of "
1374 "import hooks");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001375 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001376 }
1377 path_importer_cache = PySys_GetObject("path_importer_cache");
1378 if (path_importer_cache == NULL ||
1379 !PyDict_Check(path_importer_cache)) {
Victor Stinnered36c062011-09-15 19:45:53 +02001380 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001381 "sys.path_importer_cache must be a dict");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001382 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001383 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001384
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001385 npath = PyList_Size(path);
1386 namelen = strlen(name);
1387 for (i = 0; i < npath; i++) {
1388 PyObject *copy = NULL;
1389 PyObject *v = PyList_GetItem(path, i);
1390 if (!v)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001391 goto error_exit;
Walter Dörwald3430d702002-06-17 10:43:59 +00001392#ifdef Py_USING_UNICODE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001393 if (PyUnicode_Check(v)) {
1394 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1395 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1396 if (copy == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001397 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001398 v = copy;
1399 }
1400 else
Walter Dörwald3430d702002-06-17 10:43:59 +00001401#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001402 if (!PyString_Check(v))
1403 continue;
1404 len = PyString_GET_SIZE(v);
1405 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1406 Py_XDECREF(copy);
1407 continue; /* Too long */
1408 }
1409 strcpy(buf, PyString_AS_STRING(v));
1410 if (strlen(buf) != len) {
1411 Py_XDECREF(copy);
1412 continue; /* v contains '\0' */
1413 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001414
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001415 /* sys.path_hooks import hook */
1416 if (p_loader != NULL) {
1417 PyObject *importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001418
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001419 importer = get_path_importer(path_importer_cache,
1420 path_hooks, v);
1421 if (importer == NULL) {
1422 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001423 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001424 }
1425 /* Note: importer is a borrowed reference */
1426 if (importer != Py_None) {
1427 PyObject *loader;
1428 loader = PyObject_CallMethod(importer,
1429 "find_module",
1430 "s", fullname);
1431 Py_XDECREF(copy);
1432 if (loader == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001433 goto error_exit; /* error */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001434 if (loader != Py_None) {
1435 /* a loader was found */
1436 *p_loader = loader;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001437 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001438 return &importhookdescr;
1439 }
1440 Py_DECREF(loader);
1441 continue;
1442 }
1443 }
1444 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001445
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001446 if (len > 0 && buf[len-1] != SEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001447#ifdef ALTSEP
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001448 && buf[len-1] != ALTSEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001449#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001450 )
1451 buf[len++] = SEP;
1452 strcpy(buf+len, name);
1453 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001454
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001455 /* Check for package import (buf holds a directory name,
1456 and there's an __init__ module in that directory */
Jason R. Coombs925ff742012-01-13 17:12:25 -05001457 if (isdir(buf) && /* it's an existing directory */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001458 case_ok(buf, len, namelen, name)) { /* case matches */
1459 if (find_init_module(buf)) { /* and has __init__.py */
1460 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001461 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001462 return &fd_package;
1463 }
1464 else {
1465 char warnstr[MAXPATHLEN+80];
1466 sprintf(warnstr, "Not importing directory "
1467 "'%.*s': missing __init__.py",
1468 MAXPATHLEN, buf);
1469 if (PyErr_Warn(PyExc_ImportWarning,
1470 warnstr)) {
1471 Py_XDECREF(copy);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001472 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001473 }
1474 }
1475 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001476#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001477 /* take a snapshot of the module spec for restoration
1478 * after the 8 character DLL hackery
1479 */
1480 saved_buf = strdup(buf);
1481 saved_len = len;
1482 saved_namelen = namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001483#endif /* PYOS_OS2 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001484 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Georg Brandladd36e52007-08-23 18:08:06 +00001485#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001486 /* OS/2 limits DLLs to 8 character names (w/o
1487 extension)
1488 * so if the name is longer than that and its a
1489 * dynamically loaded module we're going to try,
1490 * truncate the name before trying
1491 */
1492 if (strlen(subname) > 8) {
1493 /* is this an attempt to load a C extension? */
1494 const struct filedescr *scan;
1495 scan = _PyImport_DynLoadFiletab;
1496 while (scan->suffix != NULL) {
1497 if (!strcmp(scan->suffix, fdp->suffix))
1498 break;
1499 else
1500 scan++;
1501 }
1502 if (scan->suffix != NULL) {
1503 /* yes, so truncate the name */
1504 namelen = 8;
1505 len -= strlen(subname) - namelen;
1506 buf[len] = '\0';
1507 }
1508 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001509#endif /* PYOS_OS2 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001510 strcpy(buf+len, fdp->suffix);
1511 if (Py_VerboseFlag > 1)
1512 PySys_WriteStderr("# trying %s\n", buf);
1513 filemode = fdp->mode;
1514 if (filemode[0] == 'U')
1515 filemode = "r" PY_STDIOTEXTMODE;
1516 fp = fopen(buf, filemode);
1517 if (fp != NULL) {
1518 if (case_ok(buf, len, namelen, name))
1519 break;
1520 else { /* continue search */
1521 fclose(fp);
1522 fp = NULL;
1523 }
1524 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001525#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001526 /* restore the saved snapshot */
1527 strcpy(buf, saved_buf);
1528 len = saved_len;
1529 namelen = saved_namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001530#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001531 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001532#if defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001533 /* don't need/want the module name snapshot anymore */
1534 if (saved_buf)
1535 {
1536 free(saved_buf);
1537 saved_buf = NULL;
1538 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001539#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001540 Py_XDECREF(copy);
1541 if (fp != NULL)
1542 break;
1543 }
1544 if (fp == NULL) {
1545 PyErr_Format(PyExc_ImportError,
1546 "No module named %.200s", name);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001547 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001548 }
1549 *p_fp = fp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001550 PyMem_FREE(name);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001551 return fdp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07001552
1553error_exit:
1554 PyMem_FREE(name);
1555 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001556}
1557
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001558/* Helpers for main.c
1559 * Find the source file corresponding to a named module
1560 */
1561struct filedescr *
1562_PyImport_FindModule(const char *name, PyObject *path, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001563 size_t buflen, FILE **p_fp, PyObject **p_loader)
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001564{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001565 return find_module((char *) name, (char *) name, path,
1566 buf, buflen, p_fp, p_loader);
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001567}
1568
1569PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1570{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001571 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001572}
1573
Martin v. Löwis18e16552006-02-15 17:27:45 +00001574/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001575 * The arguments here are tricky, best shown by example:
1576 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1577 * ^ ^ ^ ^
1578 * |--------------------- buf ---------------------|
1579 * |------------------- len ------------------|
1580 * |------ name -------|
1581 * |----- namelen -----|
1582 * buf is the full path, but len only counts up to (& exclusive of) the
1583 * extension. name is the module name, also exclusive of extension.
1584 *
1585 * We've already done a successful stat() or fopen() on buf, so know that
1586 * there's some match, possibly case-insensitive.
1587 *
Tim Peters50d8d372001-02-28 05:34:27 +00001588 * case_ok() is to return 1 if there's a case-sensitive match for
1589 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1590 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001591 *
Tim Peters50d8d372001-02-28 05:34:27 +00001592 * case_ok() is used to implement case-sensitive import semantics even
1593 * on platforms with case-insensitive filesystems. It's trivial to implement
1594 * for case-sensitive filesystems. It's pretty much a cross-platform
1595 * nightmare for systems with case-insensitive filesystems.
1596 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001597
Tim Peters50d8d372001-02-28 05:34:27 +00001598/* First we may need a pile of platform-specific header files; the sequence
1599 * of #if's here should match the sequence in the body of case_ok().
1600 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001601#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001602#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001603
Tim Peters50d8d372001-02-28 05:34:27 +00001604#elif defined(DJGPP)
1605#include <dir.h>
1606
Jason Tishler7961aa62005-05-20 00:56:54 +00001607#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001608#include <sys/types.h>
1609#include <dirent.h>
1610
Andrew MacIntyred9400542002-02-26 11:41:34 +00001611#elif defined(PYOS_OS2)
1612#define INCL_DOS
1613#define INCL_DOSERRORS
1614#define INCL_NOPMAPI
1615#include <os2.h>
1616
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001617#elif defined(RISCOS)
1618#include "oslib/osfscontrol.h"
Tim Peters50d8d372001-02-28 05:34:27 +00001619#endif
1620
Guido van Rossum0980bd91998-02-13 17:18:36 +00001621static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001622case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001623{
Tim Peters50d8d372001-02-28 05:34:27 +00001624/* Pick a platform-specific implementation; the sequence of #if's here should
1625 * match the sequence just above.
1626 */
1627
Jason Tishler7961aa62005-05-20 00:56:54 +00001628/* MS_WINDOWS */
1629#if defined(MS_WINDOWS)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001630 WIN32_FIND_DATA data;
1631 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001632
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001633 if (Py_GETENV("PYTHONCASEOK") != NULL)
1634 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001635
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001636 h = FindFirstFile(buf, &data);
1637 if (h == INVALID_HANDLE_VALUE) {
1638 PyErr_Format(PyExc_NameError,
1639 "Can't find file for module %.100s\n(filename %.300s)",
1640 name, buf);
1641 return 0;
1642 }
1643 FindClose(h);
1644 return strncmp(data.cFileName, name, namelen) == 0;
Tim Peters50d8d372001-02-28 05:34:27 +00001645
1646/* DJGPP */
1647#elif defined(DJGPP)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001648 struct ffblk ffblk;
1649 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00001650
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001651 if (Py_GETENV("PYTHONCASEOK") != NULL)
1652 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001653
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001654 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1655 if (done) {
1656 PyErr_Format(PyExc_NameError,
1657 "Can't find file for module %.100s\n(filename %.300s)",
1658 name, buf);
1659 return 0;
1660 }
1661 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001662
Jason Tishler7961aa62005-05-20 00:56:54 +00001663/* new-fangled macintosh (macosx) or Cygwin */
1664#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001665 DIR *dirp;
1666 struct dirent *dp;
1667 char dirname[MAXPATHLEN + 1];
1668 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001669
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001670 if (Py_GETENV("PYTHONCASEOK") != NULL)
1671 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001672
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001673 /* Copy the dir component into dirname; substitute "." if empty */
1674 if (dirlen <= 0) {
1675 dirname[0] = '.';
1676 dirname[1] = '\0';
1677 }
1678 else {
1679 assert(dirlen <= MAXPATHLEN);
1680 memcpy(dirname, buf, dirlen);
1681 dirname[dirlen] = '\0';
1682 }
1683 /* Open the directory and search the entries for an exact match. */
1684 dirp = opendir(dirname);
1685 if (dirp) {
1686 char *nameWithExt = buf + len - namelen;
1687 while ((dp = readdir(dirp)) != NULL) {
1688 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001689#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001690 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001691#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001692 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001693#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001694 if (thislen >= namelen &&
1695 strcmp(dp->d_name, nameWithExt) == 0) {
1696 (void)closedir(dirp);
1697 return 1; /* Found */
1698 }
1699 }
1700 (void)closedir(dirp);
1701 }
1702 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001703
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001704/* RISC OS */
1705#elif defined(RISCOS)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001706 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1707 char buf2[MAXPATHLEN+2];
1708 char *nameWithExt = buf+len-namelen;
1709 int canonlen;
1710 os_error *e;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001711
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001712 if (Py_GETENV("PYTHONCASEOK") != NULL)
1713 return 1;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001714
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001715 /* workaround:
1716 append wildcard, otherwise case of filename wouldn't be touched */
1717 strcpy(buf2, buf);
1718 strcat(buf2, "*");
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001719
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001720 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1721 canonlen = MAXPATHLEN+1-canonlen;
1722 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1723 return 0;
1724 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1725 return 1; /* match */
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001726
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001727 return 0;
Guido van Rossume2ae77b2001-10-24 20:42:55 +00001728
Andrew MacIntyred9400542002-02-26 11:41:34 +00001729/* OS/2 */
1730#elif defined(PYOS_OS2)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001731 HDIR hdir = 1;
1732 ULONG srchcnt = 1;
1733 FILEFINDBUF3 ffbuf;
1734 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001735
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001736 if (Py_GETENV("PYTHONCASEOK") != NULL)
1737 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001738
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001739 rc = DosFindFirst(buf,
1740 &hdir,
1741 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1742 &ffbuf, sizeof(ffbuf),
1743 &srchcnt,
1744 FIL_STANDARD);
1745 if (rc != NO_ERROR)
1746 return 0;
1747 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001748
Tim Peters50d8d372001-02-28 05:34:27 +00001749/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1750#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001751 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001752
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001753#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001754}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001755
Guido van Rossum0980bd91998-02-13 17:18:36 +00001756
Guido van Rossum197346f1997-10-31 18:38:52 +00001757#ifdef HAVE_STAT
1758/* Helper to look for __init__.py or __init__.py[co] in potential package */
1759static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001760find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001761{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001762 const size_t save_len = strlen(buf);
1763 size_t i = save_len;
1764 char *pname; /* pointer to start of __init__ */
1765 struct stat statbuf;
Guido van Rossum197346f1997-10-31 18:38:52 +00001766
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001767/* For calling case_ok(buf, len, namelen, name):
1768 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1769 * ^ ^ ^ ^
1770 * |--------------------- buf ---------------------|
1771 * |------------------- len ------------------|
1772 * |------ name -------|
1773 * |----- namelen -----|
Tim Peters0f9431f2001-07-05 03:47:53 +00001774 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001775 if (save_len + 13 >= MAXPATHLEN)
1776 return 0;
1777 buf[i++] = SEP;
1778 pname = buf + i;
1779 strcpy(pname, "__init__.py");
1780 if (stat(buf, &statbuf) == 0) {
1781 if (case_ok(buf,
1782 save_len + 9, /* len("/__init__") */
1783 8, /* len("__init__") */
1784 pname)) {
1785 buf[save_len] = '\0';
1786 return 1;
1787 }
1788 }
1789 i += strlen(pname);
1790 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
1791 if (stat(buf, &statbuf) == 0) {
1792 if (case_ok(buf,
1793 save_len + 9, /* len("/__init__") */
1794 8, /* len("__init__") */
1795 pname)) {
1796 buf[save_len] = '\0';
1797 return 1;
1798 }
1799 }
1800 buf[save_len] = '\0';
1801 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00001802}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001803
1804#else
1805
1806#ifdef RISCOS
1807static int
1808find_init_module(buf)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001809 char *buf;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001810{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001811 int save_len = strlen(buf);
1812 int i = save_len;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001813
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001814 if (save_len + 13 >= MAXPATHLEN)
1815 return 0;
1816 buf[i++] = SEP;
1817 strcpy(buf+i, "__init__/py");
1818 if (isfile(buf)) {
1819 buf[save_len] = '\0';
1820 return 1;
1821 }
Guido van Rossum48a680c2001-03-02 06:34:14 +00001822
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001823 if (Py_OptimizeFlag)
1824 strcpy(buf+i, "o");
1825 else
1826 strcpy(buf+i, "c");
1827 if (isfile(buf)) {
1828 buf[save_len] = '\0';
1829 return 1;
1830 }
1831 buf[save_len] = '\0';
1832 return 0;
Guido van Rossum48a680c2001-03-02 06:34:14 +00001833}
1834#endif /*RISCOS*/
1835
Guido van Rossum197346f1997-10-31 18:38:52 +00001836#endif /* HAVE_STAT */
1837
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001838
Tim Petersdbd9ba62000-07-09 03:09:57 +00001839static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001840
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001841/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001842 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001843
Guido van Rossum79f25d91997-04-29 20:08:16 +00001844static PyObject *
Amaury Forgeot d'Arc982b2fa2009-07-25 16:22:06 +00001845load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001846{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001847 PyObject *modules;
1848 PyObject *m;
1849 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001850
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001851 /* First check that there's an open file (if we need one) */
1852 switch (type) {
1853 case PY_SOURCE:
1854 case PY_COMPILED:
1855 if (fp == NULL) {
1856 PyErr_Format(PyExc_ValueError,
1857 "file object required for import (type code %d)",
1858 type);
1859 return NULL;
1860 }
1861 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001862
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001863 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001864
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001865 case PY_SOURCE:
1866 m = load_source_module(name, pathname, fp);
1867 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001868
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001869 case PY_COMPILED:
1870 m = load_compiled_module(name, pathname, fp);
1871 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001872
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001873#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001874 case C_EXTENSION:
1875 m = _PyImport_LoadDynamicModule(name, pathname, fp);
1876 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001877#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001878
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001879 case PKG_DIRECTORY:
1880 m = load_package(name, pathname);
1881 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001882
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001883 case C_BUILTIN:
1884 case PY_FROZEN:
1885 if (pathname != NULL && pathname[0] != '\0')
1886 name = pathname;
1887 if (type == C_BUILTIN)
1888 err = init_builtin(name);
1889 else
1890 err = PyImport_ImportFrozenModule(name);
1891 if (err < 0)
1892 return NULL;
1893 if (err == 0) {
1894 PyErr_Format(PyExc_ImportError,
1895 "Purported %s module %.200s not found",
1896 type == C_BUILTIN ?
1897 "builtin" : "frozen",
1898 name);
1899 return NULL;
1900 }
1901 modules = PyImport_GetModuleDict();
1902 m = PyDict_GetItemString(modules, name);
1903 if (m == NULL) {
1904 PyErr_Format(
1905 PyExc_ImportError,
1906 "%s module %.200s not properly initialized",
1907 type == C_BUILTIN ?
1908 "builtin" : "frozen",
1909 name);
1910 return NULL;
1911 }
1912 Py_INCREF(m);
1913 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001914
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001915 case IMP_HOOK: {
1916 if (loader == NULL) {
1917 PyErr_SetString(PyExc_ImportError,
1918 "import hook without loader");
1919 return NULL;
1920 }
1921 m = PyObject_CallMethod(loader, "load_module", "s", name);
1922 break;
1923 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001924
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001925 default:
1926 PyErr_Format(PyExc_ImportError,
1927 "Don't know how to import %.200s (type code %d)",
1928 name, type);
1929 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001930
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001931 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001932
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001933 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001934}
1935
1936
1937/* Initialize a built-in module.
Brett Cannon5a9aa4f2006-10-03 21:58:55 +00001938 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001939 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001940
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001941static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001942init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001943{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001944 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001945
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001946 if (_PyImport_FindExtension(name, name) != NULL)
1947 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001948
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001949 for (p = PyImport_Inittab; p->name != NULL; p++) {
1950 if (strcmp(name, p->name) == 0) {
1951 if (p->initfunc == NULL) {
1952 PyErr_Format(PyExc_ImportError,
1953 "Cannot re-init internal module %.200s",
1954 name);
1955 return -1;
1956 }
1957 if (Py_VerboseFlag)
1958 PySys_WriteStderr("import %s # builtin\n", name);
1959 (*p->initfunc)();
1960 if (PyErr_Occurred())
1961 return -1;
1962 if (_PyImport_FixupExtension(name, name) == NULL)
1963 return -1;
1964 return 1;
1965 }
1966 }
1967 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001968}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001969
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001970
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001971/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001972
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001973static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001974find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001975{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001976 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001977
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001978 for (p = PyImport_FrozenModules; ; p++) {
1979 if (p->name == NULL)
1980 return NULL;
1981 if (strcmp(p->name, name) == 0)
1982 break;
1983 }
1984 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001985}
1986
Guido van Rossum79f25d91997-04-29 20:08:16 +00001987static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001988get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001989{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001990 struct _frozen *p = find_frozen(name);
1991 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001992
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001993 if (p == NULL) {
1994 PyErr_Format(PyExc_ImportError,
1995 "No such frozen object named %.200s",
1996 name);
1997 return NULL;
1998 }
1999 if (p->code == NULL) {
2000 PyErr_Format(PyExc_ImportError,
2001 "Excluded frozen object named %.200s",
2002 name);
2003 return NULL;
2004 }
2005 size = p->size;
2006 if (size < 0)
2007 size = -size;
2008 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002009}
2010
2011/* Initialize a frozen module.
2012 Return 1 for succes, 0 if the module is not found, and -1 with
2013 an exception set if the initialization failed.
2014 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002015
2016int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002017PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002018{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002019 struct _frozen *p = find_frozen(name);
2020 PyObject *co;
2021 PyObject *m;
2022 int ispackage;
2023 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002024
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002025 if (p == NULL)
2026 return 0;
2027 if (p->code == NULL) {
2028 PyErr_Format(PyExc_ImportError,
2029 "Excluded frozen object named %.200s",
2030 name);
2031 return -1;
2032 }
2033 size = p->size;
2034 ispackage = (size < 0);
2035 if (ispackage)
2036 size = -size;
2037 if (Py_VerboseFlag)
2038 PySys_WriteStderr("import %s # frozen%s\n",
2039 name, ispackage ? " package" : "");
2040 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2041 if (co == NULL)
2042 return -1;
2043 if (!PyCode_Check(co)) {
2044 PyErr_Format(PyExc_TypeError,
2045 "frozen object %.200s is not a code object",
2046 name);
2047 goto err_return;
2048 }
2049 if (ispackage) {
2050 /* Set __path__ to the package name */
2051 PyObject *d, *s;
2052 int err;
2053 m = PyImport_AddModule(name);
2054 if (m == NULL)
2055 goto err_return;
2056 d = PyModule_GetDict(m);
2057 s = PyString_InternFromString(name);
2058 if (s == NULL)
2059 goto err_return;
2060 err = PyDict_SetItemString(d, "__path__", s);
2061 Py_DECREF(s);
2062 if (err != 0)
2063 goto err_return;
2064 }
2065 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
2066 if (m == NULL)
2067 goto err_return;
2068 Py_DECREF(co);
2069 Py_DECREF(m);
2070 return 1;
Neal Norwitzc0cde4d2006-07-16 02:17:36 +00002071err_return:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002072 Py_DECREF(co);
2073 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002074}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002075
2076
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002077/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002078 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002079
Guido van Rossum79f25d91997-04-29 20:08:16 +00002080PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002081PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002082{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002083 PyObject *pname;
2084 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002085
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002086 pname = PyString_FromString(name);
2087 if (pname == NULL)
2088 return NULL;
2089 result = PyImport_Import(pname);
2090 Py_DECREF(pname);
2091 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002092}
2093
Christian Heimes000a0742008-01-03 22:16:32 +00002094/* Import a module without blocking
2095 *
2096 * At first it tries to fetch the module from sys.modules. If the module was
2097 * never loaded before it loads it with PyImport_ImportModule() unless another
2098 * thread holds the import lock. In the latter case the function raises an
2099 * ImportError instead of blocking.
2100 *
2101 * Returns the module object with incremented ref count.
2102 */
2103PyObject *
2104PyImport_ImportModuleNoBlock(const char *name)
2105{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002106 PyObject *result;
2107 PyObject *modules;
Victor Stinner871a0fb2011-09-02 00:21:36 +02002108#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002109 long me;
Victor Stinner871a0fb2011-09-02 00:21:36 +02002110#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002111
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002112 /* Try to get the module from sys.modules[name] */
2113 modules = PyImport_GetModuleDict();
2114 if (modules == NULL)
2115 return NULL;
Christian Heimes000a0742008-01-03 22:16:32 +00002116
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002117 result = PyDict_GetItemString(modules, name);
2118 if (result != NULL) {
2119 Py_INCREF(result);
2120 return result;
2121 }
2122 else {
2123 PyErr_Clear();
2124 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002125#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002126 /* check the import lock
2127 * me might be -1 but I ignore the error here, the lock function
2128 * takes care of the problem */
2129 me = PyThread_get_thread_ident();
2130 if (import_lock_thread == -1 || import_lock_thread == me) {
2131 /* no thread or me is holding the lock */
2132 return PyImport_ImportModule(name);
2133 }
2134 else {
2135 PyErr_Format(PyExc_ImportError,
2136 "Failed to import %.200s because the import lock"
2137 "is held by another thread.",
2138 name);
2139 return NULL;
2140 }
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002141#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002142 return PyImport_ImportModule(name);
Benjamin Peterson17f03ca2008-09-01 14:18:30 +00002143#endif
Christian Heimes000a0742008-01-03 22:16:32 +00002144}
2145
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002146/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002147static PyObject *get_parent(PyObject *globals, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002148 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002149static PyObject *load_next(PyObject *mod, PyObject *altmod,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002150 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002151static int mark_miss(char *name);
2152static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002153 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002154static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002155
2156/* The Magnum Opus of dotted-name import :-) */
2157
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002158static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002159import_module_level(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002160 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002161{
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002162 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002163 Py_ssize_t buflen = 0;
2164 PyObject *parent, *head, *next, *tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002165
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002166 if (strchr(name, '/') != NULL
Christian Heimes3403f152008-01-09 19:56:33 +00002167#ifdef MS_WINDOWS
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002168 || strchr(name, '\\') != NULL
Christian Heimes3403f152008-01-09 19:56:33 +00002169#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002170 ) {
2171 PyErr_SetString(PyExc_ImportError,
2172 "Import by filename is not supported.");
2173 return NULL;
2174 }
Christian Heimes3403f152008-01-09 19:56:33 +00002175
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002176 buf = PyMem_MALLOC(MAXPATHLEN+1);
2177 if (buf == NULL) {
2178 return PyErr_NoMemory();
2179 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002180 parent = get_parent(globals, buf, &buflen, level);
2181 if (parent == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002182 goto error_exit;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002183
Brett Cannoneb3cd302010-05-20 18:37:55 +00002184 head = load_next(parent, level < 0 ? Py_None : parent, &name, buf,
2185 &buflen);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002186 if (head == NULL)
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002187 goto error_exit;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002188
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002189 tail = head;
2190 Py_INCREF(tail);
2191 while (name) {
2192 next = load_next(tail, tail, &name, buf, &buflen);
2193 Py_DECREF(tail);
2194 if (next == NULL) {
2195 Py_DECREF(head);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002196 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002197 }
2198 tail = next;
2199 }
2200 if (tail == Py_None) {
2201 /* If tail is Py_None, both get_parent and load_next found
2202 an empty module name: someone called __import__("") or
2203 doctored faulty bytecode */
2204 Py_DECREF(tail);
2205 Py_DECREF(head);
2206 PyErr_SetString(PyExc_ValueError,
2207 "Empty module name");
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002208 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002209 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002210
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002211 if (fromlist != NULL) {
Antoine Pitrouc5bef752012-08-15 23:16:51 +02002212 int b = (fromlist == Py_None) ? 0 : PyObject_IsTrue(fromlist);
2213 if (b < 0) {
2214 Py_DECREF(tail);
2215 Py_DECREF(head);
2216 goto error_exit;
2217 }
2218 if (!b)
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002219 fromlist = NULL;
2220 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002221
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002222 if (fromlist == NULL) {
2223 Py_DECREF(tail);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002224 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002225 return head;
2226 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002227
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002228 Py_DECREF(head);
2229 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
2230 Py_DECREF(tail);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002231 goto error_exit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002232 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002233
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002234 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002235 return tail;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002236
2237error_exit:
2238 PyMem_FREE(buf);
2239 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002240}
2241
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002242PyObject *
2243PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002244 PyObject *fromlist, int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002245{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002246 PyObject *result;
2247 _PyImport_AcquireLock();
2248 result = import_module_level(name, globals, locals, fromlist, level);
2249 if (_PyImport_ReleaseLock() < 0) {
2250 Py_XDECREF(result);
2251 PyErr_SetString(PyExc_RuntimeError,
2252 "not holding the import lock");
2253 return NULL;
2254 }
2255 return result;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002256}
2257
Fred Drake87590902004-05-28 20:21:36 +00002258/* Return the package that an import is being performed in. If globals comes
2259 from the module foo.bar.bat (not itself a package), this returns the
2260 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Georg Brandl5f6861d2006-05-28 21:57:35 +00002261 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002262
2263 The *name* of the returned package is returned in buf, with the length of
2264 the name in *p_buflen.
2265
2266 If globals doesn't come from a package or a module in a package, or a
2267 corresponding entry is not found in sys.modules, Py_None is returned.
2268*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002269static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002270get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002271{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002272 static PyObject *namestr = NULL;
2273 static PyObject *pathstr = NULL;
2274 static PyObject *pkgstr = NULL;
2275 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2276 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002277
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002278 if (globals == NULL || !PyDict_Check(globals) || !level)
2279 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002280
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002281 if (namestr == NULL) {
2282 namestr = PyString_InternFromString("__name__");
2283 if (namestr == NULL)
2284 return NULL;
2285 }
2286 if (pathstr == NULL) {
2287 pathstr = PyString_InternFromString("__path__");
2288 if (pathstr == NULL)
2289 return NULL;
2290 }
2291 if (pkgstr == NULL) {
2292 pkgstr = PyString_InternFromString("__package__");
2293 if (pkgstr == NULL)
2294 return NULL;
2295 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002296
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002297 *buf = '\0';
2298 *p_buflen = 0;
2299 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002300
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002301 if ((pkgname != NULL) && (pkgname != Py_None)) {
2302 /* __package__ is set, so use it */
2303 Py_ssize_t len;
2304 if (!PyString_Check(pkgname)) {
2305 PyErr_SetString(PyExc_ValueError,
2306 "__package__ set to non-string");
2307 return NULL;
2308 }
2309 len = PyString_GET_SIZE(pkgname);
2310 if (len == 0) {
2311 if (level > 0) {
2312 PyErr_SetString(PyExc_ValueError,
2313 "Attempted relative import in non-package");
2314 return NULL;
2315 }
2316 return Py_None;
2317 }
2318 if (len > MAXPATHLEN) {
2319 PyErr_SetString(PyExc_ValueError,
2320 "Package name too long");
2321 return NULL;
2322 }
2323 strcpy(buf, PyString_AS_STRING(pkgname));
2324 } else {
2325 /* __package__ not set, so figure it out and set it */
2326 modname = PyDict_GetItem(globals, namestr);
2327 if (modname == NULL || !PyString_Check(modname))
2328 return Py_None;
Brett Cannonb166afc2010-05-05 20:25:47 +00002329
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002330 modpath = PyDict_GetItem(globals, pathstr);
2331 if (modpath != NULL) {
2332 /* __path__ is set, so modname is already the package name */
2333 Py_ssize_t len = PyString_GET_SIZE(modname);
2334 int error;
2335 if (len > MAXPATHLEN) {
2336 PyErr_SetString(PyExc_ValueError,
2337 "Module name too long");
2338 return NULL;
2339 }
2340 strcpy(buf, PyString_AS_STRING(modname));
2341 error = PyDict_SetItem(globals, pkgstr, modname);
2342 if (error) {
2343 PyErr_SetString(PyExc_ValueError,
2344 "Could not set __package__");
2345 return NULL;
2346 }
2347 } else {
2348 /* Normal module, so work out the package name if any */
2349 char *start = PyString_AS_STRING(modname);
2350 char *lastdot = strrchr(start, '.');
2351 size_t len;
2352 int error;
2353 if (lastdot == NULL && level > 0) {
2354 PyErr_SetString(PyExc_ValueError,
2355 "Attempted relative import in non-package");
2356 return NULL;
2357 }
2358 if (lastdot == NULL) {
2359 error = PyDict_SetItem(globals, pkgstr, Py_None);
2360 if (error) {
2361 PyErr_SetString(PyExc_ValueError,
2362 "Could not set __package__");
2363 return NULL;
2364 }
2365 return Py_None;
2366 }
2367 len = lastdot - start;
2368 if (len >= MAXPATHLEN) {
2369 PyErr_SetString(PyExc_ValueError,
2370 "Module name too long");
2371 return NULL;
2372 }
2373 strncpy(buf, start, len);
2374 buf[len] = '\0';
2375 pkgname = PyString_FromString(buf);
2376 if (pkgname == NULL) {
2377 return NULL;
2378 }
2379 error = PyDict_SetItem(globals, pkgstr, pkgname);
2380 Py_DECREF(pkgname);
2381 if (error) {
2382 PyErr_SetString(PyExc_ValueError,
2383 "Could not set __package__");
2384 return NULL;
2385 }
2386 }
2387 }
2388 while (--level > 0) {
2389 char *dot = strrchr(buf, '.');
2390 if (dot == NULL) {
2391 PyErr_SetString(PyExc_ValueError,
2392 "Attempted relative import beyond "
2393 "toplevel package");
2394 return NULL;
2395 }
2396 *dot = '\0';
2397 }
2398 *p_buflen = strlen(buf);
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002399
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002400 modules = PyImport_GetModuleDict();
2401 parent = PyDict_GetItemString(modules, buf);
2402 if (parent == NULL) {
2403 if (orig_level < 1) {
2404 PyObject *err_msg = PyString_FromFormat(
2405 "Parent module '%.200s' not found "
2406 "while handling absolute import", buf);
2407 if (err_msg == NULL) {
2408 return NULL;
2409 }
2410 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2411 PyString_AsString(err_msg), 1)) {
2412 *buf = '\0';
2413 *p_buflen = 0;
2414 parent = Py_None;
2415 }
2416 Py_DECREF(err_msg);
2417 } else {
2418 PyErr_Format(PyExc_SystemError,
2419 "Parent module '%.200s' not loaded, "
2420 "cannot perform relative import", buf);
2421 }
2422 }
2423 return parent;
2424 /* We expect, but can't guarantee, if parent != None, that:
2425 - parent.__name__ == buf
2426 - parent.__dict__ is globals
2427 If this is violated... Who cares? */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002428}
2429
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002430/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002431static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002432load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002433 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002434{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002435 char *name = *p_name;
2436 char *dot = strchr(name, '.');
2437 size_t len;
2438 char *p;
2439 PyObject *result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002440
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002441 if (strlen(name) == 0) {
2442 /* completely empty module name should only happen in
2443 'from . import' (or '__import__("")')*/
2444 Py_INCREF(mod);
2445 *p_name = NULL;
2446 return mod;
2447 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002448
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002449 if (dot == NULL) {
2450 *p_name = NULL;
2451 len = strlen(name);
2452 }
2453 else {
2454 *p_name = dot+1;
2455 len = dot-name;
2456 }
2457 if (len == 0) {
2458 PyErr_SetString(PyExc_ValueError,
2459 "Empty module name");
2460 return NULL;
2461 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002462
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002463 p = buf + *p_buflen;
2464 if (p != buf)
2465 *p++ = '.';
2466 if (p+len-buf >= MAXPATHLEN) {
2467 PyErr_SetString(PyExc_ValueError,
2468 "Module name too long");
2469 return NULL;
2470 }
2471 strncpy(p, name, len);
2472 p[len] = '\0';
2473 *p_buflen = p+len-buf;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002474
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002475 result = import_submodule(mod, p, buf);
2476 if (result == Py_None && altmod != mod) {
2477 Py_DECREF(result);
2478 /* Here, altmod must be None and mod must not be None */
2479 result = import_submodule(altmod, p, p);
2480 if (result != NULL && result != Py_None) {
2481 if (mark_miss(buf) != 0) {
2482 Py_DECREF(result);
2483 return NULL;
2484 }
2485 strncpy(buf, name, len);
2486 buf[len] = '\0';
2487 *p_buflen = len;
2488 }
2489 }
2490 if (result == NULL)
2491 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002492
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002493 if (result == Py_None) {
2494 Py_DECREF(result);
2495 PyErr_Format(PyExc_ImportError,
2496 "No module named %.200s", name);
2497 return NULL;
2498 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002499
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002500 return result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002501}
2502
2503static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002504mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002505{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002506 PyObject *modules = PyImport_GetModuleDict();
2507 return PyDict_SetItemString(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002508}
2509
2510static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002511ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002512 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002513{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002514 int i;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002515
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002516 if (!PyObject_HasAttrString(mod, "__path__"))
2517 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002518
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002519 for (i = 0; ; i++) {
2520 PyObject *item = PySequence_GetItem(fromlist, i);
2521 int hasit;
2522 if (item == NULL) {
2523 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2524 PyErr_Clear();
2525 return 1;
2526 }
2527 return 0;
2528 }
2529 if (!PyString_Check(item)) {
2530 PyErr_SetString(PyExc_TypeError,
2531 "Item in ``from list'' not a string");
2532 Py_DECREF(item);
2533 return 0;
2534 }
2535 if (PyString_AS_STRING(item)[0] == '*') {
2536 PyObject *all;
2537 Py_DECREF(item);
2538 /* See if the package defines __all__ */
2539 if (recursive)
2540 continue; /* Avoid endless recursion */
2541 all = PyObject_GetAttrString(mod, "__all__");
2542 if (all == NULL)
2543 PyErr_Clear();
2544 else {
2545 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
2546 Py_DECREF(all);
2547 if (!ret)
2548 return 0;
2549 }
2550 continue;
2551 }
2552 hasit = PyObject_HasAttr(mod, item);
2553 if (!hasit) {
2554 char *subname = PyString_AS_STRING(item);
2555 PyObject *submod;
2556 char *p;
2557 if (buflen + strlen(subname) >= MAXPATHLEN) {
2558 PyErr_SetString(PyExc_ValueError,
2559 "Module name too long");
2560 Py_DECREF(item);
2561 return 0;
2562 }
2563 p = buf + buflen;
2564 *p++ = '.';
2565 strcpy(p, subname);
2566 submod = import_submodule(mod, subname, buf);
2567 Py_XDECREF(submod);
2568 if (submod == NULL) {
2569 Py_DECREF(item);
2570 return 0;
2571 }
2572 }
2573 Py_DECREF(item);
2574 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002575
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002576 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002577}
2578
Neil Schemenauer00b09662003-06-16 21:03:07 +00002579static int
2580add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002581 PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00002582{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002583 if (mod == Py_None)
2584 return 1;
2585 /* Irrespective of the success of this load, make a
2586 reference to it in the parent package module. A copy gets
2587 saved in the modules dictionary under the full name, so get a
2588 reference from there, if need be. (The exception is when the
2589 load failed with a SyntaxError -- then there's no trace in
2590 sys.modules. In that case, of course, do nothing extra.) */
2591 if (submod == NULL) {
2592 submod = PyDict_GetItemString(modules, fullname);
2593 if (submod == NULL)
2594 return 1;
2595 }
2596 if (PyModule_Check(mod)) {
2597 /* We can't use setattr here since it can give a
2598 * spurious warning if the submodule name shadows a
2599 * builtin name */
2600 PyObject *dict = PyModule_GetDict(mod);
2601 if (!dict)
2602 return 0;
2603 if (PyDict_SetItemString(dict, subname, submod) < 0)
2604 return 0;
2605 }
2606 else {
2607 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2608 return 0;
2609 }
2610 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00002611}
2612
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002613static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002614import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002615{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002616 PyObject *modules = PyImport_GetModuleDict();
2617 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002618
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002619 /* Require:
2620 if mod == None: subname == fullname
2621 else: mod.__name__ + "." + subname == fullname
2622 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002623
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002624 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
2625 Py_INCREF(m);
2626 }
2627 else {
2628 PyObject *path, *loader = NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002629 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002630 struct filedescr *fdp;
2631 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002632
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002633 if (mod == Py_None)
2634 path = NULL;
2635 else {
2636 path = PyObject_GetAttrString(mod, "__path__");
2637 if (path == NULL) {
2638 PyErr_Clear();
2639 Py_INCREF(Py_None);
2640 return Py_None;
2641 }
2642 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002643
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002644 buf = PyMem_MALLOC(MAXPATHLEN+1);
2645 if (buf == NULL) {
2646 return PyErr_NoMemory();
2647 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002648 buf[0] = '\0';
2649 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2650 &fp, &loader);
2651 Py_XDECREF(path);
2652 if (fdp == NULL) {
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002653 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002654 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2655 return NULL;
2656 PyErr_Clear();
2657 Py_INCREF(Py_None);
2658 return Py_None;
2659 }
2660 m = load_module(fullname, fp, buf, fdp->type, loader);
2661 Py_XDECREF(loader);
2662 if (fp)
2663 fclose(fp);
2664 if (!add_submodule(mod, m, fullname, subname, modules)) {
2665 Py_XDECREF(m);
2666 m = NULL;
2667 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002668 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002669 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002670
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002671 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002672}
2673
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002674
2675/* Re-import a module of any kind and return its module object, WITH
2676 INCREMENTED REFERENCE COUNT */
2677
Guido van Rossum79f25d91997-04-29 20:08:16 +00002678PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002679PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002680{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002681 PyInterpreterState *interp = PyThreadState_Get()->interp;
2682 PyObject *modules_reloading = interp->modules_reloading;
2683 PyObject *modules = PyImport_GetModuleDict();
2684 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
2685 char *name, *subname;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002686 char *buf;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002687 struct filedescr *fdp;
2688 FILE *fp = NULL;
2689 PyObject *newm;
Brett Cannonb166afc2010-05-05 20:25:47 +00002690
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002691 if (modules_reloading == NULL) {
2692 Py_FatalError("PyImport_ReloadModule: "
2693 "no modules_reloading dictionary!");
2694 return NULL;
2695 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002696
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002697 if (m == NULL || !PyModule_Check(m)) {
2698 PyErr_SetString(PyExc_TypeError,
2699 "reload() argument must be module");
2700 return NULL;
2701 }
2702 name = PyModule_GetName(m);
2703 if (name == NULL)
2704 return NULL;
2705 if (m != PyDict_GetItemString(modules, name)) {
2706 PyErr_Format(PyExc_ImportError,
2707 "reload(): module %.200s not in sys.modules",
2708 name);
2709 return NULL;
2710 }
2711 existing_m = PyDict_GetItemString(modules_reloading, name);
2712 if (existing_m != NULL) {
2713 /* Due to a recursive reload, this module is already
2714 being reloaded. */
2715 Py_INCREF(existing_m);
2716 return existing_m;
2717 }
2718 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2719 return NULL;
Collin Winter276887b2007-03-12 16:11:39 +00002720
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002721 subname = strrchr(name, '.');
2722 if (subname == NULL)
2723 subname = name;
2724 else {
2725 PyObject *parentname, *parent;
2726 parentname = PyString_FromStringAndSize(name, (subname-name));
2727 if (parentname == NULL) {
2728 imp_modules_reloading_clear();
2729 return NULL;
2730 }
2731 parent = PyDict_GetItem(modules, parentname);
2732 if (parent == NULL) {
2733 PyErr_Format(PyExc_ImportError,
2734 "reload(): parent %.200s not in sys.modules",
2735 PyString_AS_STRING(parentname));
2736 Py_DECREF(parentname);
2737 imp_modules_reloading_clear();
2738 return NULL;
2739 }
2740 Py_DECREF(parentname);
2741 subname++;
2742 path = PyObject_GetAttrString(parent, "__path__");
2743 if (path == NULL)
2744 PyErr_Clear();
2745 }
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002746 buf = PyMem_MALLOC(MAXPATHLEN+1);
2747 if (buf == NULL) {
2748 Py_XDECREF(path);
2749 return PyErr_NoMemory();
2750 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002751 buf[0] = '\0';
2752 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
2753 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002754
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002755 if (fdp == NULL) {
2756 Py_XDECREF(loader);
2757 imp_modules_reloading_clear();
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002758 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002759 return NULL;
2760 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002761
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002762 newm = load_module(name, fp, buf, fdp->type, loader);
2763 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002764
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002765 if (fp)
2766 fclose(fp);
2767 if (newm == NULL) {
2768 /* load_module probably removed name from modules because of
2769 * the error. Put back the original module object. We're
2770 * going to return NULL in this case regardless of whether
2771 * replacing name succeeds, so the return value is ignored.
2772 */
2773 PyDict_SetItemString(modules, name, m);
2774 }
2775 imp_modules_reloading_clear();
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002776 PyMem_FREE(buf);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002777 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002778}
2779
2780
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002781/* Higher-level import emulator which emulates the "import" statement
2782 more accurately -- it invokes the __import__() function from the
2783 builtins of the current globals. This means that the import is
2784 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002785 environment, e.g. by "rexec".
2786 A dummy list ["__doc__"] is passed as the 4th argument so that
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002787 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00002788 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002789
2790PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002791PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002792{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002793 static PyObject *silly_list = NULL;
2794 static PyObject *builtins_str = NULL;
2795 static PyObject *import_str = NULL;
2796 PyObject *globals = NULL;
2797 PyObject *import = NULL;
2798 PyObject *builtins = NULL;
2799 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002800
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002801 /* Initialize constant string objects */
2802 if (silly_list == NULL) {
2803 import_str = PyString_InternFromString("__import__");
2804 if (import_str == NULL)
2805 return NULL;
2806 builtins_str = PyString_InternFromString("__builtins__");
2807 if (builtins_str == NULL)
2808 return NULL;
2809 silly_list = Py_BuildValue("[s]", "__doc__");
2810 if (silly_list == NULL)
2811 return NULL;
2812 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002813
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002814 /* Get the builtins from current globals */
2815 globals = PyEval_GetGlobals();
2816 if (globals != NULL) {
2817 Py_INCREF(globals);
2818 builtins = PyObject_GetItem(globals, builtins_str);
2819 if (builtins == NULL)
2820 goto err;
2821 }
2822 else {
2823 /* No globals -- use standard builtins, and fake globals */
2824 builtins = PyImport_ImportModuleLevel("__builtin__",
2825 NULL, NULL, NULL, 0);
2826 if (builtins == NULL)
2827 return NULL;
2828 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2829 if (globals == NULL)
2830 goto err;
2831 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002832
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002833 /* Get the __import__ function from the builtins */
2834 if (PyDict_Check(builtins)) {
2835 import = PyObject_GetItem(builtins, import_str);
2836 if (import == NULL)
2837 PyErr_SetObject(PyExc_KeyError, import_str);
2838 }
2839 else
2840 import = PyObject_GetAttr(builtins, import_str);
2841 if (import == NULL)
2842 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002843
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002844 /* Call the __import__ function with the proper argument list
2845 * Always use absolute import here. */
2846 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2847 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002848
2849 err:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002850 Py_XDECREF(globals);
2851 Py_XDECREF(builtins);
2852 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002853
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002854 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002855}
2856
2857
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002858/* Module 'imp' provides Python access to the primitives used for
2859 importing modules.
2860*/
2861
Guido van Rossum79f25d91997-04-29 20:08:16 +00002862static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002863imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002864{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002865 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002866
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002867 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2868 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2869 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2870 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002871
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002872 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002873}
2874
Guido van Rossum79f25d91997-04-29 20:08:16 +00002875static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002876imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002877{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002878 PyObject *list;
2879 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002880
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002881 list = PyList_New(0);
2882 if (list == NULL)
2883 return NULL;
2884 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2885 PyObject *item = Py_BuildValue("ssi",
2886 fdp->suffix, fdp->mode, fdp->type);
2887 if (item == NULL) {
2888 Py_DECREF(list);
2889 return NULL;
2890 }
2891 if (PyList_Append(list, item) < 0) {
2892 Py_DECREF(list);
2893 Py_DECREF(item);
2894 return NULL;
2895 }
2896 Py_DECREF(item);
2897 }
2898 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002899}
2900
Guido van Rossum79f25d91997-04-29 20:08:16 +00002901static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002902call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002903{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002904 extern int fclose(FILE *);
2905 PyObject *fob, *ret;
2906 struct filedescr *fdp;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002907 char *pathname;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002908 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002909
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002910 pathname = PyMem_MALLOC(MAXPATHLEN+1);
2911 if (pathname == NULL) {
2912 return PyErr_NoMemory();
2913 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002914 pathname[0] = '\0';
2915 if (path == Py_None)
2916 path = NULL;
2917 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002918 if (fdp == 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 if (fp != NULL) {
2923 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002924 if (fob == NULL) {
2925 PyMem_FREE(pathname);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002926 return NULL;
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002927 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002928 }
2929 else {
2930 fob = Py_None;
2931 Py_INCREF(fob);
2932 }
2933 ret = Py_BuildValue("Os(ssi)",
2934 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
2935 Py_DECREF(fob);
Gregory P. Smithfcdf04b2012-03-18 16:07:10 -07002936 PyMem_FREE(pathname);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002937 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002938}
2939
Guido van Rossum79f25d91997-04-29 20:08:16 +00002940static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002941imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002942{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002943 char *name;
2944 PyObject *path = NULL;
2945 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
2946 return NULL;
2947 return call_find_module(name, path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002948}
2949
2950static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002951imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002952{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002953 char *name;
2954 int ret;
2955 PyObject *m;
2956 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
2957 return NULL;
2958 ret = init_builtin(name);
2959 if (ret < 0)
2960 return NULL;
2961 if (ret == 0) {
2962 Py_INCREF(Py_None);
2963 return Py_None;
2964 }
2965 m = PyImport_AddModule(name);
2966 Py_XINCREF(m);
2967 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002968}
2969
Guido van Rossum79f25d91997-04-29 20:08:16 +00002970static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002971imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002972{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002973 char *name;
2974 int ret;
2975 PyObject *m;
2976 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
2977 return NULL;
2978 ret = PyImport_ImportFrozenModule(name);
2979 if (ret < 0)
2980 return NULL;
2981 if (ret == 0) {
2982 Py_INCREF(Py_None);
2983 return Py_None;
2984 }
2985 m = PyImport_AddModule(name);
2986 Py_XINCREF(m);
2987 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002988}
2989
Guido van Rossum79f25d91997-04-29 20:08:16 +00002990static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002991imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002992{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002993 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002994
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002995 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
2996 return NULL;
2997 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002998}
2999
Guido van Rossum79f25d91997-04-29 20:08:16 +00003000static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003001imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003002{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003003 char *name;
3004 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
3005 return NULL;
3006 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003007}
3008
Guido van Rossum79f25d91997-04-29 20:08:16 +00003009static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003010imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003011{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003012 char *name;
3013 struct _frozen *p;
3014 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
3015 return NULL;
3016 p = find_frozen(name);
3017 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003018}
3019
3020static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003021get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003022{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003023 FILE *fp;
3024 if (fob == NULL) {
3025 if (mode[0] == 'U')
3026 mode = "r" PY_STDIOTEXTMODE;
3027 fp = fopen(pathname, mode);
3028 if (fp == NULL)
3029 PyErr_SetFromErrno(PyExc_IOError);
3030 }
3031 else {
3032 fp = PyFile_AsFile(fob);
3033 if (fp == NULL)
3034 PyErr_SetString(PyExc_ValueError,
3035 "bad/closed file object");
3036 }
3037 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003038}
3039
Guido van Rossum79f25d91997-04-29 20:08:16 +00003040static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003041imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003042{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003043 char *name;
3044 char *pathname;
3045 PyObject *fob = NULL;
3046 PyObject *m;
3047 FILE *fp;
3048 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
3049 &PyFile_Type, &fob))
3050 return NULL;
3051 fp = get_file(pathname, fob, "rb");
3052 if (fp == NULL)
3053 return NULL;
3054 m = load_compiled_module(name, pathname, fp);
3055 if (fob == NULL)
3056 fclose(fp);
3057 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003058}
3059
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003060#ifdef HAVE_DYNAMIC_LOADING
3061
Guido van Rossum79f25d91997-04-29 20:08:16 +00003062static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003063imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003064{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003065 char *name;
3066 char *pathname;
3067 PyObject *fob = NULL;
3068 PyObject *m;
3069 FILE *fp = NULL;
3070 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
3071 &PyFile_Type, &fob))
3072 return NULL;
3073 if (fob) {
3074 fp = get_file(pathname, fob, "r");
3075 if (fp == NULL)
3076 return NULL;
3077 }
3078 m = _PyImport_LoadDynamicModule(name, pathname, fp);
3079 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003080}
3081
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003082#endif /* HAVE_DYNAMIC_LOADING */
3083
Guido van Rossum79f25d91997-04-29 20:08:16 +00003084static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003085imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003086{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003087 char *name;
3088 char *pathname;
3089 PyObject *fob = NULL;
3090 PyObject *m;
3091 FILE *fp;
3092 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
3093 &PyFile_Type, &fob))
3094 return NULL;
3095 fp = get_file(pathname, fob, "r");
3096 if (fp == NULL)
3097 return NULL;
3098 m = load_source_module(name, pathname, fp);
3099 if (fob == NULL)
3100 fclose(fp);
3101 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003102}
3103
Guido van Rossum79f25d91997-04-29 20:08:16 +00003104static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003105imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003106{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003107 char *name;
3108 PyObject *fob;
3109 char *pathname;
3110 char *suffix; /* Unused */
3111 char *mode;
3112 int type;
3113 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003114
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003115 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
3116 &name, &fob, &pathname,
3117 &suffix, &mode, &type))
3118 return NULL;
3119 if (*mode) {
3120 /* Mode must start with 'r' or 'U' and must not contain '+'.
3121 Implicit in this test is the assumption that the mode
3122 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003123
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003124 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3125 PyErr_Format(PyExc_ValueError,
3126 "invalid file open mode %.200s", mode);
3127 return NULL;
3128 }
3129 }
3130 if (fob == Py_None)
3131 fp = NULL;
3132 else {
3133 if (!PyFile_Check(fob)) {
3134 PyErr_SetString(PyExc_ValueError,
3135 "load_module arg#2 should be a file or None");
3136 return NULL;
3137 }
3138 fp = get_file(pathname, fob, mode);
3139 if (fp == NULL)
3140 return NULL;
3141 }
3142 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003143}
3144
3145static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003146imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003147{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003148 char *name;
3149 char *pathname;
3150 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
3151 return NULL;
3152 return load_package(name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003153}
3154
3155static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003156imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003157{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003158 char *name;
3159 if (!PyArg_ParseTuple(args, "s:new_module", &name))
3160 return NULL;
3161 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003162}
3163
Brett Cannon3aa2a492008-08-06 22:28:09 +00003164static PyObject *
3165imp_reload(PyObject *self, PyObject *v)
3166{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003167 return PyImport_ReloadModule(v);
Brett Cannon3aa2a492008-08-06 22:28:09 +00003168}
3169
3170
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003171/* Doc strings */
3172
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003173PyDoc_STRVAR(doc_imp,
3174"This module provides the components needed to build your own\n\
3175__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003176
Brett Cannon3aa2a492008-08-06 22:28:09 +00003177PyDoc_STRVAR(doc_reload,
3178"reload(module) -> module\n\
3179\n\
3180Reload the module. The module must have been successfully imported before.");
3181
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003182PyDoc_STRVAR(doc_find_module,
3183"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003184Search for a module. If path is omitted or None, search for a\n\
3185built-in, frozen or special module and continue search in sys.path.\n\
3186The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003187package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003188
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003189PyDoc_STRVAR(doc_load_module,
3190"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003191Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003192The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003193
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003194PyDoc_STRVAR(doc_get_magic,
3195"get_magic() -> string\n\
3196Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003197
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003198PyDoc_STRVAR(doc_get_suffixes,
3199"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003200Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003201that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003202
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003203PyDoc_STRVAR(doc_new_module,
3204"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003205Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003206The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003207
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003208PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003209"lock_held() -> boolean\n\
3210Return True if the import lock is currently held, else False.\n\
3211On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003212
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003213PyDoc_STRVAR(doc_acquire_lock,
3214"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003215Acquires the interpreter's import lock for the current thread.\n\
3216This lock should be used by import hooks to ensure thread-safety\n\
3217when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003218On platforms without threads, this function does nothing.");
3219
3220PyDoc_STRVAR(doc_release_lock,
3221"release_lock() -> None\n\
3222Release the interpreter's import lock.\n\
3223On platforms without threads, this function does nothing.");
3224
Guido van Rossum79f25d91997-04-29 20:08:16 +00003225static PyMethodDef imp_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003226 {"reload", imp_reload, METH_O, doc_reload},
3227 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3228 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3229 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3230 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3231 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3232 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3233 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3234 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
3235 /* The rest are obsolete */
3236 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3237 {"init_builtin", imp_init_builtin, METH_VARARGS},
3238 {"init_frozen", imp_init_frozen, METH_VARARGS},
3239 {"is_builtin", imp_is_builtin, METH_VARARGS},
3240 {"is_frozen", imp_is_frozen, METH_VARARGS},
3241 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003242#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003243 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003244#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003245 {"load_package", imp_load_package, METH_VARARGS},
3246 {"load_source", imp_load_source, METH_VARARGS},
3247 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003248};
3249
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003250static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003251setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003252{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003253 PyObject *v;
3254 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003255
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003256 v = PyInt_FromLong((long)value);
3257 err = PyDict_SetItemString(d, name, v);
3258 Py_XDECREF(v);
3259 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003260}
3261
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003262typedef struct {
3263 PyObject_HEAD
3264} NullImporter;
3265
3266static int
3267NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3268{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003269 char *path;
3270 Py_ssize_t pathlen;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003271
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003272 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3273 return -1;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003274
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003275 if (!PyArg_ParseTuple(args, "s:NullImporter",
3276 &path))
3277 return -1;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003278
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003279 pathlen = strlen(path);
3280 if (pathlen == 0) {
3281 PyErr_SetString(PyExc_ImportError, "empty pathname");
3282 return -1;
3283 } else {
Jason R. Coombs0737b722012-01-13 17:59:05 -05003284 if(isdir(path)) {
3285 PyErr_SetString(PyExc_ImportError,
3286 "existing directory");
3287 return -1;
3288 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003289 }
3290 return 0;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003291}
3292
3293static PyObject *
3294NullImporter_find_module(NullImporter *self, PyObject *args)
3295{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003296 Py_RETURN_NONE;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003297}
3298
3299static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003300 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3301 "Always return None"
3302 },
3303 {NULL} /* Sentinel */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003304};
3305
3306
Nick Coghlan327a39b2007-11-18 11:56:28 +00003307PyTypeObject PyNullImporter_Type = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003308 PyVarObject_HEAD_INIT(NULL, 0)
3309 "imp.NullImporter", /*tp_name*/
3310 sizeof(NullImporter), /*tp_basicsize*/
3311 0, /*tp_itemsize*/
3312 0, /*tp_dealloc*/
3313 0, /*tp_print*/
3314 0, /*tp_getattr*/
3315 0, /*tp_setattr*/
3316 0, /*tp_compare*/
3317 0, /*tp_repr*/
3318 0, /*tp_as_number*/
3319 0, /*tp_as_sequence*/
3320 0, /*tp_as_mapping*/
3321 0, /*tp_hash */
3322 0, /*tp_call*/
3323 0, /*tp_str*/
3324 0, /*tp_getattro*/
3325 0, /*tp_setattro*/
3326 0, /*tp_as_buffer*/
3327 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3328 "Null importer object", /* tp_doc */
3329 0, /* tp_traverse */
3330 0, /* tp_clear */
3331 0, /* tp_richcompare */
3332 0, /* tp_weaklistoffset */
3333 0, /* tp_iter */
3334 0, /* tp_iternext */
3335 NullImporter_methods, /* tp_methods */
3336 0, /* tp_members */
3337 0, /* tp_getset */
3338 0, /* tp_base */
3339 0, /* tp_dict */
3340 0, /* tp_descr_get */
3341 0, /* tp_descr_set */
3342 0, /* tp_dictoffset */
3343 (initproc)NullImporter_init, /* tp_init */
3344 0, /* tp_alloc */
3345 PyType_GenericNew /* tp_new */
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003346};
3347
3348
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003349PyMODINIT_FUNC
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003350initimp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003351{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003352 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003353
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003354 if (PyType_Ready(&PyNullImporter_Type) < 0)
3355 goto failure;
Phillip J. Ebyf7575d02006-07-28 21:12:07 +00003356
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003357 m = Py_InitModule4("imp", imp_methods, doc_imp,
3358 NULL, PYTHON_API_VERSION);
3359 if (m == NULL)
3360 goto failure;
3361 d = PyModule_GetDict(m);
3362 if (d == NULL)
3363 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003364
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003365 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3366 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3367 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3368 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3369 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3370 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3371 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3372 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
3373 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
3374 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003375
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003376 Py_INCREF(&PyNullImporter_Type);
3377 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003378 failure:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003379 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003380}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003381
3382
Guido van Rossumb18618d2000-05-03 23:44:39 +00003383/* API for embedding applications that want to add their own entries
3384 to the table of built-in modules. This should normally be called
3385 *before* Py_Initialize(). When the table resize fails, -1 is
3386 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003387
3388 After a similar function by Just van Rossum. */
3389
3390int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003391PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003392{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003393 static struct _inittab *our_copy = NULL;
3394 struct _inittab *p;
3395 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003396
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003397 /* Count the number of entries in both tables */
3398 for (n = 0; newtab[n].name != NULL; n++)
3399 ;
3400 if (n == 0)
3401 return 0; /* Nothing to do */
3402 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3403 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003404
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003405 /* Allocate new memory for the combined table */
3406 p = our_copy;
3407 PyMem_RESIZE(p, struct _inittab, i+n+1);
3408 if (p == NULL)
3409 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003410
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003411 /* Copy the tables into the new memory */
3412 if (our_copy != PyImport_Inittab)
3413 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3414 PyImport_Inittab = our_copy = p;
3415 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003416
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003417 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003418}
3419
3420/* Shorthand to add a single entry given a name and a function */
3421
3422int
Brett Cannonc4f90eb2009-04-02 03:17:39 +00003423PyImport_AppendInittab(const char *name, void (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003424{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003425 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003426
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003427 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003428
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003429 newtab[0].name = (char *)name;
3430 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003431
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003432 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003433}
Anthony Baxterac6bd462006-04-13 02:06:09 +00003434
3435#ifdef __cplusplus
3436}
3437#endif