blob: 1b232fc87415292acc31ddd04dae253b30dfaedd [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
Antoine Pitrou86a36b52011-11-25 18:56:07 +0100106 Python 3.3a0 3200 (__qualname__ added)
Benjamin Petersonabdb5522012-03-15 15:40:37 -0500107 3210 (added size modulo 2**32 to the pyc header)
108 Python 3.3a1 3220 (changed PEP 380 implementation)
Tim Peters36515e22001-11-18 04:06:29 +0000109*/
Guido van Rossum3ddee711991-12-16 13:06:34 +0000110
Nick Coghlancd419ab2010-09-11 00:39:25 +0000111/* MAGIC must change whenever the bytecode emitted by the compiler may no
112 longer be understood by older implementations of the eval loop (usually
113 due to the addition of new opcodes)
Martin v. Löwisfadcd312011-10-23 18:08:20 +0200114 TAG must change for each major Python release. The magic number will take
115 care of any bytecode changes that occur during development.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000116*/
Benjamin Peterson48deae12011-06-03 17:50:16 -0500117#define QUOTE(arg) #arg
118#define STRIFY(name) QUOTE(name)
119#define MAJOR STRIFY(PY_MAJOR_VERSION)
120#define MINOR STRIFY(PY_MINOR_VERSION)
Benjamin Petersonf53d20f2012-03-16 09:39:12 -0500121#define MAGIC (3220 | ((long)'\r'<<16) | ((long)'\n'<<24))
Benjamin Peterson48deae12011-06-03 17:50:16 -0500122#define TAG "cpython-" MAJOR MINOR;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000123#define CACHEDIR "__pycache__"
124/* Current magic word and string tag as globals. */
Guido van Rossum96774c12000-05-01 20:19:08 +0000125static long pyc_magic = MAGIC;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000126static const char *pyc_tag = TAG;
Benjamin Peterson48deae12011-06-03 17:50:16 -0500127#undef QUOTE
128#undef STRIFY
129#undef MAJOR
130#undef MINOR
Guido van Rossum96774c12000-05-01 20:19:08 +0000131
Victor Stinner95872862011-03-07 18:20:56 +0100132/* See _PyImport_FixupExtensionObject() below */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000133static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000134
Victor Stinnerfe7c5b52011-04-05 01:48:03 +0200135/* Function from Parser/tokenizer.c */
136extern char * PyTokenizer_FindEncodingFilename(int, PyObject *);
137
Guido van Rossum771c6c81997-10-31 18:37:24 +0000138/* This table is defined in config.c: */
139extern struct _inittab _PyImport_Inittab[];
140
141struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +0000142
Guido van Rossumed1170e1999-12-20 21:23:41 +0000143/* these tables define the module suffixes that Python recognizes */
144struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +0000145
Guido van Rossumed1170e1999-12-20 21:23:41 +0000146static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000147 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000148#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000149 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000150#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000151 {".pyc", "rb", PY_COMPILED},
152 {0, 0}
Guido van Rossumed1170e1999-12-20 21:23:41 +0000153};
154
Victor Stinnerd0296212011-03-14 14:04:10 -0400155static PyObject *initstr = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000156
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000157/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000158
159void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000160_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000161{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000162 const struct filedescr *scan;
163 struct filedescr *filetab;
164 int countD = 0;
165 int countS = 0;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000166
Victor Stinnerd0296212011-03-14 14:04:10 -0400167 initstr = PyUnicode_InternFromString("__init__");
168 if (initstr == NULL)
169 Py_FatalError("Can't initialize import variables");
170
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000171 /* prepare _PyImport_Filetab: copy entries from
172 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
173 */
Guido van Rossum04110fb2007-08-24 16:32:05 +0000174#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000175 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
176 ++countD;
Guido van Rossum04110fb2007-08-24 16:32:05 +0000177#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000178 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
179 ++countS;
180 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
181 if (filetab == NULL)
182 Py_FatalError("Can't initialize import file table.");
Guido van Rossum04110fb2007-08-24 16:32:05 +0000183#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000184 memcpy(filetab, _PyImport_DynLoadFiletab,
185 countD * sizeof(struct filedescr));
Guido van Rossum04110fb2007-08-24 16:32:05 +0000186#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000187 memcpy(filetab + countD, _PyImport_StandardFiletab,
188 countS * sizeof(struct filedescr));
189 filetab[countD + countS].suffix = NULL;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000190
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000191 _PyImport_Filetab = filetab;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000192
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000193 if (Py_OptimizeFlag) {
194 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
195 for (; filetab->suffix != NULL; filetab++) {
196 if (strcmp(filetab->suffix, ".pyc") == 0)
197 filetab->suffix = ".pyo";
198 }
199 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000200}
201
Guido van Rossum25ce5661997-08-02 03:10:38 +0000202void
Just van Rossum52e14d62002-12-30 22:08:05 +0000203_PyImportHooks_Init(void)
204{
Brett Cannonfd074152012-04-14 14:10:13 -0400205 PyObject *v, *path_hooks = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000206 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000207
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000208 if (PyType_Ready(&PyNullImporter_Type) < 0)
209 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000210
Brett Cannonfd074152012-04-14 14:10:13 -0400211 /* adding sys.path_hooks and sys.path_importer_cache */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000212 v = PyList_New(0);
213 if (v == NULL)
214 goto error;
215 err = PySys_SetObject("meta_path", v);
216 Py_DECREF(v);
217 if (err)
218 goto error;
219 v = PyDict_New();
220 if (v == NULL)
221 goto error;
222 err = PySys_SetObject("path_importer_cache", v);
223 Py_DECREF(v);
224 if (err)
225 goto error;
226 path_hooks = PyList_New(0);
227 if (path_hooks == NULL)
228 goto error;
229 err = PySys_SetObject("path_hooks", path_hooks);
230 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000231 error:
Brett Cannonfd074152012-04-14 14:10:13 -0400232 PyErr_Print();
233 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
234 "path_importer_cache, or NullImporter failed"
235 );
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000236 }
Brett Cannonfd074152012-04-14 14:10:13 -0400237 Py_DECREF(path_hooks);
238}
239
240void
241_PyImportZip_Init(void)
242{
243 PyObject *path_hooks, *zimpimport;
244 int err = 0;
245
246 path_hooks = PySys_GetObject("path_hooks");
247 if (path_hooks == NULL)
248 goto error;
249
250 if (Py_VerboseFlag)
251 PySys_WriteStderr("# installing zipimport hook\n");
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000252
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000253 zimpimport = PyImport_ImportModule("zipimport");
254 if (zimpimport == NULL) {
255 PyErr_Clear(); /* No zip import module -- okay */
256 if (Py_VerboseFlag)
257 PySys_WriteStderr("# can't import zipimport\n");
258 }
259 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200260 _Py_IDENTIFIER(zipimporter);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200261 PyObject *zipimporter = _PyObject_GetAttrId(zimpimport,
262 &PyId_zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000263 Py_DECREF(zimpimport);
264 if (zipimporter == NULL) {
265 PyErr_Clear(); /* No zipimporter object -- okay */
266 if (Py_VerboseFlag)
267 PySys_WriteStderr(
268 "# can't import zipimport.zipimporter\n");
269 }
270 else {
271 /* sys.path_hooks.append(zipimporter) */
272 err = PyList_Append(path_hooks, zipimporter);
273 Py_DECREF(zipimporter);
Brett Cannonfd074152012-04-14 14:10:13 -0400274 if (err < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000275 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -0400276 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000277 if (Py_VerboseFlag)
278 PySys_WriteStderr(
279 "# installed zipimport hook\n");
280 }
281 }
Brett Cannonfd074152012-04-14 14:10:13 -0400282
283 return;
284
285 error:
286 PyErr_Print();
287 Py_FatalError("initializing zipimport or NullImporter failed");
Just van Rossum52e14d62002-12-30 22:08:05 +0000288}
289
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000290/* Locking primitives to prevent parallel imports of the same module
291 in different threads to return with a partially loaded module.
292 These calls are serialized by the global interpreter lock. */
293
294#ifdef WITH_THREAD
295
Guido van Rossum49b56061998-10-01 20:42:43 +0000296#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000297
Guido van Rossum65d5b571998-12-21 19:32:43 +0000298static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000299static long import_lock_thread = -1;
300static int import_lock_level = 0;
301
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000302void
303_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000304{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000305 long me = PyThread_get_thread_ident();
306 if (me == -1)
307 return; /* Too bad */
308 if (import_lock == NULL) {
309 import_lock = PyThread_allocate_lock();
310 if (import_lock == NULL)
311 return; /* Nothing much we can do. */
312 }
313 if (import_lock_thread == me) {
314 import_lock_level++;
315 return;
316 }
317 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
318 {
319 PyThreadState *tstate = PyEval_SaveThread();
320 PyThread_acquire_lock(import_lock, 1);
321 PyEval_RestoreThread(tstate);
322 }
323 import_lock_thread = me;
324 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000325}
326
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000327int
328_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000329{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000330 long me = PyThread_get_thread_ident();
331 if (me == -1 || import_lock == NULL)
332 return 0; /* Too bad */
333 if (import_lock_thread != me)
334 return -1;
335 import_lock_level--;
336 if (import_lock_level == 0) {
337 import_lock_thread = -1;
338 PyThread_release_lock(import_lock);
339 }
340 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000341}
342
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000343/* This function is called from PyOS_AfterFork to ensure that newly
344 created child processes do not share locks with the parent.
345 We now acquire the import lock around fork() calls but on some platforms
346 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000347
348void
349_PyImport_ReInitLock(void)
350{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000351 if (import_lock != NULL)
352 import_lock = PyThread_allocate_lock();
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000353 if (import_lock_level > 1) {
354 /* Forked as a side effect of import */
355 long me = PyThread_get_thread_ident();
356 PyThread_acquire_lock(import_lock, 0);
Victor Stinner942003c2011-03-07 16:57:48 +0100357 /* XXX: can the previous line fail? */
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000358 import_lock_thread = me;
359 import_lock_level--;
360 } else {
361 import_lock_thread = -1;
362 import_lock_level = 0;
363 }
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000364}
365
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000366#endif
367
Tim Peters69232342001-08-30 05:16:13 +0000368static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000369imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000370{
Tim Peters69232342001-08-30 05:16:13 +0000371#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000372 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000373#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000374 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000375#endif
376}
377
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000378static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000379imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000380{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000381#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000382 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000383#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000384 Py_INCREF(Py_None);
385 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000386}
387
388static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000389imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000390{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000391#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000392 if (_PyImport_ReleaseLock() < 0) {
393 PyErr_SetString(PyExc_RuntimeError,
394 "not holding the import lock");
395 return NULL;
396 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000397#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000398 Py_INCREF(Py_None);
399 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000400}
401
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100402void
403_PyImport_Fini(void)
404{
405 Py_XDECREF(extensions);
406 extensions = NULL;
407 PyMem_DEL(_PyImport_Filetab);
408 _PyImport_Filetab = NULL;
409#ifdef WITH_THREAD
410 if (import_lock != NULL) {
411 PyThread_free_lock(import_lock);
412 import_lock = NULL;
413 }
414#endif
415}
416
Guido van Rossumd8faa362007-04-27 19:54:29 +0000417static void
418imp_modules_reloading_clear(void)
419{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000420 PyInterpreterState *interp = PyThreadState_Get()->interp;
421 if (interp->modules_reloading != NULL)
422 PyDict_Clear(interp->modules_reloading);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000423}
424
Guido van Rossum25ce5661997-08-02 03:10:38 +0000425/* Helper for sys */
426
427PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000428PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000429{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000430 PyInterpreterState *interp = PyThreadState_GET()->interp;
431 if (interp->modules == NULL)
432 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
433 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000434}
435
Guido van Rossum3f5da241990-12-20 15:06:42 +0000436
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000437/* List of names to clear in sys */
438static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000439 "path", "argv", "ps1", "ps2",
440 "last_type", "last_value", "last_traceback",
441 "path_hooks", "path_importer_cache", "meta_path",
442 /* misc stuff */
443 "flags", "float_info",
444 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000445};
446
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000447static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000448 "stdin", "__stdin__",
449 "stdout", "__stdout__",
450 "stderr", "__stderr__",
451 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000452};
453
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000454
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000455/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000456
Guido van Rossum3f5da241990-12-20 15:06:42 +0000457void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000458PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000459{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000460 Py_ssize_t pos, ndone;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000461 PyObject *key, *value, *dict;
462 PyInterpreterState *interp = PyThreadState_GET()->interp;
463 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000464
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000465 if (modules == NULL)
466 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000467
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000468 /* Delete some special variables first. These are common
469 places where user values hide and people complain when their
470 destructors fail. Since the modules containing them are
471 deleted *last* of all, they would come too late in the normal
472 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000473
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000474 value = PyDict_GetItemString(modules, "builtins");
475 if (value != NULL && PyModule_Check(value)) {
476 dict = PyModule_GetDict(value);
477 if (Py_VerboseFlag)
478 PySys_WriteStderr("# clear builtins._\n");
479 PyDict_SetItemString(dict, "_", Py_None);
480 }
481 value = PyDict_GetItemString(modules, "sys");
482 if (value != NULL && PyModule_Check(value)) {
483 char **p;
484 PyObject *v;
485 dict = PyModule_GetDict(value);
486 for (p = sys_deletes; *p != NULL; p++) {
487 if (Py_VerboseFlag)
488 PySys_WriteStderr("# clear sys.%s\n", *p);
489 PyDict_SetItemString(dict, *p, Py_None);
490 }
491 for (p = sys_files; *p != NULL; p+=2) {
492 if (Py_VerboseFlag)
493 PySys_WriteStderr("# restore sys.%s\n", *p);
494 v = PyDict_GetItemString(dict, *(p+1));
495 if (v == NULL)
496 v = Py_None;
497 PyDict_SetItemString(dict, *p, v);
498 }
499 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000500
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000501 /* First, delete __main__ */
502 value = PyDict_GetItemString(modules, "__main__");
503 if (value != NULL && PyModule_Check(value)) {
504 if (Py_VerboseFlag)
505 PySys_WriteStderr("# cleanup __main__\n");
506 _PyModule_Clear(value);
507 PyDict_SetItemString(modules, "__main__", Py_None);
508 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000509
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000510 /* The special treatment of "builtins" here is because even
511 when it's not referenced as a module, its dictionary is
512 referenced by almost every module's __builtins__. Since
513 deleting a module clears its dictionary (even if there are
514 references left to it), we need to delete the "builtins"
515 module last. Likewise, we don't delete sys until the very
516 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 Also note that we 'delete' modules by replacing their entry
519 in the modules dict with None, rather than really deleting
520 them; this avoids a rehash of the modules dictionary and
521 also marks them as "non existent" so they won't be
522 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000523
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000524 /* Next, repeatedly delete modules with a reference count of
525 one (skipping builtins and sys) and delete them */
526 do {
527 ndone = 0;
528 pos = 0;
529 while (PyDict_Next(modules, &pos, &key, &value)) {
530 if (value->ob_refcnt != 1)
531 continue;
532 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100533 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000534 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100535 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 continue;
537 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100538 PySys_FormatStderr(
539 "# cleanup[1] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000540 _PyModule_Clear(value);
541 PyDict_SetItem(modules, key, Py_None);
542 ndone++;
543 }
544 }
545 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000546
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000547 /* Next, delete all modules (still skipping builtins and sys) */
548 pos = 0;
549 while (PyDict_Next(modules, &pos, &key, &value)) {
550 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100551 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000552 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100553 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000554 continue;
555 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100556 PySys_FormatStderr("# cleanup[2] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000557 _PyModule_Clear(value);
558 PyDict_SetItem(modules, key, Py_None);
559 }
560 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000561
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000562 /* Next, delete sys and builtins (in that order) */
563 value = PyDict_GetItemString(modules, "sys");
564 if (value != NULL && PyModule_Check(value)) {
565 if (Py_VerboseFlag)
566 PySys_WriteStderr("# cleanup sys\n");
567 _PyModule_Clear(value);
568 PyDict_SetItemString(modules, "sys", Py_None);
569 }
570 value = PyDict_GetItemString(modules, "builtins");
571 if (value != NULL && PyModule_Check(value)) {
572 if (Py_VerboseFlag)
573 PySys_WriteStderr("# cleanup builtins\n");
574 _PyModule_Clear(value);
575 PyDict_SetItemString(modules, "builtins", Py_None);
576 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000577
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000578 /* Finally, clear and delete the modules directory */
579 PyDict_Clear(modules);
580 interp->modules = NULL;
581 Py_DECREF(modules);
582 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000583}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000584
585
Barry Warsaw28a691b2010-04-17 00:19:56 +0000586/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000587
588long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000589PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000590{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000591 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000592}
593
594
Barry Warsaw28a691b2010-04-17 00:19:56 +0000595const char *
596PyImport_GetMagicTag(void)
597{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000598 return pyc_tag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000599}
600
Guido van Rossum25ce5661997-08-02 03:10:38 +0000601/* Magic for extension modules (built-in as well as dynamically
602 loaded). To prevent initializing an extension module more than
603 once, we keep a static dictionary 'extensions' keyed by module name
604 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000605 modules), containing these modules. A copy of the module's
Victor Stinner95872862011-03-07 18:20:56 +0100606 dictionary is stored by calling _PyImport_FixupExtensionObject()
Guido van Rossum25ce5661997-08-02 03:10:38 +0000607 immediately after the module initialization function succeeds. A
608 copy can be retrieved from there by calling
Victor Stinner95872862011-03-07 18:20:56 +0100609 _PyImport_FindExtensionObject().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000610
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000611 Modules which do support multiple initialization set their m_size
612 field to a non-negative number (indicating the size of the
613 module-specific state). They are still recorded in the extensions
614 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000615*/
616
617int
Victor Stinner95872862011-03-07 18:20:56 +0100618_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
619 PyObject *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000620{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000621 PyObject *modules, *dict;
622 struct PyModuleDef *def;
623 if (extensions == NULL) {
624 extensions = PyDict_New();
625 if (extensions == NULL)
626 return -1;
627 }
628 if (mod == NULL || !PyModule_Check(mod)) {
629 PyErr_BadInternalCall();
630 return -1;
631 }
632 def = PyModule_GetDef(mod);
633 if (!def) {
634 PyErr_BadInternalCall();
635 return -1;
636 }
637 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +0100638 if (PyDict_SetItem(modules, name, mod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000639 return -1;
640 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100641 PyDict_DelItem(modules, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000642 return -1;
643 }
644 if (def->m_size == -1) {
645 if (def->m_base.m_copy) {
646 /* Somebody already imported the module,
647 likely under a different name.
648 XXX this should really not happen. */
649 Py_DECREF(def->m_base.m_copy);
650 def->m_base.m_copy = NULL;
651 }
652 dict = PyModule_GetDict(mod);
653 if (dict == NULL)
654 return -1;
655 def->m_base.m_copy = PyDict_Copy(dict);
656 if (def->m_base.m_copy == NULL)
657 return -1;
658 }
Victor Stinner49d3f252010-10-17 01:24:53 +0000659 PyDict_SetItem(extensions, filename, (PyObject*)def);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000660 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000661}
662
Victor Stinner49d3f252010-10-17 01:24:53 +0000663int
664_PyImport_FixupBuiltin(PyObject *mod, char *name)
665{
666 int res;
Victor Stinner95872862011-03-07 18:20:56 +0100667 PyObject *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100668 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100669 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000670 return -1;
Victor Stinner95872862011-03-07 18:20:56 +0100671 res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj);
672 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000673 return res;
674}
675
Guido van Rossum25ce5661997-08-02 03:10:38 +0000676PyObject *
Victor Stinner95872862011-03-07 18:20:56 +0100677_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000678{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000679 PyObject *mod, *mdict;
680 PyModuleDef* def;
681 if (extensions == NULL)
682 return NULL;
Victor Stinner49d3f252010-10-17 01:24:53 +0000683 def = (PyModuleDef*)PyDict_GetItem(extensions, filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000684 if (def == NULL)
685 return NULL;
686 if (def->m_size == -1) {
687 /* Module does not support repeated initialization */
688 if (def->m_base.m_copy == NULL)
689 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100690 mod = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000691 if (mod == NULL)
692 return NULL;
693 mdict = PyModule_GetDict(mod);
694 if (mdict == NULL)
695 return NULL;
696 if (PyDict_Update(mdict, def->m_base.m_copy))
697 return NULL;
698 }
699 else {
700 if (def->m_base.m_init == NULL)
701 return NULL;
702 mod = def->m_base.m_init();
703 if (mod == NULL)
704 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100705 PyDict_SetItem(PyImport_GetModuleDict(), name, mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000706 Py_DECREF(mod);
707 }
708 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100709 PyDict_DelItem(PyImport_GetModuleDict(), name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000710 Py_DECREF(mod);
711 return NULL;
712 }
713 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +0100714 PySys_FormatStderr("import %U # previously loaded (%R)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000715 name, filename);
716 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000717
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000718}
719
Victor Stinner49d3f252010-10-17 01:24:53 +0000720PyObject *
Victor Stinner501c09a2011-02-23 00:02:00 +0000721_PyImport_FindBuiltin(const char *name)
Victor Stinner49d3f252010-10-17 01:24:53 +0000722{
Victor Stinner95872862011-03-07 18:20:56 +0100723 PyObject *res, *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100724 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100725 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000726 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100727 res = _PyImport_FindExtensionObject(nameobj, nameobj);
728 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000729 return res;
730}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000731
732/* Get the module object corresponding to a module name.
733 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000734 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000735 Because the former action is most common, THIS DOES NOT RETURN A
736 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000737
Guido van Rossum79f25d91997-04-29 20:08:16 +0000738PyObject *
Victor Stinner27ee0892011-03-04 12:57:09 +0000739PyImport_AddModuleObject(PyObject *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000740{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000741 PyObject *modules = PyImport_GetModuleDict();
742 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000743
Victor Stinner27ee0892011-03-04 12:57:09 +0000744 if ((m = PyDict_GetItem(modules, name)) != NULL &&
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000745 PyModule_Check(m))
746 return m;
Victor Stinner27ee0892011-03-04 12:57:09 +0000747 m = PyModule_NewObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000748 if (m == NULL)
749 return NULL;
Victor Stinner27ee0892011-03-04 12:57:09 +0000750 if (PyDict_SetItem(modules, name, m) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000751 Py_DECREF(m);
752 return NULL;
753 }
754 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000755
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000756 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000757}
758
Victor Stinner27ee0892011-03-04 12:57:09 +0000759PyObject *
760PyImport_AddModule(const char *name)
761{
762 PyObject *nameobj, *module;
763 nameobj = PyUnicode_FromString(name);
764 if (nameobj == NULL)
765 return NULL;
766 module = PyImport_AddModuleObject(nameobj);
767 Py_DECREF(nameobj);
768 return module;
769}
770
771
Tim Peters1cd70172004-08-02 03:52:12 +0000772/* Remove name from sys.modules, if it's there. */
773static void
Victor Stinner27ee0892011-03-04 12:57:09 +0000774remove_module(PyObject *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000775{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000776 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner27ee0892011-03-04 12:57:09 +0000777 if (PyDict_GetItem(modules, name) == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000778 return;
Victor Stinner27ee0892011-03-04 12:57:09 +0000779 if (PyDict_DelItem(modules, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000780 Py_FatalError("import: deleting existing key in"
781 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000782}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000783
Victor Stinnerc9abda02011-03-14 13:33:46 -0400784static PyObject * get_sourcefile(PyObject *filename);
785static PyObject *make_source_pathname(PyObject *pathname);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200786static PyObject* make_compiled_pathname(PyObject *pathname, int debug);
Christian Heimes3b06e532008-01-07 20:12:44 +0000787
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000788/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000789 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
790 * removed from sys.modules, to avoid leaving damaged module objects
791 * in sys.modules. The caller may wish to restore the original
792 * module object (if any) in this case; PyImport_ReloadModule is an
793 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000794 *
795 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
796 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000797 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000798PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000799PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000800{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000801 return PyImport_ExecCodeModuleWithPathnames(
802 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000803}
804
805PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000806PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000807{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000808 return PyImport_ExecCodeModuleWithPathnames(
809 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000810}
811
812PyObject *
813PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000814 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000815{
Victor Stinner27ee0892011-03-04 12:57:09 +0000816 PyObject *m = NULL;
817 PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL;
818
819 nameobj = PyUnicode_FromString(name);
820 if (nameobj == NULL)
821 return NULL;
822
823 if (pathname != NULL) {
824 pathobj = PyUnicode_DecodeFSDefault(pathname);
825 if (pathobj == NULL)
826 goto error;
827 } else
828 pathobj = NULL;
829 if (cpathname != NULL) {
830 cpathobj = PyUnicode_DecodeFSDefault(cpathname);
831 if (cpathobj == NULL)
832 goto error;
833 } else
834 cpathobj = NULL;
835 m = PyImport_ExecCodeModuleObject(nameobj, co, pathobj, cpathobj);
836error:
837 Py_DECREF(nameobj);
838 Py_XDECREF(pathobj);
839 Py_XDECREF(cpathobj);
840 return m;
841}
842
843PyObject*
844PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
845 PyObject *cpathname)
846{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000847 PyObject *modules = PyImport_GetModuleDict();
848 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000849
Victor Stinner27ee0892011-03-04 12:57:09 +0000850 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000851 if (m == NULL)
852 return NULL;
853 /* If the module is being reloaded, we get the old module back
854 and re-use its dict to exec the new code. */
855 d = PyModule_GetDict(m);
856 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
857 if (PyDict_SetItemString(d, "__builtins__",
858 PyEval_GetBuiltins()) != 0)
859 goto error;
860 }
861 /* Remember the filename as the __file__ attribute */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000862 if (pathname != NULL) {
Victor Stinnerc9abda02011-03-14 13:33:46 -0400863 v = get_sourcefile(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000864 if (v == NULL)
865 PyErr_Clear();
866 }
Victor Stinner27ee0892011-03-04 12:57:09 +0000867 else
868 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000869 if (v == NULL) {
870 v = ((PyCodeObject *)co)->co_filename;
871 Py_INCREF(v);
872 }
873 if (PyDict_SetItemString(d, "__file__", v) != 0)
874 PyErr_Clear(); /* Not important enough to report */
875 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000876
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000877 /* Remember the pyc path name as the __cached__ attribute. */
Victor Stinner27ee0892011-03-04 12:57:09 +0000878 if (cpathname != NULL)
879 v = cpathname;
880 else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 v = Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000882 if (PyDict_SetItemString(d, "__cached__", v) != 0)
883 PyErr_Clear(); /* Not important enough to report */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000884
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000885 v = PyEval_EvalCode(co, d, d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000886 if (v == NULL)
887 goto error;
888 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000889
Victor Stinner27ee0892011-03-04 12:57:09 +0000890 if ((m = PyDict_GetItem(modules, name)) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000891 PyErr_Format(PyExc_ImportError,
Victor Stinner27ee0892011-03-04 12:57:09 +0000892 "Loaded module %R not found in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000893 name);
894 return NULL;
895 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000896
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000897 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000898
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000899 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000900
901 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000902 remove_module(name);
903 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000904}
905
906
Barry Warsaw28a691b2010-04-17 00:19:56 +0000907/* Like strrchr(string, '/') but searches for the rightmost of either SEP
908 or ALTSEP, if the latter is defined.
909*/
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200910static Py_UCS4*
911rightmost_sep(Py_UCS4 *s)
Victor Stinnerc9abda02011-03-14 13:33:46 -0400912{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200913 Py_UCS4 *found, c;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400914 for (found = NULL; (c = *s); s++) {
915 if (c == SEP
916#ifdef ALTSEP
917 || c == ALTSEP
918#endif
919 )
920 {
921 found = s;
922 }
923 }
924 return found;
925}
926
Martin v. Löwis2db72862011-10-23 17:29:08 +0200927/* Like rightmost_sep, but operate on unicode objects. */
928static Py_ssize_t
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200929rightmost_sep_obj(PyObject* o, Py_ssize_t start, Py_ssize_t end)
Martin v. Löwis2db72862011-10-23 17:29:08 +0200930{
931 Py_ssize_t found, i;
932 Py_UCS4 c;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200933 for (found = -1, i = start; i < end; i++) {
Martin v. Löwis2db72862011-10-23 17:29:08 +0200934 c = PyUnicode_READ_CHAR(o, i);
935 if (c == SEP
936#ifdef ALTSEP
937 || c == ALTSEP
938#endif
939 )
940 {
941 found = i;
942 }
943 }
944 return found;
945}
Victor Stinnerc9abda02011-03-14 13:33:46 -0400946
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000947/* Given a pathname for a Python source file, fill a buffer with the
948 pathname for the corresponding compiled file. Return the pathname
949 for the compiled file, or NULL if there's no space in the buffer.
Victor Stinner2f42ae52011-03-20 00:41:24 +0100950 Doesn't set an exception.
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000951
Martin v. Löwis30260a72011-10-23 17:35:46 +0200952 foo.py -> __pycache__/foo.<tag>.pyc
953
954 pathstr is assumed to be "ready".
955*/
Victor Stinner2f42ae52011-03-20 00:41:24 +0100956
957static PyObject*
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200958make_compiled_pathname(PyObject *pathstr, int debug)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000959{
Martin v. Löwis2db72862011-10-23 17:29:08 +0200960 PyObject *result;
961 Py_ssize_t fname, ext, len, i, pos, taglen;
Martin v. Löwisfadcd312011-10-23 18:08:20 +0200962 Py_ssize_t pycache_len = sizeof(CACHEDIR) - 1;
Martin v. Löwis2db72862011-10-23 17:29:08 +0200963 int kind;
964 void *data;
Antoine Pitroub528fcf2011-10-25 00:21:02 +0200965 Py_UCS4 lastsep;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000966
Martin v. Löwis2db72862011-10-23 17:29:08 +0200967 /* Compute the output string size. */
968 len = PyUnicode_GET_LENGTH(pathstr);
969 /* If there is no separator, this returns -1, so
Antoine Pitroub528fcf2011-10-25 00:21:02 +0200970 fname will be 0. */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200971 fname = rightmost_sep_obj(pathstr, 0, len) + 1;
Antoine Pitroub528fcf2011-10-25 00:21:02 +0200972 /* Windows: re-use the last separator character (/ or \\) when
973 appending the __pycache__ path. */
974 if (fname > 0)
975 lastsep = PyUnicode_READ_CHAR(pathstr, fname -1);
976 else
977 lastsep = SEP;
Martin v. Löwis2db72862011-10-23 17:29:08 +0200978 ext = fname - 1;
979 for(i = fname; i < len; i++)
980 if (PyUnicode_READ_CHAR(pathstr, i) == '.')
981 ext = i + 1;
982 if (ext < fname)
983 /* No dot in filename; use entire filename */
984 ext = len;
985
986 /* result = pathstr[:fname] + "__pycache__" + SEP +
987 pathstr[fname:ext] + tag + ".py[co]" */
988 taglen = strlen(pyc_tag);
Martin v. Löwis2cc0cc52011-10-23 18:41:56 +0200989 result = PyUnicode_New(ext + pycache_len + 1 + taglen + 4,
Martin v. Löwis2db72862011-10-23 17:29:08 +0200990 PyUnicode_MAX_CHAR_VALUE(pathstr));
991 if (!result)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200992 return NULL;
Martin v. Löwis2db72862011-10-23 17:29:08 +0200993 kind = PyUnicode_KIND(result);
994 data = PyUnicode_DATA(result);
995 PyUnicode_CopyCharacters(result, 0, pathstr, 0, fname);
996 pos = fname;
Martin v. Löwis2cc0cc52011-10-23 18:41:56 +0200997 for (i = 0; i < pycache_len; i++)
Martin v. Löwisfadcd312011-10-23 18:08:20 +0200998 PyUnicode_WRITE(kind, data, pos++, CACHEDIR[i]);
Antoine Pitroub528fcf2011-10-25 00:21:02 +0200999 PyUnicode_WRITE(kind, data, pos++, lastsep);
Martin v. Löwis2db72862011-10-23 17:29:08 +02001000 PyUnicode_CopyCharacters(result, pos, pathstr,
1001 fname, ext - fname);
1002 pos += ext - fname;
1003 for (i = 0; pyc_tag[i]; i++)
1004 PyUnicode_WRITE(kind, data, pos++, pyc_tag[i]);
1005 PyUnicode_WRITE(kind, data, pos++, '.');
1006 PyUnicode_WRITE(kind, data, pos++, 'p');
1007 PyUnicode_WRITE(kind, data, pos++, 'y');
1008 PyUnicode_WRITE(kind, data, pos++, debug ? 'c' : 'o');
1009 return result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001010}
1011
1012
Barry Warsaw28a691b2010-04-17 00:19:56 +00001013/* Given a pathname to a Python byte compiled file, return the path to the
1014 source file, if the path matches the PEP 3147 format. This does not check
1015 for any file existence, however, if the pyc file name does not match PEP
1016 3147 style, NULL is returned. buf must be at least as big as pathname;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001017 the resulting path will always be shorter.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001018
Victor Stinnerc9abda02011-03-14 13:33:46 -04001019 (...)/__pycache__/foo.<tag>.pyc -> (...)/foo.py */
1020
1021static PyObject*
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001022make_source_pathname(PyObject *path)
Barry Warsaw28a691b2010-04-17 00:19:56 +00001023{
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001024 Py_ssize_t left, right, dot0, dot1, len;
1025 Py_ssize_t i, j;
1026 PyObject *result;
1027 int kind;
1028 void *data;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001029
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001030 len = PyUnicode_GET_LENGTH(path);
1031 if (len > MAXPATHLEN)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001032 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001033
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001034 /* Look back two slashes from the end. In between these two slashes
1035 must be the string __pycache__ or this is not a PEP 3147 style
1036 path. It's possible for there to be only one slash.
1037 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001038 right = rightmost_sep_obj(path, 0, len);
1039 if (right == -1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001040 return NULL;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001041 left = rightmost_sep_obj(path, 0, right);
1042 if (left == -1)
1043 left = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001044 else
1045 left++;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001046 if (right-left != sizeof(CACHEDIR)-1)
1047 return NULL;
1048 for (i = 0; i < sizeof(CACHEDIR)-1; i++)
1049 if (PyUnicode_READ_CHAR(path, left+i) != CACHEDIR[i])
1050 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001051
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001052 /* Now verify that the path component to the right of the last slash
1053 has two dots in it.
1054 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001055 dot0 = PyUnicode_FindChar(path, '.', right+1, len, 1);
1056 if (dot0 < 0)
1057 return NULL;
1058 dot1 = PyUnicode_FindChar(path, '.', dot0+1, len, 1);
1059 if (dot1 < 0)
1060 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001061 /* Too many dots? */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001062 if (PyUnicode_FindChar(path, '.', dot1+1, len, 1) != -1)
1063 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001064
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001065 /* This is a PEP 3147 path. Start by copying everything from the
1066 start of pathname up to and including the leftmost slash. Then
1067 copy the file's basename, removing the magic tag and adding a .py
1068 suffix.
1069 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001070 result = PyUnicode_New(left + (dot0-right) + 2,
1071 PyUnicode_MAX_CHAR_VALUE(path));
1072 if (!result)
1073 return NULL;
1074 kind = PyUnicode_KIND(result);
1075 data = PyUnicode_DATA(result);
1076 PyUnicode_CopyCharacters(result, 0, path, 0, (i = left));
1077 PyUnicode_CopyCharacters(result, left, path, right+1,
1078 (j = dot0-right));
1079 PyUnicode_WRITE(kind, data, i+j, 'p');
1080 PyUnicode_WRITE(kind, data, i+j+1, 'y');
1081 return result;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001082}
1083
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001084/* Given a pathname for a Python source file, its time of last
1085 modification, and a pathname for a compiled file, check whether the
1086 compiled file represents the same version of the source. If so,
1087 return a FILE pointer for the compiled file, positioned just after
1088 the header; if not, return NULL.
1089 Doesn't set an exception. */
1090
1091static FILE *
Antoine Pitrou5136ac02012-01-13 18:52:16 +01001092check_compiled_module(PyObject *pathname, struct stat *srcstat, PyObject *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001093{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001094 FILE *fp;
1095 long magic;
1096 long pyc_mtime;
Antoine Pitrou5136ac02012-01-13 18:52:16 +01001097 long pyc_size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001098
Victor Stinner2f42ae52011-03-20 00:41:24 +01001099 fp = _Py_fopen(cpathname, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001100 if (fp == NULL)
1101 return NULL;
1102 magic = PyMarshal_ReadLongFromFile(fp);
1103 if (magic != pyc_magic) {
1104 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001105 PySys_FormatStderr("# %R has bad magic\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001106 fclose(fp);
1107 return NULL;
1108 }
1109 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Antoine Pitrou5136ac02012-01-13 18:52:16 +01001110 if (pyc_mtime != srcstat->st_mtime) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001111 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001112 PySys_FormatStderr("# %R has bad mtime\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001113 fclose(fp);
1114 return NULL;
1115 }
Antoine Pitrou5136ac02012-01-13 18:52:16 +01001116 pyc_size = PyMarshal_ReadLongFromFile(fp);
1117 if (pyc_size != (srcstat->st_size & 0xFFFFFFFF)) {
1118 if (Py_VerboseFlag)
1119 PySys_FormatStderr("# %R has bad size\n", cpathname);
1120 fclose(fp);
1121 return NULL;
1122 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001123 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001124 PySys_FormatStderr("# %R matches %R\n", cpathname, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001125 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001126}
1127
1128
1129/* Read a code object from a file and check it for validity */
1130
Guido van Rossum79f25d91997-04-29 20:08:16 +00001131static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001132read_compiled_module(PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001133{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001134 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001135
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001136 co = PyMarshal_ReadLastObjectFromFile(fp);
1137 if (co == NULL)
1138 return NULL;
1139 if (!PyCode_Check(co)) {
1140 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001141 "Non-code object in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 Py_DECREF(co);
1143 return NULL;
1144 }
1145 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001146}
1147
1148
1149/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001150 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001151
Guido van Rossum79f25d91997-04-29 20:08:16 +00001152static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001153load_compiled_module(PyObject *name, PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001154{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001155 long magic;
1156 PyCodeObject *co;
1157 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001158
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001159 magic = PyMarshal_ReadLongFromFile(fp);
1160 if (magic != pyc_magic) {
1161 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001162 "Bad magic number in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001163 return NULL;
1164 }
Antoine Pitrou5136ac02012-01-13 18:52:16 +01001165 /* Skip mtime and size */
1166 (void) PyMarshal_ReadLongFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001167 (void) PyMarshal_ReadLongFromFile(fp);
1168 co = read_compiled_module(cpathname, fp);
1169 if (co == NULL)
1170 return NULL;
1171 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001172 PySys_FormatStderr("import %U # precompiled from %R\n",
1173 name, cpathname);
1174 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1175 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001176 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001177
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001178 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001179}
1180
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001181/* Parse a source file and return the corresponding code object */
1182
Guido van Rossum79f25d91997-04-29 20:08:16 +00001183static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001184parse_source_module(PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001185{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001186 PyCodeObject *co;
1187 PyObject *pathbytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001188 mod_ty mod;
1189 PyCompilerFlags flags;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001190 PyArena *arena;
1191
1192 pathbytes = PyUnicode_EncodeFSDefault(pathname);
1193 if (pathbytes == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001194 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001195
Victor Stinner2f42ae52011-03-20 00:41:24 +01001196 arena = PyArena_New();
1197 if (arena == NULL) {
1198 Py_DECREF(pathbytes);
1199 return NULL;
1200 }
1201
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001202 flags.cf_flags = 0;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001203 mod = PyParser_ASTFromFile(fp, PyBytes_AS_STRING(pathbytes), NULL,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001204 Py_file_input, 0, 0, &flags,
1205 NULL, arena);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001206 if (mod != NULL)
1207 co = PyAST_Compile(mod, PyBytes_AS_STRING(pathbytes), NULL, arena);
1208 else
1209 co = NULL;
1210 Py_DECREF(pathbytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001211 PyArena_Free(arena);
1212 return co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001213}
1214
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001215/* Write a compiled module to a file, placing the time of last
1216 modification of its source into the header.
1217 Errors are ignored, if a write error occurs an attempt is made to
1218 remove the file. */
1219
1220static void
Victor Stinner2f42ae52011-03-20 00:41:24 +01001221write_compiled_module(PyCodeObject *co, PyObject *cpathname,
1222 struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001223{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001224 Py_UCS4 *cpathname_ucs4;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001225 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001226 time_t mtime = srcstat->st_mtime;
Antoine Pitrou5136ac02012-01-13 18:52:16 +01001227 long size = srcstat->st_size & 0xFFFFFFFF;
Antoine Pitrou8ad982c2011-11-15 22:27:32 +01001228 PyObject *cpathname_tmp;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001229#ifdef MS_WINDOWS /* since Windows uses different permissions */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 mode_t mode = srcstat->st_mode & ~S_IEXEC;
Victor Stinner1f795172011-11-17 00:45:54 +01001231 wchar_t *wdirname, *wpathname, *wpathname_tmp;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001232#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001233 mode_t dirmode = (srcstat->st_mode |
1234 S_IXUSR | S_IXGRP | S_IXOTH |
1235 S_IWUSR | S_IWGRP | S_IWOTH);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001236 PyObject *dirbytes;
Antoine Pitrou707033a2011-10-17 19:28:44 +02001237 PyObject *cpathbytes, *cpathbytes_tmp;
Victor Stinner783c82c2011-04-20 03:27:51 +02001238#endif
Charles-François Natali0c929d92011-11-10 19:12:29 +01001239 int fd;
Victor Stinner783c82c2011-04-20 03:27:51 +02001240 PyObject *dirname;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001241 Py_UCS4 *dirsep;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001242 int res, ok;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001244 /* Ensure that the __pycache__ directory exists. */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001245 cpathname_ucs4 = PyUnicode_AsUCS4Copy(cpathname);
1246 if (!cpathname_ucs4)
1247 return;
1248 dirsep = rightmost_sep(cpathname_ucs4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001249 if (dirsep == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001250 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001251 PySys_FormatStderr("# no %s path found %R\n", CACHEDIR, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001252 return;
1253 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001254 dirname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
1255 cpathname_ucs4,
1256 dirsep - cpathname_ucs4);
1257 PyMem_Free(cpathname_ucs4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001258 if (dirname == NULL) {
1259 PyErr_Clear();
1260 return;
1261 }
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001262
1263#ifdef MS_WINDOWS
Victor Stinner1f795172011-11-17 00:45:54 +01001264 wdirname = PyUnicode_AsUnicode(dirname);
1265 if (wdirname == NULL) {
1266 PyErr_Clear();
1267 return;
1268 }
1269 res = CreateDirectoryW(wdirname, NULL);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001270 ok = (res != 0);
1271 if (!ok && GetLastError() == ERROR_ALREADY_EXISTS)
1272 ok = 1;
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001273#else
Victor Stinner2f42ae52011-03-20 00:41:24 +01001274 dirbytes = PyUnicode_EncodeFSDefault(dirname);
1275 if (dirbytes == NULL) {
1276 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001277 return;
1278 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001279 res = mkdir(PyBytes_AS_STRING(dirbytes), dirmode);
1280 Py_DECREF(dirbytes);
1281 if (0 <= res)
1282 ok = 1;
1283 else
1284 ok = (errno == EEXIST);
1285#endif
1286 if (!ok) {
1287 if (Py_VerboseFlag)
1288 PySys_FormatStderr("# cannot create cache dir %R\n", dirname);
1289 Py_DECREF(dirname);
1290 return;
1291 }
1292 Py_DECREF(dirname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001293
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001294 /* We first write to a tmp file and then take advantage
Antoine Pitrou8ad982c2011-11-15 22:27:32 +01001295 of atomic renaming (which *should* be true even under Windows).
1296 As in importlib, we use id(something) to generate a pseudo-random
1297 filename. mkstemp() can't be used since it doesn't allow specifying
1298 the file access permissions.
1299 */
1300 cpathname_tmp = PyUnicode_FromFormat("%U.%zd",
1301 cpathname, (Py_ssize_t) co);
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001302 if (cpathname_tmp == NULL) {
1303 PyErr_Clear();
1304 return;
1305 }
Antoine Pitrou8ad982c2011-11-15 22:27:32 +01001306#ifdef MS_WINDOWS
Victor Stinner1f795172011-11-17 00:45:54 +01001307 wpathname = PyUnicode_AsUnicode(cpathname);
1308 if (wpathname == NULL) {
1309 PyErr_Clear();
1310 return;
1311 }
1312 wpathname_tmp = PyUnicode_AsUnicode(cpathname_tmp);
1313 if (wpathname_tmp == NULL) {
1314 PyErr_Clear();
1315 return;
1316 }
1317
1318 (void)DeleteFileW(wpathname_tmp);
1319 fd = _wopen(wpathname_tmp,
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001320 O_EXCL | O_CREAT | O_WRONLY | O_BINARY,
1321 mode);
Victor Stinner783c82c2011-04-20 03:27:51 +02001322 if (0 <= fd)
1323 fp = fdopen(fd, "wb");
1324 else
1325 fp = NULL;
1326#else
Antoine Pitrou8ad982c2011-11-15 22:27:32 +01001327 cpathbytes_tmp = PyUnicode_EncodeFSDefault(cpathname_tmp);
1328 Py_DECREF(cpathname_tmp);
1329 if (cpathbytes_tmp == NULL) {
1330 PyErr_Clear();
1331 return;
1332 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001333 cpathbytes = PyUnicode_EncodeFSDefault(cpathname);
1334 if (cpathbytes == NULL) {
1335 PyErr_Clear();
1336 return;
1337 }
Charles-François Natali0c929d92011-11-10 19:12:29 +01001338 fd = open(PyBytes_AS_STRING(cpathbytes_tmp),
1339 O_CREAT | O_EXCL | O_WRONLY, 0666);
Charles-François Natalie695eec2011-10-31 20:47:31 +01001340 if (0 <= fd)
1341 fp = fdopen(fd, "wb");
1342 else
1343 fp = NULL;
Victor Stinner783c82c2011-04-20 03:27:51 +02001344#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001345 if (fp == NULL) {
1346 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001347 PySys_FormatStderr(
1348 "# can't create %R\n", cpathname);
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001349#ifdef MS_WINDOWS
1350 Py_DECREF(cpathname_tmp);
1351#else
Victor Stinner2f42ae52011-03-20 00:41:24 +01001352 Py_DECREF(cpathbytes);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001353 Py_DECREF(cpathbytes_tmp);
Victor Stinner783c82c2011-04-20 03:27:51 +02001354#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001355 return;
1356 }
1357 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Antoine Pitrou5136ac02012-01-13 18:52:16 +01001358 /* First write a 0 for mtime and size */
1359 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001360 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
1361 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001362 fflush(fp);
Antoine Pitrou58161662012-01-25 18:06:07 +01001363 /* Now write the true mtime and size (as 32-bit fields) */
Antoine Pitrou707033a2011-10-17 19:28:44 +02001364 fseek(fp, 4L, 0);
Antoine Pitrou33d15f72012-01-25 18:01:45 +01001365 assert(mtime <= 0xFFFFFFFF);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001366 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Antoine Pitrou5136ac02012-01-13 18:52:16 +01001367 PyMarshal_WriteLongToFile(size, fp, Py_MARSHAL_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001368 if (fflush(fp) != 0 || ferror(fp)) {
1369 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001370 PySys_FormatStderr("# can't write %R\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001371 /* Don't keep partial file */
1372 fclose(fp);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001373#ifdef MS_WINDOWS
Victor Stinner1f795172011-11-17 00:45:54 +01001374 (void)DeleteFileW(wpathname_tmp);
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001375 Py_DECREF(cpathname_tmp);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001376#else
Antoine Pitrou707033a2011-10-17 19:28:44 +02001377 (void) unlink(PyBytes_AS_STRING(cpathbytes_tmp));
Victor Stinner2f42ae52011-03-20 00:41:24 +01001378 Py_DECREF(cpathbytes);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001379 Py_DECREF(cpathbytes_tmp);
Victor Stinner783c82c2011-04-20 03:27:51 +02001380#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001381 return;
1382 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001383 fclose(fp);
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001384 /* Do a (hopefully) atomic rename */
1385#ifdef MS_WINDOWS
Victor Stinner1f795172011-11-17 00:45:54 +01001386 if (!MoveFileExW(wpathname_tmp, wpathname, MOVEFILE_REPLACE_EXISTING)) {
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001387 if (Py_VerboseFlag)
1388 PySys_FormatStderr("# can't write %R\n", cpathname);
1389 /* Don't keep tmp file */
Victor Stinner1f795172011-11-17 00:45:54 +01001390 (void) DeleteFileW(wpathname_tmp);
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001391 Py_DECREF(cpathname_tmp);
1392 return;
1393 }
1394 Py_DECREF(cpathname_tmp);
1395#else
Antoine Pitrou707033a2011-10-17 19:28:44 +02001396 if (rename(PyBytes_AS_STRING(cpathbytes_tmp),
1397 PyBytes_AS_STRING(cpathbytes))) {
1398 if (Py_VerboseFlag)
1399 PySys_FormatStderr("# can't write %R\n", cpathname);
1400 /* Don't keep tmp file */
1401 unlink(PyBytes_AS_STRING(cpathbytes_tmp));
1402 Py_DECREF(cpathbytes);
1403 Py_DECREF(cpathbytes_tmp);
1404 return;
1405 }
1406 Py_DECREF(cpathbytes);
1407 Py_DECREF(cpathbytes_tmp);
1408#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001409 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001410 PySys_FormatStderr("# wrote %R\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001411}
1412
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001413static void
1414update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
1415{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001416 PyObject *constants, *tmp;
1417 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001418
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001419 if (PyUnicode_Compare(co->co_filename, oldname))
1420 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001421
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001422 tmp = co->co_filename;
1423 co->co_filename = newname;
1424 Py_INCREF(co->co_filename);
1425 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001426
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001427 constants = co->co_consts;
1428 n = PyTuple_GET_SIZE(constants);
1429 for (i = 0; i < n; i++) {
1430 tmp = PyTuple_GET_ITEM(constants, i);
1431 if (PyCode_Check(tmp))
1432 update_code_filenames((PyCodeObject *)tmp,
1433 oldname, newname);
1434 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001435}
1436
Victor Stinner2f42ae52011-03-20 00:41:24 +01001437static void
1438update_compiled_module(PyCodeObject *co, PyObject *newname)
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001439{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001440 PyObject *oldname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001441
Victor Stinner2f42ae52011-03-20 00:41:24 +01001442 if (PyUnicode_Compare(co->co_filename, newname) == 0)
1443 return;
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +00001444
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001445 oldname = co->co_filename;
1446 Py_INCREF(oldname);
1447 update_code_filenames(co, oldname, newname);
1448 Py_DECREF(oldname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001449}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001450
Brett Cannon442c9b92011-03-23 16:14:42 -07001451static PyObject *
1452imp_fix_co_filename(PyObject *self, PyObject *args)
1453{
1454 PyObject *co;
1455 PyObject *file_path;
1456
1457 if (!PyArg_ParseTuple(args, "OO:_fix_co_filename", &co, &file_path))
1458 return NULL;
1459
1460 if (!PyCode_Check(co)) {
1461 PyErr_SetString(PyExc_TypeError,
1462 "first argument must be a code object");
1463 return NULL;
1464 }
1465
1466 if (!PyUnicode_Check(file_path)) {
1467 PyErr_SetString(PyExc_TypeError,
1468 "second argument must be a string");
1469 return NULL;
1470 }
1471
1472 update_compiled_module((PyCodeObject*)co, file_path);
1473
1474 Py_RETURN_NONE;
1475}
1476
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001477/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001478 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
1479 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001480
Guido van Rossum79f25d91997-04-29 20:08:16 +00001481static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001482load_source_module(PyObject *name, PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001483{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001484 struct stat st;
1485 FILE *fpc;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001486 PyObject *cpathname = NULL, *cpathbytes = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001487 PyCodeObject *co;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001488 PyObject *m = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001489
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001490 if (fstat(fileno(fp), &st) != 0) {
1491 PyErr_Format(PyExc_RuntimeError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001492 "unable to get file status from %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001493 pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001494 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001495 }
Antoine Pitrou33d15f72012-01-25 18:01:45 +01001496 if (sizeof st.st_mtime > 4) {
1497 /* Python's .pyc timestamp handling presumes that the timestamp fits
1498 in 4 bytes. Since the code only does an equality comparison,
1499 ordering is not important and we can safely ignore the higher bits
1500 (collisions are extremely unlikely).
1501 */
1502 st.st_mtime &= 0xFFFFFFFF;
1503 }
Martin v. Löwis30260a72011-10-23 17:35:46 +02001504 if (PyUnicode_READY(pathname) < 0)
1505 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001506 cpathname = make_compiled_pathname(pathname, !Py_OptimizeFlag);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001507
1508 if (cpathname != NULL)
Antoine Pitrou5136ac02012-01-13 18:52:16 +01001509 fpc = check_compiled_module(pathname, &st, cpathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001510 else
1511 fpc = NULL;
1512
1513 if (fpc) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001514 co = read_compiled_module(cpathname, fpc);
1515 fclose(fpc);
1516 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001517 goto error;
1518 update_compiled_module(co, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001519 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001520 PySys_FormatStderr("import %U # precompiled from %R\n",
1521 name, cpathname);
1522 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1523 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001524 }
1525 else {
1526 co = parse_source_module(pathname, fp);
1527 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001528 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001529 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001530 PySys_FormatStderr("import %U # from %R\n",
Victor Stinner98dbba52011-03-14 15:15:47 -04001531 name, pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001532 if (cpathname != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001533 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1534 if (ro == NULL || !PyObject_IsTrue(ro))
1535 write_compiled_module(co, cpathname, &st);
1536 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001537 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1538 pathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001539 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001540 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001541
Victor Stinner2f42ae52011-03-20 00:41:24 +01001542error:
1543 Py_XDECREF(cpathbytes);
1544 Py_XDECREF(cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001545 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001546}
1547
Christian Heimes3b06e532008-01-07 20:12:44 +00001548/* Get source file -> unicode or None
1549 * Returns the path to the py file if available, else the given path
1550 */
1551static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001552get_sourcefile(PyObject *filename)
Christian Heimes3b06e532008-01-07 20:12:44 +00001553{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001554 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001555 Py_UCS4 *fileuni;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001556 PyObject *py;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001557 struct stat statbuf;
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001558 int err;
Christian Heimes3b06e532008-01-07 20:12:44 +00001559
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001560 len = PyUnicode_GET_LENGTH(filename);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001561 if (len == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001562 Py_RETURN_NONE;
Christian Heimes3b06e532008-01-07 20:12:44 +00001563
Victor Stinnerc9abda02011-03-14 13:33:46 -04001564 /* don't match *.pyc or *.pyo? */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001565 fileuni = PyUnicode_AsUCS4Copy(filename);
1566 if (!fileuni)
1567 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001568 if (len < 5
1569 || fileuni[len-4] != '.'
1570 || (fileuni[len-3] != 'p' && fileuni[len-3] != 'P')
1571 || (fileuni[len-2] != 'y' && fileuni[len-2] != 'Y'))
1572 goto unchanged;
Christian Heimes3b06e532008-01-07 20:12:44 +00001573
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001574 /* Start by trying to turn PEP 3147 path into source path. If that
1575 * fails, just chop off the trailing character, i.e. legacy pyc path
1576 * to py.
1577 */
Victor Stinnerc9abda02011-03-14 13:33:46 -04001578 py = make_source_pathname(filename);
1579 if (py == NULL) {
1580 PyErr_Clear();
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001581 py = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, fileuni, len - 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001582 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001583 if (py == NULL)
1584 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001585
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001586 err = _Py_stat(py, &statbuf);
1587 if (err == -2)
1588 goto error;
1589 if (err == 0 && S_ISREG(statbuf.st_mode)) {
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001590 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001591 return py;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001592 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001593 Py_DECREF(py);
1594 goto unchanged;
1595
1596error:
1597 PyErr_Clear();
1598unchanged:
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001599 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001600 Py_INCREF(filename);
1601 return filename;
Christian Heimes3b06e532008-01-07 20:12:44 +00001602}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001603
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001604/* Forward */
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001605static struct filedescr *find_module(PyObject *, PyObject *, PyObject *,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001606 PyObject **, FILE **, PyObject **);
Victor Stinner53dc7352011-03-20 01:50:21 +01001607static struct _frozen * find_frozen(PyObject *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001608
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001609
1610/* Helper to test for built-in module */
1611
1612static int
Victor Stinner95872862011-03-07 18:20:56 +01001613is_builtin(PyObject *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001614{
Victor Stinner95872862011-03-07 18:20:56 +01001615 int i, cmp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001616 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
Victor Stinner95872862011-03-07 18:20:56 +01001617 cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name);
1618 if (cmp == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001619 if (PyImport_Inittab[i].initfunc == NULL)
1620 return -1;
1621 else
1622 return 1;
1623 }
1624 }
1625 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001626}
1627
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001628
Just van Rossum52e14d62002-12-30 22:08:05 +00001629/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1630 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001631 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001632 that can handle the path item. Return None if no hook could;
1633 this tells our caller it should fall back to the builtin
1634 import mechanism. Cache the result in path_importer_cache.
1635 Returns a borrowed reference. */
1636
1637static PyObject *
1638get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001639 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001640{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001641 PyObject *importer;
1642 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001643
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001644 /* These conditions are the caller's responsibility: */
1645 assert(PyList_Check(path_hooks));
1646 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001647
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001648 nhooks = PyList_Size(path_hooks);
1649 if (nhooks < 0)
1650 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001651
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001652 importer = PyDict_GetItem(path_importer_cache, p);
1653 if (importer != NULL)
1654 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001655
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001656 /* set path_importer_cache[p] to None to avoid recursion */
1657 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1658 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001659
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001660 for (j = 0; j < nhooks; j++) {
1661 PyObject *hook = PyList_GetItem(path_hooks, j);
1662 if (hook == NULL)
1663 return NULL;
1664 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1665 if (importer != NULL)
1666 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001667
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001668 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1669 return NULL;
1670 }
1671 PyErr_Clear();
1672 }
1673 if (importer == NULL) {
1674 importer = PyObject_CallFunctionObjArgs(
1675 (PyObject *)&PyNullImporter_Type, p, NULL
1676 );
1677 if (importer == NULL) {
1678 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1679 PyErr_Clear();
1680 return Py_None;
1681 }
1682 }
1683 }
1684 if (importer != NULL) {
1685 int err = PyDict_SetItem(path_importer_cache, p, importer);
1686 Py_DECREF(importer);
1687 if (err != 0)
1688 return NULL;
1689 }
1690 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001691}
1692
Christian Heimes9cd17752007-11-18 19:35:23 +00001693PyAPI_FUNC(PyObject *)
1694PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001695 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001696
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001697 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1698 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1699 importer = get_path_importer(path_importer_cache,
1700 path_hooks, path);
1701 }
1702 }
1703 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1704 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001705}
1706
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001707/* Search the path (default sys.path) for a module. Return the
1708 corresponding filedescr struct, and (via return arguments) the
1709 pathname and an open file. Return NULL if the module is not found. */
1710
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001711#ifdef MS_COREDLL
Victor Stinner4d6c1c42011-03-08 23:49:04 +01001712extern FILE *_PyWin_FindRegisteredModule(PyObject *, struct filedescr **,
1713 PyObject **p_path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001714#endif
1715
Victor Stinner547a2a62011-03-20 03:07:28 +01001716/* Forward */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001717static int case_ok(PyObject *, Py_ssize_t, PyObject *);
Victor Stinner547a2a62011-03-20 03:07:28 +01001718static int find_init_module(PyObject *);
Just van Rossum52e14d62002-12-30 22:08:05 +00001719static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001720
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001721/* Get the path of a module: get its importer and call importer.find_module()
1722 hook, or check if the module if a package (if path/__init__.py exists).
1723
1724 -1: error: a Python error occurred
1725 0: ignore: an error occurred because of invalid data, but the error is not
1726 important enough to be reported.
1727 1: get path: module not found, but *buf contains its path
1728 2: found: *p_fd is the file descriptor (IMP_HOOK or PKG_DIRECTORY)
1729 and *buf is the path */
1730
1731static int
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001732find_module_path(PyObject *fullname, PyObject *name, PyObject *path,
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001733 PyObject *path_hooks, PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001734 PyObject **p_path, PyObject **p_loader, struct filedescr **p_fd)
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001735{
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001736 PyObject *path_unicode, *filename = NULL;
1737 Py_ssize_t len, pos;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001738 struct stat statbuf;
1739 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001740 int err, result, addsep;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001741
1742 if (PyUnicode_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001743 Py_INCREF(path);
1744 path_unicode = path;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001745 }
1746 else if (PyBytes_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001747 path_unicode = PyUnicode_DecodeFSDefaultAndSize(
1748 PyBytes_AS_STRING(path), PyBytes_GET_SIZE(path));
1749 if (path_unicode == NULL)
1750 return -1;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001751 }
1752 else
1753 return 0;
1754
Victor Stinner46084ba2011-10-06 02:39:42 +02001755 if (PyUnicode_READY(path_unicode))
1756 return -1;
1757
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001758 len = PyUnicode_GET_LENGTH(path_unicode);
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001759 if (PyUnicode_FindChar(path_unicode, 0, 0, len, 1) != -1) {
1760 result = 0;
1761 goto out; /* path contains '\0' */
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001762 }
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001763
1764 /* sys.path_hooks import hook */
1765 if (p_loader != NULL) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001766 _Py_IDENTIFIER(find_module);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001767 PyObject *importer;
1768
1769 importer = get_path_importer(path_importer_cache,
1770 path_hooks, path);
1771 if (importer == NULL) {
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001772 result = -1;
1773 goto out;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001774 }
1775 /* Note: importer is a borrowed reference */
1776 if (importer != Py_None) {
1777 PyObject *loader;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001778 loader = _PyObject_CallMethodId(importer,
1779 &PyId_find_module, "O", fullname);
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001780 if (loader == NULL) {
1781 result = -1; /* error */
1782 goto out;
1783 }
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001784 if (loader != Py_None) {
1785 /* a loader was found */
1786 *p_loader = loader;
1787 *p_fd = &importhookdescr;
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001788 result = 2;
1789 goto out;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001790 }
1791 Py_DECREF(loader);
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001792 result = 0;
1793 goto out;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001794 }
1795 }
1796 /* no hook was found, use builtin import */
1797
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001798 addsep = 0;
1799 if (len > 0 && PyUnicode_READ_CHAR(path_unicode, len-1) != SEP
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001800#ifdef ALTSEP
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001801 && PyUnicode_READ_CHAR(path_unicode, len-1) != ALTSEP
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001802#endif
1803 )
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001804 addsep = 1;
1805 filename = PyUnicode_New(len + PyUnicode_GET_LENGTH(name) + addsep,
1806 Py_MAX(PyUnicode_MAX_CHAR_VALUE(path_unicode),
1807 PyUnicode_MAX_CHAR_VALUE(name)));
1808 if (filename == NULL) {
1809 result = -1;
1810 goto out;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001811 }
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001812 PyUnicode_CopyCharacters(filename, 0, path_unicode, 0, len);
1813 pos = len;
1814 if (addsep)
Victor Stinner1f795172011-11-17 00:45:54 +01001815 PyUnicode_WRITE(PyUnicode_KIND(filename),
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001816 PyUnicode_DATA(filename),
1817 pos++, SEP);
Victor Stinner1f795172011-11-17 00:45:54 +01001818 PyUnicode_CopyCharacters(filename, pos, name, 0,
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001819 PyUnicode_GET_LENGTH(name));
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001820
1821 /* Check for package import (buf holds a directory name,
1822 and there's an __init__ module in that directory */
1823#ifdef HAVE_STAT
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001824 err = _Py_stat(filename, &statbuf);
1825 if (err == -2) {
1826 result = -1;
1827 goto out;
1828 }
1829 if (err == 0 && /* it exists */
Victor Stinnerd0296212011-03-14 14:04:10 -04001830 S_ISDIR(statbuf.st_mode)) /* it's a directory */
1831 {
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001832 int match;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001833
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001834 match = case_ok(filename, 0, name);
1835 if (match < 0) {
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001836 result = -1;
1837 goto out;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001838 }
1839 if (match) { /* case matches */
1840 if (find_init_module(filename)) { /* and has __init__.py */
Victor Stinner2fd76e42011-03-14 15:19:39 -04001841 *p_path = filename;
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001842 filename = NULL;
Victor Stinnerd0296212011-03-14 14:04:10 -04001843 *p_fd = &fd_package;
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001844 result = 2;
1845 goto out;
Victor Stinnerd0296212011-03-14 14:04:10 -04001846 }
1847 else {
1848 int err;
Victor Stinnerd0296212011-03-14 14:04:10 -04001849 err = PyErr_WarnFormat(PyExc_ImportWarning, 1,
Victor Stinner547a2a62011-03-20 03:07:28 +01001850 "Not importing directory %R: missing __init__.py",
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001851 filename);
Victor Stinner547a2a62011-03-20 03:07:28 +01001852 if (err) {
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001853 result = -1;
1854 goto out;
Victor Stinner547a2a62011-03-20 03:07:28 +01001855 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001856 }
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001857 }
1858 }
1859#endif
Victor Stinner2fd76e42011-03-14 15:19:39 -04001860 *p_path = filename;
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001861 filename = NULL;
1862 result = 1;
1863 out:
1864 Py_DECREF(path_unicode);
1865 Py_XDECREF(filename);
1866 return result;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001867}
1868
1869/* Find a module in search_path_list. For each path, try
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001870 find_module_path() or try each _PyImport_Filetab suffix.
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001871
1872 If the module is found, return a file descriptor, write the path in
1873 *p_filename, write the pointer to the file object into *p_fp, and (if
1874 p_loader is not NULL) the loader into *p_loader.
1875
1876 Otherwise, raise an exception and return NULL. */
1877
Victor Stinner37580282011-03-20 01:34:43 +01001878static struct filedescr*
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001879find_module_path_list(PyObject *fullname, PyObject *name,
Victor Stinner37580282011-03-20 01:34:43 +01001880 PyObject *search_path_list, PyObject *path_hooks,
1881 PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001882 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001883{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001884 Py_ssize_t i, npath;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001885 struct filedescr *fdp = NULL;
1886 char *filemode;
1887 FILE *fp = NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001888 PyObject *prefix, *filename;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001889 int match;
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001890 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01001891
Victor Stinner37580282011-03-20 01:34:43 +01001892 npath = PyList_Size(search_path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001893 for (i = 0; i < npath; i++) {
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001894 PyObject *path;
1895 int ok;
1896
1897 path = PyList_GetItem(search_path_list, i);
1898 if (path == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001899 return NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001900
Victor Stinner2fd76e42011-03-14 15:19:39 -04001901 prefix = NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001902 ok = find_module_path(fullname, name, path,
1903 path_hooks, path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001904 &prefix, p_loader, &fdp);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001905 if (ok < 0)
1906 return NULL;
1907 if (ok == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001908 continue;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001909 if (ok == 2) {
1910 *p_path = prefix;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001911 return fdp;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001912 }
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001913
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001914 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001915 struct stat statbuf;
1916
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001917 filemode = fdp->mode;
1918 if (filemode[0] == 'U')
1919 filemode = "r" PY_STDIOTEXTMODE;
Victor Stinnerd0296212011-03-14 14:04:10 -04001920
Victor Stinner2fd76e42011-03-14 15:19:39 -04001921 filename = PyUnicode_FromFormat("%U%s", prefix, fdp->suffix);
1922 if (filename == NULL) {
1923 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001924 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001925 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001926
1927 if (Py_VerboseFlag > 1)
1928 PySys_FormatStderr("# trying %R\n", filename);
1929
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001930 err = _Py_stat(filename, &statbuf);
1931 if (err == -2) {
1932 Py_DECREF(prefix);
1933 Py_DECREF(filename);
1934 return NULL;
1935 }
1936 if (err != 0 || S_ISDIR(statbuf.st_mode)) {
Charles-François Natali1659b832011-12-07 23:17:58 +01001937 /* it doesn't exist, or it's a directory */
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001938 Py_DECREF(filename);
1939 continue;
1940 }
1941
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001942 fp = _Py_fopen(filename, filemode);
1943 if (fp == NULL) {
1944 Py_DECREF(filename);
Victor Stinner925ef392011-06-20 15:01:10 +02001945 if (PyErr_Occurred()) {
1946 Py_DECREF(prefix);
1947 return NULL;
1948 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001949 continue;
1950 }
1951 match = case_ok(filename, -(Py_ssize_t)strlen(fdp->suffix), name);
1952 if (match < 0) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001953 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001954 Py_DECREF(filename);
1955 return NULL;
1956 }
1957 if (match) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001958 Py_DECREF(prefix);
1959 *p_path = filename;
Victor Stinnerd0296212011-03-14 14:04:10 -04001960 *p_fp = fp;
1961 return fdp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001962 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001963 Py_DECREF(filename);
Victor Stinnerd0296212011-03-14 14:04:10 -04001964
1965 fclose(fp);
1966 fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001967 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001968 Py_DECREF(prefix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001969 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001970 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04001971 "No module named %R", name);
Victor Stinnerd0296212011-03-14 14:04:10 -04001972 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001973}
1974
Victor Stinner37580282011-03-20 01:34:43 +01001975/* Find a module:
1976
1977 - try find_module() of each sys.meta_path hook
1978 - try find_frozen()
1979 - try is_builtin()
1980 - try _PyWin_FindRegisteredModule() (Windows only)
1981 - otherwise, call find_module_path_list() with search_path_list (if not
1982 NULL) or sys.path
1983
Victor Stinner2fd76e42011-03-14 15:19:39 -04001984 fullname can be NULL, but only if p_loader is NULL.
1985
Victor Stinner37580282011-03-20 01:34:43 +01001986 Return:
1987
1988 - &fd_builtin (C_BUILTIN) if it is a builtin
1989 - &fd_frozen (PY_FROZEN) if it is frozen
Victor Stinner2fd76e42011-03-14 15:19:39 -04001990 - &fd_package (PKG_DIRECTORY) and write the filename into *p_path
Victor Stinner37580282011-03-20 01:34:43 +01001991 if it is a package
1992 - &importhookdescr (IMP_HOOK) and write the loader into *p_loader if a
1993 importer loader was found
1994 - a file descriptor (PY_SOURCE, PY_COMPILED, C_EXTENSION, PY_RESOURCE or
1995 PY_CODERESOURCE: see _PyImport_Filetab), write the filename into
Victor Stinner2fd76e42011-03-14 15:19:39 -04001996 *p_path and the pointer to the open file into *p_fp
Victor Stinner37580282011-03-20 01:34:43 +01001997 - NULL on error
1998
Victor Stinner2fd76e42011-03-14 15:19:39 -04001999 By default, *p_path, *p_fp and *p_loader (if set) are set to NULL.
2000 Eg. *p_path is set to NULL for a builtin package.
2001*/
Victor Stinner37580282011-03-20 01:34:43 +01002002
2003static struct filedescr *
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002004find_module(PyObject *fullname, PyObject *name, PyObject *search_path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04002005 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Victor Stinner37580282011-03-20 01:34:43 +01002006{
2007 Py_ssize_t i, npath;
2008 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
2009 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
2010 PyObject *path_hooks, *path_importer_cache;
Victor Stinner37580282011-03-20 01:34:43 +01002011
Victor Stinner2fd76e42011-03-14 15:19:39 -04002012 *p_path = NULL;
Victor Stinner37580282011-03-20 01:34:43 +01002013 *p_fp = NULL;
2014 if (p_loader != NULL)
2015 *p_loader = NULL;
2016
Victor Stinner37580282011-03-20 01:34:43 +01002017 /* sys.meta_path import hook */
2018 if (p_loader != NULL) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002019 _Py_IDENTIFIER(find_module);
Victor Stinner37580282011-03-20 01:34:43 +01002020 PyObject *meta_path;
2021
2022 meta_path = PySys_GetObject("meta_path");
2023 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinner16191322011-09-15 19:28:05 +02002024 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002025 "sys.meta_path must be a list of "
2026 "import hooks");
2027 return NULL;
2028 }
2029 Py_INCREF(meta_path); /* zap guard */
2030 npath = PyList_Size(meta_path);
2031 for (i = 0; i < npath; i++) {
2032 PyObject *loader;
2033 PyObject *hook = PyList_GetItem(meta_path, i);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002034 loader = _PyObject_CallMethodId(hook, &PyId_find_module,
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002035 "OO", fullname,
Victor Stinner37580282011-03-20 01:34:43 +01002036 search_path_list != NULL ?
2037 search_path_list : Py_None);
2038 if (loader == NULL) {
2039 Py_DECREF(meta_path);
2040 return NULL; /* true error */
2041 }
2042 if (loader != Py_None) {
2043 /* a loader was found */
2044 *p_loader = loader;
2045 Py_DECREF(meta_path);
2046 return &importhookdescr;
2047 }
2048 Py_DECREF(loader);
2049 }
2050 Py_DECREF(meta_path);
2051 }
2052
Victor Stinnerdf75a022011-03-14 13:40:04 -04002053 if (find_frozen(fullname) != NULL)
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002054 return &fd_frozen;
Victor Stinner37580282011-03-20 01:34:43 +01002055
2056 if (search_path_list == NULL) {
2057#ifdef MS_COREDLL
2058 FILE *fp;
2059 struct filedescr *fdp;
Victor Stinner37580282011-03-20 01:34:43 +01002060#endif
Victor Stinnerdf75a022011-03-14 13:40:04 -04002061 if (is_builtin(name))
Victor Stinner37580282011-03-20 01:34:43 +01002062 return &fd_builtin;
Victor Stinner37580282011-03-20 01:34:43 +01002063#ifdef MS_COREDLL
Victor Stinner2fd76e42011-03-14 15:19:39 -04002064 fp = _PyWin_FindRegisteredModule(name, &fdp, p_path);
Victor Stinner37580282011-03-20 01:34:43 +01002065 if (fp != NULL) {
Victor Stinner37580282011-03-20 01:34:43 +01002066 *p_fp = fp;
2067 return fdp;
2068 }
2069 else if (PyErr_Occurred())
2070 return NULL;
2071#endif
Victor Stinner37580282011-03-20 01:34:43 +01002072 search_path_list = PySys_GetObject("path");
2073 }
2074
2075 if (search_path_list == NULL || !PyList_Check(search_path_list)) {
Victor Stinner16191322011-09-15 19:28:05 +02002076 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002077 "sys.path must be a list of directory names");
2078 return NULL;
2079 }
2080
2081 path_hooks = PySys_GetObject("path_hooks");
2082 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinner16191322011-09-15 19:28:05 +02002083 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002084 "sys.path_hooks must be a list of "
2085 "import hooks");
2086 return NULL;
2087 }
2088 path_importer_cache = PySys_GetObject("path_importer_cache");
2089 if (path_importer_cache == NULL ||
2090 !PyDict_Check(path_importer_cache)) {
Victor Stinner16191322011-09-15 19:28:05 +02002091 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002092 "sys.path_importer_cache must be a dict");
2093 return NULL;
2094 }
2095
2096 return find_module_path_list(fullname, name,
2097 search_path_list, path_hooks,
2098 path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04002099 p_path, p_fp, p_loader);
Victor Stinner37580282011-03-20 01:34:43 +01002100}
2101
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002102/* case_bytes(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00002103 * The arguments here are tricky, best shown by example:
2104 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
2105 * ^ ^ ^ ^
2106 * |--------------------- buf ---------------------|
2107 * |------------------- len ------------------|
2108 * |------ name -------|
2109 * |----- namelen -----|
2110 * buf is the full path, but len only counts up to (& exclusive of) the
2111 * extension. name is the module name, also exclusive of extension.
2112 *
2113 * We've already done a successful stat() or fopen() on buf, so know that
2114 * there's some match, possibly case-insensitive.
2115 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002116 * case_bytes() is to return 1 if there's a case-sensitive match for
2117 * name, else 0. case_bytes() is also to return 1 if envar PYTHONCASEOK
Tim Peters50d8d372001-02-28 05:34:27 +00002118 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00002119 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002120 * case_bytes() is used to implement case-sensitive import semantics even
Tim Peters50d8d372001-02-28 05:34:27 +00002121 * on platforms with case-insensitive filesystems. It's trivial to implement
2122 * for case-sensitive filesystems. It's pretty much a cross-platform
2123 * nightmare for systems with case-insensitive filesystems.
2124 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00002125
Tim Peters50d8d372001-02-28 05:34:27 +00002126/* First we may need a pile of platform-specific header files; the sequence
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002127 * of #if's here should match the sequence in the body of case_bytes().
Tim Peters50d8d372001-02-28 05:34:27 +00002128 */
Jason Tishler7961aa62005-05-20 00:56:54 +00002129#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002130#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00002131
Tim Peters50d8d372001-02-28 05:34:27 +00002132#elif defined(DJGPP)
2133#include <dir.h>
2134
Jason Tishler7961aa62005-05-20 00:56:54 +00002135#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00002136#include <sys/types.h>
2137#include <dirent.h>
2138
Andrew MacIntyred9400542002-02-26 11:41:34 +00002139#elif defined(PYOS_OS2)
2140#define INCL_DOS
2141#define INCL_DOSERRORS
2142#define INCL_NOPMAPI
2143#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00002144#endif
2145
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002146#if defined(DJGPP) \
2147 || ((defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) \
2148 && defined(HAVE_DIRENT_H)) \
2149 || defined(PYOS_OS2)
2150# define USE_CASE_OK_BYTES
2151#endif
2152
2153
2154#ifdef USE_CASE_OK_BYTES
Guido van Rossum0980bd91998-02-13 17:18:36 +00002155static int
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002156case_bytes(char *buf, Py_ssize_t len, Py_ssize_t namelen, const char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002157{
Tim Peters50d8d372001-02-28 05:34:27 +00002158/* Pick a platform-specific implementation; the sequence of #if's here should
2159 * match the sequence just above.
2160 */
2161
Tim Peters50d8d372001-02-28 05:34:27 +00002162/* DJGPP */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002163#if defined(DJGPP)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002164 struct ffblk ffblk;
2165 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00002166
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002167 if (Py_GETENV("PYTHONCASEOK") != NULL)
2168 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00002169
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002170 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
2171 if (done) {
2172 PyErr_Format(PyExc_NameError,
2173 "Can't find file for module %.100s\n(filename %.300s)",
2174 name, buf);
Victor Stinner9c61e242011-03-22 01:22:27 +01002175 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002176 }
2177 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002178
Jason Tishler7961aa62005-05-20 00:56:54 +00002179/* new-fangled macintosh (macosx) or Cygwin */
2180#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002181 DIR *dirp;
2182 struct dirent *dp;
2183 char dirname[MAXPATHLEN + 1];
2184 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00002185
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002186 if (Py_GETENV("PYTHONCASEOK") != NULL)
2187 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00002188
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002189 /* Copy the dir component into dirname; substitute "." if empty */
2190 if (dirlen <= 0) {
2191 dirname[0] = '.';
2192 dirname[1] = '\0';
2193 }
2194 else {
2195 assert(dirlen <= MAXPATHLEN);
2196 memcpy(dirname, buf, dirlen);
2197 dirname[dirlen] = '\0';
2198 }
2199 /* Open the directory and search the entries for an exact match. */
2200 dirp = opendir(dirname);
2201 if (dirp) {
2202 char *nameWithExt = buf + len - namelen;
2203 while ((dp = readdir(dirp)) != NULL) {
2204 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00002205#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002206 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00002207#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002208 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00002209#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002210 if (thislen >= namelen &&
2211 strcmp(dp->d_name, nameWithExt) == 0) {
2212 (void)closedir(dirp);
2213 return 1; /* Found */
2214 }
2215 }
2216 (void)closedir(dirp);
2217 }
2218 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00002219
Andrew MacIntyred9400542002-02-26 11:41:34 +00002220/* OS/2 */
2221#elif defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002222 HDIR hdir = 1;
2223 ULONG srchcnt = 1;
2224 FILEFINDBUF3 ffbuf;
2225 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002226
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002227 if (Py_GETENV("PYTHONCASEOK") != NULL)
2228 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002229
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002230 rc = DosFindFirst(buf,
2231 &hdir,
2232 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
2233 &ffbuf, sizeof(ffbuf),
2234 &srchcnt,
2235 FIL_STANDARD);
2236 if (rc != NO_ERROR)
2237 return 0;
2238 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002239
Tim Peters50d8d372001-02-28 05:34:27 +00002240/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
2241#else
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002242# error "USE_CASE_OK_BYTES is not correctly defined"
2243#endif
2244}
2245#endif
2246
2247/*
2248 * Check if a filename case matchs the name case. We've already done a
2249 * successful stat() or fopen() on buf, so know that there's some match,
2250 * possibly case-insensitive.
2251 *
2252 * case_ok() is to return 1 if there's a case-sensitive match for name, 0 if it
2253 * the filename doesn't match, or -1 on error. case_ok() is also to return 1
2254 * if envar PYTHONCASEOK exists.
2255 *
2256 * case_ok() is used to implement case-sensitive import semantics even
2257 * on platforms with case-insensitive filesystems. It's trivial to implement
2258 * for case-sensitive filesystems. It's pretty much a cross-platform
2259 * nightmare for systems with case-insensitive filesystems.
2260 */
2261
2262static int
2263case_ok(PyObject *filename, Py_ssize_t prefix_delta, PyObject *name)
2264{
2265#ifdef MS_WINDOWS
2266 WIN32_FIND_DATAW data;
2267 HANDLE h;
2268 int cmp;
Victor Stinner1f795172011-11-17 00:45:54 +01002269 wchar_t *wfilename, *wname;
Victor Stinner8c981892011-10-11 22:27:13 +02002270 Py_ssize_t wname_len;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002271
2272 if (Py_GETENV("PYTHONCASEOK") != NULL)
2273 return 1;
2274
Victor Stinner1f795172011-11-17 00:45:54 +01002275 wfilename = PyUnicode_AsUnicode(filename);
2276 if (wfilename == NULL)
2277 return -1;
2278
2279 h = FindFirstFileW(wfilename, &data);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002280 if (h == INVALID_HANDLE_VALUE) {
2281 PyErr_Format(PyExc_NameError,
2282 "Can't find file for module %R\n(filename %R)",
2283 name, filename);
Victor Stinner1f795172011-11-17 00:45:54 +01002284 return -1;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002285 }
2286 FindClose(h);
Victor Stinnerbeac78b2011-10-11 21:55:01 +02002287
2288 wname = PyUnicode_AsUnicodeAndSize(name, &wname_len);
2289 if (wname == NULL)
2290 return -1;
2291
2292 cmp = wcsncmp(data.cFileName, wname, wname_len);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002293 return cmp == 0;
2294#elif defined(USE_CASE_OK_BYTES)
2295 int match;
2296 PyObject *filebytes, *namebytes;
2297 filebytes = PyUnicode_EncodeFSDefault(filename);
2298 if (filebytes == NULL)
2299 return -1;
2300 namebytes = PyUnicode_EncodeFSDefault(name);
2301 if (namebytes == NULL) {
2302 Py_DECREF(filebytes);
2303 return -1;
2304 }
2305 match = case_bytes(
2306 PyBytes_AS_STRING(filebytes),
2307 PyBytes_GET_SIZE(filebytes) + prefix_delta,
Victor Stinner1304f2d2011-03-20 04:28:55 +01002308 PyBytes_GET_SIZE(namebytes),
2309 PyBytes_AS_STRING(namebytes));
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002310 Py_DECREF(filebytes);
2311 Py_DECREF(namebytes);
2312 return match;
2313#else
2314 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002315 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002316
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002317#endif
Tim Peters50d8d372001-02-28 05:34:27 +00002318}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002319
Guido van Rossum197346f1997-10-31 18:38:52 +00002320#ifdef HAVE_STAT
Victor Stinner4f4402c2010-08-14 14:50:26 +00002321
Victor Stinner547a2a62011-03-20 03:07:28 +01002322/* Helper to look for __init__.py or __init__.py[co] in potential package.
2323 Return 1 if __init__ was found, 0 if not, or -1 on error. */
Guido van Rossum197346f1997-10-31 18:38:52 +00002324static int
Victor Stinner547a2a62011-03-20 03:07:28 +01002325find_init_module(PyObject *directory)
Guido van Rossum197346f1997-10-31 18:38:52 +00002326{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002327 struct stat statbuf;
Victor Stinner547a2a62011-03-20 03:07:28 +01002328 PyObject *filename;
2329 int match;
Victor Stinnerbd0850b2011-12-18 20:47:30 +01002330 int err;
Guido van Rossum197346f1997-10-31 18:38:52 +00002331
Victor Stinner547a2a62011-03-20 03:07:28 +01002332 filename = PyUnicode_FromFormat("%U%c__init__.py", directory, SEP);
2333 if (filename == NULL)
2334 return -1;
Victor Stinnerbd0850b2011-12-18 20:47:30 +01002335 err = _Py_stat(filename, &statbuf);
2336 if (err == -2)
2337 return -1;
2338 if (err == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002339 /* 3=len(".py") */
2340 match = case_ok(filename, -3, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002341 if (match < 0) {
2342 Py_DECREF(filename);
2343 return -1;
2344 }
2345 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002346 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002347 return 1;
2348 }
2349 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002350 Py_DECREF(filename);
2351
2352 filename = PyUnicode_FromFormat("%U%c__init__.py%c",
2353 directory, SEP, Py_OptimizeFlag ? 'o' : 'c');
2354 if (filename == NULL)
2355 return -1;
Victor Stinnerbd0850b2011-12-18 20:47:30 +01002356 err = _Py_stat(filename, &statbuf);
2357 if (err == -2) {
2358 Py_DECREF(filename);
2359 return -1;
2360 }
2361 if (err == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002362 /* 4=len(".pyc") */
2363 match = case_ok(filename, -4, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002364 if (match < 0) {
2365 Py_DECREF(filename);
2366 return -1;
2367 }
2368 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002369 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002370 return 1;
2371 }
2372 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002373 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002374 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00002375}
Guido van Rossum48a680c2001-03-02 06:34:14 +00002376
Guido van Rossum197346f1997-10-31 18:38:52 +00002377#endif /* HAVE_STAT */
2378
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002379
Victor Stinner95872862011-03-07 18:20:56 +01002380static int init_builtin(PyObject *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002381
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002382/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00002383 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002384 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002385
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002386static int
Victor Stinner95872862011-03-07 18:20:56 +01002387init_builtin(PyObject *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002388{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002389 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002390
Victor Stinner95872862011-03-07 18:20:56 +01002391 if (_PyImport_FindExtensionObject(name, name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002392 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002393
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002394 for (p = PyImport_Inittab; p->name != NULL; p++) {
2395 PyObject *mod;
Antoine Pitrou6c40eb72012-01-18 20:16:09 +01002396 PyModuleDef *def;
Victor Stinner95872862011-03-07 18:20:56 +01002397 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002398 if (p->initfunc == NULL) {
2399 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002400 "Cannot re-init internal module %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002401 name);
2402 return -1;
2403 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002404 mod = (*p->initfunc)();
2405 if (mod == 0)
2406 return -1;
Antoine Pitrou6c40eb72012-01-18 20:16:09 +01002407 /* Remember pointer to module init function. */
2408 def = PyModule_GetDef(mod);
2409 def->m_base.m_init = p->initfunc;
Victor Stinner95872862011-03-07 18:20:56 +01002410 if (_PyImport_FixupExtensionObject(mod, name, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002411 return -1;
2412 /* FixupExtension has put the module into sys.modules,
2413 so we can release our own reference. */
2414 Py_DECREF(mod);
2415 return 1;
2416 }
2417 }
2418 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002419}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002420
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002421
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002422/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002423
Guido van Rossumcfd0a221996-06-17 17:06:34 +00002424static struct _frozen *
Victor Stinner53dc7352011-03-20 01:50:21 +01002425find_frozen(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002426{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002427 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002428
Victor Stinner53dc7352011-03-20 01:50:21 +01002429 if (name == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002430 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00002431
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002432 for (p = PyImport_FrozenModules; ; p++) {
2433 if (p->name == NULL)
2434 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01002435 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002436 break;
2437 }
2438 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002439}
2440
Guido van Rossum79f25d91997-04-29 20:08:16 +00002441static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002442get_frozen_object(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002443{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002444 struct _frozen *p = find_frozen(name);
2445 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002447 if (p == NULL) {
2448 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002449 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002450 name);
2451 return NULL;
2452 }
2453 if (p->code == NULL) {
2454 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002455 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002456 name);
2457 return NULL;
2458 }
2459 size = p->size;
2460 if (size < 0)
2461 size = -size;
2462 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002463}
2464
Brett Cannon8d110132009-03-15 02:20:16 +00002465static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002466is_frozen_package(PyObject *name)
Brett Cannon8d110132009-03-15 02:20:16 +00002467{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002468 struct _frozen *p = find_frozen(name);
2469 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00002470
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002471 if (p == NULL) {
2472 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002473 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002474 name);
2475 return NULL;
2476 }
Brett Cannon8d110132009-03-15 02:20:16 +00002477
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002478 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00002479
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002480 if (size < 0)
2481 Py_RETURN_TRUE;
2482 else
2483 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00002484}
2485
2486
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002487/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00002488 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002489 an exception set if the initialization failed.
2490 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002491
2492int
Victor Stinner53dc7352011-03-20 01:50:21 +01002493PyImport_ImportFrozenModuleObject(PyObject *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002494{
Victor Stinner53dc7352011-03-20 01:50:21 +01002495 struct _frozen *p;
2496 PyObject *co, *m, *path;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002497 int ispackage;
2498 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002499
Victor Stinner53dc7352011-03-20 01:50:21 +01002500 p = find_frozen(name);
2501
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002502 if (p == NULL)
2503 return 0;
2504 if (p->code == NULL) {
2505 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002506 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002507 name);
2508 return -1;
2509 }
2510 size = p->size;
2511 ispackage = (size < 0);
2512 if (ispackage)
2513 size = -size;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002514 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2515 if (co == NULL)
2516 return -1;
2517 if (!PyCode_Check(co)) {
2518 PyErr_Format(PyExc_TypeError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002519 "frozen object %R is not a code object",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002520 name);
2521 goto err_return;
2522 }
2523 if (ispackage) {
2524 /* Set __path__ to the package name */
Victor Stinner53dc7352011-03-20 01:50:21 +01002525 PyObject *d, *l;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002526 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01002527 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002528 if (m == NULL)
2529 goto err_return;
2530 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002531 l = PyList_New(1);
2532 if (l == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002533 goto err_return;
2534 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002535 Py_INCREF(name);
2536 PyList_SET_ITEM(l, 0, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002537 err = PyDict_SetItemString(d, "__path__", l);
2538 Py_DECREF(l);
2539 if (err != 0)
2540 goto err_return;
2541 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002542 path = PyUnicode_FromString("<frozen>");
2543 if (path == NULL)
2544 goto err_return;
2545 m = PyImport_ExecCodeModuleObject(name, co, path, NULL);
2546 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002547 if (m == NULL)
2548 goto err_return;
2549 Py_DECREF(co);
2550 Py_DECREF(m);
2551 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002552err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002553 Py_DECREF(co);
2554 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002555}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002556
Victor Stinner53dc7352011-03-20 01:50:21 +01002557int
2558PyImport_ImportFrozenModule(char *name)
2559{
2560 PyObject *nameobj;
2561 int ret;
2562 nameobj = PyUnicode_InternFromString(name);
2563 if (nameobj == NULL)
2564 return -1;
2565 ret = PyImport_ImportFrozenModuleObject(nameobj);
2566 Py_DECREF(nameobj);
2567 return ret;
2568}
2569
Guido van Rossum74e6a111994-08-29 12:54:38 +00002570
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002571/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002572 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002573
Guido van Rossum79f25d91997-04-29 20:08:16 +00002574PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002575PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002576{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002577 PyObject *pname;
2578 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002579
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002580 pname = PyUnicode_FromString(name);
2581 if (pname == NULL)
2582 return NULL;
2583 result = PyImport_Import(pname);
2584 Py_DECREF(pname);
2585 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002586}
2587
Christian Heimes072c0f12008-01-03 23:01:04 +00002588/* Import a module without blocking
2589 *
2590 * At first it tries to fetch the module from sys.modules. If the module was
2591 * never loaded before it loads it with PyImport_ImportModule() unless another
2592 * thread holds the import lock. In the latter case the function raises an
2593 * ImportError instead of blocking.
2594 *
2595 * Returns the module object with incremented ref count.
2596 */
2597PyObject *
2598PyImport_ImportModuleNoBlock(const char *name)
2599{
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002600 PyObject *nameobj, *modules, *result;
Victor Stinner0af03062011-09-02 00:11:43 +02002601#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002602 long me;
Victor Stinner0af03062011-09-02 00:11:43 +02002603#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002604
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002605 /* Try to get the module from sys.modules[name] */
2606 modules = PyImport_GetModuleDict();
2607 if (modules == NULL)
2608 return NULL;
Christian Heimes072c0f12008-01-03 23:01:04 +00002609
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002610 nameobj = PyUnicode_FromString(name);
2611 if (nameobj == NULL)
2612 return NULL;
2613 result = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002614 if (result != NULL) {
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002615 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002616 Py_INCREF(result);
2617 return result;
2618 }
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002619 PyErr_Clear();
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002620#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002621 /* check the import lock
2622 * me might be -1 but I ignore the error here, the lock function
2623 * takes care of the problem */
2624 me = PyThread_get_thread_ident();
2625 if (import_lock_thread == -1 || import_lock_thread == me) {
2626 /* no thread or me is holding the lock */
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002627 result = PyImport_Import(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002628 }
2629 else {
2630 PyErr_Format(PyExc_ImportError,
Victor Stinnerc24c8102011-03-13 22:38:06 -04002631 "Failed to import %R because the import lock"
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002632 "is held by another thread.",
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002633 nameobj);
2634 result = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002635 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002636#else
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002637 result = PyImport_Import(nameobj);
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002638#endif
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002639 Py_DECREF(nameobj);
2640 return result;
Christian Heimes072c0f12008-01-03 23:01:04 +00002641}
2642
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002643
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002644PyObject *
Brett Cannonfd074152012-04-14 14:10:13 -04002645PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals,
2646 PyObject *locals, PyObject *given_fromlist,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002647 int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002648{
Brett Cannonfd074152012-04-14 14:10:13 -04002649 _Py_IDENTIFIER(__import__);
2650 _Py_IDENTIFIER(__package__);
2651 _Py_IDENTIFIER(__path__);
2652 _Py_IDENTIFIER(__name__);
2653 _Py_IDENTIFIER(_find_and_load);
2654 _Py_IDENTIFIER(_handle_fromlist);
2655 _Py_static_string(single_dot, ".");
2656 PyObject *abs_name = NULL;
2657 PyObject *builtins_import = NULL;
2658 PyObject *final_mod = NULL;
2659 PyObject *mod = NULL;
2660 PyObject *package = NULL;
2661 PyObject *globals = NULL;
2662 PyObject *fromlist = NULL;
2663 PyInterpreterState *interp = PyThreadState_GET()->interp;
2664
2665 /* Make sure to use default values so as to not have
2666 PyObject_CallMethodObjArgs() truncate the parameter list because of a
2667 NULL argument. */
2668 if (given_globals == NULL) {
2669 globals = PyDict_New();
2670 if (globals == NULL) {
2671 goto error;
2672 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002673 }
Brett Cannonfd074152012-04-14 14:10:13 -04002674 else {
2675 /* Only have to care what given_globals is if it will be used
2676 fortsomething. */
2677 if (level > 0 && !PyDict_Check(given_globals)) {
2678 PyErr_SetString(PyExc_TypeError, "globals must be a dict");
2679 goto error;
2680 }
2681 globals = given_globals;
2682 Py_INCREF(globals);
2683 }
2684
2685 if (given_fromlist == NULL) {
2686 fromlist = PyList_New(0);
2687 if (fromlist == NULL) {
2688 goto error;
2689 }
2690 }
2691 else {
2692 fromlist = given_fromlist;
2693 Py_INCREF(fromlist);
2694 }
2695 if (name == NULL) {
2696 PyErr_SetString(PyExc_ValueError, "Empty module name");
2697 goto error;
2698 }
2699
2700 /* The below code is importlib.__import__() & _gcd_import(), ported to C
2701 for added performance. */
2702
2703 if (!PyUnicode_Check(name)) {
2704 PyErr_SetString(PyExc_TypeError, "module name must be a string");
2705 goto error;
2706 }
2707 else if (PyUnicode_READY(name) < 0) {
2708 goto error;
2709 }
2710 if (level < 0) {
2711 PyErr_SetString(PyExc_ValueError, "level must be >= 0");
2712 goto error;
2713 }
2714 else if (level > 0) {
2715 package = _PyDict_GetItemId(globals, &PyId___package__);
2716 if (package != NULL && package != Py_None) {
2717 Py_INCREF(package);
2718 if (!PyUnicode_Check(package)) {
2719 PyErr_SetString(PyExc_TypeError, "package must be a string");
2720 goto error;
2721 }
2722 }
2723 else {
2724 package = _PyDict_GetItemIdWithError(globals, &PyId___name__);
2725 if (package == NULL) {
2726 goto error;
2727 }
2728 else if (!PyUnicode_Check(package)) {
2729 PyErr_SetString(PyExc_TypeError, "__name__ must be a string");
2730 }
2731 Py_INCREF(package);
2732
2733 if (_PyDict_GetItemId(globals, &PyId___path__) == NULL) {
Brett Cannon740fce02012-04-14 14:23:49 -04002734 PyObject *partition = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04002735 PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot);
2736 if (borrowed_dot == NULL) {
2737 goto error;
2738 }
Brett Cannon740fce02012-04-14 14:23:49 -04002739 partition = PyUnicode_RPartition(package, borrowed_dot);
Brett Cannonfd074152012-04-14 14:10:13 -04002740 Py_DECREF(package);
2741 if (partition == NULL) {
2742 goto error;
2743 }
2744 package = PyTuple_GET_ITEM(partition, 0);
2745 Py_INCREF(package);
2746 Py_DECREF(partition);
2747 }
2748 }
2749
2750 if (PyDict_GetItem(interp->modules, package) == NULL) {
2751 PyErr_Format(PyExc_SystemError,
2752 "Parent module %R not loaded, cannot perform relative "
2753 "import", package);
2754 goto error;
2755 }
2756 }
2757 else { /* level == 0 */
2758 if (PyUnicode_GET_LENGTH(name) == 0) {
2759 PyErr_SetString(PyExc_ValueError, "Empty module name");
2760 goto error;
2761 }
2762 package = Py_None;
2763 Py_INCREF(package);
2764 }
2765
2766 if (level > 0) {
2767 Py_ssize_t last_dot = PyUnicode_GET_LENGTH(package);
2768 PyObject *base = NULL;
2769 int level_up = 1;
2770
2771 for (level_up = 1; level_up < level; level_up += 1) {
2772 last_dot = PyUnicode_FindChar(package, '.', 0, last_dot, -1);
2773 if (last_dot == -2) {
2774 goto error;
2775 }
2776 else if (last_dot == -1) {
2777 PyErr_SetString(PyExc_ValueError,
2778 "attempted relative import beyond top-level "
2779 "package");
2780 goto error;
2781 }
2782 }
2783 base = PyUnicode_Substring(package, 0, last_dot);
2784 if (PyUnicode_GET_LENGTH(name) > 0) {
Antoine Pitrou538ba2a2012-04-16 21:52:45 +02002785 PyObject *borrowed_dot, *seq = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04002786
2787 borrowed_dot = _PyUnicode_FromId(&single_dot);
Antoine Pitrou538ba2a2012-04-16 21:52:45 +02002788 seq = PyTuple_Pack(2, base, name);
2789 Py_DECREF(base);
Brett Cannonfd074152012-04-14 14:10:13 -04002790 if (borrowed_dot == NULL || seq == NULL) {
2791 goto error;
2792 }
2793
2794 abs_name = PyUnicode_Join(borrowed_dot, seq);
2795 Py_DECREF(seq);
2796 if (abs_name == NULL) {
2797 goto error;
2798 }
2799 }
2800 else {
2801 abs_name = base;
2802 }
2803 }
2804 else {
2805 abs_name = name;
2806 Py_INCREF(abs_name);
2807 }
2808
Brian Curtine6b299f2012-04-14 14:19:33 -05002809#ifdef WITH_THREAD
Brett Cannonfd074152012-04-14 14:10:13 -04002810 _PyImport_AcquireLock();
2811#endif
2812 /* From this point forward, goto error_with_unlock! */
2813 if (PyDict_Check(globals)) {
2814 builtins_import = _PyDict_GetItemId(globals, &PyId___import__);
2815 }
2816 if (builtins_import == NULL) {
2817 builtins_import = _PyDict_GetItemId(interp->builtins, &PyId___import__);
2818 if (builtins_import == NULL) {
2819 Py_FatalError("__import__ missing");
2820 }
2821 }
2822 Py_INCREF(builtins_import);
2823
2824 mod = PyDict_GetItem(interp->modules, abs_name);
2825 if (mod == Py_None) {
Brett Cannon27fc5282012-04-15 14:15:31 -04002826 PyObject *msg = PyUnicode_FromFormat("import of %R halted; "
2827 "None in sys.modules", abs_name);
2828 if (msg != NULL) {
2829 PyErr_SetFromImportErrorWithName(msg, abs_name);
2830 }
Antoine Pitrou71382cb2012-04-16 18:48:49 +02002831 mod = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04002832 goto error_with_unlock;
2833 }
2834 else if (mod != NULL) {
2835 Py_INCREF(mod);
2836 }
2837 else {
2838 mod = _PyObject_CallMethodObjIdArgs(interp->importlib,
2839 &PyId__find_and_load, abs_name,
2840 builtins_import, NULL);
2841 if (mod == NULL) {
2842 goto error_with_unlock;
2843 }
2844 }
2845
2846 if (PyObject_Not(fromlist)) {
2847 if (level == 0 || PyUnicode_GET_LENGTH(name) > 0) {
2848 PyObject *front = NULL;
Brian Curtine6b299f2012-04-14 14:19:33 -05002849 PyObject *partition = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04002850 PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot);
2851
2852 if (borrowed_dot == NULL) {
2853 goto error_with_unlock;
2854 }
2855
Brian Curtine6b299f2012-04-14 14:19:33 -05002856 partition = PyUnicode_Partition(name, borrowed_dot);
Brett Cannonfd074152012-04-14 14:10:13 -04002857 if (partition == NULL) {
2858 goto error_with_unlock;
2859 }
2860
2861 front = PyTuple_GET_ITEM(partition, 0);
2862 Py_INCREF(front);
2863 Py_DECREF(partition);
2864
2865 if (level == 0) {
Brett Cannon881535b2012-04-15 15:24:04 -04002866 if (PyUnicode_GET_LENGTH(name) ==
2867 PyUnicode_GET_LENGTH(front)) {
2868 final_mod = mod;
Brett Cannon49f8d8b2012-04-14 21:50:00 -04002869 }
2870 else {
Brett Cannon881535b2012-04-15 15:24:04 -04002871 final_mod = PyDict_GetItem(interp->modules, front);
2872 if (final_mod == NULL) {
2873 PyErr_Format(PyExc_KeyError,
2874 "%R not in sys.modules as expected", front);
2875 }
Brett Cannon49f8d8b2012-04-14 21:50:00 -04002876 }
Brett Cannon881535b2012-04-15 15:24:04 -04002877 Py_DECREF(front);
2878 if (final_mod == NULL) {
2879 goto error_with_unlock;
2880 }
2881 Py_INCREF(final_mod);
Brett Cannonfd074152012-04-14 14:10:13 -04002882 }
2883 else {
Antoine Pitrou22a1d172012-04-16 22:06:21 +02002884 Py_ssize_t cut_off = PyUnicode_GET_LENGTH(name) -
2885 PyUnicode_GET_LENGTH(front);
2886 Py_ssize_t abs_name_len = PyUnicode_GET_LENGTH(abs_name);
Brett Cannon49f8d8b2012-04-14 21:50:00 -04002887 PyObject *to_return = PyUnicode_Substring(abs_name, 0,
Brett Cannonfd074152012-04-14 14:10:13 -04002888 abs_name_len - cut_off);
Antoine Pitrou22a1d172012-04-16 22:06:21 +02002889 Py_DECREF(front);
2890 if (to_return == NULL) {
2891 goto error_with_unlock;
2892 }
Brett Cannonfd074152012-04-14 14:10:13 -04002893
2894 final_mod = PyDict_GetItem(interp->modules, to_return);
Brett Cannonfd074152012-04-14 14:10:13 -04002895 Py_DECREF(to_return);
Brett Cannon49f8d8b2012-04-14 21:50:00 -04002896 if (final_mod == NULL) {
2897 PyErr_Format(PyExc_KeyError,
2898 "%R not in sys.modules as expected",
2899 to_return);
2900 }
2901 else {
2902 Py_INCREF(final_mod);
2903 }
Brett Cannonfd074152012-04-14 14:10:13 -04002904 }
2905 }
2906 else {
2907 final_mod = mod;
2908 Py_INCREF(mod);
2909 }
2910 }
2911 else {
2912 final_mod = _PyObject_CallMethodObjIdArgs(interp->importlib,
2913 &PyId__handle_fromlist, mod,
2914 fromlist, builtins_import,
2915 NULL);
2916 }
2917 error_with_unlock:
Brian Curtine6b299f2012-04-14 14:19:33 -05002918#ifdef WITH_THREAD
Brett Cannonfd074152012-04-14 14:10:13 -04002919 if (_PyImport_ReleaseLock() < 0) {
2920 PyErr_SetString(PyExc_RuntimeError, "not holding the import lock");
2921 }
2922#endif
2923 error:
2924 Py_XDECREF(abs_name);
2925 Py_XDECREF(builtins_import);
2926 Py_XDECREF(mod);
2927 Py_XDECREF(package);
2928 Py_XDECREF(globals);
2929 Py_XDECREF(fromlist);
2930 return final_mod;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002931}
2932
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002933PyObject *
Benjamin Peterson04778a82011-05-25 09:29:00 -05002934PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002935 PyObject *fromlist, int level)
2936{
2937 PyObject *nameobj, *mod;
2938 nameobj = PyUnicode_FromString(name);
2939 if (nameobj == NULL)
2940 return NULL;
2941 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
2942 fromlist, level);
2943 Py_DECREF(nameobj);
2944 return mod;
2945}
2946
2947
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002948/* Re-import a module of any kind and return its module object, WITH
2949 INCREMENTED REFERENCE COUNT */
2950
Guido van Rossum79f25d91997-04-29 20:08:16 +00002951PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002952PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002953{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002954 PyInterpreterState *interp = PyThreadState_Get()->interp;
2955 PyObject *modules_reloading = interp->modules_reloading;
2956 PyObject *modules = PyImport_GetModuleDict();
Brett Cannon8a1d04c2012-04-15 17:56:09 -04002957 PyObject *loader = NULL, *existing_m = NULL;
2958 PyObject *name;
Martin v. Löwis796ea532011-10-30 09:07:07 +01002959 Py_ssize_t subname_start;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002960 PyObject *newm = NULL;
Brett Cannon8a1d04c2012-04-15 17:56:09 -04002961 _Py_IDENTIFIER(__loader__);
2962 _Py_IDENTIFIER(load_module);
Brett Cannon9a5b25a2010-03-01 02:09:17 +00002963
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002964 if (modules_reloading == NULL) {
2965 Py_FatalError("PyImport_ReloadModule: "
2966 "no modules_reloading dictionary!");
2967 return NULL;
2968 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002969
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002970 if (m == NULL || !PyModule_Check(m)) {
2971 PyErr_SetString(PyExc_TypeError,
2972 "reload() argument must be module");
2973 return NULL;
2974 }
Martin v. Löwis796ea532011-10-30 09:07:07 +01002975 name = PyModule_GetNameObject(m);
2976 if (name == NULL || PyUnicode_READY(name) == -1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002977 return NULL;
Martin v. Löwis796ea532011-10-30 09:07:07 +01002978 if (m != PyDict_GetItem(modules, name)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002979 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04002980 "reload(): module %R not in sys.modules",
Martin v. Löwis796ea532011-10-30 09:07:07 +01002981 name);
2982 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002983 return NULL;
2984 }
Martin v. Löwis796ea532011-10-30 09:07:07 +01002985 existing_m = PyDict_GetItem(modules_reloading, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002986 if (existing_m != NULL) {
2987 /* Due to a recursive reload, this module is already
2988 being reloaded. */
Martin v. Löwis796ea532011-10-30 09:07:07 +01002989 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002990 Py_INCREF(existing_m);
2991 return existing_m;
2992 }
Martin v. Löwis796ea532011-10-30 09:07:07 +01002993 if (PyDict_SetItem(modules_reloading, name, m) < 0) {
2994 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002995 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002996 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00002997
Martin v. Löwis796ea532011-10-30 09:07:07 +01002998 subname_start = PyUnicode_FindChar(name, '.', 0,
2999 PyUnicode_GET_LENGTH(name), -1);
Brett Cannon8a1d04c2012-04-15 17:56:09 -04003000 if (subname_start != -1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003001 PyObject *parentname, *parent;
Martin v. Löwis796ea532011-10-30 09:07:07 +01003002 parentname = PyUnicode_Substring(name, 0, subname_start);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003003 if (parentname == NULL) {
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003004 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003005 }
3006 parent = PyDict_GetItem(modules, parentname);
Brett Cannon8a1d04c2012-04-15 17:56:09 -04003007 Py_XDECREF(parent);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003008 if (parent == NULL) {
3009 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003010 "reload(): parent %R not in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003011 parentname);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003012 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003013 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003014 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003015
Brett Cannon8a1d04c2012-04-15 17:56:09 -04003016 loader = _PyObject_GetAttrId(m, &PyId___loader__);
3017 if (loader == NULL) {
3018 goto error;
3019 }
3020 newm = _PyObject_CallMethodId(loader, &PyId_load_module, "O", name);
3021 Py_DECREF(loader);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003022 if (newm == NULL) {
3023 /* load_module probably removed name from modules because of
3024 * the error. Put back the original module object. We're
3025 * going to return NULL in this case regardless of whether
3026 * replacing name succeeds, so the return value is ignored.
3027 */
Martin v. Löwis796ea532011-10-30 09:07:07 +01003028 PyDict_SetItem(modules, name, m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003029 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003030
3031error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003032 imp_modules_reloading_clear();
Martin v. Löwis796ea532011-10-30 09:07:07 +01003033 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003034 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003035}
3036
3037
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003038/* Higher-level import emulator which emulates the "import" statement
3039 more accurately -- it invokes the __import__() function from the
3040 builtins of the current globals. This means that the import is
3041 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00003042 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00003043 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00003044 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00003045 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003046
3047PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003048PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003049{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003050 static PyObject *silly_list = NULL;
3051 static PyObject *builtins_str = NULL;
3052 static PyObject *import_str = NULL;
3053 PyObject *globals = NULL;
3054 PyObject *import = NULL;
3055 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003056 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003057 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003058
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003059 /* Initialize constant string objects */
3060 if (silly_list == NULL) {
3061 import_str = PyUnicode_InternFromString("__import__");
3062 if (import_str == NULL)
3063 return NULL;
3064 builtins_str = PyUnicode_InternFromString("__builtins__");
3065 if (builtins_str == NULL)
3066 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003067 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003068 if (silly_list == NULL)
3069 return NULL;
3070 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003071
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003072 /* Get the builtins from current globals */
3073 globals = PyEval_GetGlobals();
3074 if (globals != NULL) {
3075 Py_INCREF(globals);
3076 builtins = PyObject_GetItem(globals, builtins_str);
3077 if (builtins == NULL)
3078 goto err;
3079 }
3080 else {
3081 /* No globals -- use standard builtins, and fake globals */
3082 builtins = PyImport_ImportModuleLevel("builtins",
3083 NULL, NULL, NULL, 0);
3084 if (builtins == NULL)
3085 return NULL;
3086 globals = Py_BuildValue("{OO}", builtins_str, builtins);
3087 if (globals == NULL)
3088 goto err;
3089 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003090
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003091 /* Get the __import__ function from the builtins */
3092 if (PyDict_Check(builtins)) {
3093 import = PyObject_GetItem(builtins, import_str);
3094 if (import == NULL)
3095 PyErr_SetObject(PyExc_KeyError, import_str);
3096 }
3097 else
3098 import = PyObject_GetAttr(builtins, import_str);
3099 if (import == NULL)
3100 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003101
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003102 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00003103 Always use absolute import here.
3104 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003105 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
3106 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00003107 if (r == NULL)
3108 goto err;
3109 Py_DECREF(r);
3110
3111 modules = PyImport_GetModuleDict();
3112 r = PyDict_GetItem(modules, module_name);
3113 if (r != NULL)
3114 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003115
3116 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003117 Py_XDECREF(globals);
3118 Py_XDECREF(builtins);
3119 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00003120
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003121 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003122}
3123
3124
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003125/* Module 'imp' provides Python access to the primitives used for
3126 importing modules.
3127*/
3128
Guido van Rossum79f25d91997-04-29 20:08:16 +00003129static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00003130imp_make_magic(long magic)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003131{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003132 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003133
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003134 buf[0] = (char) ((magic >> 0) & 0xff);
3135 buf[1] = (char) ((magic >> 8) & 0xff);
3136 buf[2] = (char) ((magic >> 16) & 0xff);
3137 buf[3] = (char) ((magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003138
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003139 return PyBytes_FromStringAndSize(buf, 4);
Victor Stinner3e2b7172010-11-09 09:32:19 +00003140}
Barry Warsaw28a691b2010-04-17 00:19:56 +00003141
3142static PyObject *
3143imp_get_magic(PyObject *self, PyObject *noargs)
3144{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003145 return imp_make_magic(pyc_magic);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003146}
3147
3148static PyObject *
3149imp_get_tag(PyObject *self, PyObject *noargs)
3150{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003151 return PyUnicode_FromString(pyc_tag);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003152}
3153
Guido van Rossum79f25d91997-04-29 20:08:16 +00003154static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003155imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003156{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003157 PyObject *list;
3158 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003159
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003160 list = PyList_New(0);
3161 if (list == NULL)
3162 return NULL;
3163 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
3164 PyObject *item = Py_BuildValue("ssi",
3165 fdp->suffix, fdp->mode, fdp->type);
3166 if (item == NULL) {
3167 Py_DECREF(list);
3168 return NULL;
3169 }
3170 if (PyList_Append(list, item) < 0) {
3171 Py_DECREF(list);
3172 Py_DECREF(item);
3173 return NULL;
3174 }
3175 Py_DECREF(item);
3176 }
3177 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003178}
3179
Guido van Rossum79f25d91997-04-29 20:08:16 +00003180static PyObject *
Victor Stinner533d7832011-03-14 13:22:54 -04003181call_find_module(PyObject *name, PyObject *path_list)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003182{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003183 extern int fclose(FILE *);
3184 PyObject *fob, *ret;
3185 PyObject *pathobj;
3186 struct filedescr *fdp;
Victor Stinner7d8b77c2011-03-12 08:45:02 -05003187 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003188 int fd = -1;
3189 char *found_encoding = NULL;
3190 char *encoding = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003191
Victor Stinner533d7832011-03-14 13:22:54 -04003192 if (path_list == Py_None)
3193 path_list = NULL;
3194 fdp = find_module(NULL, name, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003195 &pathobj, &fp, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003196 if (fdp == NULL)
3197 return NULL;
3198 if (fp != NULL) {
3199 fd = fileno(fp);
3200 if (fd != -1)
3201 fd = dup(fd);
3202 fclose(fp);
3203 fp = NULL;
Antoine Pitrou72146122012-02-22 18:03:04 +01003204 if (fd == -1)
3205 return PyErr_SetFromErrno(PyExc_OSError);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003206 }
3207 if (fd != -1) {
3208 if (strchr(fdp->mode, 'b') == NULL) {
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003209 /* PyTokenizer_FindEncodingFilename() returns PyMem_MALLOC'ed
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003210 memory. */
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003211 found_encoding = PyTokenizer_FindEncodingFilename(fd, pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003212 lseek(fd, 0, 0); /* Reset position */
Victor Stinner2fd76e42011-03-14 15:19:39 -04003213 if (found_encoding == NULL && PyErr_Occurred()) {
3214 Py_XDECREF(pathobj);
Antoine Pitrou4f22a8d2012-02-22 18:05:43 +01003215 close(fd);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003216 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04003217 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003218 encoding = (found_encoding != NULL) ? found_encoding :
3219 (char*)PyUnicode_GetDefaultEncoding();
3220 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003221 fob = PyFile_FromFd(fd, NULL, fdp->mode, -1,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003222 (char*)encoding, NULL, NULL, 1);
3223 if (fob == NULL) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04003224 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003225 close(fd);
3226 PyMem_FREE(found_encoding);
3227 return NULL;
3228 }
3229 }
3230 else {
3231 fob = Py_None;
3232 Py_INCREF(fob);
3233 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003234 if (pathobj == NULL) {
3235 Py_INCREF(Py_None);
3236 pathobj = Py_None;
3237 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003238 ret = Py_BuildValue("NN(ssi)",
3239 fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
3240 PyMem_FREE(found_encoding);
Brett Cannon3bb42d92007-10-20 03:43:15 +00003241
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003242 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003243}
3244
Guido van Rossum79f25d91997-04-29 20:08:16 +00003245static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003246imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003247{
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003248 PyObject *name, *path_list = NULL;
3249 if (!PyArg_ParseTuple(args, "U|O:find_module",
3250 &name, &path_list))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003251 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003252 return call_find_module(name, path_list);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003253}
3254
3255static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003256imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003257{
Victor Stinner95872862011-03-07 18:20:56 +01003258 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003259 int ret;
3260 PyObject *m;
Victor Stinner95872862011-03-07 18:20:56 +01003261 if (!PyArg_ParseTuple(args, "U:init_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003262 return NULL;
3263 ret = init_builtin(name);
3264 if (ret < 0)
3265 return NULL;
3266 if (ret == 0) {
3267 Py_INCREF(Py_None);
3268 return Py_None;
3269 }
Victor Stinner95872862011-03-07 18:20:56 +01003270 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003271 Py_XINCREF(m);
3272 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003273}
3274
Guido van Rossum79f25d91997-04-29 20:08:16 +00003275static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003276imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003277{
Victor Stinner53dc7352011-03-20 01:50:21 +01003278 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003279 int ret;
3280 PyObject *m;
Victor Stinner53dc7352011-03-20 01:50:21 +01003281 if (!PyArg_ParseTuple(args, "U:init_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003282 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01003283 ret = PyImport_ImportFrozenModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003284 if (ret < 0)
3285 return NULL;
3286 if (ret == 0) {
3287 Py_INCREF(Py_None);
3288 return Py_None;
3289 }
Victor Stinner53dc7352011-03-20 01:50:21 +01003290 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003291 Py_XINCREF(m);
3292 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003293}
3294
Guido van Rossum79f25d91997-04-29 20:08:16 +00003295static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003296imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003297{
Victor Stinner53dc7352011-03-20 01:50:21 +01003298 PyObject *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00003299
Victor Stinner53dc7352011-03-20 01:50:21 +01003300 if (!PyArg_ParseTuple(args, "U:get_frozen_object", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003301 return NULL;
3302 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003303}
3304
Guido van Rossum79f25d91997-04-29 20:08:16 +00003305static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00003306imp_is_frozen_package(PyObject *self, PyObject *args)
3307{
Victor Stinner53dc7352011-03-20 01:50:21 +01003308 PyObject *name;
Brett Cannon8d110132009-03-15 02:20:16 +00003309
Victor Stinner53dc7352011-03-20 01:50:21 +01003310 if (!PyArg_ParseTuple(args, "U:is_frozen_package", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003311 return NULL;
3312 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00003313}
3314
3315static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003316imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003317{
Victor Stinner95872862011-03-07 18:20:56 +01003318 PyObject *name;
3319 if (!PyArg_ParseTuple(args, "U:is_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003320 return NULL;
3321 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003322}
3323
Guido van Rossum79f25d91997-04-29 20:08:16 +00003324static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003325imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003326{
Victor Stinner53dc7352011-03-20 01:50:21 +01003327 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003328 struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01003329 if (!PyArg_ParseTuple(args, "U:is_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003330 return NULL;
3331 p = find_frozen(name);
3332 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003333}
3334
3335static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01003336get_file(PyObject *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003337{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003338 FILE *fp;
3339 if (mode[0] == 'U')
3340 mode = "r" PY_STDIOTEXTMODE;
3341 if (fob == NULL) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003342 fp = _Py_fopen(pathname, mode);
Victor Stinner35734762011-12-18 21:05:22 +01003343 if (!fp) {
3344 if (!PyErr_Occurred())
3345 PyErr_SetFromErrno(PyExc_IOError);
3346 return NULL;
3347 }
3348 return fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003349 }
3350 else {
3351 int fd = PyObject_AsFileDescriptor(fob);
3352 if (fd == -1)
3353 return NULL;
Victor Stinner35734762011-12-18 21:05:22 +01003354 if (!_PyVerify_fd(fd)) {
3355 PyErr_SetFromErrno(PyExc_IOError);
3356 return NULL;
3357 }
3358
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003359 /* the FILE struct gets a new fd, so that it can be closed
3360 * independently of the file descriptor given
3361 */
3362 fd = dup(fd);
Victor Stinner35734762011-12-18 21:05:22 +01003363 if (fd == -1) {
3364 PyErr_SetFromErrno(PyExc_IOError);
3365 return NULL;
3366 }
3367
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003368 fp = fdopen(fd, mode);
Victor Stinner35734762011-12-18 21:05:22 +01003369 if (!fp) {
3370 PyErr_SetFromErrno(PyExc_IOError);
3371 return NULL;
3372 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003373 return fp;
Victor Stinner35734762011-12-18 21:05:22 +01003374 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003375}
3376
Guido van Rossum79f25d91997-04-29 20:08:16 +00003377static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003378imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003379{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003380 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003381 PyObject *fob = NULL;
3382 PyObject *m;
3383 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003384 if (!PyArg_ParseTuple(args, "UO&|O:load_compiled",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003385 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003386 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003387 &fob))
3388 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003389 fp = get_file(pathname, fob, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003390 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003391 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003392 return NULL;
3393 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003394 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003395 fclose(fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003396 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003397 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003398}
3399
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003400#ifdef HAVE_DYNAMIC_LOADING
3401
Guido van Rossum79f25d91997-04-29 20:08:16 +00003402static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003403imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003404{
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003405 PyObject *name, *pathname, *fob = NULL, *mod;
3406 FILE *fp;
3407
3408 if (!PyArg_ParseTuple(args, "UO&|O:load_dynamic",
3409 &name, PyUnicode_FSDecoder, &pathname, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003410 return NULL;
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003411 if (fob != NULL) {
3412 fp = get_file(NULL, fob, "r");
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003413 if (fp == NULL) {
3414 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003415 return NULL;
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003416 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003417 }
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003418 else
3419 fp = NULL;
3420 mod = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003421 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003422 if (fp)
3423 fclose(fp);
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003424 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003425}
3426
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003427#endif /* HAVE_DYNAMIC_LOADING */
3428
Guido van Rossum79f25d91997-04-29 20:08:16 +00003429static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003430imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003431{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003432 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003433 PyObject *fob = NULL;
3434 PyObject *m;
3435 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003436 if (!PyArg_ParseTuple(args, "UO&|O:load_source",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003437 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003438 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003439 &fob))
3440 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003441 fp = get_file(pathname, fob, "r");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003442 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003443 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003444 return NULL;
3445 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003446 m = load_source_module(name, pathname, fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003447 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003448 fclose(fp);
3449 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003450}
3451
Guido van Rossum79f25d91997-04-29 20:08:16 +00003452static PyObject *
Christian Heimes13a7a212008-01-07 17:13:09 +00003453imp_reload(PyObject *self, PyObject *v)
3454{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003455 return PyImport_ReloadModule(v);
Christian Heimes13a7a212008-01-07 17:13:09 +00003456}
3457
3458PyDoc_STRVAR(doc_reload,
3459"reload(module) -> module\n\
3460\n\
3461Reload the module. The module must have been successfully imported before.");
3462
Barry Warsaw28a691b2010-04-17 00:19:56 +00003463static PyObject *
3464imp_cache_from_source(PyObject *self, PyObject *args, PyObject *kws)
3465{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003466 static char *kwlist[] = {"path", "debug_override", NULL};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003467
Victor Stinner2f42ae52011-03-20 00:41:24 +01003468 PyObject *pathname, *cpathname;
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003469 PyObject *debug_override = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003470 int debug = !Py_OptimizeFlag;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003471
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003472 if (!PyArg_ParseTupleAndKeywords(
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003473 args, kws, "O&|O", kwlist,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003474 PyUnicode_FSDecoder, &pathname, &debug_override))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003475 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003476
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003477 if (debug_override != NULL &&
3478 (debug = PyObject_IsTrue(debug_override)) < 0) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003479 Py_DECREF(pathname);
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003480 return NULL;
3481 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00003482
Martin v. Löwis30260a72011-10-23 17:35:46 +02003483 if (PyUnicode_READY(pathname) < 0)
3484 return NULL;
3485
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003486 cpathname = make_compiled_pathname(pathname, debug);
Victor Stinner2f42ae52011-03-20 00:41:24 +01003487 Py_DECREF(pathname);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003488
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003489 if (cpathname == NULL) {
3490 PyErr_Format(PyExc_SystemError, "path buffer too short");
3491 return NULL;
3492 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003493 return cpathname;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003494}
3495
3496PyDoc_STRVAR(doc_cache_from_source,
Éric Araujo5df11082011-11-03 03:38:44 +01003497"cache_from_source(path, [debug_override]) -> path\n\
3498Given the path to a .py file, return the path to its .pyc/.pyo file.\n\
Barry Warsaw28a691b2010-04-17 00:19:56 +00003499\n\
3500The .py file does not need to exist; this simply returns the path to the\n\
3501.pyc/.pyo file calculated as if the .py file were imported. The extension\n\
3502will be .pyc unless __debug__ is not defined, then it will be .pyo.\n\
3503\n\
3504If debug_override is not None, then it must be a boolean and is taken as\n\
3505the value of __debug__ instead.");
3506
3507static PyObject *
3508imp_source_from_cache(PyObject *self, PyObject *args, PyObject *kws)
3509{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003510 static char *kwlist[] = {"path", NULL};
Victor Stinnerc9abda02011-03-14 13:33:46 -04003511 PyObject *pathname, *source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003512
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003513 if (!PyArg_ParseTupleAndKeywords(
Victor Stinnerebc00522010-12-03 17:06:43 +00003514 args, kws, "O&", kwlist,
Victor Stinnerc9abda02011-03-14 13:33:46 -04003515 PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003516 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003517
Victor Stinnerc9abda02011-03-14 13:33:46 -04003518 source = make_source_pathname(pathname);
3519 if (source == NULL) {
3520 PyErr_Format(PyExc_ValueError, "Not a PEP 3147 pyc path: %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003521 pathname);
Victor Stinnerc9abda02011-03-14 13:33:46 -04003522 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003523 return NULL;
3524 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04003525 Py_DECREF(pathname);
3526 return source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003527}
3528
3529PyDoc_STRVAR(doc_source_from_cache,
Éric Araujo5df11082011-11-03 03:38:44 +01003530"source_from_cache(path) -> path\n\
3531Given the path to a .pyc./.pyo file, return the path to its .py file.\n\
Barry Warsaw28a691b2010-04-17 00:19:56 +00003532\n\
3533The .pyc/.pyo file does not need to exist; this simply returns the path to\n\
3534the .py file calculated to correspond to the .pyc/.pyo file. If path\n\
3535does not conform to PEP 3147 format, ValueError will be raised.");
3536
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003537/* Doc strings */
3538
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003539PyDoc_STRVAR(doc_imp,
Brett Cannon6f44d662012-04-15 16:08:47 -04003540"(Extremely) low-level import machinery bits as used by importlib and imp.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003541
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003542PyDoc_STRVAR(doc_find_module,
3543"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003544Search for a module. If path is omitted or None, search for a\n\
3545built-in, frozen or special module and continue search in sys.path.\n\
3546The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003547package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003548
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003549PyDoc_STRVAR(doc_get_magic,
3550"get_magic() -> string\n\
3551Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003552
Barry Warsaw28a691b2010-04-17 00:19:56 +00003553PyDoc_STRVAR(doc_get_tag,
3554"get_tag() -> string\n\
3555Return the magic tag for .pyc or .pyo files.");
3556
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003557PyDoc_STRVAR(doc_get_suffixes,
3558"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003559Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003560that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003561
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003562PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003563"lock_held() -> boolean\n\
3564Return True if the import lock is currently held, else False.\n\
3565On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003566
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003567PyDoc_STRVAR(doc_acquire_lock,
3568"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003569Acquires the interpreter's import lock for the current thread.\n\
3570This lock should be used by import hooks to ensure thread-safety\n\
3571when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003572On platforms without threads, this function does nothing.");
3573
3574PyDoc_STRVAR(doc_release_lock,
3575"release_lock() -> None\n\
3576Release the interpreter's import lock.\n\
3577On platforms without threads, this function does nothing.");
3578
Guido van Rossum79f25d91997-04-29 20:08:16 +00003579static PyMethodDef imp_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003580 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3581 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3582 {"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag},
3583 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003584 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3585 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3586 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
3587 {"reload", imp_reload, METH_O, doc_reload},
3588 {"cache_from_source", (PyCFunction)imp_cache_from_source,
3589 METH_VARARGS | METH_KEYWORDS, doc_cache_from_source},
3590 {"source_from_cache", (PyCFunction)imp_source_from_cache,
3591 METH_VARARGS | METH_KEYWORDS, doc_source_from_cache},
3592 /* The rest are obsolete */
3593 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3594 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
3595 {"init_builtin", imp_init_builtin, METH_VARARGS},
3596 {"init_frozen", imp_init_frozen, METH_VARARGS},
3597 {"is_builtin", imp_is_builtin, METH_VARARGS},
3598 {"is_frozen", imp_is_frozen, METH_VARARGS},
3599 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003600#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003601 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003602#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003603 {"load_source", imp_load_source, METH_VARARGS},
Brett Cannon442c9b92011-03-23 16:14:42 -07003604 {"_fix_co_filename", imp_fix_co_filename, METH_VARARGS},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003605 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003606};
3607
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003608static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003609setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003610{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003611 PyObject *v;
3612 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003614 v = PyLong_FromLong((long)value);
3615 err = PyDict_SetItemString(d, name, v);
3616 Py_XDECREF(v);
3617 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003618}
3619
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003620typedef struct {
3621 PyObject_HEAD
3622} NullImporter;
3623
3624static int
3625NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3626{
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003627#ifndef MS_WINDOWS
3628 PyObject *path;
3629 struct stat statbuf;
3630 int rv;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003631
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003632 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3633 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003634
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003635 if (!PyArg_ParseTuple(args, "O&:NullImporter",
3636 PyUnicode_FSConverter, &path))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003637 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003638
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003639 if (PyBytes_GET_SIZE(path) == 0) {
3640 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003641 PyErr_SetString(PyExc_ImportError, "empty pathname");
3642 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003643 }
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003644
3645 rv = stat(PyBytes_AS_STRING(path), &statbuf);
3646 Py_DECREF(path);
3647 if (rv == 0) {
3648 /* it exists */
3649 if (S_ISDIR(statbuf.st_mode)) {
3650 /* it's a directory */
3651 PyErr_SetString(PyExc_ImportError, "existing directory");
3652 return -1;
3653 }
3654 }
3655#else /* MS_WINDOWS */
3656 PyObject *pathobj;
3657 DWORD rv;
Victor Stinner255dfdb2010-09-29 10:28:51 +00003658 wchar_t *path;
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003659
3660 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3661 return -1;
3662
3663 if (!PyArg_ParseTuple(args, "U:NullImporter",
3664 &pathobj))
3665 return -1;
3666
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003667 if (PyUnicode_GET_LENGTH(pathobj) == 0) {
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003668 PyErr_SetString(PyExc_ImportError, "empty pathname");
3669 return -1;
3670 }
3671
Victor Stinnerbeb4135b2010-10-07 01:02:42 +00003672 path = PyUnicode_AsWideCharString(pathobj, NULL);
Victor Stinner255dfdb2010-09-29 10:28:51 +00003673 if (path == NULL)
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003674 return -1;
3675 /* see issue1293 and issue3677:
3676 * stat() on Windows doesn't recognise paths like
3677 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
3678 */
3679 rv = GetFileAttributesW(path);
Victor Stinner255dfdb2010-09-29 10:28:51 +00003680 PyMem_Free(path);
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003681 if (rv != INVALID_FILE_ATTRIBUTES) {
3682 /* it exists */
3683 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
3684 /* it's a directory */
3685 PyErr_SetString(PyExc_ImportError, "existing directory");
3686 return -1;
3687 }
3688 }
3689#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003690 return 0;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003691}
3692
3693static PyObject *
3694NullImporter_find_module(NullImporter *self, PyObject *args)
3695{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003696 Py_RETURN_NONE;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003697}
3698
3699static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003700 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3701 "Always return None"
3702 },
3703 {NULL} /* Sentinel */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003704};
3705
3706
Christian Heimes9cd17752007-11-18 19:35:23 +00003707PyTypeObject PyNullImporter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003708 PyVarObject_HEAD_INIT(NULL, 0)
3709 "imp.NullImporter", /*tp_name*/
3710 sizeof(NullImporter), /*tp_basicsize*/
3711 0, /*tp_itemsize*/
3712 0, /*tp_dealloc*/
3713 0, /*tp_print*/
3714 0, /*tp_getattr*/
3715 0, /*tp_setattr*/
3716 0, /*tp_reserved*/
3717 0, /*tp_repr*/
3718 0, /*tp_as_number*/
3719 0, /*tp_as_sequence*/
3720 0, /*tp_as_mapping*/
3721 0, /*tp_hash */
3722 0, /*tp_call*/
3723 0, /*tp_str*/
3724 0, /*tp_getattro*/
3725 0, /*tp_setattro*/
3726 0, /*tp_as_buffer*/
3727 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3728 "Null importer object", /* tp_doc */
3729 0, /* tp_traverse */
3730 0, /* tp_clear */
3731 0, /* tp_richcompare */
3732 0, /* tp_weaklistoffset */
3733 0, /* tp_iter */
3734 0, /* tp_iternext */
3735 NullImporter_methods, /* tp_methods */
3736 0, /* tp_members */
3737 0, /* tp_getset */
3738 0, /* tp_base */
3739 0, /* tp_dict */
3740 0, /* tp_descr_get */
3741 0, /* tp_descr_set */
3742 0, /* tp_dictoffset */
3743 (initproc)NullImporter_init, /* tp_init */
3744 0, /* tp_alloc */
3745 PyType_GenericNew /* tp_new */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003746};
3747
Martin v. Löwis1a214512008-06-11 05:26:20 +00003748static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003749 PyModuleDef_HEAD_INIT,
Brett Cannon6f44d662012-04-15 16:08:47 -04003750 "_imp",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003751 doc_imp,
3752 0,
3753 imp_methods,
3754 NULL,
3755 NULL,
3756 NULL,
3757 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00003758};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003759
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003760PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00003761PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003762{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003763 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003764
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003765 if (PyType_Ready(&PyNullImporter_Type) < 0)
3766 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003767
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003768 m = PyModule_Create(&impmodule);
3769 if (m == NULL)
3770 goto failure;
3771 d = PyModule_GetDict(m);
3772 if (d == NULL)
3773 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003774
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003775 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3776 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3777 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3778 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3779 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3780 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3781 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3782 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
3783 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
3784 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003785
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003786 Py_INCREF(&PyNullImporter_Type);
3787 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
3788 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003789 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003790 Py_XDECREF(m);
3791 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003792}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003793
3794
Guido van Rossumb18618d2000-05-03 23:44:39 +00003795/* API for embedding applications that want to add their own entries
3796 to the table of built-in modules. This should normally be called
3797 *before* Py_Initialize(). When the table resize fails, -1 is
3798 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003799
3800 After a similar function by Just van Rossum. */
3801
3802int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003803PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003804{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003805 static struct _inittab *our_copy = NULL;
3806 struct _inittab *p;
3807 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003808
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003809 /* Count the number of entries in both tables */
3810 for (n = 0; newtab[n].name != NULL; n++)
3811 ;
3812 if (n == 0)
3813 return 0; /* Nothing to do */
3814 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3815 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003816
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003817 /* Allocate new memory for the combined table */
3818 p = our_copy;
3819 PyMem_RESIZE(p, struct _inittab, i+n+1);
3820 if (p == NULL)
3821 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003822
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003823 /* Copy the tables into the new memory */
3824 if (our_copy != PyImport_Inittab)
3825 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3826 PyImport_Inittab = our_copy = p;
3827 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003828
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003829 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003830}
3831
3832/* Shorthand to add a single entry given a name and a function */
3833
3834int
Brett Cannona826f322009-04-02 03:41:46 +00003835PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003836{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003837 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003838
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003839 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003840
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003841 newtab[0].name = (char *)name;
3842 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003843
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003844 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003845}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003846
3847#ifdef __cplusplus
3848}
3849#endif