blob: 24df985d46465553b92541fa155fc6a9573c90e3 [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"
Guido van Rossumd8faa362007-04-27 19:54:29 +00007#undef Yield /* undefine macro conflicting with winbase.h */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00008#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +00009#include "marshal.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010#include "code.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000011#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000012#include "importdl.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000013
Guido van Rossum55a83382000-09-20 20:31:38 +000014#ifdef HAVE_FCNTL_H
15#include <fcntl.h>
16#endif
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000017#ifdef __cplusplus
Brett Cannon9a5b25a2010-03-01 02:09:17 +000018extern "C" {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000019#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000020
Christian Heimesd3eb5a152008-02-24 00:38:49 +000021#ifdef MS_WINDOWS
22/* for stat.st_mode */
23typedef unsigned short mode_t;
Daniel Stutzbachc7937792010-09-09 21:18:04 +000024/* for _mkdir */
25#include <direct.h>
Christian Heimesd3eb5a152008-02-24 00:38:49 +000026#endif
27
Guido van Rossum21d335e1993-10-15 13:01:11 +000028
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000029/* Magic word to reject .pyc files generated by other Python versions.
30 It should change for each incompatible change to the bytecode.
31
32 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000033 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000034 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000035
Guido van Rossum45aecf42006-03-15 04:58:47 +000036 The magic numbers must be spaced apart at least 2 values, as the
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000037 -U interpeter flag will cause MAGIC+1 being used. They have been
38 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000039
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000040 There were a variety of old schemes for setting the magic number.
41 The current working scheme is to increment the previous value by
42 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000043
Barry Warsaw28a691b2010-04-17 00:19:56 +000044 Starting with the adoption of PEP 3147 in Python 3.2, every bump in magic
45 number also includes a new "magic tag", i.e. a human readable string used
46 to represent the magic number in __pycache__ directories. When you change
47 the magic number, you must also set a new unique magic tag. Generally this
48 can be named after the Python major version of the magic number bump, but
49 it can really be anything, as long as it's different than anything else
50 that's come before. The tags are included in the following table, starting
51 with Python 3.2a0.
52
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000053 Known values:
54 Python 1.5: 20121
55 Python 1.5.1: 20121
56 Python 1.5.2: 20121
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000057 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000058 Python 2.0: 50823
59 Python 2.0.1: 50823
60 Python 2.1: 60202
61 Python 2.1.1: 60202
62 Python 2.1.2: 60202
63 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000064 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000065 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000066 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000067 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000068 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000069 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000070 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000071 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000072 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000073 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000074 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
75 Python 2.5b3: 62111 (fix wrong code: x += yield)
76 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000077 storing constants that should have been removed)
Thomas Wouters89f507f2006-12-13 04:49:30 +000078 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
Christian Heimes99170a52007-12-19 02:07:34 +000079 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)
Christian Heimesdd15f6c2008-03-16 00:07:10 +000080 Python 2.6a1: 62161 (WITH_CLEANUP optimization)
Guido van Rossum45aecf42006-03-15 04:58:47 +000081 Python 3000: 3000
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000082 3010 (removed UNARY_CONVERT)
83 3020 (added BUILD_SET)
84 3030 (added keyword-only parameters)
85 3040 (added signature annotations)
86 3050 (print becomes a function)
87 3060 (PEP 3115 metaclass syntax)
88 3061 (string literals become unicode)
89 3071 (PEP 3109 raise changes)
90 3081 (PEP 3137 make __file__ and __name__ unicode)
91 3091 (kill str8 interning)
92 3101 (merge from 2.6a0, see 62151)
93 3103 (__file__ points to source file)
Benjamin Peterson0f6cae02009-12-10 02:09:08 +000094 Python 3.0a4: 3111 (WITH_CLEANUP optimization).
95 Python 3.0a5: 3131 (lexical exception stacking, including POP_EXCEPT)
96 Python 3.1a0: 3141 (optimize list, set and dict comprehensions:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000097 change LIST_APPEND and SET_ADD, add MAP_ADD)
Benjamin Peterson0f6cae02009-12-10 02:09:08 +000098 Python 3.1a0: 3151 (optimize conditional branches:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000099 introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE)
Benjamin Peterson876b2f22009-06-28 03:18:59 +0000100 Python 3.2a0: 3160 (add SETUP_WITH)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000101 tag: cpython-32
Antoine Pitrou74a69fa2010-09-04 18:43:52 +0000102 Python 3.2a1: 3170 (add DUP_TOP_TWO, remove DUP_TOPX and ROT_FOUR)
103 tag: cpython-32
Benjamin Peterson6246d6d2010-09-10 21:51:44 +0000104 Python 3.2a2 3180 (add DELETE_DEREF)
Benjamin Petersone7c15fa2011-06-19 19:54:45 -0500105 Python 3.3a0 3190 __class__ super closure changed
Tim Peters36515e22001-11-18 04:06:29 +0000106*/
Guido van Rossum3ddee711991-12-16 13:06:34 +0000107
Nick Coghlancd419ab2010-09-11 00:39:25 +0000108/* MAGIC must change whenever the bytecode emitted by the compiler may no
109 longer be understood by older implementations of the eval loop (usually
110 due to the addition of new opcodes)
Victor Stinner2f42ae52011-03-20 00:41:24 +0100111 TAG and PYC_TAG_UNICODE must change for each major Python release. The magic
112 number will take care of any bytecode changes that occur during development.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000113*/
Benjamin Peterson48deae12011-06-03 17:50:16 -0500114#define QUOTE(arg) #arg
115#define STRIFY(name) QUOTE(name)
116#define MAJOR STRIFY(PY_MAJOR_VERSION)
117#define MINOR STRIFY(PY_MINOR_VERSION)
Benjamin Petersone7c15fa2011-06-19 19:54:45 -0500118#define MAGIC (3190 | ((long)'\r'<<16) | ((long)'\n'<<24))
Benjamin Peterson48deae12011-06-03 17:50:16 -0500119#define TAG "cpython-" MAJOR MINOR;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000120#define CACHEDIR "__pycache__"
Victor Stinnerc9abda02011-03-14 13:33:46 -0400121static const Py_UNICODE CACHEDIR_UNICODE[] = {
122 '_', '_', 'p', 'y', 'c', 'a', 'c', 'h', 'e', '_', '_', '\0'};
Barry Warsaw28a691b2010-04-17 00:19:56 +0000123/* Current magic word and string tag as globals. */
Guido van Rossum96774c12000-05-01 20:19:08 +0000124static long pyc_magic = MAGIC;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000125static const char *pyc_tag = TAG;
Victor Stinner2f42ae52011-03-20 00:41:24 +0100126static const Py_UNICODE PYC_TAG_UNICODE[] = {
Benjamin Peterson48deae12011-06-03 17:50:16 -0500127 'c', 'p', 'y', 't', 'h', 'o', 'n', '-', PY_MAJOR_VERSION + 48, PY_MINOR_VERSION + 48, '\0'};
128#undef QUOTE
129#undef STRIFY
130#undef MAJOR
131#undef MINOR
Guido van Rossum96774c12000-05-01 20:19:08 +0000132
Victor Stinner95872862011-03-07 18:20:56 +0100133/* See _PyImport_FixupExtensionObject() below */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000134static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000135
Victor Stinnerfe7c5b52011-04-05 01:48:03 +0200136/* Function from Parser/tokenizer.c */
137extern char * PyTokenizer_FindEncodingFilename(int, PyObject *);
138
Guido van Rossum771c6c81997-10-31 18:37:24 +0000139/* This table is defined in config.c: */
140extern struct _inittab _PyImport_Inittab[];
141
142struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +0000143
Guido van Rossumed1170e1999-12-20 21:23:41 +0000144/* these tables define the module suffixes that Python recognizes */
145struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +0000146
Guido van Rossumed1170e1999-12-20 21:23:41 +0000147static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000148 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000149#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000150 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000151#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000152 {".pyc", "rb", PY_COMPILED},
153 {0, 0}
Guido van Rossumed1170e1999-12-20 21:23:41 +0000154};
155
Victor Stinnerd0296212011-03-14 14:04:10 -0400156static PyObject *initstr = NULL;
157
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000158
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000159/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000160
161void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000162_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000163{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000164 const struct filedescr *scan;
165 struct filedescr *filetab;
166 int countD = 0;
167 int countS = 0;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000168
Victor Stinnerd0296212011-03-14 14:04:10 -0400169 initstr = PyUnicode_InternFromString("__init__");
170 if (initstr == NULL)
171 Py_FatalError("Can't initialize import variables");
172
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000173 /* prepare _PyImport_Filetab: copy entries from
174 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
175 */
Guido van Rossum04110fb2007-08-24 16:32:05 +0000176#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000177 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
178 ++countD;
Guido van Rossum04110fb2007-08-24 16:32:05 +0000179#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000180 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
181 ++countS;
182 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
183 if (filetab == NULL)
184 Py_FatalError("Can't initialize import file table.");
Guido van Rossum04110fb2007-08-24 16:32:05 +0000185#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000186 memcpy(filetab, _PyImport_DynLoadFiletab,
187 countD * sizeof(struct filedescr));
Guido van Rossum04110fb2007-08-24 16:32:05 +0000188#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000189 memcpy(filetab + countD, _PyImport_StandardFiletab,
190 countS * sizeof(struct filedescr));
191 filetab[countD + countS].suffix = NULL;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000192
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000193 _PyImport_Filetab = filetab;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000194
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000195 if (Py_OptimizeFlag) {
196 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
197 for (; filetab->suffix != NULL; filetab++) {
198 if (strcmp(filetab->suffix, ".pyc") == 0)
199 filetab->suffix = ".pyo";
200 }
201 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000202}
203
Guido van Rossum25ce5661997-08-02 03:10:38 +0000204void
Just van Rossum52e14d62002-12-30 22:08:05 +0000205_PyImportHooks_Init(void)
206{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000207 PyObject *v, *path_hooks = NULL, *zimpimport;
208 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000209
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000210 /* adding sys.path_hooks and sys.path_importer_cache, setting up
211 zipimport */
212 if (PyType_Ready(&PyNullImporter_Type) < 0)
213 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000214
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000215 if (Py_VerboseFlag)
216 PySys_WriteStderr("# installing zipimport hook\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000217
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000218 v = PyList_New(0);
219 if (v == NULL)
220 goto error;
221 err = PySys_SetObject("meta_path", v);
222 Py_DECREF(v);
223 if (err)
224 goto error;
225 v = PyDict_New();
226 if (v == NULL)
227 goto error;
228 err = PySys_SetObject("path_importer_cache", v);
229 Py_DECREF(v);
230 if (err)
231 goto error;
232 path_hooks = PyList_New(0);
233 if (path_hooks == NULL)
234 goto error;
235 err = PySys_SetObject("path_hooks", path_hooks);
236 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000237 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000238 PyErr_Print();
239 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
240 "path_importer_cache, or NullImporter failed"
241 );
242 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000244 zimpimport = PyImport_ImportModule("zipimport");
245 if (zimpimport == NULL) {
246 PyErr_Clear(); /* No zip import module -- okay */
247 if (Py_VerboseFlag)
248 PySys_WriteStderr("# can't import zipimport\n");
249 }
250 else {
251 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
252 "zipimporter");
253 Py_DECREF(zimpimport);
254 if (zipimporter == NULL) {
255 PyErr_Clear(); /* No zipimporter object -- okay */
256 if (Py_VerboseFlag)
257 PySys_WriteStderr(
258 "# can't import zipimport.zipimporter\n");
259 }
260 else {
261 /* sys.path_hooks.append(zipimporter) */
262 err = PyList_Append(path_hooks, zipimporter);
263 Py_DECREF(zipimporter);
264 if (err)
265 goto error;
266 if (Py_VerboseFlag)
267 PySys_WriteStderr(
268 "# installed zipimport hook\n");
269 }
270 }
271 Py_DECREF(path_hooks);
Just van Rossum52e14d62002-12-30 22:08:05 +0000272}
273
274void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000275_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000276{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000277 Py_XDECREF(extensions);
278 extensions = NULL;
279 PyMem_DEL(_PyImport_Filetab);
280 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000281}
282
283
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000284/* Locking primitives to prevent parallel imports of the same module
285 in different threads to return with a partially loaded module.
286 These calls are serialized by the global interpreter lock. */
287
288#ifdef WITH_THREAD
289
Guido van Rossum49b56061998-10-01 20:42:43 +0000290#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000291
Guido van Rossum65d5b571998-12-21 19:32:43 +0000292static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000293static long import_lock_thread = -1;
294static int import_lock_level = 0;
295
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000296void
297_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000298{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000299 long me = PyThread_get_thread_ident();
300 if (me == -1)
301 return; /* Too bad */
302 if (import_lock == NULL) {
303 import_lock = PyThread_allocate_lock();
304 if (import_lock == NULL)
305 return; /* Nothing much we can do. */
306 }
307 if (import_lock_thread == me) {
308 import_lock_level++;
309 return;
310 }
311 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
312 {
313 PyThreadState *tstate = PyEval_SaveThread();
314 PyThread_acquire_lock(import_lock, 1);
315 PyEval_RestoreThread(tstate);
316 }
317 import_lock_thread = me;
318 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000319}
320
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000321int
322_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000323{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000324 long me = PyThread_get_thread_ident();
325 if (me == -1 || import_lock == NULL)
326 return 0; /* Too bad */
327 if (import_lock_thread != me)
328 return -1;
329 import_lock_level--;
330 if (import_lock_level == 0) {
331 import_lock_thread = -1;
332 PyThread_release_lock(import_lock);
333 }
334 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000335}
336
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000337/* This function is called from PyOS_AfterFork to ensure that newly
338 created child processes do not share locks with the parent.
339 We now acquire the import lock around fork() calls but on some platforms
340 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000341
342void
343_PyImport_ReInitLock(void)
344{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000345 if (import_lock != NULL)
346 import_lock = PyThread_allocate_lock();
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000347 if (import_lock_level > 1) {
348 /* Forked as a side effect of import */
349 long me = PyThread_get_thread_ident();
350 PyThread_acquire_lock(import_lock, 0);
Victor Stinner942003c2011-03-07 16:57:48 +0100351 /* XXX: can the previous line fail? */
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000352 import_lock_thread = me;
353 import_lock_level--;
354 } else {
355 import_lock_thread = -1;
356 import_lock_level = 0;
357 }
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000358}
359
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000360#endif
361
Tim Peters69232342001-08-30 05:16:13 +0000362static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000363imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000364{
Tim Peters69232342001-08-30 05:16:13 +0000365#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000366 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000367#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000368 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000369#endif
370}
371
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000372static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000373imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000374{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000375#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000376 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000377#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000378 Py_INCREF(Py_None);
379 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000380}
381
382static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000383imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000384{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000385#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000386 if (_PyImport_ReleaseLock() < 0) {
387 PyErr_SetString(PyExc_RuntimeError,
388 "not holding the import lock");
389 return NULL;
390 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000391#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000392 Py_INCREF(Py_None);
393 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000394}
395
Guido van Rossumd8faa362007-04-27 19:54:29 +0000396static void
397imp_modules_reloading_clear(void)
398{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000399 PyInterpreterState *interp = PyThreadState_Get()->interp;
400 if (interp->modules_reloading != NULL)
401 PyDict_Clear(interp->modules_reloading);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000402}
403
Guido van Rossum25ce5661997-08-02 03:10:38 +0000404/* Helper for sys */
405
406PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000407PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000408{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000409 PyInterpreterState *interp = PyThreadState_GET()->interp;
410 if (interp->modules == NULL)
411 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
412 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000413}
414
Guido van Rossum3f5da241990-12-20 15:06:42 +0000415
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000416/* List of names to clear in sys */
417static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000418 "path", "argv", "ps1", "ps2",
419 "last_type", "last_value", "last_traceback",
420 "path_hooks", "path_importer_cache", "meta_path",
421 /* misc stuff */
422 "flags", "float_info",
423 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000424};
425
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000426static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000427 "stdin", "__stdin__",
428 "stdout", "__stdout__",
429 "stderr", "__stderr__",
430 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000431};
432
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000433
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000434/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000435
Guido van Rossum3f5da241990-12-20 15:06:42 +0000436void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000437PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000438{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000439 Py_ssize_t pos, ndone;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000440 PyObject *key, *value, *dict;
441 PyInterpreterState *interp = PyThreadState_GET()->interp;
442 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000443
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000444 if (modules == NULL)
445 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000447 /* Delete some special variables first. These are common
448 places where user values hide and people complain when their
449 destructors fail. Since the modules containing them are
450 deleted *last* of all, they would come too late in the normal
451 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000452
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000453 value = PyDict_GetItemString(modules, "builtins");
454 if (value != NULL && PyModule_Check(value)) {
455 dict = PyModule_GetDict(value);
456 if (Py_VerboseFlag)
457 PySys_WriteStderr("# clear builtins._\n");
458 PyDict_SetItemString(dict, "_", Py_None);
459 }
460 value = PyDict_GetItemString(modules, "sys");
461 if (value != NULL && PyModule_Check(value)) {
462 char **p;
463 PyObject *v;
464 dict = PyModule_GetDict(value);
465 for (p = sys_deletes; *p != NULL; p++) {
466 if (Py_VerboseFlag)
467 PySys_WriteStderr("# clear sys.%s\n", *p);
468 PyDict_SetItemString(dict, *p, Py_None);
469 }
470 for (p = sys_files; *p != NULL; p+=2) {
471 if (Py_VerboseFlag)
472 PySys_WriteStderr("# restore sys.%s\n", *p);
473 v = PyDict_GetItemString(dict, *(p+1));
474 if (v == NULL)
475 v = Py_None;
476 PyDict_SetItemString(dict, *p, v);
477 }
478 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000479
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000480 /* First, delete __main__ */
481 value = PyDict_GetItemString(modules, "__main__");
482 if (value != NULL && PyModule_Check(value)) {
483 if (Py_VerboseFlag)
484 PySys_WriteStderr("# cleanup __main__\n");
485 _PyModule_Clear(value);
486 PyDict_SetItemString(modules, "__main__", Py_None);
487 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000488
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000489 /* The special treatment of "builtins" here is because even
490 when it's not referenced as a module, its dictionary is
491 referenced by almost every module's __builtins__. Since
492 deleting a module clears its dictionary (even if there are
493 references left to it), we need to delete the "builtins"
494 module last. Likewise, we don't delete sys until the very
495 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000496
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000497 Also note that we 'delete' modules by replacing their entry
498 in the modules dict with None, rather than really deleting
499 them; this avoids a rehash of the modules dictionary and
500 also marks them as "non existent" so they won't be
501 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000502
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000503 /* Next, repeatedly delete modules with a reference count of
504 one (skipping builtins and sys) and delete them */
505 do {
506 ndone = 0;
507 pos = 0;
508 while (PyDict_Next(modules, &pos, &key, &value)) {
509 if (value->ob_refcnt != 1)
510 continue;
511 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100512 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000513 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100514 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000515 continue;
516 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100517 PySys_FormatStderr(
518 "# cleanup[1] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000519 _PyModule_Clear(value);
520 PyDict_SetItem(modules, key, Py_None);
521 ndone++;
522 }
523 }
524 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000525
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000526 /* Next, delete all modules (still skipping builtins and sys) */
527 pos = 0;
528 while (PyDict_Next(modules, &pos, &key, &value)) {
529 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100530 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000531 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100532 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000533 continue;
534 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100535 PySys_FormatStderr("# cleanup[2] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 _PyModule_Clear(value);
537 PyDict_SetItem(modules, key, Py_None);
538 }
539 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000540
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000541 /* Next, delete sys and builtins (in that order) */
542 value = PyDict_GetItemString(modules, "sys");
543 if (value != NULL && PyModule_Check(value)) {
544 if (Py_VerboseFlag)
545 PySys_WriteStderr("# cleanup sys\n");
546 _PyModule_Clear(value);
547 PyDict_SetItemString(modules, "sys", Py_None);
548 }
549 value = PyDict_GetItemString(modules, "builtins");
550 if (value != NULL && PyModule_Check(value)) {
551 if (Py_VerboseFlag)
552 PySys_WriteStderr("# cleanup builtins\n");
553 _PyModule_Clear(value);
554 PyDict_SetItemString(modules, "builtins", Py_None);
555 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000556
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000557 /* Finally, clear and delete the modules directory */
558 PyDict_Clear(modules);
559 interp->modules = NULL;
560 Py_DECREF(modules);
561 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000562}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000563
564
Barry Warsaw28a691b2010-04-17 00:19:56 +0000565/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000566
567long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000568PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000569{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000570 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000571}
572
573
Barry Warsaw28a691b2010-04-17 00:19:56 +0000574const char *
575PyImport_GetMagicTag(void)
576{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000577 return pyc_tag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000578}
579
Guido van Rossum25ce5661997-08-02 03:10:38 +0000580/* Magic for extension modules (built-in as well as dynamically
581 loaded). To prevent initializing an extension module more than
582 once, we keep a static dictionary 'extensions' keyed by module name
583 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000584 modules), containing these modules. A copy of the module's
Victor Stinner95872862011-03-07 18:20:56 +0100585 dictionary is stored by calling _PyImport_FixupExtensionObject()
Guido van Rossum25ce5661997-08-02 03:10:38 +0000586 immediately after the module initialization function succeeds. A
587 copy can be retrieved from there by calling
Victor Stinner95872862011-03-07 18:20:56 +0100588 _PyImport_FindExtensionObject().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000589
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000590 Modules which do support multiple initialization set their m_size
591 field to a non-negative number (indicating the size of the
592 module-specific state). They are still recorded in the extensions
593 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000594*/
595
596int
Victor Stinner95872862011-03-07 18:20:56 +0100597_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
598 PyObject *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000599{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000600 PyObject *modules, *dict;
601 struct PyModuleDef *def;
602 if (extensions == NULL) {
603 extensions = PyDict_New();
604 if (extensions == NULL)
605 return -1;
606 }
607 if (mod == NULL || !PyModule_Check(mod)) {
608 PyErr_BadInternalCall();
609 return -1;
610 }
611 def = PyModule_GetDef(mod);
612 if (!def) {
613 PyErr_BadInternalCall();
614 return -1;
615 }
616 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +0100617 if (PyDict_SetItem(modules, name, mod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000618 return -1;
619 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100620 PyDict_DelItem(modules, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000621 return -1;
622 }
623 if (def->m_size == -1) {
624 if (def->m_base.m_copy) {
625 /* Somebody already imported the module,
626 likely under a different name.
627 XXX this should really not happen. */
628 Py_DECREF(def->m_base.m_copy);
629 def->m_base.m_copy = NULL;
630 }
631 dict = PyModule_GetDict(mod);
632 if (dict == NULL)
633 return -1;
634 def->m_base.m_copy = PyDict_Copy(dict);
635 if (def->m_base.m_copy == NULL)
636 return -1;
637 }
Victor Stinner49d3f252010-10-17 01:24:53 +0000638 PyDict_SetItem(extensions, filename, (PyObject*)def);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000639 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000640}
641
Victor Stinner49d3f252010-10-17 01:24:53 +0000642int
643_PyImport_FixupBuiltin(PyObject *mod, char *name)
644{
645 int res;
Victor Stinner95872862011-03-07 18:20:56 +0100646 PyObject *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100647 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100648 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000649 return -1;
Victor Stinner95872862011-03-07 18:20:56 +0100650 res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj);
651 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000652 return res;
653}
654
Guido van Rossum25ce5661997-08-02 03:10:38 +0000655PyObject *
Victor Stinner95872862011-03-07 18:20:56 +0100656_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000657{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000658 PyObject *mod, *mdict;
659 PyModuleDef* def;
660 if (extensions == NULL)
661 return NULL;
Victor Stinner49d3f252010-10-17 01:24:53 +0000662 def = (PyModuleDef*)PyDict_GetItem(extensions, filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000663 if (def == NULL)
664 return NULL;
665 if (def->m_size == -1) {
666 /* Module does not support repeated initialization */
667 if (def->m_base.m_copy == NULL)
668 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100669 mod = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000670 if (mod == NULL)
671 return NULL;
672 mdict = PyModule_GetDict(mod);
673 if (mdict == NULL)
674 return NULL;
675 if (PyDict_Update(mdict, def->m_base.m_copy))
676 return NULL;
677 }
678 else {
679 if (def->m_base.m_init == NULL)
680 return NULL;
681 mod = def->m_base.m_init();
682 if (mod == NULL)
683 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100684 PyDict_SetItem(PyImport_GetModuleDict(), name, mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000685 Py_DECREF(mod);
686 }
687 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100688 PyDict_DelItem(PyImport_GetModuleDict(), name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000689 Py_DECREF(mod);
690 return NULL;
691 }
692 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +0100693 PySys_FormatStderr("import %U # previously loaded (%R)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 name, filename);
695 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000696
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000697}
698
Victor Stinner49d3f252010-10-17 01:24:53 +0000699PyObject *
Victor Stinner501c09a2011-02-23 00:02:00 +0000700_PyImport_FindBuiltin(const char *name)
Victor Stinner49d3f252010-10-17 01:24:53 +0000701{
Victor Stinner95872862011-03-07 18:20:56 +0100702 PyObject *res, *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100703 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100704 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000705 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100706 res = _PyImport_FindExtensionObject(nameobj, nameobj);
707 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000708 return res;
709}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000710
711/* Get the module object corresponding to a module name.
712 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000713 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000714 Because the former action is most common, THIS DOES NOT RETURN A
715 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000716
Guido van Rossum79f25d91997-04-29 20:08:16 +0000717PyObject *
Victor Stinner27ee0892011-03-04 12:57:09 +0000718PyImport_AddModuleObject(PyObject *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000719{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000720 PyObject *modules = PyImport_GetModuleDict();
721 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000722
Victor Stinner27ee0892011-03-04 12:57:09 +0000723 if ((m = PyDict_GetItem(modules, name)) != NULL &&
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000724 PyModule_Check(m))
725 return m;
Victor Stinner27ee0892011-03-04 12:57:09 +0000726 m = PyModule_NewObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000727 if (m == NULL)
728 return NULL;
Victor Stinner27ee0892011-03-04 12:57:09 +0000729 if (PyDict_SetItem(modules, name, m) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000730 Py_DECREF(m);
731 return NULL;
732 }
733 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000734
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000735 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000736}
737
Victor Stinner27ee0892011-03-04 12:57:09 +0000738PyObject *
739PyImport_AddModule(const char *name)
740{
741 PyObject *nameobj, *module;
742 nameobj = PyUnicode_FromString(name);
743 if (nameobj == NULL)
744 return NULL;
745 module = PyImport_AddModuleObject(nameobj);
746 Py_DECREF(nameobj);
747 return module;
748}
749
750
Tim Peters1cd70172004-08-02 03:52:12 +0000751/* Remove name from sys.modules, if it's there. */
752static void
Victor Stinner27ee0892011-03-04 12:57:09 +0000753remove_module(PyObject *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000754{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000755 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner27ee0892011-03-04 12:57:09 +0000756 if (PyDict_GetItem(modules, name) == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000757 return;
Victor Stinner27ee0892011-03-04 12:57:09 +0000758 if (PyDict_DelItem(modules, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000759 Py_FatalError("import: deleting existing key in"
760 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000761}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000762
Victor Stinnerc9abda02011-03-14 13:33:46 -0400763static PyObject * get_sourcefile(PyObject *filename);
764static PyObject *make_source_pathname(PyObject *pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +0100765static PyObject* make_compiled_pathname(Py_UNICODE *pathname, int debug);
Christian Heimes3b06e532008-01-07 20:12:44 +0000766
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000767/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000768 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
769 * removed from sys.modules, to avoid leaving damaged module objects
770 * in sys.modules. The caller may wish to restore the original
771 * module object (if any) in this case; PyImport_ReloadModule is an
772 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000773 *
774 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
775 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000776 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000777PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000778PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000779{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000780 return PyImport_ExecCodeModuleWithPathnames(
781 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000782}
783
784PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000785PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000786{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000787 return PyImport_ExecCodeModuleWithPathnames(
788 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000789}
790
791PyObject *
792PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000793 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000794{
Victor Stinner27ee0892011-03-04 12:57:09 +0000795 PyObject *m = NULL;
796 PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL;
797
798 nameobj = PyUnicode_FromString(name);
799 if (nameobj == NULL)
800 return NULL;
801
802 if (pathname != NULL) {
803 pathobj = PyUnicode_DecodeFSDefault(pathname);
804 if (pathobj == NULL)
805 goto error;
806 } else
807 pathobj = NULL;
808 if (cpathname != NULL) {
809 cpathobj = PyUnicode_DecodeFSDefault(cpathname);
810 if (cpathobj == NULL)
811 goto error;
812 } else
813 cpathobj = NULL;
814 m = PyImport_ExecCodeModuleObject(nameobj, co, pathobj, cpathobj);
815error:
816 Py_DECREF(nameobj);
817 Py_XDECREF(pathobj);
818 Py_XDECREF(cpathobj);
819 return m;
820}
821
822PyObject*
823PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
824 PyObject *cpathname)
825{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000826 PyObject *modules = PyImport_GetModuleDict();
827 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000828
Victor Stinner27ee0892011-03-04 12:57:09 +0000829 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000830 if (m == NULL)
831 return NULL;
832 /* If the module is being reloaded, we get the old module back
833 and re-use its dict to exec the new code. */
834 d = PyModule_GetDict(m);
835 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
836 if (PyDict_SetItemString(d, "__builtins__",
837 PyEval_GetBuiltins()) != 0)
838 goto error;
839 }
840 /* Remember the filename as the __file__ attribute */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000841 if (pathname != NULL) {
Victor Stinnerc9abda02011-03-14 13:33:46 -0400842 v = get_sourcefile(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000843 if (v == NULL)
844 PyErr_Clear();
845 }
Victor Stinner27ee0892011-03-04 12:57:09 +0000846 else
847 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000848 if (v == NULL) {
849 v = ((PyCodeObject *)co)->co_filename;
850 Py_INCREF(v);
851 }
852 if (PyDict_SetItemString(d, "__file__", v) != 0)
853 PyErr_Clear(); /* Not important enough to report */
854 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000855
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000856 /* Remember the pyc path name as the __cached__ attribute. */
Victor Stinner27ee0892011-03-04 12:57:09 +0000857 if (cpathname != NULL)
858 v = cpathname;
859 else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000860 v = Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 if (PyDict_SetItemString(d, "__cached__", v) != 0)
862 PyErr_Clear(); /* Not important enough to report */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000863
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000864 v = PyEval_EvalCode(co, d, d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000865 if (v == NULL)
866 goto error;
867 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000868
Victor Stinner27ee0892011-03-04 12:57:09 +0000869 if ((m = PyDict_GetItem(modules, name)) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000870 PyErr_Format(PyExc_ImportError,
Victor Stinner27ee0892011-03-04 12:57:09 +0000871 "Loaded module %R not found in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000872 name);
873 return NULL;
874 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000875
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000876 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000877
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000878 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000879
880 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 remove_module(name);
882 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000883}
884
885
Barry Warsaw28a691b2010-04-17 00:19:56 +0000886/* Like strrchr(string, '/') but searches for the rightmost of either SEP
887 or ALTSEP, if the latter is defined.
888*/
Victor Stinnerc9abda02011-03-14 13:33:46 -0400889static Py_UNICODE*
Victor Stinner2f42ae52011-03-20 00:41:24 +0100890rightmost_sep(Py_UNICODE *s)
Victor Stinnerc9abda02011-03-14 13:33:46 -0400891{
892 Py_UNICODE *found, c;
893 for (found = NULL; (c = *s); s++) {
894 if (c == SEP
895#ifdef ALTSEP
896 || c == ALTSEP
897#endif
898 )
899 {
900 found = s;
901 }
902 }
903 return found;
904}
905
906
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000907/* Given a pathname for a Python source file, fill a buffer with the
908 pathname for the corresponding compiled file. Return the pathname
909 for the compiled file, or NULL if there's no space in the buffer.
Victor Stinner2f42ae52011-03-20 00:41:24 +0100910 Doesn't set an exception.
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000911
Victor Stinner2f42ae52011-03-20 00:41:24 +0100912 foo.py -> __pycache__/foo.<tag>.pyc */
913
914static PyObject*
915make_compiled_pathname(Py_UNICODE *pathname, int debug)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000916{
Victor Stinner2f42ae52011-03-20 00:41:24 +0100917 Py_UNICODE buf[MAXPATHLEN];
918 size_t buflen = (size_t)MAXPATHLEN;
919 size_t len = Py_UNICODE_strlen(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000920 size_t i, save;
Victor Stinner2f42ae52011-03-20 00:41:24 +0100921 Py_UNICODE *pos;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000922 int sep = SEP;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000923
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000924 /* Sanity check that the buffer has roughly enough space to hold what
925 will eventually be the full path to the compiled file. The 5 extra
926 bytes include the slash afer __pycache__, the two extra dots, the
927 extra trailing character ('c' or 'o') and null. This isn't exact
928 because the contents of the buffer can affect how many actual
929 characters of the string get into the buffer. We'll do a final
930 sanity check before writing the extension to ensure we do not
931 overflow the buffer.
932 */
Victor Stinner2f42ae52011-03-20 00:41:24 +0100933 if (len + Py_UNICODE_strlen(CACHEDIR_UNICODE) + Py_UNICODE_strlen(PYC_TAG_UNICODE) + 5 > buflen)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000934 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000935
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000936 /* Find the last path separator and copy everything from the start of
937 the source string up to and including the separator.
938 */
Victor Stinner2f42ae52011-03-20 00:41:24 +0100939 pos = rightmost_sep(pathname);
940 if (pos == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000941 i = 0;
942 }
943 else {
944 sep = *pos;
945 i = pos - pathname + 1;
Victor Stinner2f42ae52011-03-20 00:41:24 +0100946 Py_UNICODE_strncpy(buf, pathname, i);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000947 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000948
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000949 save = i;
950 buf[i++] = '\0';
951 /* Add __pycache__/ */
Victor Stinner2f42ae52011-03-20 00:41:24 +0100952 Py_UNICODE_strcat(buf, CACHEDIR_UNICODE);
953 i += Py_UNICODE_strlen(CACHEDIR_UNICODE) - 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000954 buf[i++] = sep;
Victor Stinnerccbf4752011-03-14 15:05:12 -0400955 buf[i] = '\0';
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000956 /* Add the base filename, but remove the .py or .pyw extension, since
957 the tag name must go before the extension.
958 */
Victor Stinner2f42ae52011-03-20 00:41:24 +0100959 Py_UNICODE_strcat(buf, pathname + save);
Victor Stinnerccbf4752011-03-14 15:05:12 -0400960 pos = Py_UNICODE_strrchr(buf + i, '.');
Victor Stinner2f42ae52011-03-20 00:41:24 +0100961 if (pos != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000962 *++pos = '\0';
Victor Stinner2f42ae52011-03-20 00:41:24 +0100963 Py_UNICODE_strcat(buf, PYC_TAG_UNICODE);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000964 /* The length test above assumes that we're only adding one character
965 to the end of what would normally be the extension. What if there
966 is no extension, or the string ends in '.' or '.p', and otherwise
967 fills the buffer? By appending 4 more characters onto the string
968 here, we could overrun the buffer.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000969
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000970 As a simple example, let's say buflen=32 and the input string is
971 'xxx.py'. strlen() would be 6 and the test above would yield:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000972
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000973 (6 + 11 + 10 + 5 == 32) > 32
Barry Warsaw28a691b2010-04-17 00:19:56 +0000974
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000975 which is false and so the name mangling would continue. This would
976 be fine because we'd end up with this string in buf:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000977
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000978 __pycache__/xxx.cpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000979
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000980 strlen(of that) == 30 + the nul fits inside a 32 character buffer.
981 We can even handle an input string of say 'xxxxx' above because
982 that's (5 + 11 + 10 + 5 == 31) > 32 which is also false. Name
983 mangling that yields:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000984
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000985 __pycache__/xxxxxcpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000986
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000987 which is 32 characters including the nul, and thus fits in the
988 buffer. However, an input string of 'xxxxxx' would yield a result
989 string of:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000990
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000991 __pycache__/xxxxxxcpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000992
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000993 which is 33 characters long (including the nul), thus overflowing
994 the buffer, even though the first test would fail, i.e.: the input
995 string is also 6 characters long, so 32 > 32 is false.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000996
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997 The reason the first test fails but we still overflow the buffer is
998 that the test above only expects to add one extra character to be
999 added to the extension, and here we're adding three (pyc). We
1000 don't add the first dot, so that reclaims one of expected
1001 positions, leaving us overflowing by 1 byte (3 extra - 1 reclaimed
1002 dot - 1 expected extra == 1 overflowed).
Barry Warsaw28a691b2010-04-17 00:19:56 +00001003
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001004 The best we can do is ensure that we still have enough room in the
1005 target buffer before we write the extension. Because it's always
1006 only the extension that can cause the overflow, and never the other
1007 path bytes we've written, it's sufficient to just do one more test
1008 here. Still, the assertion that follows can't hurt.
1009 */
Barry Warsaw28a691b2010-04-17 00:19:56 +00001010#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001011 printf("strlen(buf): %d; buflen: %d\n", (int)strlen(buf), (int)buflen);
Barry Warsaw28a691b2010-04-17 00:19:56 +00001012#endif
Victor Stinner2f42ae52011-03-20 00:41:24 +01001013 len = Py_UNICODE_strlen(buf);
1014 if (len + 5 > buflen)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001015 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001016 buf[len] = '.'; len++;
1017 buf[len] = 'p'; len++;
1018 buf[len] = 'y'; len++;
1019 buf[len] = debug ? 'c' : 'o'; len++;
1020 assert(len <= buflen);
1021 return PyUnicode_FromUnicode(buf, len);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001022}
1023
1024
Barry Warsaw28a691b2010-04-17 00:19:56 +00001025/* Given a pathname to a Python byte compiled file, return the path to the
1026 source file, if the path matches the PEP 3147 format. This does not check
1027 for any file existence, however, if the pyc file name does not match PEP
1028 3147 style, NULL is returned. buf must be at least as big as pathname;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001029 the resulting path will always be shorter.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001030
Victor Stinnerc9abda02011-03-14 13:33:46 -04001031 (...)/__pycache__/foo.<tag>.pyc -> (...)/foo.py */
1032
1033static PyObject*
1034make_source_pathname(PyObject *pathobj)
Barry Warsaw28a691b2010-04-17 00:19:56 +00001035{
Victor Stinnerc9abda02011-03-14 13:33:46 -04001036 Py_UNICODE buf[MAXPATHLEN];
1037 Py_UNICODE *pathname;
1038 Py_UNICODE *left, *right, *dot0, *dot1, sep;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001039 size_t i, j;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001040
1041 if (PyUnicode_GET_SIZE(pathobj) > MAXPATHLEN)
1042 return NULL;
1043 pathname = PyUnicode_AS_UNICODE(pathobj);
Barry Warsaw28a691b2010-04-17 00:19:56 +00001044
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001045 /* Look back two slashes from the end. In between these two slashes
1046 must be the string __pycache__ or this is not a PEP 3147 style
1047 path. It's possible for there to be only one slash.
1048 */
Victor Stinner2f42ae52011-03-20 00:41:24 +01001049 right = rightmost_sep(pathname);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001050 if (right == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001051 return NULL;
1052 sep = *right;
1053 *right = '\0';
Victor Stinner2f42ae52011-03-20 00:41:24 +01001054 left = rightmost_sep(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001055 *right = sep;
1056 if (left == NULL)
1057 left = pathname;
1058 else
1059 left++;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001060 if (right-left != Py_UNICODE_strlen(CACHEDIR_UNICODE) ||
1061 Py_UNICODE_strncmp(left, CACHEDIR_UNICODE, right-left) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001062 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001063
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001064 /* Now verify that the path component to the right of the last slash
1065 has two dots in it.
1066 */
Victor Stinnerc9abda02011-03-14 13:33:46 -04001067 if ((dot0 = Py_UNICODE_strchr(right + 1, '.')) == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001068 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001069 if ((dot1 = Py_UNICODE_strchr(dot0 + 1, '.')) == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001070 return NULL;
1071 /* Too many dots? */
Victor Stinnerc9abda02011-03-14 13:33:46 -04001072 if (Py_UNICODE_strchr(dot1 + 1, '.') != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001073 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001074
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 /* This is a PEP 3147 path. Start by copying everything from the
1076 start of pathname up to and including the leftmost slash. Then
1077 copy the file's basename, removing the magic tag and adding a .py
1078 suffix.
1079 */
Victor Stinnerc9abda02011-03-14 13:33:46 -04001080 Py_UNICODE_strncpy(buf, pathname, (i=left-pathname));
1081 Py_UNICODE_strncpy(buf+i, right+1, (j=dot0-right));
1082 buf[i+j] = 'p';
1083 buf[i+j+1] = 'y';
1084 return PyUnicode_FromUnicode(buf, i+j+2);
Barry Warsaw28a691b2010-04-17 00:19:56 +00001085}
1086
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001087/* Given a pathname for a Python source file, its time of last
1088 modification, and a pathname for a compiled file, check whether the
1089 compiled file represents the same version of the source. If so,
1090 return a FILE pointer for the compiled file, positioned just after
1091 the header; if not, return NULL.
1092 Doesn't set an exception. */
1093
1094static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001095check_compiled_module(PyObject *pathname, time_t mtime, PyObject *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001096{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001097 FILE *fp;
1098 long magic;
1099 long pyc_mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001100
Victor Stinner2f42ae52011-03-20 00:41:24 +01001101 fp = _Py_fopen(cpathname, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001102 if (fp == NULL)
1103 return NULL;
1104 magic = PyMarshal_ReadLongFromFile(fp);
1105 if (magic != pyc_magic) {
1106 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001107 PySys_FormatStderr("# %R has bad magic\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001108 fclose(fp);
1109 return NULL;
1110 }
1111 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
1112 if (pyc_mtime != mtime) {
1113 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001114 PySys_FormatStderr("# %R has bad mtime\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001115 fclose(fp);
1116 return NULL;
1117 }
1118 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001119 PySys_FormatStderr("# %R matches %R\n", cpathname, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001120 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001121}
1122
1123
1124/* Read a code object from a file and check it for validity */
1125
Guido van Rossum79f25d91997-04-29 20:08:16 +00001126static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001127read_compiled_module(PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001128{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001129 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001130
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001131 co = PyMarshal_ReadLastObjectFromFile(fp);
1132 if (co == NULL)
1133 return NULL;
1134 if (!PyCode_Check(co)) {
1135 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001136 "Non-code object in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001137 Py_DECREF(co);
1138 return NULL;
1139 }
1140 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001141}
1142
1143
1144/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001145 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001146
Guido van Rossum79f25d91997-04-29 20:08:16 +00001147static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001148load_compiled_module(PyObject *name, PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001149{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001150 long magic;
1151 PyCodeObject *co;
1152 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001153
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001154 magic = PyMarshal_ReadLongFromFile(fp);
1155 if (magic != pyc_magic) {
1156 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001157 "Bad magic number in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001158 return NULL;
1159 }
1160 (void) PyMarshal_ReadLongFromFile(fp);
1161 co = read_compiled_module(cpathname, fp);
1162 if (co == NULL)
1163 return NULL;
1164 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001165 PySys_FormatStderr("import %U # precompiled from %R\n",
1166 name, cpathname);
1167 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1168 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001169 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001170
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001171 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001172}
1173
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001174/* Parse a source file and return the corresponding code object */
1175
Guido van Rossum79f25d91997-04-29 20:08:16 +00001176static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001177parse_source_module(PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001178{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001179 PyCodeObject *co;
1180 PyObject *pathbytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001181 mod_ty mod;
1182 PyCompilerFlags flags;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001183 PyArena *arena;
1184
1185 pathbytes = PyUnicode_EncodeFSDefault(pathname);
1186 if (pathbytes == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001187 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001188
Victor Stinner2f42ae52011-03-20 00:41:24 +01001189 arena = PyArena_New();
1190 if (arena == NULL) {
1191 Py_DECREF(pathbytes);
1192 return NULL;
1193 }
1194
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001195 flags.cf_flags = 0;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001196 mod = PyParser_ASTFromFile(fp, PyBytes_AS_STRING(pathbytes), NULL,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001197 Py_file_input, 0, 0, &flags,
1198 NULL, arena);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001199 if (mod != NULL)
1200 co = PyAST_Compile(mod, PyBytes_AS_STRING(pathbytes), NULL, arena);
1201 else
1202 co = NULL;
1203 Py_DECREF(pathbytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001204 PyArena_Free(arena);
1205 return co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001206}
1207
Guido van Rossum55a83382000-09-20 20:31:38 +00001208/* Helper to open a bytecode file for writing in exclusive mode */
1209
Victor Stinner783c82c2011-04-20 03:27:51 +02001210#ifndef MS_WINDOWS
Guido van Rossum55a83382000-09-20 20:31:38 +00001211static FILE *
Christian Heimes05e8be12008-02-23 18:30:17 +00001212open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +00001213{
1214#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001215 /* Use O_EXCL to avoid a race condition when another process tries to
1216 write the same file. When that happens, our open() call fails,
1217 which is just fine (since it's only a cache).
1218 XXX If the file exists and is writable but the directory is not
1219 writable, the file will never be written. Oh well.
1220 */
1221 int fd;
1222 (void) unlink(filename);
1223 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
Tim Peters42c83af2000-09-29 04:03:10 +00001224#ifdef O_BINARY
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001225 |O_BINARY /* necessary for Windows */
Tim Peters42c83af2000-09-29 04:03:10 +00001226#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001227#ifdef __VMS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001228 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001229#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001231#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001232 );
1233 if (fd < 0)
1234 return NULL;
1235 return fdopen(fd, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001236#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001237 /* Best we can do -- on Windows this can't happen anyway */
1238 return fopen(filename, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001239#endif
1240}
Victor Stinner783c82c2011-04-20 03:27:51 +02001241#endif
Guido van Rossum55a83382000-09-20 20:31:38 +00001242
1243
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001244/* Write a compiled module to a file, placing the time of last
1245 modification of its source into the header.
1246 Errors are ignored, if a write error occurs an attempt is made to
1247 remove the file. */
1248
1249static void
Victor Stinner2f42ae52011-03-20 00:41:24 +01001250write_compiled_module(PyCodeObject *co, PyObject *cpathname,
1251 struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001252{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001253 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001254 time_t mtime = srcstat->st_mtime;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001255#ifdef MS_WINDOWS /* since Windows uses different permissions */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001256 mode_t mode = srcstat->st_mode & ~S_IEXEC;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001257#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001258 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
1259 mode_t dirmode = (srcstat->st_mode |
1260 S_IXUSR | S_IXGRP | S_IXOTH |
1261 S_IWUSR | S_IWGRP | S_IWOTH);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001262 PyObject *dirbytes;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001263#endif
Victor Stinner783c82c2011-04-20 03:27:51 +02001264#ifdef MS_WINDOWS
1265 int fd;
1266#else
1267 PyObject *cpathbytes;
1268#endif
1269 PyObject *dirname;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001270 Py_UNICODE *dirsep;
1271 int res, ok;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001272
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001273 /* Ensure that the __pycache__ directory exists. */
Victor Stinner2f42ae52011-03-20 00:41:24 +01001274 dirsep = rightmost_sep(PyUnicode_AS_UNICODE(cpathname));
1275 if (dirsep == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001276 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001277 PySys_FormatStderr("# no %s path found %R\n", CACHEDIR, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001278 return;
1279 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001280 dirname = PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(cpathname),
1281 dirsep - PyUnicode_AS_UNICODE(cpathname));
1282 if (dirname == NULL) {
1283 PyErr_Clear();
1284 return;
1285 }
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001286
1287#ifdef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001288 res = CreateDirectoryW(PyUnicode_AS_UNICODE(dirname), NULL);
1289 ok = (res != 0);
1290 if (!ok && GetLastError() == ERROR_ALREADY_EXISTS)
1291 ok = 1;
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001292#else
Victor Stinner2f42ae52011-03-20 00:41:24 +01001293 dirbytes = PyUnicode_EncodeFSDefault(dirname);
1294 if (dirbytes == NULL) {
1295 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001296 return;
1297 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001298 res = mkdir(PyBytes_AS_STRING(dirbytes), dirmode);
1299 Py_DECREF(dirbytes);
1300 if (0 <= res)
1301 ok = 1;
1302 else
1303 ok = (errno == EEXIST);
1304#endif
1305 if (!ok) {
1306 if (Py_VerboseFlag)
1307 PySys_FormatStderr("# cannot create cache dir %R\n", dirname);
1308 Py_DECREF(dirname);
1309 return;
1310 }
1311 Py_DECREF(dirname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001312
Victor Stinner783c82c2011-04-20 03:27:51 +02001313#ifdef MS_WINDOWS
1314 (void)DeleteFileW(PyUnicode_AS_UNICODE(cpathname));
1315 fd = _wopen(PyUnicode_AS_UNICODE(cpathname),
1316 O_EXCL | O_CREAT | O_WRONLY | O_TRUNC | O_BINARY,
1317 mode);
1318 if (0 <= fd)
1319 fp = fdopen(fd, "wb");
1320 else
1321 fp = NULL;
1322#else
Victor Stinner2f42ae52011-03-20 00:41:24 +01001323 cpathbytes = PyUnicode_EncodeFSDefault(cpathname);
1324 if (cpathbytes == NULL) {
1325 PyErr_Clear();
1326 return;
1327 }
1328
1329 fp = open_exclusive(PyBytes_AS_STRING(cpathbytes), mode);
Victor Stinner783c82c2011-04-20 03:27:51 +02001330#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001331 if (fp == NULL) {
1332 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001333 PySys_FormatStderr(
1334 "# can't create %R\n", cpathname);
Victor Stinner783c82c2011-04-20 03:27:51 +02001335#ifndef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001336 Py_DECREF(cpathbytes);
Victor Stinner783c82c2011-04-20 03:27:51 +02001337#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001338 return;
1339 }
1340 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
1341 /* First write a 0 for mtime */
1342 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
1343 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
1344 if (fflush(fp) != 0 || ferror(fp)) {
1345 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001346 PySys_FormatStderr("# can't write %R\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001347 /* Don't keep partial file */
1348 fclose(fp);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001349#ifdef MS_WINDOWS
1350 (void)DeleteFileW(PyUnicode_AS_UNICODE(cpathname));
1351#else
1352 (void) unlink(PyBytes_AS_STRING(cpathbytes));
Victor Stinner2f42ae52011-03-20 00:41:24 +01001353 Py_DECREF(cpathbytes);
Victor Stinner783c82c2011-04-20 03:27:51 +02001354#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001355 return;
1356 }
Victor Stinner783c82c2011-04-20 03:27:51 +02001357#ifndef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001358 Py_DECREF(cpathbytes);
Victor Stinner783c82c2011-04-20 03:27:51 +02001359#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001360 /* Now write the true mtime */
1361 fseek(fp, 4L, 0);
1362 assert(mtime < LONG_MAX);
1363 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
1364 fflush(fp);
1365 fclose(fp);
1366 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001367 PySys_FormatStderr("# wrote %R\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001368}
1369
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001370static void
1371update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
1372{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001373 PyObject *constants, *tmp;
1374 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001375
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001376 if (PyUnicode_Compare(co->co_filename, oldname))
1377 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001378
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001379 tmp = co->co_filename;
1380 co->co_filename = newname;
1381 Py_INCREF(co->co_filename);
1382 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001383
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001384 constants = co->co_consts;
1385 n = PyTuple_GET_SIZE(constants);
1386 for (i = 0; i < n; i++) {
1387 tmp = PyTuple_GET_ITEM(constants, i);
1388 if (PyCode_Check(tmp))
1389 update_code_filenames((PyCodeObject *)tmp,
1390 oldname, newname);
1391 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001392}
1393
Victor Stinner2f42ae52011-03-20 00:41:24 +01001394static void
1395update_compiled_module(PyCodeObject *co, PyObject *newname)
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001396{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001397 PyObject *oldname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001398
Victor Stinner2f42ae52011-03-20 00:41:24 +01001399 if (PyUnicode_Compare(co->co_filename, newname) == 0)
1400 return;
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +00001401
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001402 oldname = co->co_filename;
1403 Py_INCREF(oldname);
1404 update_code_filenames(co, oldname, newname);
1405 Py_DECREF(oldname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001406}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001407
Brett Cannon442c9b92011-03-23 16:14:42 -07001408static PyObject *
1409imp_fix_co_filename(PyObject *self, PyObject *args)
1410{
1411 PyObject *co;
1412 PyObject *file_path;
1413
1414 if (!PyArg_ParseTuple(args, "OO:_fix_co_filename", &co, &file_path))
1415 return NULL;
1416
1417 if (!PyCode_Check(co)) {
1418 PyErr_SetString(PyExc_TypeError,
1419 "first argument must be a code object");
1420 return NULL;
1421 }
1422
1423 if (!PyUnicode_Check(file_path)) {
1424 PyErr_SetString(PyExc_TypeError,
1425 "second argument must be a string");
1426 return NULL;
1427 }
1428
1429 update_compiled_module((PyCodeObject*)co, file_path);
1430
1431 Py_RETURN_NONE;
1432}
1433
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001434/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001435 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
1436 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001437
Guido van Rossum79f25d91997-04-29 20:08:16 +00001438static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001439load_source_module(PyObject *name, PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001440{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001441 struct stat st;
1442 FILE *fpc;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001443 PyObject *cpathname = NULL, *cpathbytes = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001444 PyCodeObject *co;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001445 PyObject *m = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 if (fstat(fileno(fp), &st) != 0) {
1448 PyErr_Format(PyExc_RuntimeError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001449 "unable to get file status from %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001450 pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001451 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001452 }
Fred Drake4c82b232000-06-30 16:18:57 +00001453#if SIZEOF_TIME_T > 4
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001454 /* Python's .pyc timestamp handling presumes that the timestamp fits
1455 in 4 bytes. This will be fine until sometime in the year 2038,
1456 when a 4-byte signed time_t will overflow.
1457 */
1458 if (st.st_mtime >> 32) {
1459 PyErr_SetString(PyExc_OverflowError,
1460 "modification time overflows a 4 byte field");
Victor Stinner2f42ae52011-03-20 00:41:24 +01001461 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001462 }
Fred Drake4c82b232000-06-30 16:18:57 +00001463#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001464 cpathname = make_compiled_pathname(
Victor Stinner2f42ae52011-03-20 00:41:24 +01001465 PyUnicode_AS_UNICODE(pathname),
1466 !Py_OptimizeFlag);
1467
1468 if (cpathname != NULL)
1469 fpc = check_compiled_module(pathname, st.st_mtime, cpathname);
1470 else
1471 fpc = NULL;
1472
1473 if (fpc) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001474 co = read_compiled_module(cpathname, fpc);
1475 fclose(fpc);
1476 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001477 goto error;
1478 update_compiled_module(co, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001479 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001480 PySys_FormatStderr("import %U # precompiled from %R\n",
1481 name, cpathname);
1482 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1483 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001484 }
1485 else {
1486 co = parse_source_module(pathname, fp);
1487 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001488 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001489 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001490 PySys_FormatStderr("import %U # from %R\n",
Victor Stinner98dbba52011-03-14 15:15:47 -04001491 name, pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001492 if (cpathname != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001493 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1494 if (ro == NULL || !PyObject_IsTrue(ro))
1495 write_compiled_module(co, cpathname, &st);
1496 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001497 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1498 pathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001499 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001500 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001501
Victor Stinner2f42ae52011-03-20 00:41:24 +01001502error:
1503 Py_XDECREF(cpathbytes);
1504 Py_XDECREF(cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001505 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001506}
1507
Christian Heimes3b06e532008-01-07 20:12:44 +00001508/* Get source file -> unicode or None
1509 * Returns the path to the py file if available, else the given path
1510 */
1511static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001512get_sourcefile(PyObject *filename)
Christian Heimes3b06e532008-01-07 20:12:44 +00001513{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001514 Py_ssize_t len;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001515 Py_UNICODE *fileuni;
1516 PyObject *py;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001517 struct stat statbuf;
Christian Heimes3b06e532008-01-07 20:12:44 +00001518
Victor Stinnerc9abda02011-03-14 13:33:46 -04001519 len = PyUnicode_GET_SIZE(filename);
1520 if (len == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001521 Py_RETURN_NONE;
Christian Heimes3b06e532008-01-07 20:12:44 +00001522
Victor Stinnerc9abda02011-03-14 13:33:46 -04001523 /* don't match *.pyc or *.pyo? */
1524 fileuni = PyUnicode_AS_UNICODE(filename);
1525 if (len < 5
1526 || fileuni[len-4] != '.'
1527 || (fileuni[len-3] != 'p' && fileuni[len-3] != 'P')
1528 || (fileuni[len-2] != 'y' && fileuni[len-2] != 'Y'))
1529 goto unchanged;
Christian Heimes3b06e532008-01-07 20:12:44 +00001530
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001531 /* Start by trying to turn PEP 3147 path into source path. If that
1532 * fails, just chop off the trailing character, i.e. legacy pyc path
1533 * to py.
1534 */
Victor Stinnerc9abda02011-03-14 13:33:46 -04001535 py = make_source_pathname(filename);
1536 if (py == NULL) {
1537 PyErr_Clear();
1538 py = PyUnicode_FromUnicode(fileuni, len - 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001539 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001540 if (py == NULL)
1541 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001542
Victor Stinnerc9abda02011-03-14 13:33:46 -04001543 if (_Py_stat(py, &statbuf) == 0 && S_ISREG(statbuf.st_mode))
1544 return py;
1545 Py_DECREF(py);
1546 goto unchanged;
1547
1548error:
1549 PyErr_Clear();
1550unchanged:
1551 Py_INCREF(filename);
1552 return filename;
Christian Heimes3b06e532008-01-07 20:12:44 +00001553}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001554
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001555/* Forward */
Victor Stinner41c5fec2011-03-13 21:46:30 -04001556static PyObject *load_module(PyObject *, FILE *, PyObject *, int, PyObject *);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001557static struct filedescr *find_module(PyObject *, PyObject *, PyObject *,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001558 PyObject **, FILE **, PyObject **);
Victor Stinner53dc7352011-03-20 01:50:21 +01001559static struct _frozen * find_frozen(PyObject *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001560
1561/* Load a package and return its module object WITH INCREMENTED
1562 REFERENCE COUNT */
1563
1564static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001565load_package(PyObject *name, PyObject *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001566{
Victor Stinner41c5fec2011-03-13 21:46:30 -04001567 PyObject *m, *d, *bufobj;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001568 PyObject *file = NULL, *path_list = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001569 int err;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001570 FILE *fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001571 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001572
Victor Stinnerc9abda02011-03-14 13:33:46 -04001573 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001574 if (m == NULL)
1575 return NULL;
1576 if (Py_VerboseFlag)
Victor Stinner98dbba52011-03-14 15:15:47 -04001577 PySys_FormatStderr("import %U # directory %R\n",
1578 name, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001579 file = get_sourcefile(pathname);
1580 if (file == NULL)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001581 return NULL;
1582 path_list = Py_BuildValue("[O]", file);
1583 if (path_list == NULL) {
1584 Py_DECREF(file);
1585 return NULL;
1586 }
1587 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001588 err = PyDict_SetItemString(d, "__file__", file);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001589 Py_DECREF(file);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001590 if (err == 0)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001591 err = PyDict_SetItemString(d, "__path__", path_list);
1592 if (err != 0) {
1593 Py_DECREF(path_list);
1594 return NULL;
1595 }
Victor Stinner533d7832011-03-14 13:22:54 -04001596 fdp = find_module(name, initstr, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001597 &bufobj, &fp, NULL);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001598 Py_DECREF(path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001599 if (fdp == NULL) {
1600 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1601 PyErr_Clear();
1602 Py_INCREF(m);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001603 return m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001604 }
1605 else
Victor Stinnerc9abda02011-03-14 13:33:46 -04001606 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001607 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001608 m = load_module(name, fp, bufobj, fdp->type, NULL);
1609 Py_XDECREF(bufobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001610 if (fp != NULL)
1611 fclose(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001612 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001613}
1614
1615
1616/* Helper to test for built-in module */
1617
1618static int
Victor Stinner95872862011-03-07 18:20:56 +01001619is_builtin(PyObject *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001620{
Victor Stinner95872862011-03-07 18:20:56 +01001621 int i, cmp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001622 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
Victor Stinner95872862011-03-07 18:20:56 +01001623 cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name);
1624 if (cmp == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001625 if (PyImport_Inittab[i].initfunc == NULL)
1626 return -1;
1627 else
1628 return 1;
1629 }
1630 }
1631 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001632}
1633
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001634
Just van Rossum52e14d62002-12-30 22:08:05 +00001635/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1636 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001637 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001638 that can handle the path item. Return None if no hook could;
1639 this tells our caller it should fall back to the builtin
1640 import mechanism. Cache the result in path_importer_cache.
1641 Returns a borrowed reference. */
1642
1643static PyObject *
1644get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001645 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001646{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001647 PyObject *importer;
1648 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001649
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001650 /* These conditions are the caller's responsibility: */
1651 assert(PyList_Check(path_hooks));
1652 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001653
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001654 nhooks = PyList_Size(path_hooks);
1655 if (nhooks < 0)
1656 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001657
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001658 importer = PyDict_GetItem(path_importer_cache, p);
1659 if (importer != NULL)
1660 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001661
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001662 /* set path_importer_cache[p] to None to avoid recursion */
1663 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1664 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001665
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001666 for (j = 0; j < nhooks; j++) {
1667 PyObject *hook = PyList_GetItem(path_hooks, j);
1668 if (hook == NULL)
1669 return NULL;
1670 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1671 if (importer != NULL)
1672 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001673
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001674 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1675 return NULL;
1676 }
1677 PyErr_Clear();
1678 }
1679 if (importer == NULL) {
1680 importer = PyObject_CallFunctionObjArgs(
1681 (PyObject *)&PyNullImporter_Type, p, NULL
1682 );
1683 if (importer == NULL) {
1684 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1685 PyErr_Clear();
1686 return Py_None;
1687 }
1688 }
1689 }
1690 if (importer != NULL) {
1691 int err = PyDict_SetItem(path_importer_cache, p, importer);
1692 Py_DECREF(importer);
1693 if (err != 0)
1694 return NULL;
1695 }
1696 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001697}
1698
Christian Heimes9cd17752007-11-18 19:35:23 +00001699PyAPI_FUNC(PyObject *)
1700PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001701 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001702
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001703 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1704 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1705 importer = get_path_importer(path_importer_cache,
1706 path_hooks, path);
1707 }
1708 }
1709 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1710 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001711}
1712
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001713/* Search the path (default sys.path) for a module. Return the
1714 corresponding filedescr struct, and (via return arguments) the
1715 pathname and an open file. Return NULL if the module is not found. */
1716
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001717#ifdef MS_COREDLL
Victor Stinner4d6c1c42011-03-08 23:49:04 +01001718extern FILE *_PyWin_FindRegisteredModule(PyObject *, struct filedescr **,
1719 PyObject **p_path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001720#endif
1721
Victor Stinner547a2a62011-03-20 03:07:28 +01001722/* Forward */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001723static int case_ok(PyObject *, Py_ssize_t, PyObject *);
Victor Stinner547a2a62011-03-20 03:07:28 +01001724static int find_init_module(PyObject *);
Just van Rossum52e14d62002-12-30 22:08:05 +00001725static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001726
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001727/* Get the path of a module: get its importer and call importer.find_module()
1728 hook, or check if the module if a package (if path/__init__.py exists).
1729
1730 -1: error: a Python error occurred
1731 0: ignore: an error occurred because of invalid data, but the error is not
1732 important enough to be reported.
1733 1: get path: module not found, but *buf contains its path
1734 2: found: *p_fd is the file descriptor (IMP_HOOK or PKG_DIRECTORY)
1735 and *buf is the path */
1736
1737static int
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001738find_module_path(PyObject *fullname, PyObject *name, PyObject *path,
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001739 PyObject *path_hooks, PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001740 PyObject **p_path, PyObject **p_loader, struct filedescr **p_fd)
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001741{
Victor Stinner2fd76e42011-03-14 15:19:39 -04001742 Py_UNICODE buf[MAXPATHLEN+1];
1743 Py_ssize_t buflen = MAXPATHLEN+1;
1744 PyObject *path_unicode, *filename;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001745 Py_ssize_t len;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001746 struct stat statbuf;
1747 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
1748
1749 if (PyUnicode_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001750 Py_INCREF(path);
1751 path_unicode = path;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001752 }
1753 else if (PyBytes_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001754 path_unicode = PyUnicode_DecodeFSDefaultAndSize(
1755 PyBytes_AS_STRING(path), PyBytes_GET_SIZE(path));
1756 if (path_unicode == NULL)
1757 return -1;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001758 }
1759 else
1760 return 0;
1761
Victor Stinner2fd76e42011-03-14 15:19:39 -04001762 len = PyUnicode_GET_SIZE(path_unicode);
1763 if (len + 2 + PyUnicode_GET_SIZE(name) + MAXSUFFIXSIZE >= buflen) {
1764 Py_DECREF(path_unicode);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001765 return 0; /* Too long */
1766 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001767 Py_UNICODE_strcpy(buf, PyUnicode_AS_UNICODE(path_unicode));
1768 Py_DECREF(path_unicode);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001769
Victor Stinner2fd76e42011-03-14 15:19:39 -04001770 if (Py_UNICODE_strlen(buf) != len)
1771 return 0; /* path contains '\0' */
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001772
1773 /* sys.path_hooks import hook */
1774 if (p_loader != NULL) {
1775 PyObject *importer;
1776
1777 importer = get_path_importer(path_importer_cache,
1778 path_hooks, path);
1779 if (importer == NULL) {
1780 return -1;
1781 }
1782 /* Note: importer is a borrowed reference */
1783 if (importer != Py_None) {
1784 PyObject *loader;
1785 loader = PyObject_CallMethod(importer,
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001786 "find_module", "O", fullname);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001787 if (loader == NULL)
1788 return -1; /* error */
1789 if (loader != Py_None) {
1790 /* a loader was found */
1791 *p_loader = loader;
1792 *p_fd = &importhookdescr;
1793 return 2;
1794 }
1795 Py_DECREF(loader);
1796 return 0;
1797 }
1798 }
1799 /* no hook was found, use builtin import */
1800
1801 if (len > 0 && buf[len-1] != SEP
1802#ifdef ALTSEP
1803 && buf[len-1] != ALTSEP
1804#endif
1805 )
1806 buf[len++] = SEP;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001807 Py_UNICODE_strcpy(buf+len, PyUnicode_AS_UNICODE(name));
1808 len += PyUnicode_GET_SIZE(name);
1809
1810 filename = PyUnicode_FromUnicode(buf, len);
1811 if (filename == NULL)
1812 return -1;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001813
1814 /* Check for package import (buf holds a directory name,
1815 and there's an __init__ module in that directory */
1816#ifdef HAVE_STAT
Victor Stinner2fd76e42011-03-14 15:19:39 -04001817 if (_Py_stat(filename, &statbuf) == 0 && /* it exists */
Victor Stinnerd0296212011-03-14 14:04:10 -04001818 S_ISDIR(statbuf.st_mode)) /* it's a directory */
1819 {
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001820 int match;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001821
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001822 match = case_ok(filename, 0, name);
1823 if (match < 0) {
1824 Py_DECREF(filename);
1825 return -1;
1826 }
1827 if (match) { /* case matches */
1828 if (find_init_module(filename)) { /* and has __init__.py */
Victor Stinner2fd76e42011-03-14 15:19:39 -04001829 *p_path = filename;
Victor Stinnerd0296212011-03-14 14:04:10 -04001830 *p_fd = &fd_package;
1831 return 2;
1832 }
1833 else {
1834 int err;
Victor Stinnerd0296212011-03-14 14:04:10 -04001835 err = PyErr_WarnFormat(PyExc_ImportWarning, 1,
Victor Stinner547a2a62011-03-20 03:07:28 +01001836 "Not importing directory %R: missing __init__.py",
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001837 filename);
Victor Stinner547a2a62011-03-20 03:07:28 +01001838 if (err) {
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001839 Py_DECREF(filename);
Victor Stinnerd0296212011-03-14 14:04:10 -04001840 return -1;
Victor Stinner547a2a62011-03-20 03:07:28 +01001841 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001842 }
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001843 }
1844 }
1845#endif
Victor Stinner2fd76e42011-03-14 15:19:39 -04001846 *p_path = filename;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001847 return 1;
1848}
1849
1850/* Find a module in search_path_list. For each path, try
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001851 find_module_path() or try each _PyImport_Filetab suffix.
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001852
1853 If the module is found, return a file descriptor, write the path in
1854 *p_filename, write the pointer to the file object into *p_fp, and (if
1855 p_loader is not NULL) the loader into *p_loader.
1856
1857 Otherwise, raise an exception and return NULL. */
1858
Victor Stinner37580282011-03-20 01:34:43 +01001859static struct filedescr*
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001860find_module_path_list(PyObject *fullname, PyObject *name,
Victor Stinner37580282011-03-20 01:34:43 +01001861 PyObject *search_path_list, PyObject *path_hooks,
1862 PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001863 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001864{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001865 Py_ssize_t i, npath;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001866 struct filedescr *fdp = NULL;
1867 char *filemode;
1868 FILE *fp = NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001869 PyObject *prefix, *filename;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001870 int match;
Victor Stinner53dc7352011-03-20 01:50:21 +01001871
Victor Stinner37580282011-03-20 01:34:43 +01001872 npath = PyList_Size(search_path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001873 for (i = 0; i < npath; i++) {
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001874 PyObject *path;
1875 int ok;
1876
1877 path = PyList_GetItem(search_path_list, i);
1878 if (path == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001879 return NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001880
Victor Stinner2fd76e42011-03-14 15:19:39 -04001881 prefix = NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001882 ok = find_module_path(fullname, name, path,
1883 path_hooks, path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001884 &prefix, p_loader, &fdp);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001885 if (ok < 0)
1886 return NULL;
1887 if (ok == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001888 continue;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001889 if (ok == 2) {
1890 *p_path = prefix;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001891 return fdp;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001892 }
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001893
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001894 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001895 struct stat statbuf;
1896
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001897 filemode = fdp->mode;
1898 if (filemode[0] == 'U')
1899 filemode = "r" PY_STDIOTEXTMODE;
Victor Stinnerd0296212011-03-14 14:04:10 -04001900
Victor Stinner2fd76e42011-03-14 15:19:39 -04001901 filename = PyUnicode_FromFormat("%U%s", prefix, fdp->suffix);
1902 if (filename == NULL) {
1903 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001904 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001905 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001906
1907 if (Py_VerboseFlag > 1)
1908 PySys_FormatStderr("# trying %R\n", filename);
1909
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001910 if (_Py_stat(filename, &statbuf) == 0 && /* it exists */
1911 S_ISDIR(statbuf.st_mode)) /* it's a directory */
1912 {
1913 Py_DECREF(filename);
1914 continue;
1915 }
1916
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001917 fp = _Py_fopen(filename, filemode);
1918 if (fp == NULL) {
1919 Py_DECREF(filename);
Victor Stinner925ef392011-06-20 15:01:10 +02001920 if (PyErr_Occurred()) {
1921 Py_DECREF(prefix);
1922 return NULL;
1923 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001924 continue;
1925 }
1926 match = case_ok(filename, -(Py_ssize_t)strlen(fdp->suffix), name);
1927 if (match < 0) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001928 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001929 Py_DECREF(filename);
1930 return NULL;
1931 }
1932 if (match) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001933 Py_DECREF(prefix);
1934 *p_path = filename;
Victor Stinnerd0296212011-03-14 14:04:10 -04001935 *p_fp = fp;
1936 return fdp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001937 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001938 Py_DECREF(filename);
Victor Stinnerd0296212011-03-14 14:04:10 -04001939
1940 fclose(fp);
1941 fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001942 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001943 Py_DECREF(prefix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001944 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001945 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04001946 "No module named %R", name);
Victor Stinnerd0296212011-03-14 14:04:10 -04001947 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001948}
1949
Victor Stinner37580282011-03-20 01:34:43 +01001950/* Find a module:
1951
1952 - try find_module() of each sys.meta_path hook
1953 - try find_frozen()
1954 - try is_builtin()
1955 - try _PyWin_FindRegisteredModule() (Windows only)
1956 - otherwise, call find_module_path_list() with search_path_list (if not
1957 NULL) or sys.path
1958
Victor Stinner2fd76e42011-03-14 15:19:39 -04001959 fullname can be NULL, but only if p_loader is NULL.
1960
Victor Stinner37580282011-03-20 01:34:43 +01001961 Return:
1962
1963 - &fd_builtin (C_BUILTIN) if it is a builtin
1964 - &fd_frozen (PY_FROZEN) if it is frozen
Victor Stinner2fd76e42011-03-14 15:19:39 -04001965 - &fd_package (PKG_DIRECTORY) and write the filename into *p_path
Victor Stinner37580282011-03-20 01:34:43 +01001966 if it is a package
1967 - &importhookdescr (IMP_HOOK) and write the loader into *p_loader if a
1968 importer loader was found
1969 - a file descriptor (PY_SOURCE, PY_COMPILED, C_EXTENSION, PY_RESOURCE or
1970 PY_CODERESOURCE: see _PyImport_Filetab), write the filename into
Victor Stinner2fd76e42011-03-14 15:19:39 -04001971 *p_path and the pointer to the open file into *p_fp
Victor Stinner37580282011-03-20 01:34:43 +01001972 - NULL on error
1973
Victor Stinner2fd76e42011-03-14 15:19:39 -04001974 By default, *p_path, *p_fp and *p_loader (if set) are set to NULL.
1975 Eg. *p_path is set to NULL for a builtin package.
1976*/
Victor Stinner37580282011-03-20 01:34:43 +01001977
1978static struct filedescr *
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001979find_module(PyObject *fullname, PyObject *name, PyObject *search_path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001980 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Victor Stinner37580282011-03-20 01:34:43 +01001981{
1982 Py_ssize_t i, npath;
1983 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1984 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1985 PyObject *path_hooks, *path_importer_cache;
Victor Stinner37580282011-03-20 01:34:43 +01001986
Victor Stinner2fd76e42011-03-14 15:19:39 -04001987 *p_path = NULL;
Victor Stinner37580282011-03-20 01:34:43 +01001988 *p_fp = NULL;
1989 if (p_loader != NULL)
1990 *p_loader = NULL;
1991
Victor Stinner37580282011-03-20 01:34:43 +01001992 /* sys.meta_path import hook */
1993 if (p_loader != NULL) {
1994 PyObject *meta_path;
1995
1996 meta_path = PySys_GetObject("meta_path");
1997 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinner16191322011-09-15 19:28:05 +02001998 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01001999 "sys.meta_path must be a list of "
2000 "import hooks");
2001 return NULL;
2002 }
2003 Py_INCREF(meta_path); /* zap guard */
2004 npath = PyList_Size(meta_path);
2005 for (i = 0; i < npath; i++) {
2006 PyObject *loader;
2007 PyObject *hook = PyList_GetItem(meta_path, i);
2008 loader = PyObject_CallMethod(hook, "find_module",
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002009 "OO", fullname,
Victor Stinner37580282011-03-20 01:34:43 +01002010 search_path_list != NULL ?
2011 search_path_list : Py_None);
2012 if (loader == NULL) {
2013 Py_DECREF(meta_path);
2014 return NULL; /* true error */
2015 }
2016 if (loader != Py_None) {
2017 /* a loader was found */
2018 *p_loader = loader;
2019 Py_DECREF(meta_path);
2020 return &importhookdescr;
2021 }
2022 Py_DECREF(loader);
2023 }
2024 Py_DECREF(meta_path);
2025 }
2026
Victor Stinnerdf75a022011-03-14 13:40:04 -04002027 if (find_frozen(fullname) != NULL)
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002028 return &fd_frozen;
Victor Stinner37580282011-03-20 01:34:43 +01002029
2030 if (search_path_list == NULL) {
2031#ifdef MS_COREDLL
2032 FILE *fp;
2033 struct filedescr *fdp;
Victor Stinner37580282011-03-20 01:34:43 +01002034#endif
Victor Stinnerdf75a022011-03-14 13:40:04 -04002035 if (is_builtin(name))
Victor Stinner37580282011-03-20 01:34:43 +01002036 return &fd_builtin;
Victor Stinner37580282011-03-20 01:34:43 +01002037#ifdef MS_COREDLL
Victor Stinner2fd76e42011-03-14 15:19:39 -04002038 fp = _PyWin_FindRegisteredModule(name, &fdp, p_path);
Victor Stinner37580282011-03-20 01:34:43 +01002039 if (fp != NULL) {
Victor Stinner37580282011-03-20 01:34:43 +01002040 *p_fp = fp;
2041 return fdp;
2042 }
2043 else if (PyErr_Occurred())
2044 return NULL;
2045#endif
Victor Stinner37580282011-03-20 01:34:43 +01002046 search_path_list = PySys_GetObject("path");
2047 }
2048
2049 if (search_path_list == NULL || !PyList_Check(search_path_list)) {
Victor Stinner16191322011-09-15 19:28:05 +02002050 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002051 "sys.path must be a list of directory names");
2052 return NULL;
2053 }
2054
2055 path_hooks = PySys_GetObject("path_hooks");
2056 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinner16191322011-09-15 19:28:05 +02002057 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002058 "sys.path_hooks must be a list of "
2059 "import hooks");
2060 return NULL;
2061 }
2062 path_importer_cache = PySys_GetObject("path_importer_cache");
2063 if (path_importer_cache == NULL ||
2064 !PyDict_Check(path_importer_cache)) {
Victor Stinner16191322011-09-15 19:28:05 +02002065 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002066 "sys.path_importer_cache must be a dict");
2067 return NULL;
2068 }
2069
2070 return find_module_path_list(fullname, name,
2071 search_path_list, path_hooks,
2072 path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04002073 p_path, p_fp, p_loader);
Victor Stinner37580282011-03-20 01:34:43 +01002074}
2075
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002076/* case_bytes(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00002077 * The arguments here are tricky, best shown by example:
2078 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
2079 * ^ ^ ^ ^
2080 * |--------------------- buf ---------------------|
2081 * |------------------- len ------------------|
2082 * |------ name -------|
2083 * |----- namelen -----|
2084 * buf is the full path, but len only counts up to (& exclusive of) the
2085 * extension. name is the module name, also exclusive of extension.
2086 *
2087 * We've already done a successful stat() or fopen() on buf, so know that
2088 * there's some match, possibly case-insensitive.
2089 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002090 * case_bytes() is to return 1 if there's a case-sensitive match for
2091 * name, else 0. case_bytes() is also to return 1 if envar PYTHONCASEOK
Tim Peters50d8d372001-02-28 05:34:27 +00002092 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00002093 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002094 * case_bytes() is used to implement case-sensitive import semantics even
Tim Peters50d8d372001-02-28 05:34:27 +00002095 * on platforms with case-insensitive filesystems. It's trivial to implement
2096 * for case-sensitive filesystems. It's pretty much a cross-platform
2097 * nightmare for systems with case-insensitive filesystems.
2098 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00002099
Tim Peters50d8d372001-02-28 05:34:27 +00002100/* First we may need a pile of platform-specific header files; the sequence
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002101 * of #if's here should match the sequence in the body of case_bytes().
Tim Peters50d8d372001-02-28 05:34:27 +00002102 */
Jason Tishler7961aa62005-05-20 00:56:54 +00002103#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002104#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00002105
Tim Peters50d8d372001-02-28 05:34:27 +00002106#elif defined(DJGPP)
2107#include <dir.h>
2108
Jason Tishler7961aa62005-05-20 00:56:54 +00002109#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00002110#include <sys/types.h>
2111#include <dirent.h>
2112
Andrew MacIntyred9400542002-02-26 11:41:34 +00002113#elif defined(PYOS_OS2)
2114#define INCL_DOS
2115#define INCL_DOSERRORS
2116#define INCL_NOPMAPI
2117#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00002118#endif
2119
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002120#if defined(DJGPP) \
2121 || ((defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) \
2122 && defined(HAVE_DIRENT_H)) \
2123 || defined(PYOS_OS2)
2124# define USE_CASE_OK_BYTES
2125#endif
2126
2127
2128#ifdef USE_CASE_OK_BYTES
Guido van Rossum0980bd91998-02-13 17:18:36 +00002129static int
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002130case_bytes(char *buf, Py_ssize_t len, Py_ssize_t namelen, const char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002131{
Tim Peters50d8d372001-02-28 05:34:27 +00002132/* Pick a platform-specific implementation; the sequence of #if's here should
2133 * match the sequence just above.
2134 */
2135
Tim Peters50d8d372001-02-28 05:34:27 +00002136/* DJGPP */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002137#if defined(DJGPP)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002138 struct ffblk ffblk;
2139 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00002140
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002141 if (Py_GETENV("PYTHONCASEOK") != NULL)
2142 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00002143
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002144 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
2145 if (done) {
2146 PyErr_Format(PyExc_NameError,
2147 "Can't find file for module %.100s\n(filename %.300s)",
2148 name, buf);
Victor Stinner9c61e242011-03-22 01:22:27 +01002149 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002150 }
2151 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002152
Jason Tishler7961aa62005-05-20 00:56:54 +00002153/* new-fangled macintosh (macosx) or Cygwin */
2154#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002155 DIR *dirp;
2156 struct dirent *dp;
2157 char dirname[MAXPATHLEN + 1];
2158 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00002159
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002160 if (Py_GETENV("PYTHONCASEOK") != NULL)
2161 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00002162
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002163 /* Copy the dir component into dirname; substitute "." if empty */
2164 if (dirlen <= 0) {
2165 dirname[0] = '.';
2166 dirname[1] = '\0';
2167 }
2168 else {
2169 assert(dirlen <= MAXPATHLEN);
2170 memcpy(dirname, buf, dirlen);
2171 dirname[dirlen] = '\0';
2172 }
2173 /* Open the directory and search the entries for an exact match. */
2174 dirp = opendir(dirname);
2175 if (dirp) {
2176 char *nameWithExt = buf + len - namelen;
2177 while ((dp = readdir(dirp)) != NULL) {
2178 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00002179#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002180 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00002181#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002182 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00002183#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002184 if (thislen >= namelen &&
2185 strcmp(dp->d_name, nameWithExt) == 0) {
2186 (void)closedir(dirp);
2187 return 1; /* Found */
2188 }
2189 }
2190 (void)closedir(dirp);
2191 }
2192 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00002193
Andrew MacIntyred9400542002-02-26 11:41:34 +00002194/* OS/2 */
2195#elif defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002196 HDIR hdir = 1;
2197 ULONG srchcnt = 1;
2198 FILEFINDBUF3 ffbuf;
2199 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002200
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002201 if (Py_GETENV("PYTHONCASEOK") != NULL)
2202 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002203
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002204 rc = DosFindFirst(buf,
2205 &hdir,
2206 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
2207 &ffbuf, sizeof(ffbuf),
2208 &srchcnt,
2209 FIL_STANDARD);
2210 if (rc != NO_ERROR)
2211 return 0;
2212 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002213
Tim Peters50d8d372001-02-28 05:34:27 +00002214/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
2215#else
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002216# error "USE_CASE_OK_BYTES is not correctly defined"
2217#endif
2218}
2219#endif
2220
2221/*
2222 * Check if a filename case matchs the name case. We've already done a
2223 * successful stat() or fopen() on buf, so know that there's some match,
2224 * possibly case-insensitive.
2225 *
2226 * case_ok() is to return 1 if there's a case-sensitive match for name, 0 if it
2227 * the filename doesn't match, or -1 on error. case_ok() is also to return 1
2228 * if envar PYTHONCASEOK exists.
2229 *
2230 * case_ok() is used to implement case-sensitive import semantics even
2231 * on platforms with case-insensitive filesystems. It's trivial to implement
2232 * for case-sensitive filesystems. It's pretty much a cross-platform
2233 * nightmare for systems with case-insensitive filesystems.
2234 */
2235
2236static int
2237case_ok(PyObject *filename, Py_ssize_t prefix_delta, PyObject *name)
2238{
2239#ifdef MS_WINDOWS
2240 WIN32_FIND_DATAW data;
2241 HANDLE h;
2242 int cmp;
2243
2244 if (Py_GETENV("PYTHONCASEOK") != NULL)
2245 return 1;
2246
2247 h = FindFirstFileW(PyUnicode_AS_UNICODE(filename), &data);
2248 if (h == INVALID_HANDLE_VALUE) {
2249 PyErr_Format(PyExc_NameError,
2250 "Can't find file for module %R\n(filename %R)",
2251 name, filename);
2252 return 0;
2253 }
2254 FindClose(h);
2255 cmp = wcsncmp(data.cFileName,
2256 PyUnicode_AS_UNICODE(name),
2257 PyUnicode_GET_SIZE(name));
2258 return cmp == 0;
2259#elif defined(USE_CASE_OK_BYTES)
2260 int match;
2261 PyObject *filebytes, *namebytes;
2262 filebytes = PyUnicode_EncodeFSDefault(filename);
2263 if (filebytes == NULL)
2264 return -1;
2265 namebytes = PyUnicode_EncodeFSDefault(name);
2266 if (namebytes == NULL) {
2267 Py_DECREF(filebytes);
2268 return -1;
2269 }
2270 match = case_bytes(
2271 PyBytes_AS_STRING(filebytes),
2272 PyBytes_GET_SIZE(filebytes) + prefix_delta,
Victor Stinner1304f2d2011-03-20 04:28:55 +01002273 PyBytes_GET_SIZE(namebytes),
2274 PyBytes_AS_STRING(namebytes));
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002275 Py_DECREF(filebytes);
2276 Py_DECREF(namebytes);
2277 return match;
2278#else
2279 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002280 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002281
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002282#endif
Tim Peters50d8d372001-02-28 05:34:27 +00002283}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002284
Guido van Rossum197346f1997-10-31 18:38:52 +00002285#ifdef HAVE_STAT
Victor Stinner4f4402c2010-08-14 14:50:26 +00002286
Victor Stinner547a2a62011-03-20 03:07:28 +01002287/* Helper to look for __init__.py or __init__.py[co] in potential package.
2288 Return 1 if __init__ was found, 0 if not, or -1 on error. */
Guido van Rossum197346f1997-10-31 18:38:52 +00002289static int
Victor Stinner547a2a62011-03-20 03:07:28 +01002290find_init_module(PyObject *directory)
Guido van Rossum197346f1997-10-31 18:38:52 +00002291{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002292 struct stat statbuf;
Victor Stinner547a2a62011-03-20 03:07:28 +01002293 PyObject *filename;
2294 int match;
Guido van Rossum197346f1997-10-31 18:38:52 +00002295
Victor Stinner547a2a62011-03-20 03:07:28 +01002296 filename = PyUnicode_FromFormat("%U%c__init__.py", directory, SEP);
2297 if (filename == NULL)
2298 return -1;
2299 if (_Py_stat(filename, &statbuf) == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002300 /* 3=len(".py") */
2301 match = case_ok(filename, -3, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002302 if (match < 0) {
2303 Py_DECREF(filename);
2304 return -1;
2305 }
2306 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002307 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002308 return 1;
2309 }
2310 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002311 Py_DECREF(filename);
2312
2313 filename = PyUnicode_FromFormat("%U%c__init__.py%c",
2314 directory, SEP, Py_OptimizeFlag ? 'o' : 'c');
2315 if (filename == NULL)
2316 return -1;
2317 if (_Py_stat(filename, &statbuf) == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002318 /* 4=len(".pyc") */
2319 match = case_ok(filename, -4, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002320 if (match < 0) {
2321 Py_DECREF(filename);
2322 return -1;
2323 }
2324 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002325 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002326 return 1;
2327 }
2328 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002329 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002330 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00002331}
Guido van Rossum48a680c2001-03-02 06:34:14 +00002332
Guido van Rossum197346f1997-10-31 18:38:52 +00002333#endif /* HAVE_STAT */
2334
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002335
Victor Stinner95872862011-03-07 18:20:56 +01002336static int init_builtin(PyObject *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002337
Victor Stinner44c6c152010-08-09 00:59:10 +00002338static PyObject*
Victor Stinner95872862011-03-07 18:20:56 +01002339load_builtin(PyObject *name, int type)
Victor Stinner44c6c152010-08-09 00:59:10 +00002340{
2341 PyObject *m, *modules;
2342 int err;
2343
Victor Stinner44c6c152010-08-09 00:59:10 +00002344 if (type == C_BUILTIN)
2345 err = init_builtin(name);
2346 else
Victor Stinner95872862011-03-07 18:20:56 +01002347 err = PyImport_ImportFrozenModuleObject(name);
Victor Stinner44c6c152010-08-09 00:59:10 +00002348 if (err < 0)
2349 return NULL;
2350 if (err == 0) {
2351 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002352 "Purported %s module %R not found",
2353 type == C_BUILTIN ? "builtin" : "frozen",
Victor Stinner44c6c152010-08-09 00:59:10 +00002354 name);
2355 return NULL;
2356 }
2357
2358 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +01002359 m = PyDict_GetItem(modules, name);
Victor Stinner44c6c152010-08-09 00:59:10 +00002360 if (m == NULL) {
2361 PyErr_Format(
2362 PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002363 "%s module %R not properly initialized",
2364 type == C_BUILTIN ? "builtin" : "frozen",
Victor Stinner44c6c152010-08-09 00:59:10 +00002365 name);
2366 return NULL;
2367 }
2368 Py_INCREF(m);
2369 return m;
2370}
2371
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002372/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002373 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002374
Guido van Rossum79f25d91997-04-29 20:08:16 +00002375static PyObject *
Victor Stinner41c5fec2011-03-13 21:46:30 -04002376load_module(PyObject *name, FILE *fp, PyObject *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002377{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002378 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002379
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002380 /* First check that there's an open file (if we need one) */
2381 switch (type) {
2382 case PY_SOURCE:
2383 case PY_COMPILED:
2384 if (fp == NULL) {
2385 PyErr_Format(PyExc_ValueError,
Victor Stinner41c5fec2011-03-13 21:46:30 -04002386 "file object required for import (type code %d)",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002387 type);
2388 return NULL;
2389 }
2390 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002391
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002392 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002393
Victor Stinner41c5fec2011-03-13 21:46:30 -04002394 case PY_SOURCE:
2395 m = load_source_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002396 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002397
Victor Stinner41c5fec2011-03-13 21:46:30 -04002398 case PY_COMPILED:
2399 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002400 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002401
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002402#ifdef HAVE_DYNAMIC_LOADING
Victor Stinner41c5fec2011-03-13 21:46:30 -04002403 case C_EXTENSION:
2404 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002405 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002406#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002407
Victor Stinner41c5fec2011-03-13 21:46:30 -04002408 case PKG_DIRECTORY:
2409 m = load_package(name, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002410 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002411
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002412 case C_BUILTIN:
Victor Stinner41c5fec2011-03-13 21:46:30 -04002413 case PY_FROZEN:
2414 m = load_builtin(name, type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002415 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002416
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002417 case IMP_HOOK: {
2418 if (loader == NULL) {
2419 PyErr_SetString(PyExc_ImportError,
2420 "import hook without loader");
2421 return NULL;
2422 }
Victor Stinner41c5fec2011-03-13 21:46:30 -04002423 m = PyObject_CallMethod(loader, "load_module", "O", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002424 break;
2425 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002426
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002427 default:
2428 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04002429 "Don't know how to import %R (type code %d)",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002430 name, type);
2431 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002432
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002433 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002434
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002435 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002436}
2437
2438
2439/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00002440 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002441 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002442
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002443static int
Victor Stinner95872862011-03-07 18:20:56 +01002444init_builtin(PyObject *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002445{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002446 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002447
Victor Stinner95872862011-03-07 18:20:56 +01002448 if (_PyImport_FindExtensionObject(name, name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002449 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002450
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002451 for (p = PyImport_Inittab; p->name != NULL; p++) {
2452 PyObject *mod;
Victor Stinner95872862011-03-07 18:20:56 +01002453 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002454 if (p->initfunc == NULL) {
2455 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002456 "Cannot re-init internal module %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002457 name);
2458 return -1;
2459 }
2460 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +01002461 PySys_FormatStderr("import %U # builtin\n", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002462 mod = (*p->initfunc)();
2463 if (mod == 0)
2464 return -1;
Victor Stinner95872862011-03-07 18:20:56 +01002465 if (_PyImport_FixupExtensionObject(mod, name, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002466 return -1;
2467 /* FixupExtension has put the module into sys.modules,
2468 so we can release our own reference. */
2469 Py_DECREF(mod);
2470 return 1;
2471 }
2472 }
2473 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002474}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002475
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002476
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002477/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002478
Guido van Rossumcfd0a221996-06-17 17:06:34 +00002479static struct _frozen *
Victor Stinner53dc7352011-03-20 01:50:21 +01002480find_frozen(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002481{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002482 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002483
Victor Stinner53dc7352011-03-20 01:50:21 +01002484 if (name == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002485 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00002486
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002487 for (p = PyImport_FrozenModules; ; p++) {
2488 if (p->name == NULL)
2489 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01002490 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002491 break;
2492 }
2493 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002494}
2495
Guido van Rossum79f25d91997-04-29 20:08:16 +00002496static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002497get_frozen_object(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002498{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002499 struct _frozen *p = find_frozen(name);
2500 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002501
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002502 if (p == NULL) {
2503 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002504 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002505 name);
2506 return NULL;
2507 }
2508 if (p->code == NULL) {
2509 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002510 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002511 name);
2512 return NULL;
2513 }
2514 size = p->size;
2515 if (size < 0)
2516 size = -size;
2517 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002518}
2519
Brett Cannon8d110132009-03-15 02:20:16 +00002520static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002521is_frozen_package(PyObject *name)
Brett Cannon8d110132009-03-15 02:20:16 +00002522{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002523 struct _frozen *p = find_frozen(name);
2524 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00002525
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002526 if (p == NULL) {
2527 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002528 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002529 name);
2530 return NULL;
2531 }
Brett Cannon8d110132009-03-15 02:20:16 +00002532
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002533 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00002534
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002535 if (size < 0)
2536 Py_RETURN_TRUE;
2537 else
2538 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00002539}
2540
2541
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002542/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00002543 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002544 an exception set if the initialization failed.
2545 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002546
2547int
Victor Stinner53dc7352011-03-20 01:50:21 +01002548PyImport_ImportFrozenModuleObject(PyObject *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002549{
Victor Stinner53dc7352011-03-20 01:50:21 +01002550 struct _frozen *p;
2551 PyObject *co, *m, *path;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002552 int ispackage;
2553 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002554
Victor Stinner53dc7352011-03-20 01:50:21 +01002555 p = find_frozen(name);
2556
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002557 if (p == NULL)
2558 return 0;
2559 if (p->code == NULL) {
2560 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002561 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002562 name);
2563 return -1;
2564 }
2565 size = p->size;
2566 ispackage = (size < 0);
2567 if (ispackage)
2568 size = -size;
2569 if (Py_VerboseFlag)
Victor Stinner53dc7352011-03-20 01:50:21 +01002570 PySys_FormatStderr("import %U # frozen%s\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002571 name, ispackage ? " package" : "");
2572 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2573 if (co == NULL)
2574 return -1;
2575 if (!PyCode_Check(co)) {
2576 PyErr_Format(PyExc_TypeError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002577 "frozen object %R is not a code object",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002578 name);
2579 goto err_return;
2580 }
2581 if (ispackage) {
2582 /* Set __path__ to the package name */
Victor Stinner53dc7352011-03-20 01:50:21 +01002583 PyObject *d, *l;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002584 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01002585 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002586 if (m == NULL)
2587 goto err_return;
2588 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002589 l = PyList_New(1);
2590 if (l == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002591 goto err_return;
2592 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002593 Py_INCREF(name);
2594 PyList_SET_ITEM(l, 0, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002595 err = PyDict_SetItemString(d, "__path__", l);
2596 Py_DECREF(l);
2597 if (err != 0)
2598 goto err_return;
2599 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002600 path = PyUnicode_FromString("<frozen>");
2601 if (path == NULL)
2602 goto err_return;
2603 m = PyImport_ExecCodeModuleObject(name, co, path, NULL);
2604 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002605 if (m == NULL)
2606 goto err_return;
2607 Py_DECREF(co);
2608 Py_DECREF(m);
2609 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002610err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002611 Py_DECREF(co);
2612 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002613}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002614
Victor Stinner53dc7352011-03-20 01:50:21 +01002615int
2616PyImport_ImportFrozenModule(char *name)
2617{
2618 PyObject *nameobj;
2619 int ret;
2620 nameobj = PyUnicode_InternFromString(name);
2621 if (nameobj == NULL)
2622 return -1;
2623 ret = PyImport_ImportFrozenModuleObject(nameobj);
2624 Py_DECREF(nameobj);
2625 return ret;
2626}
2627
Guido van Rossum74e6a111994-08-29 12:54:38 +00002628
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002629/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002630 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002631
Guido van Rossum79f25d91997-04-29 20:08:16 +00002632PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002633PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002634{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002635 PyObject *pname;
2636 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002637
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002638 pname = PyUnicode_FromString(name);
2639 if (pname == NULL)
2640 return NULL;
2641 result = PyImport_Import(pname);
2642 Py_DECREF(pname);
2643 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002644}
2645
Christian Heimes072c0f12008-01-03 23:01:04 +00002646/* Import a module without blocking
2647 *
2648 * At first it tries to fetch the module from sys.modules. If the module was
2649 * never loaded before it loads it with PyImport_ImportModule() unless another
2650 * thread holds the import lock. In the latter case the function raises an
2651 * ImportError instead of blocking.
2652 *
2653 * Returns the module object with incremented ref count.
2654 */
2655PyObject *
2656PyImport_ImportModuleNoBlock(const char *name)
2657{
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002658 PyObject *nameobj, *modules, *result;
Victor Stinner0af03062011-09-02 00:11:43 +02002659#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002660 long me;
Victor Stinner0af03062011-09-02 00:11:43 +02002661#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002662
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002663 /* Try to get the module from sys.modules[name] */
2664 modules = PyImport_GetModuleDict();
2665 if (modules == NULL)
2666 return NULL;
Christian Heimes072c0f12008-01-03 23:01:04 +00002667
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002668 nameobj = PyUnicode_FromString(name);
2669 if (nameobj == NULL)
2670 return NULL;
2671 result = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002672 if (result != NULL) {
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002673 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002674 Py_INCREF(result);
2675 return result;
2676 }
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002677 PyErr_Clear();
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002678#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002679 /* check the import lock
2680 * me might be -1 but I ignore the error here, the lock function
2681 * takes care of the problem */
2682 me = PyThread_get_thread_ident();
2683 if (import_lock_thread == -1 || import_lock_thread == me) {
2684 /* no thread or me is holding the lock */
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002685 result = PyImport_Import(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002686 }
2687 else {
2688 PyErr_Format(PyExc_ImportError,
Victor Stinnerc24c8102011-03-13 22:38:06 -04002689 "Failed to import %R because the import lock"
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002690 "is held by another thread.",
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002691 nameobj);
2692 result = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002693 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002694#else
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002695 result = PyImport_Import(nameobj);
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002696#endif
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002697 Py_DECREF(nameobj);
2698 return result;
Christian Heimes072c0f12008-01-03 23:01:04 +00002699}
2700
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002701/* Forward declarations for helper routines */
Victor Stinner974389d2011-03-15 09:33:57 +01002702static PyObject *get_parent(PyObject *globals,
2703 PyObject **p_name,
2704 int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002705static PyObject *load_next(PyObject *mod, PyObject *altmod,
Victor Stinner974389d2011-03-15 09:33:57 +01002706 PyObject *inputname, PyObject **p_outputname,
2707 Py_UNICODE *buf, Py_ssize_t *p_buflen,
2708 Py_ssize_t bufsize);
2709static int mark_miss(PyObject *name);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002710static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Victor Stinner974389d2011-03-15 09:33:57 +01002711 PyObject *buf, int recursive);
2712static PyObject * import_submodule(PyObject *mod, PyObject *name,
2713 PyObject *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002714
2715/* The Magnum Opus of dotted-name import :-) */
2716
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002717static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01002718import_module_level(PyObject *name, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002719 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002720{
Victor Stinner974389d2011-03-15 09:33:57 +01002721 Py_UNICODE buf[MAXPATHLEN+1];
2722 Py_ssize_t buflen;
2723 Py_ssize_t bufsize = MAXPATHLEN+1;
2724 PyObject *parent, *head, *next, *tail, *inputname, *outputname;
2725 PyObject *parent_name, *ensure_name;
2726 const Py_UNICODE *nameunicode;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002727
Victor Stinner974389d2011-03-15 09:33:57 +01002728 nameunicode = PyUnicode_AS_UNICODE(name);
2729
2730 if (Py_UNICODE_strchr(nameunicode, SEP) != NULL
2731#ifdef ALTSEP
2732 || Py_UNICODE_strchr(nameunicode, ALTSEP) != NULL
Christian Heimes454f37b2008-01-10 00:10:02 +00002733#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002734 ) {
2735 PyErr_SetString(PyExc_ImportError,
2736 "Import by filename is not supported.");
2737 return NULL;
2738 }
Christian Heimes454f37b2008-01-10 00:10:02 +00002739
Victor Stinner974389d2011-03-15 09:33:57 +01002740 parent = get_parent(globals, &parent_name, level);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002741 if (parent == NULL)
2742 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002743
Victor Stinner974389d2011-03-15 09:33:57 +01002744 buflen = PyUnicode_GET_SIZE(parent_name);
2745 if (buflen+1 > bufsize) {
2746 Py_DECREF(parent_name);
2747 PyErr_SetString(PyExc_ValueError,
2748 "Module name too long");
2749 return NULL;
2750 }
2751 Py_UNICODE_strcpy(buf, PyUnicode_AS_UNICODE(parent_name));
2752 Py_DECREF(parent_name);
2753
2754 head = load_next(parent, level < 0 ? Py_None : parent, name, &outputname,
2755 buf, &buflen, bufsize);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002756 if (head == NULL)
2757 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002758
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002759 tail = head;
2760 Py_INCREF(tail);
Victor Stinner974389d2011-03-15 09:33:57 +01002761
2762 if (outputname != NULL) {
2763 while (1) {
2764 inputname = outputname;
2765 next = load_next(tail, tail, inputname, &outputname,
2766 buf, &buflen, bufsize);
2767 Py_DECREF(tail);
2768 Py_DECREF(inputname);
2769 if (next == NULL) {
2770 Py_DECREF(head);
2771 return NULL;
2772 }
2773 tail = next;
2774
2775 if (outputname == NULL) {
2776 break;
2777 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002778 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002779 }
2780 if (tail == Py_None) {
2781 /* If tail is Py_None, both get_parent and load_next found
2782 an empty module name: someone called __import__("") or
2783 doctored faulty bytecode */
2784 Py_DECREF(tail);
2785 Py_DECREF(head);
Victor Stinner974389d2011-03-15 09:33:57 +01002786 PyErr_SetString(PyExc_ValueError, "Empty module name");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002787 return NULL;
2788 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002789
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002790 if (fromlist != NULL) {
2791 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2792 fromlist = NULL;
2793 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002794
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002795 if (fromlist == NULL) {
2796 Py_DECREF(tail);
2797 return head;
2798 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002799
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002800 Py_DECREF(head);
Victor Stinner974389d2011-03-15 09:33:57 +01002801
2802 ensure_name = PyUnicode_FromUnicode(buf, Py_UNICODE_strlen(buf));
2803 if (ensure_name == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002804 Py_DECREF(tail);
2805 return NULL;
2806 }
Victor Stinner974389d2011-03-15 09:33:57 +01002807 if (!ensure_fromlist(tail, fromlist, ensure_name, 0)) {
2808 Py_DECREF(tail);
2809 Py_DECREF(ensure_name);
2810 return NULL;
2811 }
2812 Py_DECREF(ensure_name);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002813
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002814 return tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002815}
2816
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002817PyObject *
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002818PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
2819 PyObject *locals, PyObject *fromlist,
2820 int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002821{
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002822 PyObject *mod;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002823 _PyImport_AcquireLock();
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002824 mod = import_module_level(name, globals, locals, fromlist, level);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002825 if (_PyImport_ReleaseLock() < 0) {
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002826 Py_XDECREF(mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002827 PyErr_SetString(PyExc_RuntimeError,
2828 "not holding the import lock");
2829 return NULL;
2830 }
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002831 return mod;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002832}
2833
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002834PyObject *
Benjamin Peterson04778a82011-05-25 09:29:00 -05002835PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002836 PyObject *fromlist, int level)
2837{
2838 PyObject *nameobj, *mod;
2839 nameobj = PyUnicode_FromString(name);
2840 if (nameobj == NULL)
2841 return NULL;
2842 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
2843 fromlist, level);
2844 Py_DECREF(nameobj);
2845 return mod;
2846}
2847
2848
Fred Drake87590902004-05-28 20:21:36 +00002849/* Return the package that an import is being performed in. If globals comes
2850 from the module foo.bar.bat (not itself a package), this returns the
2851 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002852 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002853
Victor Stinner974389d2011-03-15 09:33:57 +01002854 The name of the returned package is returned in *p_name.
Fred Drake87590902004-05-28 20:21:36 +00002855
2856 If globals doesn't come from a package or a module in a package, or a
2857 corresponding entry is not found in sys.modules, Py_None is returned.
2858*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002859static PyObject *
Victor Stinner9599de52011-03-13 22:38:38 -04002860get_parent(PyObject *globals, PyObject **p_name, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002861{
Victor Stinner974389d2011-03-15 09:33:57 +01002862 Py_UNICODE name[MAXPATHLEN+1];
2863 const Py_ssize_t bufsize = MAXPATHLEN+1;
2864 PyObject *nameobj;
2865
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002866 static PyObject *namestr = NULL;
2867 static PyObject *pathstr = NULL;
2868 static PyObject *pkgstr = NULL;
2869 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2870 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002871
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002872 if (globals == NULL || !PyDict_Check(globals) || !level)
Victor Stinner974389d2011-03-15 09:33:57 +01002873 goto return_none;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002874
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002875 if (namestr == NULL) {
2876 namestr = PyUnicode_InternFromString("__name__");
2877 if (namestr == NULL)
2878 return NULL;
2879 }
2880 if (pathstr == NULL) {
2881 pathstr = PyUnicode_InternFromString("__path__");
2882 if (pathstr == NULL)
2883 return NULL;
2884 }
2885 if (pkgstr == NULL) {
2886 pkgstr = PyUnicode_InternFromString("__package__");
2887 if (pkgstr == NULL)
2888 return NULL;
2889 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002890
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002891 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002892
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002893 if ((pkgname != NULL) && (pkgname != Py_None)) {
2894 /* __package__ is set, so use it */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002895 if (!PyUnicode_Check(pkgname)) {
2896 PyErr_SetString(PyExc_ValueError,
2897 "__package__ set to non-string");
2898 return NULL;
2899 }
Victor Stinner974389d2011-03-15 09:33:57 +01002900 if (PyUnicode_GET_SIZE(pkgname) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002901 if (level > 0) {
2902 PyErr_SetString(PyExc_ValueError,
2903 "Attempted relative import in non-package");
2904 return NULL;
2905 }
Victor Stinner974389d2011-03-15 09:33:57 +01002906 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002907 }
Victor Stinner974389d2011-03-15 09:33:57 +01002908 if (PyUnicode_GET_SIZE(pkgname)+1 > bufsize) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002909 PyErr_SetString(PyExc_ValueError,
2910 "Package name too long");
2911 return NULL;
2912 }
Victor Stinner974389d2011-03-15 09:33:57 +01002913 Py_UNICODE_strcpy(name, PyUnicode_AS_UNICODE(pkgname));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002914 } else {
2915 /* __package__ not set, so figure it out and set it */
2916 modname = PyDict_GetItem(globals, namestr);
2917 if (modname == NULL || !PyUnicode_Check(modname))
Victor Stinner974389d2011-03-15 09:33:57 +01002918 goto return_none;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00002919
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002920 modpath = PyDict_GetItem(globals, pathstr);
2921 if (modpath != NULL) {
2922 /* __path__ is set, so modname is already the package name */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002923 int error;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002924
Victor Stinner974389d2011-03-15 09:33:57 +01002925 if (PyUnicode_GET_SIZE(modname)+1 > bufsize) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002926 PyErr_SetString(PyExc_ValueError,
2927 "Module name too long");
2928 return NULL;
2929 }
Victor Stinner974389d2011-03-15 09:33:57 +01002930 Py_UNICODE_strcpy(name, PyUnicode_AS_UNICODE(modname));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002931 error = PyDict_SetItem(globals, pkgstr, modname);
2932 if (error) {
2933 PyErr_SetString(PyExc_ValueError,
2934 "Could not set __package__");
2935 return NULL;
2936 }
2937 } else {
2938 /* Normal module, so work out the package name if any */
Victor Stinner974389d2011-03-15 09:33:57 +01002939 Py_UNICODE *start = PyUnicode_AS_UNICODE(modname);
2940 Py_UNICODE *lastdot = Py_UNICODE_strrchr(start, '.');
2941 Py_ssize_t len;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002942 int error;
2943 if (lastdot == NULL && level > 0) {
2944 PyErr_SetString(PyExc_ValueError,
2945 "Attempted relative import in non-package");
2946 return NULL;
2947 }
2948 if (lastdot == NULL) {
2949 error = PyDict_SetItem(globals, pkgstr, Py_None);
2950 if (error) {
2951 PyErr_SetString(PyExc_ValueError,
2952 "Could not set __package__");
2953 return NULL;
2954 }
Victor Stinner974389d2011-03-15 09:33:57 +01002955 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002956 }
2957 len = lastdot - start;
Victor Stinner974389d2011-03-15 09:33:57 +01002958 if (len+1 > bufsize) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002959 PyErr_SetString(PyExc_ValueError,
2960 "Module name too long");
2961 return NULL;
2962 }
Victor Stinner974389d2011-03-15 09:33:57 +01002963 Py_UNICODE_strncpy(name, start, len);
2964 name[len] = '\0';
2965 pkgname = PyUnicode_FromUnicode(name, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002966 if (pkgname == NULL) {
2967 return NULL;
2968 }
2969 error = PyDict_SetItem(globals, pkgstr, pkgname);
2970 Py_DECREF(pkgname);
2971 if (error) {
2972 PyErr_SetString(PyExc_ValueError,
2973 "Could not set __package__");
2974 return NULL;
2975 }
2976 }
2977 }
2978 while (--level > 0) {
Victor Stinner974389d2011-03-15 09:33:57 +01002979 Py_UNICODE *dot = Py_UNICODE_strrchr(name, '.');
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002980 if (dot == NULL) {
2981 PyErr_SetString(PyExc_ValueError,
2982 "Attempted relative import beyond "
2983 "toplevel package");
2984 return NULL;
2985 }
2986 *dot = '\0';
2987 }
Victor Stinner974389d2011-03-15 09:33:57 +01002988
2989 nameobj = PyUnicode_FromUnicode(name, Py_UNICODE_strlen(name));
2990 if (nameobj == NULL)
2991 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002992
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002993 modules = PyImport_GetModuleDict();
Victor Stinner974389d2011-03-15 09:33:57 +01002994 parent = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002995 if (parent == NULL) {
Victor Stinner974389d2011-03-15 09:33:57 +01002996 int err;
2997
2998 if (orig_level >= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002999 PyErr_Format(PyExc_SystemError,
Victor Stinner974389d2011-03-15 09:33:57 +01003000 "Parent module %R not loaded, "
3001 "cannot perform relative import", nameobj);
3002 Py_DECREF(nameobj);
3003 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003004 }
Victor Stinner974389d2011-03-15 09:33:57 +01003005
3006 err = PyErr_WarnFormat(
3007 PyExc_RuntimeWarning, 1,
3008 "Parent module %R not found while handling absolute import",
3009 nameobj);
3010 Py_DECREF(nameobj);
3011 if (err)
3012 return NULL;
3013
3014 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003015 }
Victor Stinner974389d2011-03-15 09:33:57 +01003016 *p_name = nameobj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003017 return parent;
3018 /* We expect, but can't guarantee, if parent != None, that:
Victor Stinner974389d2011-03-15 09:33:57 +01003019 - parent.__name__ == name
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003020 - parent.__dict__ is globals
3021 If this is violated... Who cares? */
Victor Stinner974389d2011-03-15 09:33:57 +01003022
3023return_none:
3024 nameobj = PyUnicode_FromUnicode(NULL, 0);
3025 if (nameobj == NULL)
3026 return NULL;
3027 *p_name = nameobj;
3028 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003029}
3030
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003031/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003032static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01003033load_next(PyObject *mod, PyObject *altmod,
3034 PyObject *inputname, PyObject **p_outputname,
3035 Py_UNICODE *buf, Py_ssize_t *p_buflen, Py_ssize_t bufsize)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003036{
Victor Stinner974389d2011-03-15 09:33:57 +01003037 const Py_UNICODE *dot;
3038 Py_ssize_t len;
3039 Py_UNICODE *p;
3040 PyObject *fullname, *name, *result, *mark_name;
3041 const Py_UNICODE *nameuni;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003042
Victor Stinner974389d2011-03-15 09:33:57 +01003043 *p_outputname = NULL;
3044
3045 if (PyUnicode_GET_SIZE(inputname) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003046 /* completely empty module name should only happen in
3047 'from . import' (or '__import__("")')*/
3048 Py_INCREF(mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003049 return mod;
3050 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00003051
Victor Stinner974389d2011-03-15 09:33:57 +01003052 nameuni = PyUnicode_AS_UNICODE(inputname);
3053 if (nameuni == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003054 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003055
Victor Stinner974389d2011-03-15 09:33:57 +01003056 dot = Py_UNICODE_strchr(nameuni, '.');
3057 if (dot != NULL) {
3058 len = dot - nameuni;
3059 if (len == 0) {
3060 PyErr_SetString(PyExc_ValueError,
3061 "Empty module name");
3062 return NULL;
3063 }
3064 }
3065 else
3066 len = PyUnicode_GET_SIZE(inputname);
3067
3068 if (*p_buflen+len+1 >= bufsize) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003069 PyErr_SetString(PyExc_ValueError,
3070 "Module name too long");
3071 return NULL;
3072 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003073
Victor Stinner974389d2011-03-15 09:33:57 +01003074 p = buf + *p_buflen;
3075 if (p != buf) {
3076 *p++ = '.';
3077 *p_buflen += 1;
3078 }
3079 Py_UNICODE_strncpy(p, nameuni, len);
3080 p[len] = '\0';
3081 *p_buflen += len;
3082
3083 fullname = PyUnicode_FromUnicode(buf, *p_buflen);
3084 if (fullname == NULL)
3085 return NULL;
3086 name = PyUnicode_FromUnicode(p, len);
3087 if (name == NULL) {
3088 Py_DECREF(fullname);
3089 return NULL;
3090 }
3091 result = import_submodule(mod, name, fullname);
3092 Py_DECREF(fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003093 if (result == Py_None && altmod != mod) {
3094 Py_DECREF(result);
3095 /* Here, altmod must be None and mod must not be None */
Victor Stinner974389d2011-03-15 09:33:57 +01003096 result = import_submodule(altmod, name, name);
3097 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003098 if (result != NULL && result != Py_None) {
Victor Stinner974389d2011-03-15 09:33:57 +01003099 mark_name = PyUnicode_FromUnicode(buf, *p_buflen);
3100 if (mark_name == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003101 Py_DECREF(result);
3102 return NULL;
3103 }
Victor Stinner974389d2011-03-15 09:33:57 +01003104 if (mark_miss(mark_name) != 0) {
3105 Py_DECREF(result);
3106 Py_DECREF(mark_name);
3107 return NULL;
3108 }
3109 Py_DECREF(mark_name);
3110 Py_UNICODE_strncpy(buf, nameuni, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003111 buf[len] = '\0';
3112 *p_buflen = len;
3113 }
3114 }
Victor Stinner974389d2011-03-15 09:33:57 +01003115 else
3116 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003117 if (result == NULL)
3118 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003120 if (result == Py_None) {
3121 Py_DECREF(result);
3122 PyErr_Format(PyExc_ImportError,
Victor Stinner974389d2011-03-15 09:33:57 +01003123 "No module named %R", inputname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003124 return NULL;
3125 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003126
Victor Stinner974389d2011-03-15 09:33:57 +01003127 if (dot != NULL) {
3128 *p_outputname = PyUnicode_FromUnicode(dot+1, Py_UNICODE_strlen(dot+1));
3129 if (*p_outputname == NULL) {
3130 Py_DECREF(result);
3131 return NULL;
3132 }
3133 }
3134
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003135 return result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003136}
3137
3138static int
Victor Stinner974389d2011-03-15 09:33:57 +01003139mark_miss(PyObject *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00003140{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003141 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner974389d2011-03-15 09:33:57 +01003142 return PyDict_SetItem(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00003143}
3144
3145static int
Victor Stinner974389d2011-03-15 09:33:57 +01003146ensure_fromlist(PyObject *mod, PyObject *fromlist, PyObject *name,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003147 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003148{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003149 int i;
Victor Stinner974389d2011-03-15 09:33:57 +01003150 PyObject *fullname;
3151 Py_ssize_t fromlist_len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003152
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003153 if (!PyObject_HasAttrString(mod, "__path__"))
3154 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003155
Victor Stinner974389d2011-03-15 09:33:57 +01003156 fromlist_len = PySequence_Size(fromlist);
3157
3158 for (i = 0; i < fromlist_len; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003159 PyObject *item = PySequence_GetItem(fromlist, i);
3160 int hasit;
Victor Stinner974389d2011-03-15 09:33:57 +01003161 if (item == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003162 return 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003163 if (!PyUnicode_Check(item)) {
3164 PyErr_SetString(PyExc_TypeError,
3165 "Item in ``from list'' not a string");
3166 Py_DECREF(item);
3167 return 0;
3168 }
3169 if (PyUnicode_AS_UNICODE(item)[0] == '*') {
3170 PyObject *all;
3171 Py_DECREF(item);
3172 /* See if the package defines __all__ */
3173 if (recursive)
3174 continue; /* Avoid endless recursion */
3175 all = PyObject_GetAttrString(mod, "__all__");
3176 if (all == NULL)
3177 PyErr_Clear();
3178 else {
Victor Stinner974389d2011-03-15 09:33:57 +01003179 int ret = ensure_fromlist(mod, all, name, 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003180 Py_DECREF(all);
3181 if (!ret)
3182 return 0;
3183 }
3184 continue;
3185 }
3186 hasit = PyObject_HasAttr(mod, item);
3187 if (!hasit) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003188 PyObject *submod;
Victor Stinner974389d2011-03-15 09:33:57 +01003189 fullname = PyUnicode_FromFormat("%U.%U", name, item);
3190 if (fullname != NULL) {
3191 submod = import_submodule(mod, item, fullname);
3192 Py_DECREF(fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003193 }
Victor Stinner974389d2011-03-15 09:33:57 +01003194 else
3195 submod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003196 Py_XDECREF(submod);
3197 if (submod == NULL) {
3198 Py_DECREF(item);
3199 return 0;
3200 }
3201 }
3202 Py_DECREF(item);
3203 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003204
Victor Stinner974389d2011-03-15 09:33:57 +01003205 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003206}
3207
Neil Schemenauer00b09662003-06-16 21:03:07 +00003208static int
Victor Stinner974389d2011-03-15 09:33:57 +01003209add_submodule(PyObject *mod, PyObject *submod, PyObject *fullname,
3210 PyObject *subname, PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00003211{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003212 if (mod == Py_None)
3213 return 1;
3214 /* Irrespective of the success of this load, make a
3215 reference to it in the parent package module. A copy gets
3216 saved in the modules dictionary under the full name, so get a
3217 reference from there, if need be. (The exception is when the
3218 load failed with a SyntaxError -- then there's no trace in
3219 sys.modules. In that case, of course, do nothing extra.) */
3220 if (submod == NULL) {
Victor Stinner974389d2011-03-15 09:33:57 +01003221 submod = PyDict_GetItem(modules, fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003222 if (submod == NULL)
3223 return 1;
3224 }
3225 if (PyModule_Check(mod)) {
3226 /* We can't use setattr here since it can give a
3227 * spurious warning if the submodule name shadows a
3228 * builtin name */
3229 PyObject *dict = PyModule_GetDict(mod);
3230 if (!dict)
3231 return 0;
Victor Stinner974389d2011-03-15 09:33:57 +01003232 if (PyDict_SetItem(dict, subname, submod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003233 return 0;
3234 }
3235 else {
Victor Stinner974389d2011-03-15 09:33:57 +01003236 if (PyObject_SetAttr(mod, subname, submod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003237 return 0;
3238 }
3239 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00003240}
3241
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003242static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01003243import_submodule(PyObject *mod, PyObject *subname, PyObject *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003244{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003245 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner533d7832011-03-14 13:22:54 -04003246 PyObject *m = NULL, *bufobj, *path_list, *loader;
Victor Stinner9599de52011-03-13 22:38:38 -04003247 struct filedescr *fdp;
3248 FILE *fp;
Guido van Rossum74e6a111994-08-29 12:54:38 +00003249
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003250 /* Require:
3251 if mod == None: subname == fullname
3252 else: mod.__name__ + "." + subname == fullname
3253 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003254
Victor Stinner974389d2011-03-15 09:33:57 +01003255 if ((m = PyDict_GetItem(modules, fullname)) != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003256 Py_INCREF(m);
Victor Stinner9599de52011-03-13 22:38:38 -04003257 return m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003258 }
Victor Stinner9599de52011-03-13 22:38:38 -04003259
3260 if (mod == Py_None)
Victor Stinner533d7832011-03-14 13:22:54 -04003261 path_list = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003262 else {
Victor Stinner533d7832011-03-14 13:22:54 -04003263 path_list = PyObject_GetAttrString(mod, "__path__");
3264 if (path_list == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003265 PyErr_Clear();
3266 Py_INCREF(Py_None);
3267 return Py_None;
3268 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003269 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003270
Victor Stinner533d7832011-03-14 13:22:54 -04003271 fdp = find_module(fullname, subname, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003272 &bufobj, &fp, &loader);
Victor Stinner533d7832011-03-14 13:22:54 -04003273 Py_XDECREF(path_list);
Victor Stinner9599de52011-03-13 22:38:38 -04003274 if (fdp == NULL) {
3275 if (!PyErr_ExceptionMatches(PyExc_ImportError))
3276 return NULL;
3277 PyErr_Clear();
3278 Py_INCREF(Py_None);
3279 return Py_None;
3280 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003281 m = load_module(fullname, fp, bufobj, fdp->type, loader);
3282 Py_XDECREF(bufobj);
Victor Stinner9599de52011-03-13 22:38:38 -04003283 Py_XDECREF(loader);
3284 if (fp)
3285 fclose(fp);
3286 if (m == NULL)
3287 return NULL;
3288 if (!add_submodule(mod, m, fullname, subname, modules)) {
3289 Py_XDECREF(m);
3290 return NULL;
3291 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003292 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00003293}
3294
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003295
3296/* Re-import a module of any kind and return its module object, WITH
3297 INCREMENTED REFERENCE COUNT */
3298
Guido van Rossum79f25d91997-04-29 20:08:16 +00003299PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003300PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003301{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003302 PyInterpreterState *interp = PyThreadState_Get()->interp;
3303 PyObject *modules_reloading = interp->modules_reloading;
3304 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner533d7832011-03-14 13:22:54 -04003305 PyObject *path_list = NULL, *loader = NULL, *existing_m = NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003306 PyObject *nameobj, *bufobj, *subnameobj;
3307 Py_UNICODE *name, *subname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003308 struct filedescr *fdp;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003309 FILE *fp = NULL;
3310 PyObject *newm = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00003311
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003312 if (modules_reloading == NULL) {
3313 Py_FatalError("PyImport_ReloadModule: "
3314 "no modules_reloading dictionary!");
3315 return NULL;
3316 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003317
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003318 if (m == NULL || !PyModule_Check(m)) {
3319 PyErr_SetString(PyExc_TypeError,
3320 "reload() argument must be module");
3321 return NULL;
3322 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003323 nameobj = PyModule_GetNameObject(m);
3324 if (nameobj == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003325 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003326 if (m != PyDict_GetItem(modules, nameobj)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003327 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003328 "reload(): module %R not in sys.modules",
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003329 nameobj);
3330 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003331 return NULL;
3332 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003333 existing_m = PyDict_GetItem(modules_reloading, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003334 if (existing_m != NULL) {
3335 /* Due to a recursive reload, this module is already
3336 being reloaded. */
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003337 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003338 Py_INCREF(existing_m);
3339 return existing_m;
3340 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003341 if (PyDict_SetItem(modules_reloading, nameobj, m) < 0) {
3342 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003343 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003344 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00003345
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003346 name = PyUnicode_AS_UNICODE(nameobj);
3347 subname = Py_UNICODE_strrchr(name, '.');
3348 if (subname == NULL) {
3349 Py_INCREF(nameobj);
3350 subnameobj = nameobj;
3351 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003352 else {
3353 PyObject *parentname, *parent;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003354 Py_ssize_t len;
3355 len = subname - name;
3356 parentname = PyUnicode_FromUnicode(name, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003357 if (parentname == NULL) {
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003358 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003359 }
3360 parent = PyDict_GetItem(modules, parentname);
3361 if (parent == NULL) {
3362 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003363 "reload(): parent %R not in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003364 parentname);
3365 Py_DECREF(parentname);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003366 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003367 }
3368 Py_DECREF(parentname);
Victor Stinner533d7832011-03-14 13:22:54 -04003369 path_list = PyObject_GetAttrString(parent, "__path__");
3370 if (path_list == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003371 PyErr_Clear();
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003372 subname++;
3373 len = PyUnicode_GET_SIZE(nameobj) - (len + 1);
3374 subnameobj = PyUnicode_FromUnicode(subname, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003375 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003376 if (subnameobj == NULL)
3377 goto error;
Victor Stinner533d7832011-03-14 13:22:54 -04003378 fdp = find_module(nameobj, subnameobj, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003379 &bufobj, &fp, &loader);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003380 Py_DECREF(subnameobj);
Victor Stinner533d7832011-03-14 13:22:54 -04003381 Py_XDECREF(path_list);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003382
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003383 if (fdp == NULL) {
3384 Py_XDECREF(loader);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003385 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003386 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003387
Victor Stinner2fd76e42011-03-14 15:19:39 -04003388 newm = load_module(nameobj, fp, bufobj, fdp->type, loader);
3389 Py_XDECREF(bufobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003390 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003391
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003392 if (fp)
3393 fclose(fp);
3394 if (newm == NULL) {
3395 /* load_module probably removed name from modules because of
3396 * the error. Put back the original module object. We're
3397 * going to return NULL in this case regardless of whether
3398 * replacing name succeeds, so the return value is ignored.
3399 */
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003400 PyDict_SetItem(modules, nameobj, m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003401 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003402
3403error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003404 imp_modules_reloading_clear();
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003405 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003406 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003407}
3408
3409
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003410/* Higher-level import emulator which emulates the "import" statement
3411 more accurately -- it invokes the __import__() function from the
3412 builtins of the current globals. This means that the import is
3413 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00003414 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00003415 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00003416 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00003417 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003418
3419PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003420PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003421{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003422 static PyObject *silly_list = NULL;
3423 static PyObject *builtins_str = NULL;
3424 static PyObject *import_str = NULL;
3425 PyObject *globals = NULL;
3426 PyObject *import = NULL;
3427 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003428 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003429 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003430
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003431 /* Initialize constant string objects */
3432 if (silly_list == NULL) {
3433 import_str = PyUnicode_InternFromString("__import__");
3434 if (import_str == NULL)
3435 return NULL;
3436 builtins_str = PyUnicode_InternFromString("__builtins__");
3437 if (builtins_str == NULL)
3438 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003439 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003440 if (silly_list == NULL)
3441 return NULL;
3442 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003443
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003444 /* Get the builtins from current globals */
3445 globals = PyEval_GetGlobals();
3446 if (globals != NULL) {
3447 Py_INCREF(globals);
3448 builtins = PyObject_GetItem(globals, builtins_str);
3449 if (builtins == NULL)
3450 goto err;
3451 }
3452 else {
3453 /* No globals -- use standard builtins, and fake globals */
3454 builtins = PyImport_ImportModuleLevel("builtins",
3455 NULL, NULL, NULL, 0);
3456 if (builtins == NULL)
3457 return NULL;
3458 globals = Py_BuildValue("{OO}", builtins_str, builtins);
3459 if (globals == NULL)
3460 goto err;
3461 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003462
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003463 /* Get the __import__ function from the builtins */
3464 if (PyDict_Check(builtins)) {
3465 import = PyObject_GetItem(builtins, import_str);
3466 if (import == NULL)
3467 PyErr_SetObject(PyExc_KeyError, import_str);
3468 }
3469 else
3470 import = PyObject_GetAttr(builtins, import_str);
3471 if (import == NULL)
3472 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003473
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003474 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00003475 Always use absolute import here.
3476 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003477 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
3478 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00003479 if (r == NULL)
3480 goto err;
3481 Py_DECREF(r);
3482
3483 modules = PyImport_GetModuleDict();
3484 r = PyDict_GetItem(modules, module_name);
3485 if (r != NULL)
3486 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003487
3488 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003489 Py_XDECREF(globals);
3490 Py_XDECREF(builtins);
3491 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00003492
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003493 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003494}
3495
3496
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003497/* Module 'imp' provides Python access to the primitives used for
3498 importing modules.
3499*/
3500
Guido van Rossum79f25d91997-04-29 20:08:16 +00003501static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00003502imp_make_magic(long magic)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003503{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003504 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003505
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003506 buf[0] = (char) ((magic >> 0) & 0xff);
3507 buf[1] = (char) ((magic >> 8) & 0xff);
3508 buf[2] = (char) ((magic >> 16) & 0xff);
3509 buf[3] = (char) ((magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003510
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003511 return PyBytes_FromStringAndSize(buf, 4);
Victor Stinner3e2b7172010-11-09 09:32:19 +00003512}
Barry Warsaw28a691b2010-04-17 00:19:56 +00003513
3514static PyObject *
3515imp_get_magic(PyObject *self, PyObject *noargs)
3516{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003517 return imp_make_magic(pyc_magic);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003518}
3519
3520static PyObject *
3521imp_get_tag(PyObject *self, PyObject *noargs)
3522{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003523 return PyUnicode_FromString(pyc_tag);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003524}
3525
Guido van Rossum79f25d91997-04-29 20:08:16 +00003526static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003527imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003528{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003529 PyObject *list;
3530 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003531
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003532 list = PyList_New(0);
3533 if (list == NULL)
3534 return NULL;
3535 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
3536 PyObject *item = Py_BuildValue("ssi",
3537 fdp->suffix, fdp->mode, fdp->type);
3538 if (item == NULL) {
3539 Py_DECREF(list);
3540 return NULL;
3541 }
3542 if (PyList_Append(list, item) < 0) {
3543 Py_DECREF(list);
3544 Py_DECREF(item);
3545 return NULL;
3546 }
3547 Py_DECREF(item);
3548 }
3549 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003550}
3551
Guido van Rossum79f25d91997-04-29 20:08:16 +00003552static PyObject *
Victor Stinner533d7832011-03-14 13:22:54 -04003553call_find_module(PyObject *name, PyObject *path_list)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003554{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003555 extern int fclose(FILE *);
3556 PyObject *fob, *ret;
3557 PyObject *pathobj;
3558 struct filedescr *fdp;
Victor Stinner7d8b77c2011-03-12 08:45:02 -05003559 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003560 int fd = -1;
3561 char *found_encoding = NULL;
3562 char *encoding = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003563
Victor Stinner533d7832011-03-14 13:22:54 -04003564 if (path_list == Py_None)
3565 path_list = NULL;
3566 fdp = find_module(NULL, name, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003567 &pathobj, &fp, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003568 if (fdp == NULL)
3569 return NULL;
3570 if (fp != NULL) {
3571 fd = fileno(fp);
3572 if (fd != -1)
3573 fd = dup(fd);
3574 fclose(fp);
Victor Stinnerd417d012011-06-20 15:16:55 +02003575 if (fd == -1) {
3576 PyErr_SetFromErrno(PyExc_OSError);
3577 return NULL;
3578 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003579 fp = NULL;
3580 }
3581 if (fd != -1) {
3582 if (strchr(fdp->mode, 'b') == NULL) {
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003583 /* PyTokenizer_FindEncodingFilename() returns PyMem_MALLOC'ed
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003584 memory. */
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003585 found_encoding = PyTokenizer_FindEncodingFilename(fd, pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003586 lseek(fd, 0, 0); /* Reset position */
Victor Stinner2fd76e42011-03-14 15:19:39 -04003587 if (found_encoding == NULL && PyErr_Occurred()) {
3588 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003589 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04003590 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003591 encoding = (found_encoding != NULL) ? found_encoding :
3592 (char*)PyUnicode_GetDefaultEncoding();
3593 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003594 fob = PyFile_FromFd(fd, NULL, fdp->mode, -1,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003595 (char*)encoding, NULL, NULL, 1);
3596 if (fob == NULL) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04003597 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003598 close(fd);
3599 PyMem_FREE(found_encoding);
3600 return NULL;
3601 }
3602 }
3603 else {
3604 fob = Py_None;
3605 Py_INCREF(fob);
3606 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003607 if (pathobj == NULL) {
3608 Py_INCREF(Py_None);
3609 pathobj = Py_None;
3610 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003611 ret = Py_BuildValue("NN(ssi)",
3612 fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
3613 PyMem_FREE(found_encoding);
Brett Cannon3bb42d92007-10-20 03:43:15 +00003614
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003615 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003616}
3617
Guido van Rossum79f25d91997-04-29 20:08:16 +00003618static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003619imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003620{
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003621 PyObject *name, *path_list = NULL;
3622 if (!PyArg_ParseTuple(args, "U|O:find_module",
3623 &name, &path_list))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003624 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003625 return call_find_module(name, path_list);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003626}
3627
3628static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003629imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003630{
Victor Stinner95872862011-03-07 18:20:56 +01003631 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003632 int ret;
3633 PyObject *m;
Victor Stinner95872862011-03-07 18:20:56 +01003634 if (!PyArg_ParseTuple(args, "U:init_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003635 return NULL;
3636 ret = init_builtin(name);
3637 if (ret < 0)
3638 return NULL;
3639 if (ret == 0) {
3640 Py_INCREF(Py_None);
3641 return Py_None;
3642 }
Victor Stinner95872862011-03-07 18:20:56 +01003643 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003644 Py_XINCREF(m);
3645 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003646}
3647
Guido van Rossum79f25d91997-04-29 20:08:16 +00003648static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003649imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003650{
Victor Stinner53dc7352011-03-20 01:50:21 +01003651 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003652 int ret;
3653 PyObject *m;
Victor Stinner53dc7352011-03-20 01:50:21 +01003654 if (!PyArg_ParseTuple(args, "U:init_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003655 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01003656 ret = PyImport_ImportFrozenModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003657 if (ret < 0)
3658 return NULL;
3659 if (ret == 0) {
3660 Py_INCREF(Py_None);
3661 return Py_None;
3662 }
Victor Stinner53dc7352011-03-20 01:50:21 +01003663 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003664 Py_XINCREF(m);
3665 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003666}
3667
Guido van Rossum79f25d91997-04-29 20:08:16 +00003668static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003669imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003670{
Victor Stinner53dc7352011-03-20 01:50:21 +01003671 PyObject *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00003672
Victor Stinner53dc7352011-03-20 01:50:21 +01003673 if (!PyArg_ParseTuple(args, "U:get_frozen_object", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003674 return NULL;
3675 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003676}
3677
Guido van Rossum79f25d91997-04-29 20:08:16 +00003678static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00003679imp_is_frozen_package(PyObject *self, PyObject *args)
3680{
Victor Stinner53dc7352011-03-20 01:50:21 +01003681 PyObject *name;
Brett Cannon8d110132009-03-15 02:20:16 +00003682
Victor Stinner53dc7352011-03-20 01:50:21 +01003683 if (!PyArg_ParseTuple(args, "U:is_frozen_package", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003684 return NULL;
3685 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00003686}
3687
3688static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003689imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003690{
Victor Stinner95872862011-03-07 18:20:56 +01003691 PyObject *name;
3692 if (!PyArg_ParseTuple(args, "U:is_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003693 return NULL;
3694 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003695}
3696
Guido van Rossum79f25d91997-04-29 20:08:16 +00003697static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003698imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003699{
Victor Stinner53dc7352011-03-20 01:50:21 +01003700 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003701 struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01003702 if (!PyArg_ParseTuple(args, "U:is_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003703 return NULL;
3704 p = find_frozen(name);
3705 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003706}
3707
3708static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01003709get_file(PyObject *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003710{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003711 FILE *fp;
3712 if (mode[0] == 'U')
3713 mode = "r" PY_STDIOTEXTMODE;
3714 if (fob == NULL) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003715 fp = _Py_fopen(pathname, mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003716 }
3717 else {
3718 int fd = PyObject_AsFileDescriptor(fob);
3719 if (fd == -1)
3720 return NULL;
3721 if (!_PyVerify_fd(fd))
3722 goto error;
3723 /* the FILE struct gets a new fd, so that it can be closed
3724 * independently of the file descriptor given
3725 */
3726 fd = dup(fd);
3727 if (fd == -1)
3728 goto error;
3729 fp = fdopen(fd, mode);
3730 }
3731 if (fp)
3732 return fp;
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003733error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003734 PyErr_SetFromErrno(PyExc_IOError);
3735 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003736}
3737
Guido van Rossum79f25d91997-04-29 20:08:16 +00003738static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003739imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003740{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003741 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003742 PyObject *fob = NULL;
3743 PyObject *m;
3744 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003745 if (!PyArg_ParseTuple(args, "UO&|O:load_compiled",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003746 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003747 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003748 &fob))
3749 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003750 fp = get_file(pathname, fob, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003751 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003752 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003753 return NULL;
3754 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003755 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003756 fclose(fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003757 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003758 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003759}
3760
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003761#ifdef HAVE_DYNAMIC_LOADING
3762
Guido van Rossum79f25d91997-04-29 20:08:16 +00003763static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003764imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003765{
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003766 PyObject *name, *pathname, *fob = NULL, *mod;
3767 FILE *fp;
3768
3769 if (!PyArg_ParseTuple(args, "UO&|O:load_dynamic",
3770 &name, PyUnicode_FSDecoder, &pathname, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003771 return NULL;
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003772 if (fob != NULL) {
3773 fp = get_file(NULL, fob, "r");
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003774 if (fp == NULL) {
3775 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003776 return NULL;
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003777 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003778 }
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003779 else
3780 fp = NULL;
3781 mod = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003782 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003783 if (fp)
3784 fclose(fp);
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003785 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003786}
3787
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003788#endif /* HAVE_DYNAMIC_LOADING */
3789
Guido van Rossum79f25d91997-04-29 20:08:16 +00003790static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003791imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003792{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003793 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003794 PyObject *fob = NULL;
3795 PyObject *m;
3796 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003797 if (!PyArg_ParseTuple(args, "UO&|O:load_source",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003798 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003799 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003800 &fob))
3801 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003802 fp = get_file(pathname, fob, "r");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003803 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003804 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003805 return NULL;
3806 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003807 m = load_source_module(name, pathname, fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003808 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003809 fclose(fp);
3810 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003811}
3812
Guido van Rossum79f25d91997-04-29 20:08:16 +00003813static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003814imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003815{
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003816 PyObject *name, *fob, *pathname, *pathname_obj, *ret;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003817 char *suffix; /* Unused */
3818 char *mode;
3819 int type;
3820 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003821
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003822 if (!PyArg_ParseTuple(args, "UOO(ssi):load_module",
3823 &name, &fob, &pathname_obj, &suffix, &mode, &type))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003824 return NULL;
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003825 if (pathname_obj != Py_None) {
3826 if (!PyUnicode_FSDecoder(pathname_obj, &pathname))
3827 return NULL;
3828 }
3829 else
3830 pathname = NULL;
3831
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003832 if (*mode) {
3833 /* Mode must start with 'r' or 'U' and must not contain '+'.
3834 Implicit in this test is the assumption that the mode
3835 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003836
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003837 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3838 PyErr_Format(PyExc_ValueError,
3839 "invalid file open mode %.200s", mode);
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003840 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003841 return NULL;
3842 }
3843 }
3844 if (fob == Py_None)
3845 fp = NULL;
3846 else {
3847 fp = get_file(NULL, fob, mode);
3848 if (fp == NULL) {
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003849 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003850 return NULL;
3851 }
3852 }
Victor Stinner41c5fec2011-03-13 21:46:30 -04003853 ret = load_module(name, fp, pathname, type, NULL);
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003854 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003855 if (fp)
3856 fclose(fp);
3857 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003858}
3859
3860static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003861imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003862{
Victor Stinnerc9abda02011-03-14 13:33:46 -04003863 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003864 PyObject * ret;
Victor Stinnerc9abda02011-03-14 13:33:46 -04003865 if (!PyArg_ParseTuple(args, "UO&:load_package",
3866 &name, PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003867 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04003868 ret = load_package(name, pathname);
Victor Stinnerebc00522010-12-03 17:06:43 +00003869 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003870 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003871}
3872
3873static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003874imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003875{
Victor Stinnerfe19d212011-03-14 14:53:28 -04003876 PyObject *name;
3877 if (!PyArg_ParseTuple(args, "U:new_module", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003878 return NULL;
Victor Stinnerfe19d212011-03-14 14:53:28 -04003879 return PyModule_NewObject(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003880}
3881
Christian Heimes13a7a212008-01-07 17:13:09 +00003882static PyObject *
3883imp_reload(PyObject *self, PyObject *v)
3884{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003885 return PyImport_ReloadModule(v);
Christian Heimes13a7a212008-01-07 17:13:09 +00003886}
3887
3888PyDoc_STRVAR(doc_reload,
3889"reload(module) -> module\n\
3890\n\
3891Reload the module. The module must have been successfully imported before.");
3892
Barry Warsaw28a691b2010-04-17 00:19:56 +00003893static PyObject *
3894imp_cache_from_source(PyObject *self, PyObject *args, PyObject *kws)
3895{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003896 static char *kwlist[] = {"path", "debug_override", NULL};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003897
Victor Stinner2f42ae52011-03-20 00:41:24 +01003898 PyObject *pathname, *cpathname;
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003899 PyObject *debug_override = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003900 int debug = !Py_OptimizeFlag;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003901
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003902 if (!PyArg_ParseTupleAndKeywords(
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003903 args, kws, "O&|O", kwlist,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003904 PyUnicode_FSDecoder, &pathname, &debug_override))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003905 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003906
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003907 if (debug_override != NULL &&
3908 (debug = PyObject_IsTrue(debug_override)) < 0) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003909 Py_DECREF(pathname);
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003910 return NULL;
3911 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00003912
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003913 cpathname = make_compiled_pathname(
Victor Stinner2f42ae52011-03-20 00:41:24 +01003914 PyUnicode_AS_UNICODE(pathname),
3915 debug);
3916 Py_DECREF(pathname);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003917
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003918 if (cpathname == NULL) {
3919 PyErr_Format(PyExc_SystemError, "path buffer too short");
3920 return NULL;
3921 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003922 return cpathname;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003923}
3924
3925PyDoc_STRVAR(doc_cache_from_source,
3926"Given the path to a .py file, return the path to its .pyc/.pyo file.\n\
3927\n\
3928The .py file does not need to exist; this simply returns the path to the\n\
3929.pyc/.pyo file calculated as if the .py file were imported. The extension\n\
3930will be .pyc unless __debug__ is not defined, then it will be .pyo.\n\
3931\n\
3932If debug_override is not None, then it must be a boolean and is taken as\n\
3933the value of __debug__ instead.");
3934
3935static PyObject *
3936imp_source_from_cache(PyObject *self, PyObject *args, PyObject *kws)
3937{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003938 static char *kwlist[] = {"path", NULL};
Victor Stinnerc9abda02011-03-14 13:33:46 -04003939 PyObject *pathname, *source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003940
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003941 if (!PyArg_ParseTupleAndKeywords(
Victor Stinnerebc00522010-12-03 17:06:43 +00003942 args, kws, "O&", kwlist,
Victor Stinnerc9abda02011-03-14 13:33:46 -04003943 PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003944 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003945
Victor Stinnerc9abda02011-03-14 13:33:46 -04003946 source = make_source_pathname(pathname);
3947 if (source == NULL) {
3948 PyErr_Format(PyExc_ValueError, "Not a PEP 3147 pyc path: %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003949 pathname);
Victor Stinnerc9abda02011-03-14 13:33:46 -04003950 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003951 return NULL;
3952 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04003953 Py_DECREF(pathname);
3954 return source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003955}
3956
3957PyDoc_STRVAR(doc_source_from_cache,
3958"Given the path to a .pyc./.pyo file, return the path to its .py file.\n\
3959\n\
3960The .pyc/.pyo file does not need to exist; this simply returns the path to\n\
3961the .py file calculated to correspond to the .pyc/.pyo file. If path\n\
3962does not conform to PEP 3147 format, ValueError will be raised.");
3963
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003964/* Doc strings */
3965
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003966PyDoc_STRVAR(doc_imp,
3967"This module provides the components needed to build your own\n\
3968__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003969
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003970PyDoc_STRVAR(doc_find_module,
3971"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003972Search for a module. If path is omitted or None, search for a\n\
3973built-in, frozen or special module and continue search in sys.path.\n\
3974The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003975package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003976
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003977PyDoc_STRVAR(doc_load_module,
3978"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003979Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003980The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003981
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003982PyDoc_STRVAR(doc_get_magic,
3983"get_magic() -> string\n\
3984Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003985
Barry Warsaw28a691b2010-04-17 00:19:56 +00003986PyDoc_STRVAR(doc_get_tag,
3987"get_tag() -> string\n\
3988Return the magic tag for .pyc or .pyo files.");
3989
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003990PyDoc_STRVAR(doc_get_suffixes,
3991"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003992Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003993that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003994
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003995PyDoc_STRVAR(doc_new_module,
3996"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003997Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003998The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003999
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004000PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00004001"lock_held() -> boolean\n\
4002Return True if the import lock is currently held, else False.\n\
4003On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00004004
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00004005PyDoc_STRVAR(doc_acquire_lock,
4006"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00004007Acquires the interpreter's import lock for the current thread.\n\
4008This lock should be used by import hooks to ensure thread-safety\n\
4009when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00004010On platforms without threads, this function does nothing.");
4011
4012PyDoc_STRVAR(doc_release_lock,
4013"release_lock() -> None\n\
4014Release the interpreter's import lock.\n\
4015On platforms without threads, this function does nothing.");
4016
Guido van Rossum79f25d91997-04-29 20:08:16 +00004017static PyMethodDef imp_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004018 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
4019 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
4020 {"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag},
4021 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
4022 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
4023 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
4024 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
4025 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
4026 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
4027 {"reload", imp_reload, METH_O, doc_reload},
4028 {"cache_from_source", (PyCFunction)imp_cache_from_source,
4029 METH_VARARGS | METH_KEYWORDS, doc_cache_from_source},
4030 {"source_from_cache", (PyCFunction)imp_source_from_cache,
4031 METH_VARARGS | METH_KEYWORDS, doc_source_from_cache},
4032 /* The rest are obsolete */
4033 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
4034 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
4035 {"init_builtin", imp_init_builtin, METH_VARARGS},
4036 {"init_frozen", imp_init_frozen, METH_VARARGS},
4037 {"is_builtin", imp_is_builtin, METH_VARARGS},
4038 {"is_frozen", imp_is_frozen, METH_VARARGS},
4039 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00004040#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004041 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00004042#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004043 {"load_package", imp_load_package, METH_VARARGS},
4044 {"load_source", imp_load_source, METH_VARARGS},
Brett Cannon442c9b92011-03-23 16:14:42 -07004045 {"_fix_co_filename", imp_fix_co_filename, METH_VARARGS},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004046 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004047};
4048
Guido van Rossum1a8791e1998-08-04 22:46:29 +00004049static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004050setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004051{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004052 PyObject *v;
4053 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004054
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004055 v = PyLong_FromLong((long)value);
4056 err = PyDict_SetItemString(d, name, v);
4057 Py_XDECREF(v);
4058 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004059}
4060
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004061typedef struct {
4062 PyObject_HEAD
4063} NullImporter;
4064
4065static int
4066NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
4067{
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004068#ifndef MS_WINDOWS
4069 PyObject *path;
4070 struct stat statbuf;
4071 int rv;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004072
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004073 if (!_PyArg_NoKeywords("NullImporter()", kwds))
4074 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004075
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004076 if (!PyArg_ParseTuple(args, "O&:NullImporter",
4077 PyUnicode_FSConverter, &path))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004078 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004079
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004080 if (PyBytes_GET_SIZE(path) == 0) {
4081 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004082 PyErr_SetString(PyExc_ImportError, "empty pathname");
4083 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004084 }
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004085
4086 rv = stat(PyBytes_AS_STRING(path), &statbuf);
4087 Py_DECREF(path);
4088 if (rv == 0) {
4089 /* it exists */
4090 if (S_ISDIR(statbuf.st_mode)) {
4091 /* it's a directory */
4092 PyErr_SetString(PyExc_ImportError, "existing directory");
4093 return -1;
4094 }
4095 }
4096#else /* MS_WINDOWS */
4097 PyObject *pathobj;
4098 DWORD rv;
Victor Stinner255dfdb2010-09-29 10:28:51 +00004099 wchar_t *path;
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004100
4101 if (!_PyArg_NoKeywords("NullImporter()", kwds))
4102 return -1;
4103
4104 if (!PyArg_ParseTuple(args, "U:NullImporter",
4105 &pathobj))
4106 return -1;
4107
4108 if (PyUnicode_GET_SIZE(pathobj) == 0) {
4109 PyErr_SetString(PyExc_ImportError, "empty pathname");
4110 return -1;
4111 }
4112
Victor Stinnerbeb4135b2010-10-07 01:02:42 +00004113 path = PyUnicode_AsWideCharString(pathobj, NULL);
Victor Stinner255dfdb2010-09-29 10:28:51 +00004114 if (path == NULL)
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004115 return -1;
4116 /* see issue1293 and issue3677:
4117 * stat() on Windows doesn't recognise paths like
4118 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
4119 */
4120 rv = GetFileAttributesW(path);
Victor Stinner255dfdb2010-09-29 10:28:51 +00004121 PyMem_Free(path);
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004122 if (rv != INVALID_FILE_ATTRIBUTES) {
4123 /* it exists */
4124 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
4125 /* it's a directory */
4126 PyErr_SetString(PyExc_ImportError, "existing directory");
4127 return -1;
4128 }
4129 }
4130#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004131 return 0;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004132}
4133
4134static PyObject *
4135NullImporter_find_module(NullImporter *self, PyObject *args)
4136{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004137 Py_RETURN_NONE;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004138}
4139
4140static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004141 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
4142 "Always return None"
4143 },
4144 {NULL} /* Sentinel */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004145};
4146
4147
Christian Heimes9cd17752007-11-18 19:35:23 +00004148PyTypeObject PyNullImporter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004149 PyVarObject_HEAD_INIT(NULL, 0)
4150 "imp.NullImporter", /*tp_name*/
4151 sizeof(NullImporter), /*tp_basicsize*/
4152 0, /*tp_itemsize*/
4153 0, /*tp_dealloc*/
4154 0, /*tp_print*/
4155 0, /*tp_getattr*/
4156 0, /*tp_setattr*/
4157 0, /*tp_reserved*/
4158 0, /*tp_repr*/
4159 0, /*tp_as_number*/
4160 0, /*tp_as_sequence*/
4161 0, /*tp_as_mapping*/
4162 0, /*tp_hash */
4163 0, /*tp_call*/
4164 0, /*tp_str*/
4165 0, /*tp_getattro*/
4166 0, /*tp_setattro*/
4167 0, /*tp_as_buffer*/
4168 Py_TPFLAGS_DEFAULT, /*tp_flags*/
4169 "Null importer object", /* tp_doc */
4170 0, /* tp_traverse */
4171 0, /* tp_clear */
4172 0, /* tp_richcompare */
4173 0, /* tp_weaklistoffset */
4174 0, /* tp_iter */
4175 0, /* tp_iternext */
4176 NullImporter_methods, /* tp_methods */
4177 0, /* tp_members */
4178 0, /* tp_getset */
4179 0, /* tp_base */
4180 0, /* tp_dict */
4181 0, /* tp_descr_get */
4182 0, /* tp_descr_set */
4183 0, /* tp_dictoffset */
4184 (initproc)NullImporter_init, /* tp_init */
4185 0, /* tp_alloc */
4186 PyType_GenericNew /* tp_new */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004187};
4188
Martin v. Löwis1a214512008-06-11 05:26:20 +00004189static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004190 PyModuleDef_HEAD_INIT,
4191 "imp",
4192 doc_imp,
4193 0,
4194 imp_methods,
4195 NULL,
4196 NULL,
4197 NULL,
4198 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00004199};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004200
Jason Tishler6bc06ec2003-09-04 11:59:50 +00004201PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00004202PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004203{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004204 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004205
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004206 if (PyType_Ready(&PyNullImporter_Type) < 0)
4207 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004208
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004209 m = PyModule_Create(&impmodule);
4210 if (m == NULL)
4211 goto failure;
4212 d = PyModule_GetDict(m);
4213 if (d == NULL)
4214 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004215
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004216 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
4217 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
4218 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
4219 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
4220 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
4221 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
4222 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
4223 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
4224 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
4225 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004226
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004227 Py_INCREF(&PyNullImporter_Type);
4228 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
4229 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004230 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004231 Py_XDECREF(m);
4232 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004233}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004234
4235
Guido van Rossumb18618d2000-05-03 23:44:39 +00004236/* API for embedding applications that want to add their own entries
4237 to the table of built-in modules. This should normally be called
4238 *before* Py_Initialize(). When the table resize fails, -1 is
4239 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004240
4241 After a similar function by Just van Rossum. */
4242
4243int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004244PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004245{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004246 static struct _inittab *our_copy = NULL;
4247 struct _inittab *p;
4248 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004249
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004250 /* Count the number of entries in both tables */
4251 for (n = 0; newtab[n].name != NULL; n++)
4252 ;
4253 if (n == 0)
4254 return 0; /* Nothing to do */
4255 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
4256 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004257
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004258 /* Allocate new memory for the combined table */
4259 p = our_copy;
4260 PyMem_RESIZE(p, struct _inittab, i+n+1);
4261 if (p == NULL)
4262 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004263
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004264 /* Copy the tables into the new memory */
4265 if (our_copy != PyImport_Inittab)
4266 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
4267 PyImport_Inittab = our_copy = p;
4268 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004269
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004270 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004271}
4272
4273/* Shorthand to add a single entry given a name and a function */
4274
4275int
Brett Cannona826f322009-04-02 03:41:46 +00004276PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004277{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004278 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004279
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004280 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004281
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004282 newtab[0].name = (char *)name;
4283 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004284
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004285 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004286}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004287
4288#ifdef __cplusplus
4289}
4290#endif