blob: 1101c920f54bd2eea3530e8083fabcbd86a3414d [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Module definition and import implementation */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00005
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "Python-ast.h"
Guido van Rossumd8faa362007-04-27 19:54:29 +00007#undef Yield /* undefine macro conflicting with winbase.h */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00008#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +00009#include "marshal.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010#include "code.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000011#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000012#include "importdl.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000013
Guido van Rossum55a83382000-09-20 20:31:38 +000014#ifdef HAVE_FCNTL_H
15#include <fcntl.h>
16#endif
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000017#ifdef __cplusplus
Brett Cannon9a5b25a2010-03-01 02:09:17 +000018extern "C" {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000019#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000020
Christian Heimesd3eb5a152008-02-24 00:38:49 +000021#ifdef MS_WINDOWS
22/* for stat.st_mode */
23typedef unsigned short mode_t;
Daniel Stutzbachc7937792010-09-09 21:18:04 +000024/* for _mkdir */
25#include <direct.h>
Christian Heimesd3eb5a152008-02-24 00:38:49 +000026#endif
27
Guido van Rossum21d335e1993-10-15 13:01:11 +000028
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000029/* Magic word to reject .pyc files generated by other Python versions.
30 It should change for each incompatible change to the bytecode.
31
32 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000033 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000034 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000035
Guido van Rossum45aecf42006-03-15 04:58:47 +000036 The magic numbers must be spaced apart at least 2 values, as the
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000037 -U interpeter flag will cause MAGIC+1 being used. They have been
38 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000039
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000040 There were a variety of old schemes for setting the magic number.
41 The current working scheme is to increment the previous value by
42 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000043
Barry Warsaw28a691b2010-04-17 00:19:56 +000044 Starting with the adoption of PEP 3147 in Python 3.2, every bump in magic
45 number also includes a new "magic tag", i.e. a human readable string used
46 to represent the magic number in __pycache__ directories. When you change
47 the magic number, you must also set a new unique magic tag. Generally this
48 can be named after the Python major version of the magic number bump, but
49 it can really be anything, as long as it's different than anything else
50 that's come before. The tags are included in the following table, starting
51 with Python 3.2a0.
52
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000053 Known values:
54 Python 1.5: 20121
55 Python 1.5.1: 20121
56 Python 1.5.2: 20121
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000057 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000058 Python 2.0: 50823
59 Python 2.0.1: 50823
60 Python 2.1: 60202
61 Python 2.1.1: 60202
62 Python 2.1.2: 60202
63 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000064 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000065 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000066 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000067 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000068 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000069 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000070 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000071 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000072 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000073 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000074 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
75 Python 2.5b3: 62111 (fix wrong code: x += yield)
76 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000077 storing constants that should have been removed)
Thomas Wouters89f507f2006-12-13 04:49:30 +000078 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
Christian Heimes99170a52007-12-19 02:07:34 +000079 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)
Christian Heimesdd15f6c2008-03-16 00:07:10 +000080 Python 2.6a1: 62161 (WITH_CLEANUP optimization)
Guido van Rossum45aecf42006-03-15 04:58:47 +000081 Python 3000: 3000
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000082 3010 (removed UNARY_CONVERT)
83 3020 (added BUILD_SET)
84 3030 (added keyword-only parameters)
85 3040 (added signature annotations)
86 3050 (print becomes a function)
87 3060 (PEP 3115 metaclass syntax)
88 3061 (string literals become unicode)
89 3071 (PEP 3109 raise changes)
90 3081 (PEP 3137 make __file__ and __name__ unicode)
91 3091 (kill str8 interning)
92 3101 (merge from 2.6a0, see 62151)
93 3103 (__file__ points to source file)
Benjamin Peterson0f6cae02009-12-10 02:09:08 +000094 Python 3.0a4: 3111 (WITH_CLEANUP optimization).
95 Python 3.0a5: 3131 (lexical exception stacking, including POP_EXCEPT)
96 Python 3.1a0: 3141 (optimize list, set and dict comprehensions:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000097 change LIST_APPEND and SET_ADD, add MAP_ADD)
Benjamin Peterson0f6cae02009-12-10 02:09:08 +000098 Python 3.1a0: 3151 (optimize conditional branches:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000099 introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE)
Benjamin Peterson876b2f22009-06-28 03:18:59 +0000100 Python 3.2a0: 3160 (add SETUP_WITH)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000101 tag: cpython-32
Antoine Pitrou74a69fa2010-09-04 18:43:52 +0000102 Python 3.2a1: 3170 (add DUP_TOP_TWO, remove DUP_TOPX and ROT_FOUR)
103 tag: cpython-32
Benjamin Peterson6246d6d2010-09-10 21:51:44 +0000104 Python 3.2a2 3180 (add DELETE_DEREF)
Benjamin Petersone7c15fa2011-06-19 19:54:45 -0500105 Python 3.3a0 3190 __class__ super closure changed
Tim Peters36515e22001-11-18 04:06:29 +0000106*/
Guido van Rossum3ddee711991-12-16 13:06:34 +0000107
Nick Coghlancd419ab2010-09-11 00:39:25 +0000108/* MAGIC must change whenever the bytecode emitted by the compiler may no
109 longer be understood by older implementations of the eval loop (usually
110 due to the addition of new opcodes)
Victor Stinner2f42ae52011-03-20 00:41:24 +0100111 TAG and PYC_TAG_UNICODE must change for each major Python release. The magic
112 number will take care of any bytecode changes that occur during development.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000113*/
Benjamin Peterson48deae12011-06-03 17:50:16 -0500114#define QUOTE(arg) #arg
115#define STRIFY(name) QUOTE(name)
116#define MAJOR STRIFY(PY_MAJOR_VERSION)
117#define MINOR STRIFY(PY_MINOR_VERSION)
Benjamin Petersone7c15fa2011-06-19 19:54:45 -0500118#define MAGIC (3190 | ((long)'\r'<<16) | ((long)'\n'<<24))
Benjamin Peterson48deae12011-06-03 17:50:16 -0500119#define TAG "cpython-" MAJOR MINOR;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000120#define CACHEDIR "__pycache__"
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200121static const Py_UCS4 CACHEDIR_UNICODE[] = {
Victor Stinnerc9abda02011-03-14 13:33:46 -0400122 '_', '_', 'p', 'y', 'c', 'a', 'c', 'h', 'e', '_', '_', '\0'};
Barry Warsaw28a691b2010-04-17 00:19:56 +0000123/* Current magic word and string tag as globals. */
Guido van Rossum96774c12000-05-01 20:19:08 +0000124static long pyc_magic = MAGIC;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000125static const char *pyc_tag = TAG;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200126static const Py_UCS4 PYC_TAG_UNICODE[] = {
Benjamin Peterson48deae12011-06-03 17:50:16 -0500127 'c', 'p', 'y', 't', 'h', 'o', 'n', '-', PY_MAJOR_VERSION + 48, PY_MINOR_VERSION + 48, '\0'};
128#undef QUOTE
129#undef STRIFY
130#undef MAJOR
131#undef MINOR
Guido van Rossum96774c12000-05-01 20:19:08 +0000132
Victor Stinner95872862011-03-07 18:20:56 +0100133/* See _PyImport_FixupExtensionObject() below */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000134static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000135
Victor Stinnerfe7c5b52011-04-05 01:48:03 +0200136/* Function from Parser/tokenizer.c */
137extern char * PyTokenizer_FindEncodingFilename(int, PyObject *);
138
Guido van Rossum771c6c81997-10-31 18:37:24 +0000139/* This table is defined in config.c: */
140extern struct _inittab _PyImport_Inittab[];
141
142struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +0000143
Guido van Rossumed1170e1999-12-20 21:23:41 +0000144/* these tables define the module suffixes that Python recognizes */
145struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +0000146
Guido van Rossumed1170e1999-12-20 21:23:41 +0000147static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000148 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000149#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000150 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000151#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000152 {".pyc", "rb", PY_COMPILED},
153 {0, 0}
Guido van Rossumed1170e1999-12-20 21:23:41 +0000154};
155
Victor Stinnerd0296212011-03-14 14:04:10 -0400156static PyObject *initstr = NULL;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200157_Py_IDENTIFIER(__path__);
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000158
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000159/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000160
161void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000162_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000163{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000164 const struct filedescr *scan;
165 struct filedescr *filetab;
166 int countD = 0;
167 int countS = 0;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000168
Victor Stinnerd0296212011-03-14 14:04:10 -0400169 initstr = PyUnicode_InternFromString("__init__");
170 if (initstr == NULL)
171 Py_FatalError("Can't initialize import variables");
172
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000173 /* prepare _PyImport_Filetab: copy entries from
174 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
175 */
Guido van Rossum04110fb2007-08-24 16:32:05 +0000176#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000177 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
178 ++countD;
Guido van Rossum04110fb2007-08-24 16:32:05 +0000179#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000180 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
181 ++countS;
182 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
183 if (filetab == NULL)
184 Py_FatalError("Can't initialize import file table.");
Guido van Rossum04110fb2007-08-24 16:32:05 +0000185#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000186 memcpy(filetab, _PyImport_DynLoadFiletab,
187 countD * sizeof(struct filedescr));
Guido van Rossum04110fb2007-08-24 16:32:05 +0000188#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000189 memcpy(filetab + countD, _PyImport_StandardFiletab,
190 countS * sizeof(struct filedescr));
191 filetab[countD + countS].suffix = NULL;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000192
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000193 _PyImport_Filetab = filetab;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000194
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000195 if (Py_OptimizeFlag) {
196 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
197 for (; filetab->suffix != NULL; filetab++) {
198 if (strcmp(filetab->suffix, ".pyc") == 0)
199 filetab->suffix = ".pyo";
200 }
201 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000202}
203
Guido van Rossum25ce5661997-08-02 03:10:38 +0000204void
Just van Rossum52e14d62002-12-30 22:08:05 +0000205_PyImportHooks_Init(void)
206{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000207 PyObject *v, *path_hooks = NULL, *zimpimport;
208 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000209
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000210 /* adding sys.path_hooks and sys.path_importer_cache, setting up
211 zipimport */
212 if (PyType_Ready(&PyNullImporter_Type) < 0)
213 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000214
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000215 if (Py_VerboseFlag)
216 PySys_WriteStderr("# installing zipimport hook\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000217
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000218 v = PyList_New(0);
219 if (v == NULL)
220 goto error;
221 err = PySys_SetObject("meta_path", v);
222 Py_DECREF(v);
223 if (err)
224 goto error;
225 v = PyDict_New();
226 if (v == NULL)
227 goto error;
228 err = PySys_SetObject("path_importer_cache", v);
229 Py_DECREF(v);
230 if (err)
231 goto error;
232 path_hooks = PyList_New(0);
233 if (path_hooks == NULL)
234 goto error;
235 err = PySys_SetObject("path_hooks", path_hooks);
236 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000237 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000238 PyErr_Print();
239 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
240 "path_importer_cache, or NullImporter failed"
241 );
242 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000244 zimpimport = PyImport_ImportModule("zipimport");
245 if (zimpimport == NULL) {
246 PyErr_Clear(); /* No zip import module -- okay */
247 if (Py_VerboseFlag)
248 PySys_WriteStderr("# can't import zipimport\n");
249 }
250 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200251 _Py_IDENTIFIER(zipimporter);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200252 PyObject *zipimporter = _PyObject_GetAttrId(zimpimport,
253 &PyId_zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000254 Py_DECREF(zimpimport);
255 if (zipimporter == NULL) {
256 PyErr_Clear(); /* No zipimporter object -- okay */
257 if (Py_VerboseFlag)
258 PySys_WriteStderr(
259 "# can't import zipimport.zipimporter\n");
260 }
261 else {
262 /* sys.path_hooks.append(zipimporter) */
263 err = PyList_Append(path_hooks, zipimporter);
264 Py_DECREF(zipimporter);
265 if (err)
266 goto error;
267 if (Py_VerboseFlag)
268 PySys_WriteStderr(
269 "# installed zipimport hook\n");
270 }
271 }
272 Py_DECREF(path_hooks);
Just van Rossum52e14d62002-12-30 22:08:05 +0000273}
274
275void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000276_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000277{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000278 Py_XDECREF(extensions);
279 extensions = NULL;
280 PyMem_DEL(_PyImport_Filetab);
281 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000282}
283
284
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000285/* Locking primitives to prevent parallel imports of the same module
286 in different threads to return with a partially loaded module.
287 These calls are serialized by the global interpreter lock. */
288
289#ifdef WITH_THREAD
290
Guido van Rossum49b56061998-10-01 20:42:43 +0000291#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000292
Guido van Rossum65d5b571998-12-21 19:32:43 +0000293static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000294static long import_lock_thread = -1;
295static int import_lock_level = 0;
296
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000297void
298_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000299{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000300 long me = PyThread_get_thread_ident();
301 if (me == -1)
302 return; /* Too bad */
303 if (import_lock == NULL) {
304 import_lock = PyThread_allocate_lock();
305 if (import_lock == NULL)
306 return; /* Nothing much we can do. */
307 }
308 if (import_lock_thread == me) {
309 import_lock_level++;
310 return;
311 }
312 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
313 {
314 PyThreadState *tstate = PyEval_SaveThread();
315 PyThread_acquire_lock(import_lock, 1);
316 PyEval_RestoreThread(tstate);
317 }
318 import_lock_thread = me;
319 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000320}
321
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000322int
323_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000324{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000325 long me = PyThread_get_thread_ident();
326 if (me == -1 || import_lock == NULL)
327 return 0; /* Too bad */
328 if (import_lock_thread != me)
329 return -1;
330 import_lock_level--;
331 if (import_lock_level == 0) {
332 import_lock_thread = -1;
333 PyThread_release_lock(import_lock);
334 }
335 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000336}
337
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000338/* This function is called from PyOS_AfterFork to ensure that newly
339 created child processes do not share locks with the parent.
340 We now acquire the import lock around fork() calls but on some platforms
341 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000342
343void
344_PyImport_ReInitLock(void)
345{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000346 if (import_lock != NULL)
347 import_lock = PyThread_allocate_lock();
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000348 if (import_lock_level > 1) {
349 /* Forked as a side effect of import */
350 long me = PyThread_get_thread_ident();
351 PyThread_acquire_lock(import_lock, 0);
Victor Stinner942003c2011-03-07 16:57:48 +0100352 /* XXX: can the previous line fail? */
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000353 import_lock_thread = me;
354 import_lock_level--;
355 } else {
356 import_lock_thread = -1;
357 import_lock_level = 0;
358 }
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000359}
360
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000361#endif
362
Tim Peters69232342001-08-30 05:16:13 +0000363static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000364imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000365{
Tim Peters69232342001-08-30 05:16:13 +0000366#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000367 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000368#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000369 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000370#endif
371}
372
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000373static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000374imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000375{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000376#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000377 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000378#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000379 Py_INCREF(Py_None);
380 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000381}
382
383static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000384imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000385{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000386#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000387 if (_PyImport_ReleaseLock() < 0) {
388 PyErr_SetString(PyExc_RuntimeError,
389 "not holding the import lock");
390 return NULL;
391 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000392#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000393 Py_INCREF(Py_None);
394 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000395}
396
Guido van Rossumd8faa362007-04-27 19:54:29 +0000397static void
398imp_modules_reloading_clear(void)
399{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000400 PyInterpreterState *interp = PyThreadState_Get()->interp;
401 if (interp->modules_reloading != NULL)
402 PyDict_Clear(interp->modules_reloading);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000403}
404
Guido van Rossum25ce5661997-08-02 03:10:38 +0000405/* Helper for sys */
406
407PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000408PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000409{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000410 PyInterpreterState *interp = PyThreadState_GET()->interp;
411 if (interp->modules == NULL)
412 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
413 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000414}
415
Guido van Rossum3f5da241990-12-20 15:06:42 +0000416
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000417/* List of names to clear in sys */
418static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000419 "path", "argv", "ps1", "ps2",
420 "last_type", "last_value", "last_traceback",
421 "path_hooks", "path_importer_cache", "meta_path",
422 /* misc stuff */
423 "flags", "float_info",
424 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000425};
426
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000427static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000428 "stdin", "__stdin__",
429 "stdout", "__stdout__",
430 "stderr", "__stderr__",
431 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000432};
433
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000434
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000435/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000436
Guido van Rossum3f5da241990-12-20 15:06:42 +0000437void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000438PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000439{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000440 Py_ssize_t pos, ndone;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000441 PyObject *key, *value, *dict;
442 PyInterpreterState *interp = PyThreadState_GET()->interp;
443 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000444
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000445 if (modules == NULL)
446 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000447
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000448 /* Delete some special variables first. These are common
449 places where user values hide and people complain when their
450 destructors fail. Since the modules containing them are
451 deleted *last* of all, they would come too late in the normal
452 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000453
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000454 value = PyDict_GetItemString(modules, "builtins");
455 if (value != NULL && PyModule_Check(value)) {
456 dict = PyModule_GetDict(value);
457 if (Py_VerboseFlag)
458 PySys_WriteStderr("# clear builtins._\n");
459 PyDict_SetItemString(dict, "_", Py_None);
460 }
461 value = PyDict_GetItemString(modules, "sys");
462 if (value != NULL && PyModule_Check(value)) {
463 char **p;
464 PyObject *v;
465 dict = PyModule_GetDict(value);
466 for (p = sys_deletes; *p != NULL; p++) {
467 if (Py_VerboseFlag)
468 PySys_WriteStderr("# clear sys.%s\n", *p);
469 PyDict_SetItemString(dict, *p, Py_None);
470 }
471 for (p = sys_files; *p != NULL; p+=2) {
472 if (Py_VerboseFlag)
473 PySys_WriteStderr("# restore sys.%s\n", *p);
474 v = PyDict_GetItemString(dict, *(p+1));
475 if (v == NULL)
476 v = Py_None;
477 PyDict_SetItemString(dict, *p, v);
478 }
479 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000480
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000481 /* First, delete __main__ */
482 value = PyDict_GetItemString(modules, "__main__");
483 if (value != NULL && PyModule_Check(value)) {
484 if (Py_VerboseFlag)
485 PySys_WriteStderr("# cleanup __main__\n");
486 _PyModule_Clear(value);
487 PyDict_SetItemString(modules, "__main__", Py_None);
488 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000489
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000490 /* The special treatment of "builtins" here is because even
491 when it's not referenced as a module, its dictionary is
492 referenced by almost every module's __builtins__. Since
493 deleting a module clears its dictionary (even if there are
494 references left to it), we need to delete the "builtins"
495 module last. Likewise, we don't delete sys until the very
496 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000497
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000498 Also note that we 'delete' modules by replacing their entry
499 in the modules dict with None, rather than really deleting
500 them; this avoids a rehash of the modules dictionary and
501 also marks them as "non existent" so they won't be
502 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000504 /* Next, repeatedly delete modules with a reference count of
505 one (skipping builtins and sys) and delete them */
506 do {
507 ndone = 0;
508 pos = 0;
509 while (PyDict_Next(modules, &pos, &key, &value)) {
510 if (value->ob_refcnt != 1)
511 continue;
512 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100513 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000514 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100515 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000516 continue;
517 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100518 PySys_FormatStderr(
519 "# cleanup[1] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000520 _PyModule_Clear(value);
521 PyDict_SetItem(modules, key, Py_None);
522 ndone++;
523 }
524 }
525 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000527 /* Next, delete all modules (still skipping builtins and sys) */
528 pos = 0;
529 while (PyDict_Next(modules, &pos, &key, &value)) {
530 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100531 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000532 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100533 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000534 continue;
535 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100536 PySys_FormatStderr("# cleanup[2] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000537 _PyModule_Clear(value);
538 PyDict_SetItem(modules, key, Py_None);
539 }
540 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000541
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000542 /* Next, delete sys and builtins (in that order) */
543 value = PyDict_GetItemString(modules, "sys");
544 if (value != NULL && PyModule_Check(value)) {
545 if (Py_VerboseFlag)
546 PySys_WriteStderr("# cleanup sys\n");
547 _PyModule_Clear(value);
548 PyDict_SetItemString(modules, "sys", Py_None);
549 }
550 value = PyDict_GetItemString(modules, "builtins");
551 if (value != NULL && PyModule_Check(value)) {
552 if (Py_VerboseFlag)
553 PySys_WriteStderr("# cleanup builtins\n");
554 _PyModule_Clear(value);
555 PyDict_SetItemString(modules, "builtins", Py_None);
556 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000557
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000558 /* Finally, clear and delete the modules directory */
559 PyDict_Clear(modules);
560 interp->modules = NULL;
561 Py_DECREF(modules);
562 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000563}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000564
565
Barry Warsaw28a691b2010-04-17 00:19:56 +0000566/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000567
568long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000569PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000570{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000571 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000572}
573
574
Barry Warsaw28a691b2010-04-17 00:19:56 +0000575const char *
576PyImport_GetMagicTag(void)
577{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000578 return pyc_tag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000579}
580
Guido van Rossum25ce5661997-08-02 03:10:38 +0000581/* Magic for extension modules (built-in as well as dynamically
582 loaded). To prevent initializing an extension module more than
583 once, we keep a static dictionary 'extensions' keyed by module name
584 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000585 modules), containing these modules. A copy of the module's
Victor Stinner95872862011-03-07 18:20:56 +0100586 dictionary is stored by calling _PyImport_FixupExtensionObject()
Guido van Rossum25ce5661997-08-02 03:10:38 +0000587 immediately after the module initialization function succeeds. A
588 copy can be retrieved from there by calling
Victor Stinner95872862011-03-07 18:20:56 +0100589 _PyImport_FindExtensionObject().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000590
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000591 Modules which do support multiple initialization set their m_size
592 field to a non-negative number (indicating the size of the
593 module-specific state). They are still recorded in the extensions
594 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000595*/
596
597int
Victor Stinner95872862011-03-07 18:20:56 +0100598_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
599 PyObject *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000600{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000601 PyObject *modules, *dict;
602 struct PyModuleDef *def;
603 if (extensions == NULL) {
604 extensions = PyDict_New();
605 if (extensions == NULL)
606 return -1;
607 }
608 if (mod == NULL || !PyModule_Check(mod)) {
609 PyErr_BadInternalCall();
610 return -1;
611 }
612 def = PyModule_GetDef(mod);
613 if (!def) {
614 PyErr_BadInternalCall();
615 return -1;
616 }
617 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +0100618 if (PyDict_SetItem(modules, name, mod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000619 return -1;
620 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100621 PyDict_DelItem(modules, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000622 return -1;
623 }
624 if (def->m_size == -1) {
625 if (def->m_base.m_copy) {
626 /* Somebody already imported the module,
627 likely under a different name.
628 XXX this should really not happen. */
629 Py_DECREF(def->m_base.m_copy);
630 def->m_base.m_copy = NULL;
631 }
632 dict = PyModule_GetDict(mod);
633 if (dict == NULL)
634 return -1;
635 def->m_base.m_copy = PyDict_Copy(dict);
636 if (def->m_base.m_copy == NULL)
637 return -1;
638 }
Victor Stinner49d3f252010-10-17 01:24:53 +0000639 PyDict_SetItem(extensions, filename, (PyObject*)def);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000640 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000641}
642
Victor Stinner49d3f252010-10-17 01:24:53 +0000643int
644_PyImport_FixupBuiltin(PyObject *mod, char *name)
645{
646 int res;
Victor Stinner95872862011-03-07 18:20:56 +0100647 PyObject *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100648 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100649 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000650 return -1;
Victor Stinner95872862011-03-07 18:20:56 +0100651 res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj);
652 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000653 return res;
654}
655
Guido van Rossum25ce5661997-08-02 03:10:38 +0000656PyObject *
Victor Stinner95872862011-03-07 18:20:56 +0100657_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000658{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000659 PyObject *mod, *mdict;
660 PyModuleDef* def;
661 if (extensions == NULL)
662 return NULL;
Victor Stinner49d3f252010-10-17 01:24:53 +0000663 def = (PyModuleDef*)PyDict_GetItem(extensions, filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000664 if (def == NULL)
665 return NULL;
666 if (def->m_size == -1) {
667 /* Module does not support repeated initialization */
668 if (def->m_base.m_copy == NULL)
669 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100670 mod = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000671 if (mod == NULL)
672 return NULL;
673 mdict = PyModule_GetDict(mod);
674 if (mdict == NULL)
675 return NULL;
676 if (PyDict_Update(mdict, def->m_base.m_copy))
677 return NULL;
678 }
679 else {
680 if (def->m_base.m_init == NULL)
681 return NULL;
682 mod = def->m_base.m_init();
683 if (mod == NULL)
684 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100685 PyDict_SetItem(PyImport_GetModuleDict(), name, mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000686 Py_DECREF(mod);
687 }
688 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100689 PyDict_DelItem(PyImport_GetModuleDict(), name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000690 Py_DECREF(mod);
691 return NULL;
692 }
693 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +0100694 PySys_FormatStderr("import %U # previously loaded (%R)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000695 name, filename);
696 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000697
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000698}
699
Victor Stinner49d3f252010-10-17 01:24:53 +0000700PyObject *
Victor Stinner501c09a2011-02-23 00:02:00 +0000701_PyImport_FindBuiltin(const char *name)
Victor Stinner49d3f252010-10-17 01:24:53 +0000702{
Victor Stinner95872862011-03-07 18:20:56 +0100703 PyObject *res, *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100704 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100705 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000706 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100707 res = _PyImport_FindExtensionObject(nameobj, nameobj);
708 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000709 return res;
710}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000711
712/* Get the module object corresponding to a module name.
713 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000714 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000715 Because the former action is most common, THIS DOES NOT RETURN A
716 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000717
Guido van Rossum79f25d91997-04-29 20:08:16 +0000718PyObject *
Victor Stinner27ee0892011-03-04 12:57:09 +0000719PyImport_AddModuleObject(PyObject *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000720{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000721 PyObject *modules = PyImport_GetModuleDict();
722 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000723
Victor Stinner27ee0892011-03-04 12:57:09 +0000724 if ((m = PyDict_GetItem(modules, name)) != NULL &&
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000725 PyModule_Check(m))
726 return m;
Victor Stinner27ee0892011-03-04 12:57:09 +0000727 m = PyModule_NewObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000728 if (m == NULL)
729 return NULL;
Victor Stinner27ee0892011-03-04 12:57:09 +0000730 if (PyDict_SetItem(modules, name, m) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000731 Py_DECREF(m);
732 return NULL;
733 }
734 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000735
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000736 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000737}
738
Victor Stinner27ee0892011-03-04 12:57:09 +0000739PyObject *
740PyImport_AddModule(const char *name)
741{
742 PyObject *nameobj, *module;
743 nameobj = PyUnicode_FromString(name);
744 if (nameobj == NULL)
745 return NULL;
746 module = PyImport_AddModuleObject(nameobj);
747 Py_DECREF(nameobj);
748 return module;
749}
750
751
Tim Peters1cd70172004-08-02 03:52:12 +0000752/* Remove name from sys.modules, if it's there. */
753static void
Victor Stinner27ee0892011-03-04 12:57:09 +0000754remove_module(PyObject *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000755{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000756 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner27ee0892011-03-04 12:57:09 +0000757 if (PyDict_GetItem(modules, name) == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000758 return;
Victor Stinner27ee0892011-03-04 12:57:09 +0000759 if (PyDict_DelItem(modules, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000760 Py_FatalError("import: deleting existing key in"
761 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000762}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000763
Victor Stinnerc9abda02011-03-14 13:33:46 -0400764static PyObject * get_sourcefile(PyObject *filename);
765static PyObject *make_source_pathname(PyObject *pathname);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200766static PyObject* make_compiled_pathname(PyObject *pathname, int debug);
Christian Heimes3b06e532008-01-07 20:12:44 +0000767
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000768/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000769 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
770 * removed from sys.modules, to avoid leaving damaged module objects
771 * in sys.modules. The caller may wish to restore the original
772 * module object (if any) in this case; PyImport_ReloadModule is an
773 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000774 *
775 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
776 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000777 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000778PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000779PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000780{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000781 return PyImport_ExecCodeModuleWithPathnames(
782 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000783}
784
785PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000786PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000787{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 return PyImport_ExecCodeModuleWithPathnames(
789 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000790}
791
792PyObject *
793PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000794 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000795{
Victor Stinner27ee0892011-03-04 12:57:09 +0000796 PyObject *m = NULL;
797 PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL;
798
799 nameobj = PyUnicode_FromString(name);
800 if (nameobj == NULL)
801 return NULL;
802
803 if (pathname != NULL) {
804 pathobj = PyUnicode_DecodeFSDefault(pathname);
805 if (pathobj == NULL)
806 goto error;
807 } else
808 pathobj = NULL;
809 if (cpathname != NULL) {
810 cpathobj = PyUnicode_DecodeFSDefault(cpathname);
811 if (cpathobj == NULL)
812 goto error;
813 } else
814 cpathobj = NULL;
815 m = PyImport_ExecCodeModuleObject(nameobj, co, pathobj, cpathobj);
816error:
817 Py_DECREF(nameobj);
818 Py_XDECREF(pathobj);
819 Py_XDECREF(cpathobj);
820 return m;
821}
822
823PyObject*
824PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
825 PyObject *cpathname)
826{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000827 PyObject *modules = PyImport_GetModuleDict();
828 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000829
Victor Stinner27ee0892011-03-04 12:57:09 +0000830 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000831 if (m == NULL)
832 return NULL;
833 /* If the module is being reloaded, we get the old module back
834 and re-use its dict to exec the new code. */
835 d = PyModule_GetDict(m);
836 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
837 if (PyDict_SetItemString(d, "__builtins__",
838 PyEval_GetBuiltins()) != 0)
839 goto error;
840 }
841 /* Remember the filename as the __file__ attribute */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000842 if (pathname != NULL) {
Victor Stinnerc9abda02011-03-14 13:33:46 -0400843 v = get_sourcefile(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000844 if (v == NULL)
845 PyErr_Clear();
846 }
Victor Stinner27ee0892011-03-04 12:57:09 +0000847 else
848 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000849 if (v == NULL) {
850 v = ((PyCodeObject *)co)->co_filename;
851 Py_INCREF(v);
852 }
853 if (PyDict_SetItemString(d, "__file__", v) != 0)
854 PyErr_Clear(); /* Not important enough to report */
855 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000856
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000857 /* Remember the pyc path name as the __cached__ attribute. */
Victor Stinner27ee0892011-03-04 12:57:09 +0000858 if (cpathname != NULL)
859 v = cpathname;
860 else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 v = Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000862 if (PyDict_SetItemString(d, "__cached__", v) != 0)
863 PyErr_Clear(); /* Not important enough to report */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000864
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000865 v = PyEval_EvalCode(co, d, d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000866 if (v == NULL)
867 goto error;
868 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000869
Victor Stinner27ee0892011-03-04 12:57:09 +0000870 if ((m = PyDict_GetItem(modules, name)) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000871 PyErr_Format(PyExc_ImportError,
Victor Stinner27ee0892011-03-04 12:57:09 +0000872 "Loaded module %R not found in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000873 name);
874 return NULL;
875 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000876
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000877 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000878
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000879 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000880
881 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000882 remove_module(name);
883 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000884}
885
886
Barry Warsaw28a691b2010-04-17 00:19:56 +0000887/* Like strrchr(string, '/') but searches for the rightmost of either SEP
888 or ALTSEP, if the latter is defined.
889*/
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200890static Py_UCS4*
891rightmost_sep(Py_UCS4 *s)
Victor Stinnerc9abda02011-03-14 13:33:46 -0400892{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200893 Py_UCS4 *found, c;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400894 for (found = NULL; (c = *s); s++) {
895 if (c == SEP
896#ifdef ALTSEP
897 || c == ALTSEP
898#endif
899 )
900 {
901 found = s;
902 }
903 }
904 return found;
905}
906
Martin v. Löwis2db72862011-10-23 17:29:08 +0200907/* Like rightmost_sep, but operate on unicode objects. */
908static Py_ssize_t
909rightmost_sep_obj(PyObject* o)
910{
911 Py_ssize_t found, i;
912 Py_UCS4 c;
913 for (found = -1, i = 0; i < PyUnicode_GET_LENGTH(o); i++) {
914 c = PyUnicode_READ_CHAR(o, i);
915 if (c == SEP
916#ifdef ALTSEP
917 || c == ALTSEP
918#endif
919 )
920 {
921 found = i;
922 }
923 }
924 return found;
925}
Victor Stinnerc9abda02011-03-14 13:33:46 -0400926
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000927/* Given a pathname for a Python source file, fill a buffer with the
928 pathname for the corresponding compiled file. Return the pathname
929 for the compiled file, or NULL if there's no space in the buffer.
Victor Stinner2f42ae52011-03-20 00:41:24 +0100930 Doesn't set an exception.
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000931
Victor Stinner2f42ae52011-03-20 00:41:24 +0100932 foo.py -> __pycache__/foo.<tag>.pyc */
933
934static PyObject*
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200935make_compiled_pathname(PyObject *pathstr, int debug)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000936{
Martin v. Löwis2db72862011-10-23 17:29:08 +0200937 PyObject *result;
938 Py_ssize_t fname, ext, len, i, pos, taglen;
939 Py_ssize_t pycache_len = sizeof("__pycache__/") - 1;
940 int kind;
941 void *data;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000942
Martin v. Löwis2db72862011-10-23 17:29:08 +0200943 /* Compute the output string size. */
944 len = PyUnicode_GET_LENGTH(pathstr);
945 /* If there is no separator, this returns -1, so
946 lastsep will be 0. */
947 fname = rightmost_sep_obj(pathstr) + 1;
948 ext = fname - 1;
949 for(i = fname; i < len; i++)
950 if (PyUnicode_READ_CHAR(pathstr, i) == '.')
951 ext = i + 1;
952 if (ext < fname)
953 /* No dot in filename; use entire filename */
954 ext = len;
955
956 /* result = pathstr[:fname] + "__pycache__" + SEP +
957 pathstr[fname:ext] + tag + ".py[co]" */
958 taglen = strlen(pyc_tag);
959 result = PyUnicode_New(ext + pycache_len + taglen + 4,
960 PyUnicode_MAX_CHAR_VALUE(pathstr));
961 if (!result)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200962 return NULL;
Martin v. Löwis2db72862011-10-23 17:29:08 +0200963 kind = PyUnicode_KIND(result);
964 data = PyUnicode_DATA(result);
965 PyUnicode_CopyCharacters(result, 0, pathstr, 0, fname);
966 pos = fname;
967 for (i = 0; i < pycache_len - 1; i++)
968 PyUnicode_WRITE(kind, data, pos++, "__pycache__"[i]);
969 PyUnicode_WRITE(kind, data, pos++, SEP);
970 PyUnicode_CopyCharacters(result, pos, pathstr,
971 fname, ext - fname);
972 pos += ext - fname;
973 for (i = 0; pyc_tag[i]; i++)
974 PyUnicode_WRITE(kind, data, pos++, pyc_tag[i]);
975 PyUnicode_WRITE(kind, data, pos++, '.');
976 PyUnicode_WRITE(kind, data, pos++, 'p');
977 PyUnicode_WRITE(kind, data, pos++, 'y');
978 PyUnicode_WRITE(kind, data, pos++, debug ? 'c' : 'o');
979 return result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000980}
981
982
Barry Warsaw28a691b2010-04-17 00:19:56 +0000983/* Given a pathname to a Python byte compiled file, return the path to the
984 source file, if the path matches the PEP 3147 format. This does not check
985 for any file existence, however, if the pyc file name does not match PEP
986 3147 style, NULL is returned. buf must be at least as big as pathname;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400987 the resulting path will always be shorter.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000988
Victor Stinnerc9abda02011-03-14 13:33:46 -0400989 (...)/__pycache__/foo.<tag>.pyc -> (...)/foo.py */
990
991static PyObject*
992make_source_pathname(PyObject *pathobj)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000993{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200994 Py_UCS4 buf[MAXPATHLEN];
995 Py_UCS4 *pathname;
996 Py_UCS4 *left, *right, *dot0, *dot1, sep;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997 size_t i, j;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400998
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200999 if (PyUnicode_GET_LENGTH(pathobj) > MAXPATHLEN)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001000 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001001 pathname = PyUnicode_AsUCS4Copy(pathobj);
1002 if (!pathname)
1003 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001004
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001005 /* Look back two slashes from the end. In between these two slashes
1006 must be the string __pycache__ or this is not a PEP 3147 style
1007 path. It's possible for there to be only one slash.
1008 */
Victor Stinner2f42ae52011-03-20 00:41:24 +01001009 right = rightmost_sep(pathname);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001010 if (right == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001011 return NULL;
1012 sep = *right;
1013 *right = '\0';
Victor Stinner2f42ae52011-03-20 00:41:24 +01001014 left = rightmost_sep(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001015 *right = sep;
1016 if (left == NULL)
1017 left = pathname;
1018 else
1019 left++;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001020 if (right-left != Py_UCS4_strlen(CACHEDIR_UNICODE) ||
1021 Py_UCS4_strncmp(left, CACHEDIR_UNICODE, right-left) != 0)
1022 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001023
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001024 /* Now verify that the path component to the right of the last slash
1025 has two dots in it.
1026 */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001027 if ((dot0 = Py_UCS4_strchr(right + 1, '.')) == NULL)
1028 goto error;
1029 if ((dot1 = Py_UCS4_strchr(dot0 + 1, '.')) == NULL)
1030 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001031 /* Too many dots? */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001032 if (Py_UCS4_strchr(dot1 + 1, '.') != NULL)
1033 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001034
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001035 /* This is a PEP 3147 path. Start by copying everything from the
1036 start of pathname up to and including the leftmost slash. Then
1037 copy the file's basename, removing the magic tag and adding a .py
1038 suffix.
1039 */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001040 Py_UCS4_strncpy(buf, pathname, (i=left-pathname));
1041 Py_UCS4_strncpy(buf+i, right+1, (j=dot0-right));
Victor Stinnerc9abda02011-03-14 13:33:46 -04001042 buf[i+j] = 'p';
1043 buf[i+j+1] = 'y';
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001044 PyMem_Free(pathname);
1045 return PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, i+j+2);
1046 error:
1047 PyMem_Free(pathname);
1048 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001049}
1050
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001051/* Given a pathname for a Python source file, its time of last
1052 modification, and a pathname for a compiled file, check whether the
1053 compiled file represents the same version of the source. If so,
1054 return a FILE pointer for the compiled file, positioned just after
1055 the header; if not, return NULL.
1056 Doesn't set an exception. */
1057
1058static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001059check_compiled_module(PyObject *pathname, time_t mtime, PyObject *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001060{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001061 FILE *fp;
1062 long magic;
1063 long pyc_mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001064
Victor Stinner2f42ae52011-03-20 00:41:24 +01001065 fp = _Py_fopen(cpathname, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001066 if (fp == NULL)
1067 return NULL;
1068 magic = PyMarshal_ReadLongFromFile(fp);
1069 if (magic != pyc_magic) {
1070 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001071 PySys_FormatStderr("# %R has bad magic\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001072 fclose(fp);
1073 return NULL;
1074 }
1075 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
1076 if (pyc_mtime != mtime) {
1077 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001078 PySys_FormatStderr("# %R has bad mtime\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001079 fclose(fp);
1080 return NULL;
1081 }
1082 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001083 PySys_FormatStderr("# %R matches %R\n", cpathname, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001084 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001085}
1086
1087
1088/* Read a code object from a file and check it for validity */
1089
Guido van Rossum79f25d91997-04-29 20:08:16 +00001090static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001091read_compiled_module(PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001092{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001093 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001094
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001095 co = PyMarshal_ReadLastObjectFromFile(fp);
1096 if (co == NULL)
1097 return NULL;
1098 if (!PyCode_Check(co)) {
1099 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001100 "Non-code object in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001101 Py_DECREF(co);
1102 return NULL;
1103 }
1104 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001105}
1106
1107
1108/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001109 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001110
Guido van Rossum79f25d91997-04-29 20:08:16 +00001111static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001112load_compiled_module(PyObject *name, PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001113{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001114 long magic;
1115 PyCodeObject *co;
1116 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001117
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001118 magic = PyMarshal_ReadLongFromFile(fp);
1119 if (magic != pyc_magic) {
1120 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001121 "Bad magic number in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001122 return NULL;
1123 }
1124 (void) PyMarshal_ReadLongFromFile(fp);
1125 co = read_compiled_module(cpathname, fp);
1126 if (co == NULL)
1127 return NULL;
1128 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001129 PySys_FormatStderr("import %U # precompiled from %R\n",
1130 name, cpathname);
1131 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1132 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001133 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001134
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001135 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001136}
1137
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001138/* Parse a source file and return the corresponding code object */
1139
Guido van Rossum79f25d91997-04-29 20:08:16 +00001140static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001141parse_source_module(PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001142{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001143 PyCodeObject *co;
1144 PyObject *pathbytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001145 mod_ty mod;
1146 PyCompilerFlags flags;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001147 PyArena *arena;
1148
1149 pathbytes = PyUnicode_EncodeFSDefault(pathname);
1150 if (pathbytes == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001151 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001152
Victor Stinner2f42ae52011-03-20 00:41:24 +01001153 arena = PyArena_New();
1154 if (arena == NULL) {
1155 Py_DECREF(pathbytes);
1156 return NULL;
1157 }
1158
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001159 flags.cf_flags = 0;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001160 mod = PyParser_ASTFromFile(fp, PyBytes_AS_STRING(pathbytes), NULL,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001161 Py_file_input, 0, 0, &flags,
1162 NULL, arena);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001163 if (mod != NULL)
1164 co = PyAST_Compile(mod, PyBytes_AS_STRING(pathbytes), NULL, arena);
1165 else
1166 co = NULL;
1167 Py_DECREF(pathbytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001168 PyArena_Free(arena);
1169 return co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001170}
1171
Guido van Rossum55a83382000-09-20 20:31:38 +00001172/* Helper to open a bytecode file for writing in exclusive mode */
1173
Victor Stinner783c82c2011-04-20 03:27:51 +02001174#ifndef MS_WINDOWS
Guido van Rossum55a83382000-09-20 20:31:38 +00001175static FILE *
Christian Heimes05e8be12008-02-23 18:30:17 +00001176open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +00001177{
1178#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001179 /* Use O_EXCL to avoid a race condition when another process tries to
1180 write the same file. When that happens, our open() call fails,
1181 which is just fine (since it's only a cache).
1182 XXX If the file exists and is writable but the directory is not
1183 writable, the file will never be written. Oh well.
1184 */
1185 int fd;
1186 (void) unlink(filename);
1187 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
Tim Peters42c83af2000-09-29 04:03:10 +00001188#ifdef O_BINARY
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001189 |O_BINARY /* necessary for Windows */
Tim Peters42c83af2000-09-29 04:03:10 +00001190#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001191#ifdef __VMS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001192 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001193#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001194 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001195#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001196 );
1197 if (fd < 0)
1198 return NULL;
1199 return fdopen(fd, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001200#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001201 /* Best we can do -- on Windows this can't happen anyway */
1202 return fopen(filename, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001203#endif
1204}
Victor Stinner783c82c2011-04-20 03:27:51 +02001205#endif
Guido van Rossum55a83382000-09-20 20:31:38 +00001206
1207
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001208/* Write a compiled module to a file, placing the time of last
1209 modification of its source into the header.
1210 Errors are ignored, if a write error occurs an attempt is made to
1211 remove the file. */
1212
1213static void
Victor Stinner2f42ae52011-03-20 00:41:24 +01001214write_compiled_module(PyCodeObject *co, PyObject *cpathname,
1215 struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001216{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001217 Py_UCS4 *cpathname_ucs4;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001218 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001219 time_t mtime = srcstat->st_mtime;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001220#ifdef MS_WINDOWS /* since Windows uses different permissions */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001221 mode_t mode = srcstat->st_mode & ~S_IEXEC;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001222#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001223 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
1224 mode_t dirmode = (srcstat->st_mode |
1225 S_IXUSR | S_IXGRP | S_IXOTH |
1226 S_IWUSR | S_IWGRP | S_IWOTH);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001227 PyObject *dirbytes;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001228#endif
Victor Stinner783c82c2011-04-20 03:27:51 +02001229#ifdef MS_WINDOWS
1230 int fd;
1231#else
Antoine Pitrou707033a2011-10-17 19:28:44 +02001232 PyObject *cpathbytes, *cpathbytes_tmp;
1233 Py_ssize_t cpathbytes_len;
Victor Stinner783c82c2011-04-20 03:27:51 +02001234#endif
1235 PyObject *dirname;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001236 Py_UCS4 *dirsep;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001237 int res, ok;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001238
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001239 /* Ensure that the __pycache__ directory exists. */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001240 cpathname_ucs4 = PyUnicode_AsUCS4Copy(cpathname);
1241 if (!cpathname_ucs4)
1242 return;
1243 dirsep = rightmost_sep(cpathname_ucs4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001244 if (dirsep == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001245 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001246 PySys_FormatStderr("# no %s path found %R\n", CACHEDIR, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001247 return;
1248 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001249 dirname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
1250 cpathname_ucs4,
1251 dirsep - cpathname_ucs4);
1252 PyMem_Free(cpathname_ucs4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001253 if (dirname == NULL) {
1254 PyErr_Clear();
1255 return;
1256 }
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001257
1258#ifdef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001259 res = CreateDirectoryW(PyUnicode_AS_UNICODE(dirname), NULL);
1260 ok = (res != 0);
1261 if (!ok && GetLastError() == ERROR_ALREADY_EXISTS)
1262 ok = 1;
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001263#else
Victor Stinner2f42ae52011-03-20 00:41:24 +01001264 dirbytes = PyUnicode_EncodeFSDefault(dirname);
1265 if (dirbytes == NULL) {
1266 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001267 return;
1268 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001269 res = mkdir(PyBytes_AS_STRING(dirbytes), dirmode);
1270 Py_DECREF(dirbytes);
1271 if (0 <= res)
1272 ok = 1;
1273 else
1274 ok = (errno == EEXIST);
1275#endif
1276 if (!ok) {
1277 if (Py_VerboseFlag)
1278 PySys_FormatStderr("# cannot create cache dir %R\n", dirname);
1279 Py_DECREF(dirname);
1280 return;
1281 }
1282 Py_DECREF(dirname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001283
Victor Stinner783c82c2011-04-20 03:27:51 +02001284#ifdef MS_WINDOWS
1285 (void)DeleteFileW(PyUnicode_AS_UNICODE(cpathname));
1286 fd = _wopen(PyUnicode_AS_UNICODE(cpathname),
1287 O_EXCL | O_CREAT | O_WRONLY | O_TRUNC | O_BINARY,
1288 mode);
1289 if (0 <= fd)
1290 fp = fdopen(fd, "wb");
1291 else
1292 fp = NULL;
1293#else
Antoine Pitrou707033a2011-10-17 19:28:44 +02001294 /* Under POSIX, we first write to a tmp file and then take advantage
1295 of atomic renaming. */
Victor Stinner2f42ae52011-03-20 00:41:24 +01001296 cpathbytes = PyUnicode_EncodeFSDefault(cpathname);
1297 if (cpathbytes == NULL) {
1298 PyErr_Clear();
1299 return;
1300 }
Antoine Pitrou707033a2011-10-17 19:28:44 +02001301 cpathbytes_len = PyBytes_GET_SIZE(cpathbytes);
1302 cpathbytes_tmp = PyBytes_FromStringAndSize(NULL, cpathbytes_len + 4);
1303 if (cpathbytes_tmp == NULL) {
1304 Py_DECREF(cpathbytes);
1305 PyErr_Clear();
1306 return;
1307 }
1308 memcpy(PyBytes_AS_STRING(cpathbytes_tmp), PyBytes_AS_STRING(cpathbytes),
1309 cpathbytes_len);
1310 memcpy(PyBytes_AS_STRING(cpathbytes_tmp) + cpathbytes_len, ".tmp", 4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001311
Antoine Pitrou707033a2011-10-17 19:28:44 +02001312 fp = open_exclusive(PyBytes_AS_STRING(cpathbytes_tmp), mode);
Victor Stinner783c82c2011-04-20 03:27:51 +02001313#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001314 if (fp == NULL) {
1315 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001316 PySys_FormatStderr(
1317 "# can't create %R\n", cpathname);
Victor Stinner783c82c2011-04-20 03:27:51 +02001318#ifndef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001319 Py_DECREF(cpathbytes);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001320 Py_DECREF(cpathbytes_tmp);
Victor Stinner783c82c2011-04-20 03:27:51 +02001321#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001322 return;
1323 }
1324 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
1325 /* First write a 0 for mtime */
1326 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
1327 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001328 fflush(fp);
1329 /* Now write the true mtime */
1330 fseek(fp, 4L, 0);
1331 assert(mtime < LONG_MAX);
1332 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001333 if (fflush(fp) != 0 || ferror(fp)) {
1334 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001335 PySys_FormatStderr("# can't write %R\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001336 /* Don't keep partial file */
1337 fclose(fp);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001338#ifdef MS_WINDOWS
1339 (void)DeleteFileW(PyUnicode_AS_UNICODE(cpathname));
1340#else
Antoine Pitrou707033a2011-10-17 19:28:44 +02001341 (void) unlink(PyBytes_AS_STRING(cpathbytes_tmp));
Victor Stinner2f42ae52011-03-20 00:41:24 +01001342 Py_DECREF(cpathbytes);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001343 Py_DECREF(cpathbytes_tmp);
Victor Stinner783c82c2011-04-20 03:27:51 +02001344#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001345 return;
1346 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001347 fclose(fp);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001348 /* Under POSIX, do an atomic rename */
1349#ifndef MS_WINDOWS
1350 if (rename(PyBytes_AS_STRING(cpathbytes_tmp),
1351 PyBytes_AS_STRING(cpathbytes))) {
1352 if (Py_VerboseFlag)
1353 PySys_FormatStderr("# can't write %R\n", cpathname);
1354 /* Don't keep tmp file */
1355 unlink(PyBytes_AS_STRING(cpathbytes_tmp));
1356 Py_DECREF(cpathbytes);
1357 Py_DECREF(cpathbytes_tmp);
1358 return;
1359 }
1360 Py_DECREF(cpathbytes);
1361 Py_DECREF(cpathbytes_tmp);
1362#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001363 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001364 PySys_FormatStderr("# wrote %R\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001365}
1366
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001367static void
1368update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
1369{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001370 PyObject *constants, *tmp;
1371 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001372
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001373 if (PyUnicode_Compare(co->co_filename, oldname))
1374 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001375
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001376 tmp = co->co_filename;
1377 co->co_filename = newname;
1378 Py_INCREF(co->co_filename);
1379 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001380
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001381 constants = co->co_consts;
1382 n = PyTuple_GET_SIZE(constants);
1383 for (i = 0; i < n; i++) {
1384 tmp = PyTuple_GET_ITEM(constants, i);
1385 if (PyCode_Check(tmp))
1386 update_code_filenames((PyCodeObject *)tmp,
1387 oldname, newname);
1388 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001389}
1390
Victor Stinner2f42ae52011-03-20 00:41:24 +01001391static void
1392update_compiled_module(PyCodeObject *co, PyObject *newname)
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001393{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001394 PyObject *oldname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001395
Victor Stinner2f42ae52011-03-20 00:41:24 +01001396 if (PyUnicode_Compare(co->co_filename, newname) == 0)
1397 return;
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +00001398
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001399 oldname = co->co_filename;
1400 Py_INCREF(oldname);
1401 update_code_filenames(co, oldname, newname);
1402 Py_DECREF(oldname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001403}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001404
Brett Cannon442c9b92011-03-23 16:14:42 -07001405static PyObject *
1406imp_fix_co_filename(PyObject *self, PyObject *args)
1407{
1408 PyObject *co;
1409 PyObject *file_path;
1410
1411 if (!PyArg_ParseTuple(args, "OO:_fix_co_filename", &co, &file_path))
1412 return NULL;
1413
1414 if (!PyCode_Check(co)) {
1415 PyErr_SetString(PyExc_TypeError,
1416 "first argument must be a code object");
1417 return NULL;
1418 }
1419
1420 if (!PyUnicode_Check(file_path)) {
1421 PyErr_SetString(PyExc_TypeError,
1422 "second argument must be a string");
1423 return NULL;
1424 }
1425
1426 update_compiled_module((PyCodeObject*)co, file_path);
1427
1428 Py_RETURN_NONE;
1429}
1430
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001431/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001432 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
1433 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001434
Guido van Rossum79f25d91997-04-29 20:08:16 +00001435static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001436load_source_module(PyObject *name, PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001437{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001438 struct stat st;
1439 FILE *fpc;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001440 PyObject *cpathname = NULL, *cpathbytes = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001441 PyCodeObject *co;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001442 PyObject *m = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001443
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001444 if (fstat(fileno(fp), &st) != 0) {
1445 PyErr_Format(PyExc_RuntimeError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001446 "unable to get file status from %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001448 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001449 }
Fred Drake4c82b232000-06-30 16:18:57 +00001450#if SIZEOF_TIME_T > 4
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001451 /* Python's .pyc timestamp handling presumes that the timestamp fits
1452 in 4 bytes. This will be fine until sometime in the year 2038,
1453 when a 4-byte signed time_t will overflow.
1454 */
1455 if (st.st_mtime >> 32) {
1456 PyErr_SetString(PyExc_OverflowError,
1457 "modification time overflows a 4 byte field");
Victor Stinner2f42ae52011-03-20 00:41:24 +01001458 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001459 }
Fred Drake4c82b232000-06-30 16:18:57 +00001460#endif
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001461 cpathname = make_compiled_pathname(pathname, !Py_OptimizeFlag);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001462
1463 if (cpathname != NULL)
1464 fpc = check_compiled_module(pathname, st.st_mtime, cpathname);
1465 else
1466 fpc = NULL;
1467
1468 if (fpc) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001469 co = read_compiled_module(cpathname, fpc);
1470 fclose(fpc);
1471 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001472 goto error;
1473 update_compiled_module(co, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001474 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001475 PySys_FormatStderr("import %U # precompiled from %R\n",
1476 name, cpathname);
1477 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1478 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001479 }
1480 else {
1481 co = parse_source_module(pathname, fp);
1482 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001483 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001484 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001485 PySys_FormatStderr("import %U # from %R\n",
Victor Stinner98dbba52011-03-14 15:15:47 -04001486 name, pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001487 if (cpathname != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001488 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1489 if (ro == NULL || !PyObject_IsTrue(ro))
1490 write_compiled_module(co, cpathname, &st);
1491 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001492 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1493 pathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001494 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001495 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001496
Victor Stinner2f42ae52011-03-20 00:41:24 +01001497error:
1498 Py_XDECREF(cpathbytes);
1499 Py_XDECREF(cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001500 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001501}
1502
Christian Heimes3b06e532008-01-07 20:12:44 +00001503/* Get source file -> unicode or None
1504 * Returns the path to the py file if available, else the given path
1505 */
1506static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001507get_sourcefile(PyObject *filename)
Christian Heimes3b06e532008-01-07 20:12:44 +00001508{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001509 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001510 Py_UCS4 *fileuni;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001511 PyObject *py;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001512 struct stat statbuf;
Christian Heimes3b06e532008-01-07 20:12:44 +00001513
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001514 len = PyUnicode_GET_LENGTH(filename);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001515 if (len == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001516 Py_RETURN_NONE;
Christian Heimes3b06e532008-01-07 20:12:44 +00001517
Victor Stinnerc9abda02011-03-14 13:33:46 -04001518 /* don't match *.pyc or *.pyo? */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001519 fileuni = PyUnicode_AsUCS4Copy(filename);
1520 if (!fileuni)
1521 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001522 if (len < 5
1523 || fileuni[len-4] != '.'
1524 || (fileuni[len-3] != 'p' && fileuni[len-3] != 'P')
1525 || (fileuni[len-2] != 'y' && fileuni[len-2] != 'Y'))
1526 goto unchanged;
Christian Heimes3b06e532008-01-07 20:12:44 +00001527
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001528 /* Start by trying to turn PEP 3147 path into source path. If that
1529 * fails, just chop off the trailing character, i.e. legacy pyc path
1530 * to py.
1531 */
Victor Stinnerc9abda02011-03-14 13:33:46 -04001532 py = make_source_pathname(filename);
1533 if (py == NULL) {
1534 PyErr_Clear();
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001535 py = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, fileuni, len - 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001536 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001537 if (py == NULL)
1538 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001539
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001540 if (_Py_stat(py, &statbuf) == 0 && S_ISREG(statbuf.st_mode)) {
1541 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001542 return py;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001543 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001544 Py_DECREF(py);
1545 goto unchanged;
1546
1547error:
1548 PyErr_Clear();
1549unchanged:
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001550 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001551 Py_INCREF(filename);
1552 return filename;
Christian Heimes3b06e532008-01-07 20:12:44 +00001553}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001554
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001555/* Forward */
Victor Stinner41c5fec2011-03-13 21:46:30 -04001556static PyObject *load_module(PyObject *, FILE *, PyObject *, int, PyObject *);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001557static struct filedescr *find_module(PyObject *, PyObject *, PyObject *,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001558 PyObject **, FILE **, PyObject **);
Victor Stinner53dc7352011-03-20 01:50:21 +01001559static struct _frozen * find_frozen(PyObject *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001560
1561/* Load a package and return its module object WITH INCREMENTED
1562 REFERENCE COUNT */
1563
1564static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001565load_package(PyObject *name, PyObject *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001566{
Victor Stinner41c5fec2011-03-13 21:46:30 -04001567 PyObject *m, *d, *bufobj;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001568 PyObject *file = NULL, *path_list = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001569 int err;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001570 FILE *fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001571 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001572
Victor Stinnerc9abda02011-03-14 13:33:46 -04001573 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001574 if (m == NULL)
1575 return NULL;
1576 if (Py_VerboseFlag)
Victor Stinner98dbba52011-03-14 15:15:47 -04001577 PySys_FormatStderr("import %U # directory %R\n",
1578 name, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001579 file = get_sourcefile(pathname);
1580 if (file == NULL)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001581 return NULL;
1582 path_list = Py_BuildValue("[O]", file);
1583 if (path_list == NULL) {
1584 Py_DECREF(file);
1585 return NULL;
1586 }
1587 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001588 err = PyDict_SetItemString(d, "__file__", file);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001589 Py_DECREF(file);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001590 if (err == 0)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001591 err = PyDict_SetItemString(d, "__path__", path_list);
1592 if (err != 0) {
1593 Py_DECREF(path_list);
1594 return NULL;
1595 }
Victor Stinner533d7832011-03-14 13:22:54 -04001596 fdp = find_module(name, initstr, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001597 &bufobj, &fp, NULL);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001598 Py_DECREF(path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001599 if (fdp == NULL) {
1600 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1601 PyErr_Clear();
1602 Py_INCREF(m);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001603 return m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001604 }
1605 else
Victor Stinnerc9abda02011-03-14 13:33:46 -04001606 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001607 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001608 m = load_module(name, fp, bufobj, fdp->type, NULL);
1609 Py_XDECREF(bufobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001610 if (fp != NULL)
1611 fclose(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001612 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001613}
1614
1615
1616/* Helper to test for built-in module */
1617
1618static int
Victor Stinner95872862011-03-07 18:20:56 +01001619is_builtin(PyObject *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001620{
Victor Stinner95872862011-03-07 18:20:56 +01001621 int i, cmp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001622 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
Victor Stinner95872862011-03-07 18:20:56 +01001623 cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name);
1624 if (cmp == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001625 if (PyImport_Inittab[i].initfunc == NULL)
1626 return -1;
1627 else
1628 return 1;
1629 }
1630 }
1631 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001632}
1633
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001634
Just van Rossum52e14d62002-12-30 22:08:05 +00001635/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1636 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001637 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001638 that can handle the path item. Return None if no hook could;
1639 this tells our caller it should fall back to the builtin
1640 import mechanism. Cache the result in path_importer_cache.
1641 Returns a borrowed reference. */
1642
1643static PyObject *
1644get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001645 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001646{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001647 PyObject *importer;
1648 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001649
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001650 /* These conditions are the caller's responsibility: */
1651 assert(PyList_Check(path_hooks));
1652 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001653
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001654 nhooks = PyList_Size(path_hooks);
1655 if (nhooks < 0)
1656 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001657
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001658 importer = PyDict_GetItem(path_importer_cache, p);
1659 if (importer != NULL)
1660 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001661
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001662 /* set path_importer_cache[p] to None to avoid recursion */
1663 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1664 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001665
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001666 for (j = 0; j < nhooks; j++) {
1667 PyObject *hook = PyList_GetItem(path_hooks, j);
1668 if (hook == NULL)
1669 return NULL;
1670 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1671 if (importer != NULL)
1672 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001673
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001674 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1675 return NULL;
1676 }
1677 PyErr_Clear();
1678 }
1679 if (importer == NULL) {
1680 importer = PyObject_CallFunctionObjArgs(
1681 (PyObject *)&PyNullImporter_Type, p, NULL
1682 );
1683 if (importer == NULL) {
1684 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1685 PyErr_Clear();
1686 return Py_None;
1687 }
1688 }
1689 }
1690 if (importer != NULL) {
1691 int err = PyDict_SetItem(path_importer_cache, p, importer);
1692 Py_DECREF(importer);
1693 if (err != 0)
1694 return NULL;
1695 }
1696 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001697}
1698
Christian Heimes9cd17752007-11-18 19:35:23 +00001699PyAPI_FUNC(PyObject *)
1700PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001701 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001702
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001703 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1704 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1705 importer = get_path_importer(path_importer_cache,
1706 path_hooks, path);
1707 }
1708 }
1709 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1710 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001711}
1712
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001713/* Search the path (default sys.path) for a module. Return the
1714 corresponding filedescr struct, and (via return arguments) the
1715 pathname and an open file. Return NULL if the module is not found. */
1716
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001717#ifdef MS_COREDLL
Victor Stinner4d6c1c42011-03-08 23:49:04 +01001718extern FILE *_PyWin_FindRegisteredModule(PyObject *, struct filedescr **,
1719 PyObject **p_path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001720#endif
1721
Victor Stinner547a2a62011-03-20 03:07:28 +01001722/* Forward */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001723static int case_ok(PyObject *, Py_ssize_t, PyObject *);
Victor Stinner547a2a62011-03-20 03:07:28 +01001724static int find_init_module(PyObject *);
Just van Rossum52e14d62002-12-30 22:08:05 +00001725static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001726
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001727/* Get the path of a module: get its importer and call importer.find_module()
1728 hook, or check if the module if a package (if path/__init__.py exists).
1729
1730 -1: error: a Python error occurred
1731 0: ignore: an error occurred because of invalid data, but the error is not
1732 important enough to be reported.
1733 1: get path: module not found, but *buf contains its path
1734 2: found: *p_fd is the file descriptor (IMP_HOOK or PKG_DIRECTORY)
1735 and *buf is the path */
1736
1737static int
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001738find_module_path(PyObject *fullname, PyObject *name, PyObject *path,
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001739 PyObject *path_hooks, PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001740 PyObject **p_path, PyObject **p_loader, struct filedescr **p_fd)
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001741{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001742 Py_UCS4 buf[MAXPATHLEN+1];
Victor Stinner2fd76e42011-03-14 15:19:39 -04001743 PyObject *path_unicode, *filename;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001744 Py_ssize_t len;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001745 struct stat statbuf;
1746 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
1747
1748 if (PyUnicode_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001749 Py_INCREF(path);
1750 path_unicode = path;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001751 }
1752 else if (PyBytes_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001753 path_unicode = PyUnicode_DecodeFSDefaultAndSize(
1754 PyBytes_AS_STRING(path), PyBytes_GET_SIZE(path));
1755 if (path_unicode == NULL)
1756 return -1;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001757 }
1758 else
1759 return 0;
1760
Victor Stinner46084ba2011-10-06 02:39:42 +02001761 if (PyUnicode_READY(path_unicode))
1762 return -1;
1763
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001764 len = PyUnicode_GET_LENGTH(path_unicode);
Georg Brandl4cb0de22011-09-28 21:49:49 +02001765 if (!PyUnicode_AsUCS4(path_unicode, buf, Py_ARRAY_LENGTH(buf), 1)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001766 Py_DECREF(path_unicode);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001767 PyErr_Clear();
1768 return 0;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001769 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001770 Py_DECREF(path_unicode);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001771
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001772 if (Py_UCS4_strlen(buf) != len)
Victor Stinner2fd76e42011-03-14 15:19:39 -04001773 return 0; /* path contains '\0' */
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001774
1775 /* sys.path_hooks import hook */
1776 if (p_loader != NULL) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001777 _Py_IDENTIFIER(find_module);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001778 PyObject *importer;
1779
1780 importer = get_path_importer(path_importer_cache,
1781 path_hooks, path);
1782 if (importer == NULL) {
1783 return -1;
1784 }
1785 /* Note: importer is a borrowed reference */
1786 if (importer != Py_None) {
1787 PyObject *loader;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001788 loader = _PyObject_CallMethodId(importer,
1789 &PyId_find_module, "O", fullname);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001790 if (loader == NULL)
1791 return -1; /* error */
1792 if (loader != Py_None) {
1793 /* a loader was found */
1794 *p_loader = loader;
1795 *p_fd = &importhookdescr;
1796 return 2;
1797 }
1798 Py_DECREF(loader);
1799 return 0;
1800 }
1801 }
1802 /* no hook was found, use builtin import */
1803
1804 if (len > 0 && buf[len-1] != SEP
1805#ifdef ALTSEP
1806 && buf[len-1] != ALTSEP
1807#endif
1808 )
1809 buf[len++] = SEP;
Georg Brandl4cb0de22011-09-28 21:49:49 +02001810 if (!PyUnicode_AsUCS4(name, buf+len, Py_ARRAY_LENGTH(buf)-len, 1)) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001811 PyErr_Clear();
1812 return 0;
1813 }
1814 len += PyUnicode_GET_LENGTH(name);
Victor Stinner2fd76e42011-03-14 15:19:39 -04001815
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001816 filename = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
1817 buf, len);
Victor Stinner2fd76e42011-03-14 15:19:39 -04001818 if (filename == NULL)
1819 return -1;
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 Stinner2fd76e42011-03-14 15:19:39 -04001824 if (_Py_stat(filename, &statbuf) == 0 && /* it exists */
Victor Stinnerd0296212011-03-14 14:04:10 -04001825 S_ISDIR(statbuf.st_mode)) /* it's a directory */
1826 {
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001827 int match;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001828
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001829 match = case_ok(filename, 0, name);
1830 if (match < 0) {
1831 Py_DECREF(filename);
1832 return -1;
1833 }
1834 if (match) { /* case matches */
1835 if (find_init_module(filename)) { /* and has __init__.py */
Victor Stinner2fd76e42011-03-14 15:19:39 -04001836 *p_path = filename;
Victor Stinnerd0296212011-03-14 14:04:10 -04001837 *p_fd = &fd_package;
1838 return 2;
1839 }
1840 else {
1841 int err;
Victor Stinnerd0296212011-03-14 14:04:10 -04001842 err = PyErr_WarnFormat(PyExc_ImportWarning, 1,
Victor Stinner547a2a62011-03-20 03:07:28 +01001843 "Not importing directory %R: missing __init__.py",
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001844 filename);
Victor Stinner547a2a62011-03-20 03:07:28 +01001845 if (err) {
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001846 Py_DECREF(filename);
Victor Stinnerd0296212011-03-14 14:04:10 -04001847 return -1;
Victor Stinner547a2a62011-03-20 03:07:28 +01001848 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001849 }
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001850 }
1851 }
1852#endif
Victor Stinner2fd76e42011-03-14 15:19:39 -04001853 *p_path = filename;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001854 return 1;
1855}
1856
1857/* Find a module in search_path_list. For each path, try
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001858 find_module_path() or try each _PyImport_Filetab suffix.
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001859
1860 If the module is found, return a file descriptor, write the path in
1861 *p_filename, write the pointer to the file object into *p_fp, and (if
1862 p_loader is not NULL) the loader into *p_loader.
1863
1864 Otherwise, raise an exception and return NULL. */
1865
Victor Stinner37580282011-03-20 01:34:43 +01001866static struct filedescr*
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001867find_module_path_list(PyObject *fullname, PyObject *name,
Victor Stinner37580282011-03-20 01:34:43 +01001868 PyObject *search_path_list, PyObject *path_hooks,
1869 PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001870 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001871{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001872 Py_ssize_t i, npath;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001873 struct filedescr *fdp = NULL;
1874 char *filemode;
1875 FILE *fp = NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001876 PyObject *prefix, *filename;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001877 int match;
Victor Stinner53dc7352011-03-20 01:50:21 +01001878
Victor Stinner37580282011-03-20 01:34:43 +01001879 npath = PyList_Size(search_path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001880 for (i = 0; i < npath; i++) {
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001881 PyObject *path;
1882 int ok;
1883
1884 path = PyList_GetItem(search_path_list, i);
1885 if (path == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001886 return NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001887
Victor Stinner2fd76e42011-03-14 15:19:39 -04001888 prefix = NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001889 ok = find_module_path(fullname, name, path,
1890 path_hooks, path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001891 &prefix, p_loader, &fdp);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001892 if (ok < 0)
1893 return NULL;
1894 if (ok == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001895 continue;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001896 if (ok == 2) {
1897 *p_path = prefix;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001898 return fdp;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001899 }
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001900
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001901 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001902 struct stat statbuf;
1903
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001904 filemode = fdp->mode;
1905 if (filemode[0] == 'U')
1906 filemode = "r" PY_STDIOTEXTMODE;
Victor Stinnerd0296212011-03-14 14:04:10 -04001907
Victor Stinner2fd76e42011-03-14 15:19:39 -04001908 filename = PyUnicode_FromFormat("%U%s", prefix, fdp->suffix);
1909 if (filename == NULL) {
1910 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001911 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001912 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001913
1914 if (Py_VerboseFlag > 1)
1915 PySys_FormatStderr("# trying %R\n", filename);
1916
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001917 if (_Py_stat(filename, &statbuf) == 0 && /* it exists */
1918 S_ISDIR(statbuf.st_mode)) /* it's a directory */
1919 {
1920 Py_DECREF(filename);
1921 continue;
1922 }
1923
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001924 fp = _Py_fopen(filename, filemode);
1925 if (fp == NULL) {
1926 Py_DECREF(filename);
Victor Stinner925ef392011-06-20 15:01:10 +02001927 if (PyErr_Occurred()) {
1928 Py_DECREF(prefix);
1929 return NULL;
1930 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001931 continue;
1932 }
1933 match = case_ok(filename, -(Py_ssize_t)strlen(fdp->suffix), name);
1934 if (match < 0) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001935 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001936 Py_DECREF(filename);
1937 return NULL;
1938 }
1939 if (match) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001940 Py_DECREF(prefix);
1941 *p_path = filename;
Victor Stinnerd0296212011-03-14 14:04:10 -04001942 *p_fp = fp;
1943 return fdp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001944 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001945 Py_DECREF(filename);
Victor Stinnerd0296212011-03-14 14:04:10 -04001946
1947 fclose(fp);
1948 fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001949 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001950 Py_DECREF(prefix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001951 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001952 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04001953 "No module named %R", name);
Victor Stinnerd0296212011-03-14 14:04:10 -04001954 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001955}
1956
Victor Stinner37580282011-03-20 01:34:43 +01001957/* Find a module:
1958
1959 - try find_module() of each sys.meta_path hook
1960 - try find_frozen()
1961 - try is_builtin()
1962 - try _PyWin_FindRegisteredModule() (Windows only)
1963 - otherwise, call find_module_path_list() with search_path_list (if not
1964 NULL) or sys.path
1965
Victor Stinner2fd76e42011-03-14 15:19:39 -04001966 fullname can be NULL, but only if p_loader is NULL.
1967
Victor Stinner37580282011-03-20 01:34:43 +01001968 Return:
1969
1970 - &fd_builtin (C_BUILTIN) if it is a builtin
1971 - &fd_frozen (PY_FROZEN) if it is frozen
Victor Stinner2fd76e42011-03-14 15:19:39 -04001972 - &fd_package (PKG_DIRECTORY) and write the filename into *p_path
Victor Stinner37580282011-03-20 01:34:43 +01001973 if it is a package
1974 - &importhookdescr (IMP_HOOK) and write the loader into *p_loader if a
1975 importer loader was found
1976 - a file descriptor (PY_SOURCE, PY_COMPILED, C_EXTENSION, PY_RESOURCE or
1977 PY_CODERESOURCE: see _PyImport_Filetab), write the filename into
Victor Stinner2fd76e42011-03-14 15:19:39 -04001978 *p_path and the pointer to the open file into *p_fp
Victor Stinner37580282011-03-20 01:34:43 +01001979 - NULL on error
1980
Victor Stinner2fd76e42011-03-14 15:19:39 -04001981 By default, *p_path, *p_fp and *p_loader (if set) are set to NULL.
1982 Eg. *p_path is set to NULL for a builtin package.
1983*/
Victor Stinner37580282011-03-20 01:34:43 +01001984
1985static struct filedescr *
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001986find_module(PyObject *fullname, PyObject *name, PyObject *search_path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001987 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Victor Stinner37580282011-03-20 01:34:43 +01001988{
1989 Py_ssize_t i, npath;
1990 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1991 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1992 PyObject *path_hooks, *path_importer_cache;
Victor Stinner37580282011-03-20 01:34:43 +01001993
Victor Stinner2fd76e42011-03-14 15:19:39 -04001994 *p_path = NULL;
Victor Stinner37580282011-03-20 01:34:43 +01001995 *p_fp = NULL;
1996 if (p_loader != NULL)
1997 *p_loader = NULL;
1998
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001999 if (PyUnicode_GET_LENGTH(name) > MAXPATHLEN) {
2000 PyErr_SetString(PyExc_OverflowError,
2001 "module name is too long");
2002 return NULL;
2003 }
2004
Victor Stinner37580282011-03-20 01:34:43 +01002005 /* sys.meta_path import hook */
2006 if (p_loader != NULL) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002007 _Py_IDENTIFIER(find_module);
Victor Stinner37580282011-03-20 01:34:43 +01002008 PyObject *meta_path;
2009
2010 meta_path = PySys_GetObject("meta_path");
2011 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinner16191322011-09-15 19:28:05 +02002012 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002013 "sys.meta_path must be a list of "
2014 "import hooks");
2015 return NULL;
2016 }
2017 Py_INCREF(meta_path); /* zap guard */
2018 npath = PyList_Size(meta_path);
2019 for (i = 0; i < npath; i++) {
2020 PyObject *loader;
2021 PyObject *hook = PyList_GetItem(meta_path, i);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002022 loader = _PyObject_CallMethodId(hook, &PyId_find_module,
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002023 "OO", fullname,
Victor Stinner37580282011-03-20 01:34:43 +01002024 search_path_list != NULL ?
2025 search_path_list : Py_None);
2026 if (loader == NULL) {
2027 Py_DECREF(meta_path);
2028 return NULL; /* true error */
2029 }
2030 if (loader != Py_None) {
2031 /* a loader was found */
2032 *p_loader = loader;
2033 Py_DECREF(meta_path);
2034 return &importhookdescr;
2035 }
2036 Py_DECREF(loader);
2037 }
2038 Py_DECREF(meta_path);
2039 }
2040
Victor Stinnerdf75a022011-03-14 13:40:04 -04002041 if (find_frozen(fullname) != NULL)
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002042 return &fd_frozen;
Victor Stinner37580282011-03-20 01:34:43 +01002043
2044 if (search_path_list == NULL) {
2045#ifdef MS_COREDLL
2046 FILE *fp;
2047 struct filedescr *fdp;
Victor Stinner37580282011-03-20 01:34:43 +01002048#endif
Victor Stinnerdf75a022011-03-14 13:40:04 -04002049 if (is_builtin(name))
Victor Stinner37580282011-03-20 01:34:43 +01002050 return &fd_builtin;
Victor Stinner37580282011-03-20 01:34:43 +01002051#ifdef MS_COREDLL
Victor Stinner2fd76e42011-03-14 15:19:39 -04002052 fp = _PyWin_FindRegisteredModule(name, &fdp, p_path);
Victor Stinner37580282011-03-20 01:34:43 +01002053 if (fp != NULL) {
Victor Stinner37580282011-03-20 01:34:43 +01002054 *p_fp = fp;
2055 return fdp;
2056 }
2057 else if (PyErr_Occurred())
2058 return NULL;
2059#endif
Victor Stinner37580282011-03-20 01:34:43 +01002060 search_path_list = PySys_GetObject("path");
2061 }
2062
2063 if (search_path_list == NULL || !PyList_Check(search_path_list)) {
Victor Stinner16191322011-09-15 19:28:05 +02002064 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002065 "sys.path must be a list of directory names");
2066 return NULL;
2067 }
2068
2069 path_hooks = PySys_GetObject("path_hooks");
2070 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinner16191322011-09-15 19:28:05 +02002071 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002072 "sys.path_hooks must be a list of "
2073 "import hooks");
2074 return NULL;
2075 }
2076 path_importer_cache = PySys_GetObject("path_importer_cache");
2077 if (path_importer_cache == NULL ||
2078 !PyDict_Check(path_importer_cache)) {
Victor Stinner16191322011-09-15 19:28:05 +02002079 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002080 "sys.path_importer_cache must be a dict");
2081 return NULL;
2082 }
2083
2084 return find_module_path_list(fullname, name,
2085 search_path_list, path_hooks,
2086 path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04002087 p_path, p_fp, p_loader);
Victor Stinner37580282011-03-20 01:34:43 +01002088}
2089
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002090/* case_bytes(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00002091 * The arguments here are tricky, best shown by example:
2092 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
2093 * ^ ^ ^ ^
2094 * |--------------------- buf ---------------------|
2095 * |------------------- len ------------------|
2096 * |------ name -------|
2097 * |----- namelen -----|
2098 * buf is the full path, but len only counts up to (& exclusive of) the
2099 * extension. name is the module name, also exclusive of extension.
2100 *
2101 * We've already done a successful stat() or fopen() on buf, so know that
2102 * there's some match, possibly case-insensitive.
2103 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002104 * case_bytes() is to return 1 if there's a case-sensitive match for
2105 * name, else 0. case_bytes() is also to return 1 if envar PYTHONCASEOK
Tim Peters50d8d372001-02-28 05:34:27 +00002106 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00002107 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002108 * case_bytes() is used to implement case-sensitive import semantics even
Tim Peters50d8d372001-02-28 05:34:27 +00002109 * on platforms with case-insensitive filesystems. It's trivial to implement
2110 * for case-sensitive filesystems. It's pretty much a cross-platform
2111 * nightmare for systems with case-insensitive filesystems.
2112 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00002113
Tim Peters50d8d372001-02-28 05:34:27 +00002114/* First we may need a pile of platform-specific header files; the sequence
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002115 * of #if's here should match the sequence in the body of case_bytes().
Tim Peters50d8d372001-02-28 05:34:27 +00002116 */
Jason Tishler7961aa62005-05-20 00:56:54 +00002117#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002118#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00002119
Tim Peters50d8d372001-02-28 05:34:27 +00002120#elif defined(DJGPP)
2121#include <dir.h>
2122
Jason Tishler7961aa62005-05-20 00:56:54 +00002123#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00002124#include <sys/types.h>
2125#include <dirent.h>
2126
Andrew MacIntyred9400542002-02-26 11:41:34 +00002127#elif defined(PYOS_OS2)
2128#define INCL_DOS
2129#define INCL_DOSERRORS
2130#define INCL_NOPMAPI
2131#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00002132#endif
2133
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002134#if defined(DJGPP) \
2135 || ((defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) \
2136 && defined(HAVE_DIRENT_H)) \
2137 || defined(PYOS_OS2)
2138# define USE_CASE_OK_BYTES
2139#endif
2140
2141
2142#ifdef USE_CASE_OK_BYTES
Guido van Rossum0980bd91998-02-13 17:18:36 +00002143static int
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002144case_bytes(char *buf, Py_ssize_t len, Py_ssize_t namelen, const char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002145{
Tim Peters50d8d372001-02-28 05:34:27 +00002146/* Pick a platform-specific implementation; the sequence of #if's here should
2147 * match the sequence just above.
2148 */
2149
Tim Peters50d8d372001-02-28 05:34:27 +00002150/* DJGPP */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002151#if defined(DJGPP)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002152 struct ffblk ffblk;
2153 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00002154
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002155 if (Py_GETENV("PYTHONCASEOK") != NULL)
2156 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00002157
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002158 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
2159 if (done) {
2160 PyErr_Format(PyExc_NameError,
2161 "Can't find file for module %.100s\n(filename %.300s)",
2162 name, buf);
Victor Stinner9c61e242011-03-22 01:22:27 +01002163 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002164 }
2165 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002166
Jason Tishler7961aa62005-05-20 00:56:54 +00002167/* new-fangled macintosh (macosx) or Cygwin */
2168#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002169 DIR *dirp;
2170 struct dirent *dp;
2171 char dirname[MAXPATHLEN + 1];
2172 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00002173
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002174 if (Py_GETENV("PYTHONCASEOK") != NULL)
2175 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00002176
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002177 /* Copy the dir component into dirname; substitute "." if empty */
2178 if (dirlen <= 0) {
2179 dirname[0] = '.';
2180 dirname[1] = '\0';
2181 }
2182 else {
2183 assert(dirlen <= MAXPATHLEN);
2184 memcpy(dirname, buf, dirlen);
2185 dirname[dirlen] = '\0';
2186 }
2187 /* Open the directory and search the entries for an exact match. */
2188 dirp = opendir(dirname);
2189 if (dirp) {
2190 char *nameWithExt = buf + len - namelen;
2191 while ((dp = readdir(dirp)) != NULL) {
2192 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00002193#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002194 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00002195#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002196 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00002197#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002198 if (thislen >= namelen &&
2199 strcmp(dp->d_name, nameWithExt) == 0) {
2200 (void)closedir(dirp);
2201 return 1; /* Found */
2202 }
2203 }
2204 (void)closedir(dirp);
2205 }
2206 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00002207
Andrew MacIntyred9400542002-02-26 11:41:34 +00002208/* OS/2 */
2209#elif defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002210 HDIR hdir = 1;
2211 ULONG srchcnt = 1;
2212 FILEFINDBUF3 ffbuf;
2213 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002214
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002215 if (Py_GETENV("PYTHONCASEOK") != NULL)
2216 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002217
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002218 rc = DosFindFirst(buf,
2219 &hdir,
2220 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
2221 &ffbuf, sizeof(ffbuf),
2222 &srchcnt,
2223 FIL_STANDARD);
2224 if (rc != NO_ERROR)
2225 return 0;
2226 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002227
Tim Peters50d8d372001-02-28 05:34:27 +00002228/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
2229#else
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002230# error "USE_CASE_OK_BYTES is not correctly defined"
2231#endif
2232}
2233#endif
2234
2235/*
2236 * Check if a filename case matchs the name case. We've already done a
2237 * successful stat() or fopen() on buf, so know that there's some match,
2238 * possibly case-insensitive.
2239 *
2240 * case_ok() is to return 1 if there's a case-sensitive match for name, 0 if it
2241 * the filename doesn't match, or -1 on error. case_ok() is also to return 1
2242 * if envar PYTHONCASEOK exists.
2243 *
2244 * case_ok() is used to implement case-sensitive import semantics even
2245 * on platforms with case-insensitive filesystems. It's trivial to implement
2246 * for case-sensitive filesystems. It's pretty much a cross-platform
2247 * nightmare for systems with case-insensitive filesystems.
2248 */
2249
2250static int
2251case_ok(PyObject *filename, Py_ssize_t prefix_delta, PyObject *name)
2252{
2253#ifdef MS_WINDOWS
2254 WIN32_FIND_DATAW data;
2255 HANDLE h;
2256 int cmp;
Victor Stinnerbeac78b2011-10-11 21:55:01 +02002257 wchar_t *wname;
Victor Stinner8c981892011-10-11 22:27:13 +02002258 Py_ssize_t wname_len;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002259
2260 if (Py_GETENV("PYTHONCASEOK") != NULL)
2261 return 1;
2262
2263 h = FindFirstFileW(PyUnicode_AS_UNICODE(filename), &data);
2264 if (h == INVALID_HANDLE_VALUE) {
2265 PyErr_Format(PyExc_NameError,
2266 "Can't find file for module %R\n(filename %R)",
2267 name, filename);
2268 return 0;
2269 }
2270 FindClose(h);
Victor Stinnerbeac78b2011-10-11 21:55:01 +02002271
2272 wname = PyUnicode_AsUnicodeAndSize(name, &wname_len);
2273 if (wname == NULL)
2274 return -1;
2275
2276 cmp = wcsncmp(data.cFileName, wname, wname_len);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002277 return cmp == 0;
2278#elif defined(USE_CASE_OK_BYTES)
2279 int match;
2280 PyObject *filebytes, *namebytes;
2281 filebytes = PyUnicode_EncodeFSDefault(filename);
2282 if (filebytes == NULL)
2283 return -1;
2284 namebytes = PyUnicode_EncodeFSDefault(name);
2285 if (namebytes == NULL) {
2286 Py_DECREF(filebytes);
2287 return -1;
2288 }
2289 match = case_bytes(
2290 PyBytes_AS_STRING(filebytes),
2291 PyBytes_GET_SIZE(filebytes) + prefix_delta,
Victor Stinner1304f2d2011-03-20 04:28:55 +01002292 PyBytes_GET_SIZE(namebytes),
2293 PyBytes_AS_STRING(namebytes));
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002294 Py_DECREF(filebytes);
2295 Py_DECREF(namebytes);
2296 return match;
2297#else
2298 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002299 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002300
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002301#endif
Tim Peters50d8d372001-02-28 05:34:27 +00002302}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002303
Guido van Rossum197346f1997-10-31 18:38:52 +00002304#ifdef HAVE_STAT
Victor Stinner4f4402c2010-08-14 14:50:26 +00002305
Victor Stinner547a2a62011-03-20 03:07:28 +01002306/* Helper to look for __init__.py or __init__.py[co] in potential package.
2307 Return 1 if __init__ was found, 0 if not, or -1 on error. */
Guido van Rossum197346f1997-10-31 18:38:52 +00002308static int
Victor Stinner547a2a62011-03-20 03:07:28 +01002309find_init_module(PyObject *directory)
Guido van Rossum197346f1997-10-31 18:38:52 +00002310{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002311 struct stat statbuf;
Victor Stinner547a2a62011-03-20 03:07:28 +01002312 PyObject *filename;
2313 int match;
Guido van Rossum197346f1997-10-31 18:38:52 +00002314
Victor Stinner547a2a62011-03-20 03:07:28 +01002315 filename = PyUnicode_FromFormat("%U%c__init__.py", directory, SEP);
2316 if (filename == NULL)
2317 return -1;
2318 if (_Py_stat(filename, &statbuf) == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002319 /* 3=len(".py") */
2320 match = case_ok(filename, -3, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002321 if (match < 0) {
2322 Py_DECREF(filename);
2323 return -1;
2324 }
2325 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002326 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002327 return 1;
2328 }
2329 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002330 Py_DECREF(filename);
2331
2332 filename = PyUnicode_FromFormat("%U%c__init__.py%c",
2333 directory, SEP, Py_OptimizeFlag ? 'o' : 'c');
2334 if (filename == NULL)
2335 return -1;
2336 if (_Py_stat(filename, &statbuf) == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002337 /* 4=len(".pyc") */
2338 match = case_ok(filename, -4, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002339 if (match < 0) {
2340 Py_DECREF(filename);
2341 return -1;
2342 }
2343 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002344 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002345 return 1;
2346 }
2347 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002348 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002349 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00002350}
Guido van Rossum48a680c2001-03-02 06:34:14 +00002351
Guido van Rossum197346f1997-10-31 18:38:52 +00002352#endif /* HAVE_STAT */
2353
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002354
Victor Stinner95872862011-03-07 18:20:56 +01002355static int init_builtin(PyObject *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002356
Victor Stinner44c6c152010-08-09 00:59:10 +00002357static PyObject*
Victor Stinner95872862011-03-07 18:20:56 +01002358load_builtin(PyObject *name, int type)
Victor Stinner44c6c152010-08-09 00:59:10 +00002359{
2360 PyObject *m, *modules;
2361 int err;
2362
Victor Stinner44c6c152010-08-09 00:59:10 +00002363 if (type == C_BUILTIN)
2364 err = init_builtin(name);
2365 else
Victor Stinner95872862011-03-07 18:20:56 +01002366 err = PyImport_ImportFrozenModuleObject(name);
Victor Stinner44c6c152010-08-09 00:59:10 +00002367 if (err < 0)
2368 return NULL;
2369 if (err == 0) {
2370 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002371 "Purported %s module %R not found",
2372 type == C_BUILTIN ? "builtin" : "frozen",
Victor Stinner44c6c152010-08-09 00:59:10 +00002373 name);
2374 return NULL;
2375 }
2376
2377 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +01002378 m = PyDict_GetItem(modules, name);
Victor Stinner44c6c152010-08-09 00:59:10 +00002379 if (m == NULL) {
2380 PyErr_Format(
2381 PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002382 "%s module %R not properly initialized",
2383 type == C_BUILTIN ? "builtin" : "frozen",
Victor Stinner44c6c152010-08-09 00:59:10 +00002384 name);
2385 return NULL;
2386 }
2387 Py_INCREF(m);
2388 return m;
2389}
2390
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002391/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002392 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002393
Guido van Rossum79f25d91997-04-29 20:08:16 +00002394static PyObject *
Victor Stinner41c5fec2011-03-13 21:46:30 -04002395load_module(PyObject *name, FILE *fp, PyObject *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002396{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002397 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002398
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002399 /* First check that there's an open file (if we need one) */
2400 switch (type) {
2401 case PY_SOURCE:
2402 case PY_COMPILED:
2403 if (fp == NULL) {
2404 PyErr_Format(PyExc_ValueError,
Victor Stinner41c5fec2011-03-13 21:46:30 -04002405 "file object required for import (type code %d)",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002406 type);
2407 return NULL;
2408 }
2409 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002410
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002411 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002412
Victor Stinner41c5fec2011-03-13 21:46:30 -04002413 case PY_SOURCE:
2414 m = load_source_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002415 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002416
Victor Stinner41c5fec2011-03-13 21:46:30 -04002417 case PY_COMPILED:
2418 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002419 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002420
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002421#ifdef HAVE_DYNAMIC_LOADING
Victor Stinner41c5fec2011-03-13 21:46:30 -04002422 case C_EXTENSION:
2423 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002424 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002425#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002426
Victor Stinner41c5fec2011-03-13 21:46:30 -04002427 case PKG_DIRECTORY:
2428 m = load_package(name, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002429 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002430
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002431 case C_BUILTIN:
Victor Stinner41c5fec2011-03-13 21:46:30 -04002432 case PY_FROZEN:
2433 m = load_builtin(name, type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002434 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002435
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002436 case IMP_HOOK: {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002437 _Py_IDENTIFIER(load_module);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002438 if (loader == NULL) {
2439 PyErr_SetString(PyExc_ImportError,
2440 "import hook without loader");
2441 return NULL;
2442 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002443 m = _PyObject_CallMethodId(loader, &PyId_load_module, "O", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002444 break;
2445 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002447 default:
2448 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04002449 "Don't know how to import %R (type code %d)",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002450 name, type);
2451 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002452
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002453 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002454
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002455 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002456}
2457
2458
2459/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00002460 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002461 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002462
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002463static int
Victor Stinner95872862011-03-07 18:20:56 +01002464init_builtin(PyObject *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002465{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002466 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002467
Victor Stinner95872862011-03-07 18:20:56 +01002468 if (_PyImport_FindExtensionObject(name, name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002469 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002470
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002471 for (p = PyImport_Inittab; p->name != NULL; p++) {
2472 PyObject *mod;
Victor Stinner95872862011-03-07 18:20:56 +01002473 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002474 if (p->initfunc == NULL) {
2475 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002476 "Cannot re-init internal module %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002477 name);
2478 return -1;
2479 }
2480 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +01002481 PySys_FormatStderr("import %U # builtin\n", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002482 mod = (*p->initfunc)();
2483 if (mod == 0)
2484 return -1;
Victor Stinner95872862011-03-07 18:20:56 +01002485 if (_PyImport_FixupExtensionObject(mod, name, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002486 return -1;
2487 /* FixupExtension has put the module into sys.modules,
2488 so we can release our own reference. */
2489 Py_DECREF(mod);
2490 return 1;
2491 }
2492 }
2493 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002494}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002495
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002496
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002497/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002498
Guido van Rossumcfd0a221996-06-17 17:06:34 +00002499static struct _frozen *
Victor Stinner53dc7352011-03-20 01:50:21 +01002500find_frozen(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002501{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002502 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002503
Victor Stinner53dc7352011-03-20 01:50:21 +01002504 if (name == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002505 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00002506
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002507 for (p = PyImport_FrozenModules; ; p++) {
2508 if (p->name == NULL)
2509 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01002510 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002511 break;
2512 }
2513 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002514}
2515
Guido van Rossum79f25d91997-04-29 20:08:16 +00002516static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002517get_frozen_object(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002518{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002519 struct _frozen *p = find_frozen(name);
2520 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002521
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002522 if (p == NULL) {
2523 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002524 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002525 name);
2526 return NULL;
2527 }
2528 if (p->code == NULL) {
2529 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002530 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002531 name);
2532 return NULL;
2533 }
2534 size = p->size;
2535 if (size < 0)
2536 size = -size;
2537 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002538}
2539
Brett Cannon8d110132009-03-15 02:20:16 +00002540static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002541is_frozen_package(PyObject *name)
Brett Cannon8d110132009-03-15 02:20:16 +00002542{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002543 struct _frozen *p = find_frozen(name);
2544 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00002545
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002546 if (p == NULL) {
2547 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002548 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002549 name);
2550 return NULL;
2551 }
Brett Cannon8d110132009-03-15 02:20:16 +00002552
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002553 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00002554
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002555 if (size < 0)
2556 Py_RETURN_TRUE;
2557 else
2558 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00002559}
2560
2561
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002562/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00002563 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002564 an exception set if the initialization failed.
2565 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002566
2567int
Victor Stinner53dc7352011-03-20 01:50:21 +01002568PyImport_ImportFrozenModuleObject(PyObject *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002569{
Victor Stinner53dc7352011-03-20 01:50:21 +01002570 struct _frozen *p;
2571 PyObject *co, *m, *path;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002572 int ispackage;
2573 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002574
Victor Stinner53dc7352011-03-20 01:50:21 +01002575 p = find_frozen(name);
2576
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002577 if (p == NULL)
2578 return 0;
2579 if (p->code == NULL) {
2580 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002581 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002582 name);
2583 return -1;
2584 }
2585 size = p->size;
2586 ispackage = (size < 0);
2587 if (ispackage)
2588 size = -size;
2589 if (Py_VerboseFlag)
Victor Stinner53dc7352011-03-20 01:50:21 +01002590 PySys_FormatStderr("import %U # frozen%s\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002591 name, ispackage ? " package" : "");
2592 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2593 if (co == NULL)
2594 return -1;
2595 if (!PyCode_Check(co)) {
2596 PyErr_Format(PyExc_TypeError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002597 "frozen object %R is not a code object",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002598 name);
2599 goto err_return;
2600 }
2601 if (ispackage) {
2602 /* Set __path__ to the package name */
Victor Stinner53dc7352011-03-20 01:50:21 +01002603 PyObject *d, *l;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002604 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01002605 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002606 if (m == NULL)
2607 goto err_return;
2608 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002609 l = PyList_New(1);
2610 if (l == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002611 goto err_return;
2612 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002613 Py_INCREF(name);
2614 PyList_SET_ITEM(l, 0, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002615 err = PyDict_SetItemString(d, "__path__", l);
2616 Py_DECREF(l);
2617 if (err != 0)
2618 goto err_return;
2619 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002620 path = PyUnicode_FromString("<frozen>");
2621 if (path == NULL)
2622 goto err_return;
2623 m = PyImport_ExecCodeModuleObject(name, co, path, NULL);
2624 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002625 if (m == NULL)
2626 goto err_return;
2627 Py_DECREF(co);
2628 Py_DECREF(m);
2629 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002630err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002631 Py_DECREF(co);
2632 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002633}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002634
Victor Stinner53dc7352011-03-20 01:50:21 +01002635int
2636PyImport_ImportFrozenModule(char *name)
2637{
2638 PyObject *nameobj;
2639 int ret;
2640 nameobj = PyUnicode_InternFromString(name);
2641 if (nameobj == NULL)
2642 return -1;
2643 ret = PyImport_ImportFrozenModuleObject(nameobj);
2644 Py_DECREF(nameobj);
2645 return ret;
2646}
2647
Guido van Rossum74e6a111994-08-29 12:54:38 +00002648
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002649/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002650 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002651
Guido van Rossum79f25d91997-04-29 20:08:16 +00002652PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002653PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002654{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002655 PyObject *pname;
2656 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002657
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002658 pname = PyUnicode_FromString(name);
2659 if (pname == NULL)
2660 return NULL;
2661 result = PyImport_Import(pname);
2662 Py_DECREF(pname);
2663 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002664}
2665
Christian Heimes072c0f12008-01-03 23:01:04 +00002666/* Import a module without blocking
2667 *
2668 * At first it tries to fetch the module from sys.modules. If the module was
2669 * never loaded before it loads it with PyImport_ImportModule() unless another
2670 * thread holds the import lock. In the latter case the function raises an
2671 * ImportError instead of blocking.
2672 *
2673 * Returns the module object with incremented ref count.
2674 */
2675PyObject *
2676PyImport_ImportModuleNoBlock(const char *name)
2677{
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002678 PyObject *nameobj, *modules, *result;
Victor Stinner0af03062011-09-02 00:11:43 +02002679#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002680 long me;
Victor Stinner0af03062011-09-02 00:11:43 +02002681#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002682
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002683 /* Try to get the module from sys.modules[name] */
2684 modules = PyImport_GetModuleDict();
2685 if (modules == NULL)
2686 return NULL;
Christian Heimes072c0f12008-01-03 23:01:04 +00002687
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002688 nameobj = PyUnicode_FromString(name);
2689 if (nameobj == NULL)
2690 return NULL;
2691 result = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002692 if (result != NULL) {
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002693 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002694 Py_INCREF(result);
2695 return result;
2696 }
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002697 PyErr_Clear();
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002698#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002699 /* check the import lock
2700 * me might be -1 but I ignore the error here, the lock function
2701 * takes care of the problem */
2702 me = PyThread_get_thread_ident();
2703 if (import_lock_thread == -1 || import_lock_thread == me) {
2704 /* no thread or me is holding the lock */
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002705 result = PyImport_Import(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002706 }
2707 else {
2708 PyErr_Format(PyExc_ImportError,
Victor Stinnerc24c8102011-03-13 22:38:06 -04002709 "Failed to import %R because the import lock"
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002710 "is held by another thread.",
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002711 nameobj);
2712 result = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002713 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002714#else
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002715 result = PyImport_Import(nameobj);
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002716#endif
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002717 Py_DECREF(nameobj);
2718 return result;
Christian Heimes072c0f12008-01-03 23:01:04 +00002719}
2720
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002721/* Forward declarations for helper routines */
Victor Stinner974389d2011-03-15 09:33:57 +01002722static PyObject *get_parent(PyObject *globals,
2723 PyObject **p_name,
2724 int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002725static PyObject *load_next(PyObject *mod, PyObject *altmod,
Victor Stinner974389d2011-03-15 09:33:57 +01002726 PyObject *inputname, PyObject **p_outputname,
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002727 Py_UCS4 *buf, Py_ssize_t *p_buflen,
Victor Stinner974389d2011-03-15 09:33:57 +01002728 Py_ssize_t bufsize);
2729static int mark_miss(PyObject *name);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002730static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Victor Stinner974389d2011-03-15 09:33:57 +01002731 PyObject *buf, int recursive);
2732static PyObject * import_submodule(PyObject *mod, PyObject *name,
2733 PyObject *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002734
2735/* The Magnum Opus of dotted-name import :-) */
2736
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002737static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01002738import_module_level(PyObject *name, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002739 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002740{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002741 Py_UCS4 buf[MAXPATHLEN+1];
Victor Stinner974389d2011-03-15 09:33:57 +01002742 Py_ssize_t buflen;
2743 Py_ssize_t bufsize = MAXPATHLEN+1;
2744 PyObject *parent, *head, *next, *tail, *inputname, *outputname;
2745 PyObject *parent_name, *ensure_name;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002746 Py_ssize_t sep, altsep;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002747
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002748 if (PyUnicode_READY(name))
2749 return NULL;
Victor Stinner974389d2011-03-15 09:33:57 +01002750
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002751 sep = PyUnicode_FindChar(name, SEP, 0, PyUnicode_GET_LENGTH(name), 1);
2752 if (sep == -2)
2753 return NULL;
Victor Stinner974389d2011-03-15 09:33:57 +01002754#ifdef ALTSEP
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002755 altsep = PyUnicode_FindChar(name, ALTSEP, 0, PyUnicode_GET_LENGTH(name), 1);
2756 if (altsep == -2)
2757 return NULL;
2758#else
2759 altsep = -1;
Christian Heimes454f37b2008-01-10 00:10:02 +00002760#endif
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002761 if (sep != -1 || altsep != -1)
2762 {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002763 PyErr_SetString(PyExc_ImportError,
2764 "Import by filename is not supported.");
2765 return NULL;
2766 }
Christian Heimes454f37b2008-01-10 00:10:02 +00002767
Victor Stinner974389d2011-03-15 09:33:57 +01002768 parent = get_parent(globals, &parent_name, level);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002769 if (parent == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002770 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002771 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002772
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002773 if (PyUnicode_READY(parent_name))
2774 return NULL;
2775 buflen = PyUnicode_GET_LENGTH(parent_name);
Georg Brandl4cb0de22011-09-28 21:49:49 +02002776 if (!PyUnicode_AsUCS4(parent_name, buf, Py_ARRAY_LENGTH(buf), 1)) {
Victor Stinner974389d2011-03-15 09:33:57 +01002777 Py_DECREF(parent_name);
2778 PyErr_SetString(PyExc_ValueError,
2779 "Module name too long");
2780 return NULL;
2781 }
Victor Stinner974389d2011-03-15 09:33:57 +01002782 Py_DECREF(parent_name);
2783
2784 head = load_next(parent, level < 0 ? Py_None : parent, name, &outputname,
2785 buf, &buflen, bufsize);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002786 if (head == NULL)
2787 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002788
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002789 tail = head;
2790 Py_INCREF(tail);
Victor Stinner974389d2011-03-15 09:33:57 +01002791
2792 if (outputname != NULL) {
2793 while (1) {
2794 inputname = outputname;
2795 next = load_next(tail, tail, inputname, &outputname,
2796 buf, &buflen, bufsize);
2797 Py_DECREF(tail);
2798 Py_DECREF(inputname);
2799 if (next == NULL) {
2800 Py_DECREF(head);
2801 return NULL;
2802 }
2803 tail = next;
2804
2805 if (outputname == NULL) {
2806 break;
2807 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002808 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002809 }
2810 if (tail == Py_None) {
2811 /* If tail is Py_None, both get_parent and load_next found
2812 an empty module name: someone called __import__("") or
2813 doctored faulty bytecode */
2814 Py_DECREF(tail);
2815 Py_DECREF(head);
Victor Stinner974389d2011-03-15 09:33:57 +01002816 PyErr_SetString(PyExc_ValueError, "Empty module name");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002817 return NULL;
2818 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002819
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002820 if (fromlist != NULL) {
2821 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2822 fromlist = NULL;
2823 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002824
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002825 if (fromlist == NULL) {
2826 Py_DECREF(tail);
2827 return head;
2828 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002829
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002830 Py_DECREF(head);
Victor Stinner974389d2011-03-15 09:33:57 +01002831
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002832 ensure_name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
2833 buf, Py_UCS4_strlen(buf));
Victor Stinner974389d2011-03-15 09:33:57 +01002834 if (ensure_name == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002835 Py_DECREF(tail);
2836 return NULL;
2837 }
Victor Stinner974389d2011-03-15 09:33:57 +01002838 if (!ensure_fromlist(tail, fromlist, ensure_name, 0)) {
2839 Py_DECREF(tail);
2840 Py_DECREF(ensure_name);
2841 return NULL;
2842 }
2843 Py_DECREF(ensure_name);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002844
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002845 return tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002846}
2847
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002848PyObject *
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002849PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
2850 PyObject *locals, PyObject *fromlist,
2851 int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002852{
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002853 PyObject *mod;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002854 _PyImport_AcquireLock();
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002855 mod = import_module_level(name, globals, locals, fromlist, level);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002856 if (_PyImport_ReleaseLock() < 0) {
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002857 Py_XDECREF(mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002858 PyErr_SetString(PyExc_RuntimeError,
2859 "not holding the import lock");
2860 return NULL;
2861 }
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002862 return mod;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002863}
2864
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002865PyObject *
Benjamin Peterson04778a82011-05-25 09:29:00 -05002866PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002867 PyObject *fromlist, int level)
2868{
2869 PyObject *nameobj, *mod;
2870 nameobj = PyUnicode_FromString(name);
2871 if (nameobj == NULL)
2872 return NULL;
2873 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
2874 fromlist, level);
2875 Py_DECREF(nameobj);
2876 return mod;
2877}
2878
2879
Fred Drake87590902004-05-28 20:21:36 +00002880/* Return the package that an import is being performed in. If globals comes
2881 from the module foo.bar.bat (not itself a package), this returns the
2882 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002883 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002884
Victor Stinner974389d2011-03-15 09:33:57 +01002885 The name of the returned package is returned in *p_name.
Fred Drake87590902004-05-28 20:21:36 +00002886
2887 If globals doesn't come from a package or a module in a package, or a
2888 corresponding entry is not found in sys.modules, Py_None is returned.
2889*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002890static PyObject *
Victor Stinner9599de52011-03-13 22:38:38 -04002891get_parent(PyObject *globals, PyObject **p_name, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002892{
Victor Stinner974389d2011-03-15 09:33:57 +01002893 PyObject *nameobj;
2894
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002895 static PyObject *namestr = NULL;
2896 static PyObject *pathstr = NULL;
2897 static PyObject *pkgstr = NULL;
2898 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2899 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002900
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002901 if (globals == NULL || !PyDict_Check(globals) || !level)
Victor Stinner974389d2011-03-15 09:33:57 +01002902 goto return_none;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002903
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002904 if (namestr == NULL) {
2905 namestr = PyUnicode_InternFromString("__name__");
2906 if (namestr == NULL)
2907 return NULL;
2908 }
2909 if (pathstr == NULL) {
2910 pathstr = PyUnicode_InternFromString("__path__");
2911 if (pathstr == NULL)
2912 return NULL;
2913 }
2914 if (pkgstr == NULL) {
2915 pkgstr = PyUnicode_InternFromString("__package__");
2916 if (pkgstr == NULL)
2917 return NULL;
2918 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002919
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002920 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002921
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002922 if ((pkgname != NULL) && (pkgname != Py_None)) {
2923 /* __package__ is set, so use it */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002924 if (!PyUnicode_Check(pkgname)) {
2925 PyErr_SetString(PyExc_ValueError,
2926 "__package__ set to non-string");
2927 return NULL;
2928 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002929 if (PyUnicode_GET_LENGTH(pkgname) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002930 if (level > 0) {
2931 PyErr_SetString(PyExc_ValueError,
2932 "Attempted relative import in non-package");
2933 return NULL;
2934 }
Victor Stinner974389d2011-03-15 09:33:57 +01002935 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002936 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002937 Py_INCREF(pkgname);
2938 nameobj = pkgname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002939 } else {
2940 /* __package__ not set, so figure it out and set it */
2941 modname = PyDict_GetItem(globals, namestr);
2942 if (modname == NULL || !PyUnicode_Check(modname))
Victor Stinner974389d2011-03-15 09:33:57 +01002943 goto return_none;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00002944
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002945 modpath = PyDict_GetItem(globals, pathstr);
2946 if (modpath != NULL) {
2947 /* __path__ is set, so modname is already the package name */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002948 int error;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002949
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002950 error = PyDict_SetItem(globals, pkgstr, modname);
2951 if (error) {
2952 PyErr_SetString(PyExc_ValueError,
2953 "Could not set __package__");
2954 return NULL;
2955 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002956 Py_INCREF(modname);
2957 nameobj = modname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002958 } else {
2959 /* Normal module, so work out the package name if any */
Victor Stinner974389d2011-03-15 09:33:57 +01002960 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002961 len = PyUnicode_FindChar(modname, '.',
2962 0, PyUnicode_GET_LENGTH(modname), -1);
2963 if (len == -2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002964 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002965 if (len < 0) {
2966 if (level > 0) {
2967 PyErr_SetString(PyExc_ValueError,
2968 "Attempted relative import in non-package");
2969 return NULL;
2970 }
2971 if (PyDict_SetItem(globals, pkgstr, Py_None)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002972 PyErr_SetString(PyExc_ValueError,
2973 "Could not set __package__");
2974 return NULL;
2975 }
Victor Stinner974389d2011-03-15 09:33:57 +01002976 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002977 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002978 pkgname = PyUnicode_Substring(modname, 0, len);
2979 if (pkgname == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002980 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002981 if (PyDict_SetItem(globals, pkgstr, pkgname)) {
2982 Py_DECREF(pkgname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002983 PyErr_SetString(PyExc_ValueError,
2984 "Could not set __package__");
2985 return NULL;
2986 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002987 nameobj = pkgname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002988 }
2989 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002990 if (level > 1) {
2991 Py_ssize_t dot, end = PyUnicode_GET_LENGTH(nameobj);
2992 PyObject *newname;
2993 while (--level > 0) {
2994 dot = PyUnicode_FindChar(nameobj, '.', 0, end, -1);
2995 if (dot == -2) {
2996 Py_DECREF(nameobj);
2997 return NULL;
2998 }
2999 if (dot < 0) {
3000 Py_DECREF(nameobj);
3001 PyErr_SetString(PyExc_ValueError,
3002 "Attempted relative import beyond "
3003 "toplevel package");
3004 return NULL;
3005 }
3006 end = dot;
3007 }
3008 newname = PyUnicode_Substring(nameobj, 0, end);
3009 Py_DECREF(nameobj);
3010 if (newname == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003011 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003012 nameobj = newname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003013 }
Victor Stinner974389d2011-03-15 09:33:57 +01003014
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003015 modules = PyImport_GetModuleDict();
Victor Stinner974389d2011-03-15 09:33:57 +01003016 parent = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003017 if (parent == NULL) {
Victor Stinner974389d2011-03-15 09:33:57 +01003018 int err;
3019
3020 if (orig_level >= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003021 PyErr_Format(PyExc_SystemError,
Victor Stinner974389d2011-03-15 09:33:57 +01003022 "Parent module %R not loaded, "
3023 "cannot perform relative import", nameobj);
3024 Py_DECREF(nameobj);
3025 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003026 }
Victor Stinner974389d2011-03-15 09:33:57 +01003027
3028 err = PyErr_WarnFormat(
3029 PyExc_RuntimeWarning, 1,
3030 "Parent module %R not found while handling absolute import",
3031 nameobj);
3032 Py_DECREF(nameobj);
3033 if (err)
3034 return NULL;
3035
3036 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003037 }
Victor Stinner974389d2011-03-15 09:33:57 +01003038 *p_name = nameobj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003039 return parent;
3040 /* We expect, but can't guarantee, if parent != None, that:
Victor Stinner974389d2011-03-15 09:33:57 +01003041 - parent.__name__ == name
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003042 - parent.__dict__ is globals
3043 If this is violated... Who cares? */
Victor Stinner974389d2011-03-15 09:33:57 +01003044
3045return_none:
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003046 nameobj = PyUnicode_New(0, 0);
Victor Stinner974389d2011-03-15 09:33:57 +01003047 if (nameobj == NULL)
3048 return NULL;
3049 *p_name = nameobj;
3050 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003051}
3052
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003053/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003054static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01003055load_next(PyObject *mod, PyObject *altmod,
3056 PyObject *inputname, PyObject **p_outputname,
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003057 Py_UCS4 *buf, Py_ssize_t *p_buflen, Py_ssize_t bufsize)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003058{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003059 Py_UCS4 *dot;
Victor Stinner974389d2011-03-15 09:33:57 +01003060 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003061 Py_UCS4 *p;
Victor Stinner974389d2011-03-15 09:33:57 +01003062 PyObject *fullname, *name, *result, *mark_name;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003063 Py_UCS4 *nameuni;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003064
Victor Stinner974389d2011-03-15 09:33:57 +01003065 *p_outputname = NULL;
3066
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003067 if (PyUnicode_GET_LENGTH(inputname) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003068 /* completely empty module name should only happen in
3069 'from . import' (or '__import__("")')*/
3070 Py_INCREF(mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003071 return mod;
3072 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00003073
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003074 nameuni = PyUnicode_AsUCS4Copy(inputname);
Victor Stinner974389d2011-03-15 09:33:57 +01003075 if (nameuni == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003076 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003077
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003078 dot = Py_UCS4_strchr(nameuni, '.');
Victor Stinner974389d2011-03-15 09:33:57 +01003079 if (dot != NULL) {
3080 len = dot - nameuni;
3081 if (len == 0) {
3082 PyErr_SetString(PyExc_ValueError,
3083 "Empty module name");
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003084 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003085 }
3086 }
3087 else
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003088 len = PyUnicode_GET_LENGTH(inputname);
Victor Stinner974389d2011-03-15 09:33:57 +01003089
3090 if (*p_buflen+len+1 >= bufsize) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003091 PyErr_SetString(PyExc_ValueError,
3092 "Module name too long");
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003093 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003094 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003095
Victor Stinner974389d2011-03-15 09:33:57 +01003096 p = buf + *p_buflen;
3097 if (p != buf) {
3098 *p++ = '.';
3099 *p_buflen += 1;
3100 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003101 Py_UCS4_strncpy(p, nameuni, len);
Victor Stinner974389d2011-03-15 09:33:57 +01003102 p[len] = '\0';
3103 *p_buflen += len;
3104
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003105 fullname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3106 buf, *p_buflen);
Victor Stinner974389d2011-03-15 09:33:57 +01003107 if (fullname == NULL)
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003108 goto error;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003109 name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3110 p, len);
Victor Stinner974389d2011-03-15 09:33:57 +01003111 if (name == NULL) {
3112 Py_DECREF(fullname);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003113 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003114 }
3115 result = import_submodule(mod, name, fullname);
3116 Py_DECREF(fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003117 if (result == Py_None && altmod != mod) {
3118 Py_DECREF(result);
3119 /* Here, altmod must be None and mod must not be None */
Victor Stinner974389d2011-03-15 09:33:57 +01003120 result = import_submodule(altmod, name, name);
3121 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003122 if (result != NULL && result != Py_None) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003123 mark_name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3124 buf, *p_buflen);
Victor Stinner974389d2011-03-15 09:33:57 +01003125 if (mark_name == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003126 Py_DECREF(result);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003127 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003128 }
Victor Stinner974389d2011-03-15 09:33:57 +01003129 if (mark_miss(mark_name) != 0) {
3130 Py_DECREF(result);
3131 Py_DECREF(mark_name);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003132 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003133 }
3134 Py_DECREF(mark_name);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003135 Py_UCS4_strncpy(buf, nameuni, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003136 buf[len] = '\0';
3137 *p_buflen = len;
3138 }
3139 }
Victor Stinner974389d2011-03-15 09:33:57 +01003140 else
3141 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003142 if (result == NULL)
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003143 goto error;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003144
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003145 if (result == Py_None) {
3146 Py_DECREF(result);
3147 PyErr_Format(PyExc_ImportError,
Victor Stinner974389d2011-03-15 09:33:57 +01003148 "No module named %R", inputname);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003149 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003150 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003151
Victor Stinner974389d2011-03-15 09:33:57 +01003152 if (dot != NULL) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003153 *p_outputname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3154 dot+1, Py_UCS4_strlen(dot+1));
Victor Stinner974389d2011-03-15 09:33:57 +01003155 if (*p_outputname == NULL) {
3156 Py_DECREF(result);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003157 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003158 }
3159 }
3160
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003161 PyMem_Free(nameuni);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003162 return result;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003163
3164error:
3165 PyMem_Free(nameuni);
3166 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003167}
3168
3169static int
Victor Stinner974389d2011-03-15 09:33:57 +01003170mark_miss(PyObject *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00003171{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003172 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner974389d2011-03-15 09:33:57 +01003173 return PyDict_SetItem(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00003174}
3175
3176static int
Victor Stinner974389d2011-03-15 09:33:57 +01003177ensure_fromlist(PyObject *mod, PyObject *fromlist, PyObject *name,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003178 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003179{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003180 int i;
Victor Stinner974389d2011-03-15 09:33:57 +01003181 PyObject *fullname;
3182 Py_ssize_t fromlist_len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003183
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003184 if (!_PyObject_HasAttrId(mod, &PyId___path__))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003185 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003186
Victor Stinner974389d2011-03-15 09:33:57 +01003187 fromlist_len = PySequence_Size(fromlist);
3188
3189 for (i = 0; i < fromlist_len; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003190 PyObject *item = PySequence_GetItem(fromlist, i);
3191 int hasit;
Victor Stinner974389d2011-03-15 09:33:57 +01003192 if (item == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003193 return 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003194 if (!PyUnicode_Check(item)) {
3195 PyErr_SetString(PyExc_TypeError,
3196 "Item in ``from list'' not a string");
3197 Py_DECREF(item);
3198 return 0;
3199 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003200 if (PyUnicode_READ_CHAR(item, 0) == '*') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003201 PyObject *all;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02003202 _Py_IDENTIFIER(__all__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003203 Py_DECREF(item);
3204 /* See if the package defines __all__ */
3205 if (recursive)
3206 continue; /* Avoid endless recursion */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003207 all = _PyObject_GetAttrId(mod, &PyId___all__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003208 if (all == NULL)
3209 PyErr_Clear();
3210 else {
Victor Stinner974389d2011-03-15 09:33:57 +01003211 int ret = ensure_fromlist(mod, all, name, 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003212 Py_DECREF(all);
3213 if (!ret)
3214 return 0;
3215 }
3216 continue;
3217 }
3218 hasit = PyObject_HasAttr(mod, item);
3219 if (!hasit) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003220 PyObject *submod;
Victor Stinner974389d2011-03-15 09:33:57 +01003221 fullname = PyUnicode_FromFormat("%U.%U", name, item);
3222 if (fullname != NULL) {
3223 submod = import_submodule(mod, item, fullname);
3224 Py_DECREF(fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003225 }
Victor Stinner974389d2011-03-15 09:33:57 +01003226 else
3227 submod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003228 Py_XDECREF(submod);
3229 if (submod == NULL) {
3230 Py_DECREF(item);
3231 return 0;
3232 }
3233 }
3234 Py_DECREF(item);
3235 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003236
Victor Stinner974389d2011-03-15 09:33:57 +01003237 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003238}
3239
Neil Schemenauer00b09662003-06-16 21:03:07 +00003240static int
Victor Stinner974389d2011-03-15 09:33:57 +01003241add_submodule(PyObject *mod, PyObject *submod, PyObject *fullname,
3242 PyObject *subname, PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00003243{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003244 if (mod == Py_None)
3245 return 1;
3246 /* Irrespective of the success of this load, make a
3247 reference to it in the parent package module. A copy gets
3248 saved in the modules dictionary under the full name, so get a
3249 reference from there, if need be. (The exception is when the
3250 load failed with a SyntaxError -- then there's no trace in
3251 sys.modules. In that case, of course, do nothing extra.) */
3252 if (submod == NULL) {
Victor Stinner974389d2011-03-15 09:33:57 +01003253 submod = PyDict_GetItem(modules, fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003254 if (submod == NULL)
3255 return 1;
3256 }
3257 if (PyModule_Check(mod)) {
3258 /* We can't use setattr here since it can give a
3259 * spurious warning if the submodule name shadows a
3260 * builtin name */
3261 PyObject *dict = PyModule_GetDict(mod);
3262 if (!dict)
3263 return 0;
Victor Stinner974389d2011-03-15 09:33:57 +01003264 if (PyDict_SetItem(dict, subname, submod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003265 return 0;
3266 }
3267 else {
Victor Stinner974389d2011-03-15 09:33:57 +01003268 if (PyObject_SetAttr(mod, subname, submod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003269 return 0;
3270 }
3271 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00003272}
3273
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003274static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01003275import_submodule(PyObject *mod, PyObject *subname, PyObject *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003276{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003277 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner533d7832011-03-14 13:22:54 -04003278 PyObject *m = NULL, *bufobj, *path_list, *loader;
Victor Stinner9599de52011-03-13 22:38:38 -04003279 struct filedescr *fdp;
3280 FILE *fp;
Guido van Rossum74e6a111994-08-29 12:54:38 +00003281
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003282 /* Require:
3283 if mod == None: subname == fullname
3284 else: mod.__name__ + "." + subname == fullname
3285 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003286
Victor Stinner974389d2011-03-15 09:33:57 +01003287 if ((m = PyDict_GetItem(modules, fullname)) != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003288 Py_INCREF(m);
Victor Stinner9599de52011-03-13 22:38:38 -04003289 return m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003290 }
Victor Stinner9599de52011-03-13 22:38:38 -04003291
3292 if (mod == Py_None)
Victor Stinner533d7832011-03-14 13:22:54 -04003293 path_list = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003294 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003295 path_list = _PyObject_GetAttrId(mod, &PyId___path__);
Victor Stinner533d7832011-03-14 13:22:54 -04003296 if (path_list == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003297 PyErr_Clear();
3298 Py_INCREF(Py_None);
3299 return Py_None;
3300 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003301 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003302
Victor Stinner533d7832011-03-14 13:22:54 -04003303 fdp = find_module(fullname, subname, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003304 &bufobj, &fp, &loader);
Victor Stinner533d7832011-03-14 13:22:54 -04003305 Py_XDECREF(path_list);
Victor Stinner9599de52011-03-13 22:38:38 -04003306 if (fdp == NULL) {
3307 if (!PyErr_ExceptionMatches(PyExc_ImportError))
3308 return NULL;
3309 PyErr_Clear();
3310 Py_INCREF(Py_None);
3311 return Py_None;
3312 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003313 m = load_module(fullname, fp, bufobj, fdp->type, loader);
3314 Py_XDECREF(bufobj);
Victor Stinner9599de52011-03-13 22:38:38 -04003315 Py_XDECREF(loader);
3316 if (fp)
3317 fclose(fp);
3318 if (m == NULL)
3319 return NULL;
3320 if (!add_submodule(mod, m, fullname, subname, modules)) {
3321 Py_XDECREF(m);
3322 return NULL;
3323 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003324 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00003325}
3326
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003327
3328/* Re-import a module of any kind and return its module object, WITH
3329 INCREMENTED REFERENCE COUNT */
3330
Guido van Rossum79f25d91997-04-29 20:08:16 +00003331PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003332PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003333{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003334 PyInterpreterState *interp = PyThreadState_Get()->interp;
3335 PyObject *modules_reloading = interp->modules_reloading;
3336 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner533d7832011-03-14 13:22:54 -04003337 PyObject *path_list = NULL, *loader = NULL, *existing_m = NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003338 PyObject *nameobj, *bufobj, *subnameobj;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003339 Py_UCS4 *name = NULL, *subname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003340 struct filedescr *fdp;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003341 FILE *fp = NULL;
3342 PyObject *newm = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00003343
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003344 if (modules_reloading == NULL) {
3345 Py_FatalError("PyImport_ReloadModule: "
3346 "no modules_reloading dictionary!");
3347 return NULL;
3348 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003349
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003350 if (m == NULL || !PyModule_Check(m)) {
3351 PyErr_SetString(PyExc_TypeError,
3352 "reload() argument must be module");
3353 return NULL;
3354 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003355 nameobj = PyModule_GetNameObject(m);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003356 if (nameobj == NULL || PyUnicode_READY(nameobj) == -1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003357 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003358 if (m != PyDict_GetItem(modules, nameobj)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003359 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003360 "reload(): module %R not in sys.modules",
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003361 nameobj);
3362 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003363 return NULL;
3364 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003365 existing_m = PyDict_GetItem(modules_reloading, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003366 if (existing_m != NULL) {
3367 /* Due to a recursive reload, this module is already
3368 being reloaded. */
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003369 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003370 Py_INCREF(existing_m);
3371 return existing_m;
3372 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003373 if (PyDict_SetItem(modules_reloading, nameobj, m) < 0) {
3374 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003375 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003376 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00003377
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003378 name = PyUnicode_AsUCS4Copy(nameobj);
3379 if (!name) {
3380 Py_DECREF(nameobj);
3381 return NULL;
3382 }
3383 subname = Py_UCS4_strrchr(name, '.');
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003384 if (subname == NULL) {
3385 Py_INCREF(nameobj);
3386 subnameobj = nameobj;
3387 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003388 else {
3389 PyObject *parentname, *parent;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003390 Py_ssize_t len;
3391 len = subname - name;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003392 parentname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3393 name, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003394 if (parentname == NULL) {
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003395 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003396 }
3397 parent = PyDict_GetItem(modules, parentname);
3398 if (parent == NULL) {
3399 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003400 "reload(): parent %R not in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003401 parentname);
3402 Py_DECREF(parentname);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003403 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003404 }
3405 Py_DECREF(parentname);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003406 path_list = _PyObject_GetAttrId(parent, &PyId___path__);
Victor Stinner533d7832011-03-14 13:22:54 -04003407 if (path_list == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003408 PyErr_Clear();
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003409 subname++;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003410 len = PyUnicode_GET_LENGTH(nameobj) - (len + 1);
3411 subnameobj = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3412 subname, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003413 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003414 if (subnameobj == NULL)
3415 goto error;
Victor Stinner533d7832011-03-14 13:22:54 -04003416 fdp = find_module(nameobj, subnameobj, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003417 &bufobj, &fp, &loader);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003418 Py_DECREF(subnameobj);
Victor Stinner533d7832011-03-14 13:22:54 -04003419 Py_XDECREF(path_list);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003420
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003421 if (fdp == NULL) {
3422 Py_XDECREF(loader);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003423 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003424 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003425
Victor Stinner2fd76e42011-03-14 15:19:39 -04003426 newm = load_module(nameobj, fp, bufobj, fdp->type, loader);
3427 Py_XDECREF(bufobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003428 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003429
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003430 if (fp)
3431 fclose(fp);
3432 if (newm == NULL) {
3433 /* load_module probably removed name from modules because of
3434 * the error. Put back the original module object. We're
3435 * going to return NULL in this case regardless of whether
3436 * replacing name succeeds, so the return value is ignored.
3437 */
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003438 PyDict_SetItem(modules, nameobj, m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003439 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003440
3441error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003442 imp_modules_reloading_clear();
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003443 Py_DECREF(nameobj);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003444 PyMem_Free(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003445 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003446}
3447
3448
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003449/* Higher-level import emulator which emulates the "import" statement
3450 more accurately -- it invokes the __import__() function from the
3451 builtins of the current globals. This means that the import is
3452 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00003453 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00003454 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00003455 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00003456 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003457
3458PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003459PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003460{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003461 static PyObject *silly_list = NULL;
3462 static PyObject *builtins_str = NULL;
3463 static PyObject *import_str = NULL;
3464 PyObject *globals = NULL;
3465 PyObject *import = NULL;
3466 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003467 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003468 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003469
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003470 /* Initialize constant string objects */
3471 if (silly_list == NULL) {
3472 import_str = PyUnicode_InternFromString("__import__");
3473 if (import_str == NULL)
3474 return NULL;
3475 builtins_str = PyUnicode_InternFromString("__builtins__");
3476 if (builtins_str == NULL)
3477 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003478 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003479 if (silly_list == NULL)
3480 return NULL;
3481 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003482
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003483 /* Get the builtins from current globals */
3484 globals = PyEval_GetGlobals();
3485 if (globals != NULL) {
3486 Py_INCREF(globals);
3487 builtins = PyObject_GetItem(globals, builtins_str);
3488 if (builtins == NULL)
3489 goto err;
3490 }
3491 else {
3492 /* No globals -- use standard builtins, and fake globals */
3493 builtins = PyImport_ImportModuleLevel("builtins",
3494 NULL, NULL, NULL, 0);
3495 if (builtins == NULL)
3496 return NULL;
3497 globals = Py_BuildValue("{OO}", builtins_str, builtins);
3498 if (globals == NULL)
3499 goto err;
3500 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003501
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003502 /* Get the __import__ function from the builtins */
3503 if (PyDict_Check(builtins)) {
3504 import = PyObject_GetItem(builtins, import_str);
3505 if (import == NULL)
3506 PyErr_SetObject(PyExc_KeyError, import_str);
3507 }
3508 else
3509 import = PyObject_GetAttr(builtins, import_str);
3510 if (import == NULL)
3511 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003512
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003513 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00003514 Always use absolute import here.
3515 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003516 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
3517 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00003518 if (r == NULL)
3519 goto err;
3520 Py_DECREF(r);
3521
3522 modules = PyImport_GetModuleDict();
3523 r = PyDict_GetItem(modules, module_name);
3524 if (r != NULL)
3525 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003526
3527 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003528 Py_XDECREF(globals);
3529 Py_XDECREF(builtins);
3530 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00003531
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003532 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003533}
3534
3535
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003536/* Module 'imp' provides Python access to the primitives used for
3537 importing modules.
3538*/
3539
Guido van Rossum79f25d91997-04-29 20:08:16 +00003540static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00003541imp_make_magic(long magic)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003542{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003543 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003544
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003545 buf[0] = (char) ((magic >> 0) & 0xff);
3546 buf[1] = (char) ((magic >> 8) & 0xff);
3547 buf[2] = (char) ((magic >> 16) & 0xff);
3548 buf[3] = (char) ((magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003549
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003550 return PyBytes_FromStringAndSize(buf, 4);
Victor Stinner3e2b7172010-11-09 09:32:19 +00003551}
Barry Warsaw28a691b2010-04-17 00:19:56 +00003552
3553static PyObject *
3554imp_get_magic(PyObject *self, PyObject *noargs)
3555{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003556 return imp_make_magic(pyc_magic);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003557}
3558
3559static PyObject *
3560imp_get_tag(PyObject *self, PyObject *noargs)
3561{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003562 return PyUnicode_FromString(pyc_tag);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003563}
3564
Guido van Rossum79f25d91997-04-29 20:08:16 +00003565static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003566imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003567{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003568 PyObject *list;
3569 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003570
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003571 list = PyList_New(0);
3572 if (list == NULL)
3573 return NULL;
3574 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
3575 PyObject *item = Py_BuildValue("ssi",
3576 fdp->suffix, fdp->mode, fdp->type);
3577 if (item == NULL) {
3578 Py_DECREF(list);
3579 return NULL;
3580 }
3581 if (PyList_Append(list, item) < 0) {
3582 Py_DECREF(list);
3583 Py_DECREF(item);
3584 return NULL;
3585 }
3586 Py_DECREF(item);
3587 }
3588 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003589}
3590
Guido van Rossum79f25d91997-04-29 20:08:16 +00003591static PyObject *
Victor Stinner533d7832011-03-14 13:22:54 -04003592call_find_module(PyObject *name, PyObject *path_list)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003593{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003594 extern int fclose(FILE *);
3595 PyObject *fob, *ret;
3596 PyObject *pathobj;
3597 struct filedescr *fdp;
Victor Stinner7d8b77c2011-03-12 08:45:02 -05003598 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003599 int fd = -1;
3600 char *found_encoding = NULL;
3601 char *encoding = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003602
Victor Stinner533d7832011-03-14 13:22:54 -04003603 if (path_list == Py_None)
3604 path_list = NULL;
3605 fdp = find_module(NULL, name, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003606 &pathobj, &fp, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003607 if (fdp == NULL)
3608 return NULL;
3609 if (fp != NULL) {
3610 fd = fileno(fp);
3611 if (fd != -1)
3612 fd = dup(fd);
3613 fclose(fp);
Victor Stinnerd417d012011-06-20 15:16:55 +02003614 if (fd == -1) {
3615 PyErr_SetFromErrno(PyExc_OSError);
3616 return NULL;
3617 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003618 fp = NULL;
3619 }
3620 if (fd != -1) {
3621 if (strchr(fdp->mode, 'b') == NULL) {
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003622 /* PyTokenizer_FindEncodingFilename() returns PyMem_MALLOC'ed
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003623 memory. */
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003624 found_encoding = PyTokenizer_FindEncodingFilename(fd, pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003625 lseek(fd, 0, 0); /* Reset position */
Victor Stinner2fd76e42011-03-14 15:19:39 -04003626 if (found_encoding == NULL && PyErr_Occurred()) {
3627 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003628 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04003629 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003630 encoding = (found_encoding != NULL) ? found_encoding :
3631 (char*)PyUnicode_GetDefaultEncoding();
3632 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003633 fob = PyFile_FromFd(fd, NULL, fdp->mode, -1,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003634 (char*)encoding, NULL, NULL, 1);
3635 if (fob == NULL) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04003636 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003637 close(fd);
3638 PyMem_FREE(found_encoding);
3639 return NULL;
3640 }
3641 }
3642 else {
3643 fob = Py_None;
3644 Py_INCREF(fob);
3645 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003646 if (pathobj == NULL) {
3647 Py_INCREF(Py_None);
3648 pathobj = Py_None;
3649 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003650 ret = Py_BuildValue("NN(ssi)",
3651 fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
3652 PyMem_FREE(found_encoding);
Brett Cannon3bb42d92007-10-20 03:43:15 +00003653
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003654 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003655}
3656
Guido van Rossum79f25d91997-04-29 20:08:16 +00003657static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003658imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003659{
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003660 PyObject *name, *path_list = NULL;
3661 if (!PyArg_ParseTuple(args, "U|O:find_module",
3662 &name, &path_list))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003663 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003664 return call_find_module(name, path_list);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003665}
3666
3667static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003668imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003669{
Victor Stinner95872862011-03-07 18:20:56 +01003670 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003671 int ret;
3672 PyObject *m;
Victor Stinner95872862011-03-07 18:20:56 +01003673 if (!PyArg_ParseTuple(args, "U:init_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003674 return NULL;
3675 ret = init_builtin(name);
3676 if (ret < 0)
3677 return NULL;
3678 if (ret == 0) {
3679 Py_INCREF(Py_None);
3680 return Py_None;
3681 }
Victor Stinner95872862011-03-07 18:20:56 +01003682 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003683 Py_XINCREF(m);
3684 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003685}
3686
Guido van Rossum79f25d91997-04-29 20:08:16 +00003687static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003688imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003689{
Victor Stinner53dc7352011-03-20 01:50:21 +01003690 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003691 int ret;
3692 PyObject *m;
Victor Stinner53dc7352011-03-20 01:50:21 +01003693 if (!PyArg_ParseTuple(args, "U:init_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003694 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01003695 ret = PyImport_ImportFrozenModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003696 if (ret < 0)
3697 return NULL;
3698 if (ret == 0) {
3699 Py_INCREF(Py_None);
3700 return Py_None;
3701 }
Victor Stinner53dc7352011-03-20 01:50:21 +01003702 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003703 Py_XINCREF(m);
3704 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003705}
3706
Guido van Rossum79f25d91997-04-29 20:08:16 +00003707static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003708imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003709{
Victor Stinner53dc7352011-03-20 01:50:21 +01003710 PyObject *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00003711
Victor Stinner53dc7352011-03-20 01:50:21 +01003712 if (!PyArg_ParseTuple(args, "U:get_frozen_object", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003713 return NULL;
3714 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003715}
3716
Guido van Rossum79f25d91997-04-29 20:08:16 +00003717static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00003718imp_is_frozen_package(PyObject *self, PyObject *args)
3719{
Victor Stinner53dc7352011-03-20 01:50:21 +01003720 PyObject *name;
Brett Cannon8d110132009-03-15 02:20:16 +00003721
Victor Stinner53dc7352011-03-20 01:50:21 +01003722 if (!PyArg_ParseTuple(args, "U:is_frozen_package", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003723 return NULL;
3724 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00003725}
3726
3727static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003728imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003729{
Victor Stinner95872862011-03-07 18:20:56 +01003730 PyObject *name;
3731 if (!PyArg_ParseTuple(args, "U:is_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003732 return NULL;
3733 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003734}
3735
Guido van Rossum79f25d91997-04-29 20:08:16 +00003736static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003737imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003738{
Victor Stinner53dc7352011-03-20 01:50:21 +01003739 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003740 struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01003741 if (!PyArg_ParseTuple(args, "U:is_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003742 return NULL;
3743 p = find_frozen(name);
3744 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003745}
3746
3747static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01003748get_file(PyObject *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003749{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003750 FILE *fp;
3751 if (mode[0] == 'U')
3752 mode = "r" PY_STDIOTEXTMODE;
3753 if (fob == NULL) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003754 fp = _Py_fopen(pathname, mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003755 }
3756 else {
3757 int fd = PyObject_AsFileDescriptor(fob);
3758 if (fd == -1)
3759 return NULL;
3760 if (!_PyVerify_fd(fd))
3761 goto error;
3762 /* the FILE struct gets a new fd, so that it can be closed
3763 * independently of the file descriptor given
3764 */
3765 fd = dup(fd);
3766 if (fd == -1)
3767 goto error;
3768 fp = fdopen(fd, mode);
3769 }
3770 if (fp)
3771 return fp;
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003772error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003773 PyErr_SetFromErrno(PyExc_IOError);
3774 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003775}
3776
Guido van Rossum79f25d91997-04-29 20:08:16 +00003777static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003778imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003779{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003780 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003781 PyObject *fob = NULL;
3782 PyObject *m;
3783 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003784 if (!PyArg_ParseTuple(args, "UO&|O:load_compiled",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003785 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003786 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003787 &fob))
3788 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003789 fp = get_file(pathname, fob, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003790 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003791 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003792 return NULL;
3793 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003794 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003795 fclose(fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003796 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003797 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003798}
3799
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003800#ifdef HAVE_DYNAMIC_LOADING
3801
Guido van Rossum79f25d91997-04-29 20:08:16 +00003802static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003803imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003804{
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003805 PyObject *name, *pathname, *fob = NULL, *mod;
3806 FILE *fp;
3807
3808 if (!PyArg_ParseTuple(args, "UO&|O:load_dynamic",
3809 &name, PyUnicode_FSDecoder, &pathname, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003810 return NULL;
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003811 if (fob != NULL) {
3812 fp = get_file(NULL, fob, "r");
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003813 if (fp == NULL) {
3814 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003815 return NULL;
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003816 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003817 }
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003818 else
3819 fp = NULL;
3820 mod = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003821 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003822 if (fp)
3823 fclose(fp);
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003824 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003825}
3826
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003827#endif /* HAVE_DYNAMIC_LOADING */
3828
Guido van Rossum79f25d91997-04-29 20:08:16 +00003829static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003830imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003831{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003832 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003833 PyObject *fob = NULL;
3834 PyObject *m;
3835 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003836 if (!PyArg_ParseTuple(args, "UO&|O:load_source",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003837 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003838 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003839 &fob))
3840 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003841 fp = get_file(pathname, fob, "r");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003842 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003843 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003844 return NULL;
3845 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003846 m = load_source_module(name, pathname, fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003847 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003848 fclose(fp);
3849 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003850}
3851
Guido van Rossum79f25d91997-04-29 20:08:16 +00003852static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003853imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003854{
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003855 PyObject *name, *fob, *pathname, *pathname_obj, *ret;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003856 char *suffix; /* Unused */
3857 char *mode;
3858 int type;
3859 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003860
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003861 if (!PyArg_ParseTuple(args, "UOO(ssi):load_module",
3862 &name, &fob, &pathname_obj, &suffix, &mode, &type))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003863 return NULL;
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003864 if (pathname_obj != Py_None) {
3865 if (!PyUnicode_FSDecoder(pathname_obj, &pathname))
3866 return NULL;
3867 }
3868 else
3869 pathname = NULL;
3870
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003871 if (*mode) {
3872 /* Mode must start with 'r' or 'U' and must not contain '+'.
3873 Implicit in this test is the assumption that the mode
3874 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003875
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003876 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3877 PyErr_Format(PyExc_ValueError,
3878 "invalid file open mode %.200s", mode);
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003879 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003880 return NULL;
3881 }
3882 }
3883 if (fob == Py_None)
3884 fp = NULL;
3885 else {
3886 fp = get_file(NULL, fob, mode);
3887 if (fp == NULL) {
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003888 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003889 return NULL;
3890 }
3891 }
Victor Stinner41c5fec2011-03-13 21:46:30 -04003892 ret = load_module(name, fp, pathname, type, NULL);
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003893 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003894 if (fp)
3895 fclose(fp);
3896 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003897}
3898
3899static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003900imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003901{
Victor Stinnerc9abda02011-03-14 13:33:46 -04003902 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003903 PyObject * ret;
Victor Stinnerc9abda02011-03-14 13:33:46 -04003904 if (!PyArg_ParseTuple(args, "UO&:load_package",
3905 &name, PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003906 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04003907 ret = load_package(name, pathname);
Victor Stinnerebc00522010-12-03 17:06:43 +00003908 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003909 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003910}
3911
3912static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003913imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003914{
Victor Stinnerfe19d212011-03-14 14:53:28 -04003915 PyObject *name;
3916 if (!PyArg_ParseTuple(args, "U:new_module", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003917 return NULL;
Victor Stinnerfe19d212011-03-14 14:53:28 -04003918 return PyModule_NewObject(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003919}
3920
Christian Heimes13a7a212008-01-07 17:13:09 +00003921static PyObject *
3922imp_reload(PyObject *self, PyObject *v)
3923{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003924 return PyImport_ReloadModule(v);
Christian Heimes13a7a212008-01-07 17:13:09 +00003925}
3926
3927PyDoc_STRVAR(doc_reload,
3928"reload(module) -> module\n\
3929\n\
3930Reload the module. The module must have been successfully imported before.");
3931
Barry Warsaw28a691b2010-04-17 00:19:56 +00003932static PyObject *
3933imp_cache_from_source(PyObject *self, PyObject *args, PyObject *kws)
3934{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003935 static char *kwlist[] = {"path", "debug_override", NULL};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003936
Victor Stinner2f42ae52011-03-20 00:41:24 +01003937 PyObject *pathname, *cpathname;
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003938 PyObject *debug_override = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003939 int debug = !Py_OptimizeFlag;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003940
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003941 if (!PyArg_ParseTupleAndKeywords(
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003942 args, kws, "O&|O", kwlist,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003943 PyUnicode_FSDecoder, &pathname, &debug_override))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003944 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003945
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003946 if (debug_override != NULL &&
3947 (debug = PyObject_IsTrue(debug_override)) < 0) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003948 Py_DECREF(pathname);
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003949 return NULL;
3950 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00003951
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003952 cpathname = make_compiled_pathname(pathname, debug);
Victor Stinner2f42ae52011-03-20 00:41:24 +01003953 Py_DECREF(pathname);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003954
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003955 if (cpathname == NULL) {
3956 PyErr_Format(PyExc_SystemError, "path buffer too short");
3957 return NULL;
3958 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003959 return cpathname;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003960}
3961
3962PyDoc_STRVAR(doc_cache_from_source,
3963"Given the path to a .py file, return the path to its .pyc/.pyo file.\n\
3964\n\
3965The .py file does not need to exist; this simply returns the path to the\n\
3966.pyc/.pyo file calculated as if the .py file were imported. The extension\n\
3967will be .pyc unless __debug__ is not defined, then it will be .pyo.\n\
3968\n\
3969If debug_override is not None, then it must be a boolean and is taken as\n\
3970the value of __debug__ instead.");
3971
3972static PyObject *
3973imp_source_from_cache(PyObject *self, PyObject *args, PyObject *kws)
3974{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003975 static char *kwlist[] = {"path", NULL};
Victor Stinnerc9abda02011-03-14 13:33:46 -04003976 PyObject *pathname, *source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003977
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003978 if (!PyArg_ParseTupleAndKeywords(
Victor Stinnerebc00522010-12-03 17:06:43 +00003979 args, kws, "O&", kwlist,
Victor Stinnerc9abda02011-03-14 13:33:46 -04003980 PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003981 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003982
Victor Stinnerc9abda02011-03-14 13:33:46 -04003983 source = make_source_pathname(pathname);
3984 if (source == NULL) {
3985 PyErr_Format(PyExc_ValueError, "Not a PEP 3147 pyc path: %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003986 pathname);
Victor Stinnerc9abda02011-03-14 13:33:46 -04003987 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003988 return NULL;
3989 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04003990 Py_DECREF(pathname);
3991 return source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003992}
3993
3994PyDoc_STRVAR(doc_source_from_cache,
3995"Given the path to a .pyc./.pyo file, return the path to its .py file.\n\
3996\n\
3997The .pyc/.pyo file does not need to exist; this simply returns the path to\n\
3998the .py file calculated to correspond to the .pyc/.pyo file. If path\n\
3999does not conform to PEP 3147 format, ValueError will be raised.");
4000
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004001/* Doc strings */
4002
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004003PyDoc_STRVAR(doc_imp,
4004"This module provides the components needed to build your own\n\
4005__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004006
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004007PyDoc_STRVAR(doc_find_module,
4008"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004009Search for a module. If path is omitted or None, search for a\n\
4010built-in, frozen or special module and continue search in sys.path.\n\
4011The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004012package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004013
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004014PyDoc_STRVAR(doc_load_module,
4015"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004016Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004017The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004018
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004019PyDoc_STRVAR(doc_get_magic,
4020"get_magic() -> string\n\
4021Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004022
Barry Warsaw28a691b2010-04-17 00:19:56 +00004023PyDoc_STRVAR(doc_get_tag,
4024"get_tag() -> string\n\
4025Return the magic tag for .pyc or .pyo files.");
4026
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004027PyDoc_STRVAR(doc_get_suffixes,
4028"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004029Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004030that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004031
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004032PyDoc_STRVAR(doc_new_module,
4033"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004034Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004035The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004036
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004037PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00004038"lock_held() -> boolean\n\
4039Return True if the import lock is currently held, else False.\n\
4040On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00004041
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00004042PyDoc_STRVAR(doc_acquire_lock,
4043"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00004044Acquires the interpreter's import lock for the current thread.\n\
4045This lock should be used by import hooks to ensure thread-safety\n\
4046when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00004047On platforms without threads, this function does nothing.");
4048
4049PyDoc_STRVAR(doc_release_lock,
4050"release_lock() -> None\n\
4051Release the interpreter's import lock.\n\
4052On platforms without threads, this function does nothing.");
4053
Guido van Rossum79f25d91997-04-29 20:08:16 +00004054static PyMethodDef imp_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004055 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
4056 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
4057 {"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag},
4058 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
4059 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
4060 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
4061 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
4062 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
4063 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
4064 {"reload", imp_reload, METH_O, doc_reload},
4065 {"cache_from_source", (PyCFunction)imp_cache_from_source,
4066 METH_VARARGS | METH_KEYWORDS, doc_cache_from_source},
4067 {"source_from_cache", (PyCFunction)imp_source_from_cache,
4068 METH_VARARGS | METH_KEYWORDS, doc_source_from_cache},
4069 /* The rest are obsolete */
4070 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
4071 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
4072 {"init_builtin", imp_init_builtin, METH_VARARGS},
4073 {"init_frozen", imp_init_frozen, METH_VARARGS},
4074 {"is_builtin", imp_is_builtin, METH_VARARGS},
4075 {"is_frozen", imp_is_frozen, METH_VARARGS},
4076 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00004077#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004078 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00004079#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004080 {"load_package", imp_load_package, METH_VARARGS},
4081 {"load_source", imp_load_source, METH_VARARGS},
Brett Cannon442c9b92011-03-23 16:14:42 -07004082 {"_fix_co_filename", imp_fix_co_filename, METH_VARARGS},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004083 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004084};
4085
Guido van Rossum1a8791e1998-08-04 22:46:29 +00004086static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004087setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004088{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004089 PyObject *v;
4090 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004091
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004092 v = PyLong_FromLong((long)value);
4093 err = PyDict_SetItemString(d, name, v);
4094 Py_XDECREF(v);
4095 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004096}
4097
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004098typedef struct {
4099 PyObject_HEAD
4100} NullImporter;
4101
4102static int
4103NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
4104{
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004105#ifndef MS_WINDOWS
4106 PyObject *path;
4107 struct stat statbuf;
4108 int rv;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004109
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004110 if (!_PyArg_NoKeywords("NullImporter()", kwds))
4111 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004112
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004113 if (!PyArg_ParseTuple(args, "O&:NullImporter",
4114 PyUnicode_FSConverter, &path))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004115 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004116
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004117 if (PyBytes_GET_SIZE(path) == 0) {
4118 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004119 PyErr_SetString(PyExc_ImportError, "empty pathname");
4120 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004121 }
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004122
4123 rv = stat(PyBytes_AS_STRING(path), &statbuf);
4124 Py_DECREF(path);
4125 if (rv == 0) {
4126 /* it exists */
4127 if (S_ISDIR(statbuf.st_mode)) {
4128 /* it's a directory */
4129 PyErr_SetString(PyExc_ImportError, "existing directory");
4130 return -1;
4131 }
4132 }
4133#else /* MS_WINDOWS */
4134 PyObject *pathobj;
4135 DWORD rv;
Victor Stinner255dfdb2010-09-29 10:28:51 +00004136 wchar_t *path;
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004137
4138 if (!_PyArg_NoKeywords("NullImporter()", kwds))
4139 return -1;
4140
4141 if (!PyArg_ParseTuple(args, "U:NullImporter",
4142 &pathobj))
4143 return -1;
4144
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02004145 if (PyUnicode_GET_LENGTH(pathobj) == 0) {
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004146 PyErr_SetString(PyExc_ImportError, "empty pathname");
4147 return -1;
4148 }
4149
Victor Stinnerbeb4135b2010-10-07 01:02:42 +00004150 path = PyUnicode_AsWideCharString(pathobj, NULL);
Victor Stinner255dfdb2010-09-29 10:28:51 +00004151 if (path == NULL)
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004152 return -1;
4153 /* see issue1293 and issue3677:
4154 * stat() on Windows doesn't recognise paths like
4155 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
4156 */
4157 rv = GetFileAttributesW(path);
Victor Stinner255dfdb2010-09-29 10:28:51 +00004158 PyMem_Free(path);
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004159 if (rv != INVALID_FILE_ATTRIBUTES) {
4160 /* it exists */
4161 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
4162 /* it's a directory */
4163 PyErr_SetString(PyExc_ImportError, "existing directory");
4164 return -1;
4165 }
4166 }
4167#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004168 return 0;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004169}
4170
4171static PyObject *
4172NullImporter_find_module(NullImporter *self, PyObject *args)
4173{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004174 Py_RETURN_NONE;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004175}
4176
4177static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004178 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
4179 "Always return None"
4180 },
4181 {NULL} /* Sentinel */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004182};
4183
4184
Christian Heimes9cd17752007-11-18 19:35:23 +00004185PyTypeObject PyNullImporter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004186 PyVarObject_HEAD_INIT(NULL, 0)
4187 "imp.NullImporter", /*tp_name*/
4188 sizeof(NullImporter), /*tp_basicsize*/
4189 0, /*tp_itemsize*/
4190 0, /*tp_dealloc*/
4191 0, /*tp_print*/
4192 0, /*tp_getattr*/
4193 0, /*tp_setattr*/
4194 0, /*tp_reserved*/
4195 0, /*tp_repr*/
4196 0, /*tp_as_number*/
4197 0, /*tp_as_sequence*/
4198 0, /*tp_as_mapping*/
4199 0, /*tp_hash */
4200 0, /*tp_call*/
4201 0, /*tp_str*/
4202 0, /*tp_getattro*/
4203 0, /*tp_setattro*/
4204 0, /*tp_as_buffer*/
4205 Py_TPFLAGS_DEFAULT, /*tp_flags*/
4206 "Null importer object", /* tp_doc */
4207 0, /* tp_traverse */
4208 0, /* tp_clear */
4209 0, /* tp_richcompare */
4210 0, /* tp_weaklistoffset */
4211 0, /* tp_iter */
4212 0, /* tp_iternext */
4213 NullImporter_methods, /* tp_methods */
4214 0, /* tp_members */
4215 0, /* tp_getset */
4216 0, /* tp_base */
4217 0, /* tp_dict */
4218 0, /* tp_descr_get */
4219 0, /* tp_descr_set */
4220 0, /* tp_dictoffset */
4221 (initproc)NullImporter_init, /* tp_init */
4222 0, /* tp_alloc */
4223 PyType_GenericNew /* tp_new */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004224};
4225
Martin v. Löwis1a214512008-06-11 05:26:20 +00004226static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004227 PyModuleDef_HEAD_INIT,
4228 "imp",
4229 doc_imp,
4230 0,
4231 imp_methods,
4232 NULL,
4233 NULL,
4234 NULL,
4235 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00004236};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004237
Jason Tishler6bc06ec2003-09-04 11:59:50 +00004238PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00004239PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004240{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004241 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004242
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004243 if (PyType_Ready(&PyNullImporter_Type) < 0)
4244 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004245
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004246 m = PyModule_Create(&impmodule);
4247 if (m == NULL)
4248 goto failure;
4249 d = PyModule_GetDict(m);
4250 if (d == NULL)
4251 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004252
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004253 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
4254 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
4255 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
4256 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
4257 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
4258 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
4259 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
4260 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
4261 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
4262 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004263
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004264 Py_INCREF(&PyNullImporter_Type);
4265 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
4266 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004267 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004268 Py_XDECREF(m);
4269 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004270}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004271
4272
Guido van Rossumb18618d2000-05-03 23:44:39 +00004273/* API for embedding applications that want to add their own entries
4274 to the table of built-in modules. This should normally be called
4275 *before* Py_Initialize(). When the table resize fails, -1 is
4276 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004277
4278 After a similar function by Just van Rossum. */
4279
4280int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004281PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004282{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004283 static struct _inittab *our_copy = NULL;
4284 struct _inittab *p;
4285 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004286
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004287 /* Count the number of entries in both tables */
4288 for (n = 0; newtab[n].name != NULL; n++)
4289 ;
4290 if (n == 0)
4291 return 0; /* Nothing to do */
4292 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
4293 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004294
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004295 /* Allocate new memory for the combined table */
4296 p = our_copy;
4297 PyMem_RESIZE(p, struct _inittab, i+n+1);
4298 if (p == NULL)
4299 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004300
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004301 /* Copy the tables into the new memory */
4302 if (our_copy != PyImport_Inittab)
4303 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
4304 PyImport_Inittab = our_copy = p;
4305 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004306
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004307 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004308}
4309
4310/* Shorthand to add a single entry given a name and a function */
4311
4312int
Brett Cannona826f322009-04-02 03:41:46 +00004313PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004314{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004315 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004316
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004317 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004318
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004319 newtab[0].name = (char *)name;
4320 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004321
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004322 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004323}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004324
4325#ifdef __cplusplus
4326}
4327#endif