blob: 5dcaf3a40ea232677d456a2d82dbf51ccf53fca0 [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
Martin v. Löwis30260a72011-10-23 17:35:46 +0200932 foo.py -> __pycache__/foo.<tag>.pyc
933
934 pathstr is assumed to be "ready".
935*/
Victor Stinner2f42ae52011-03-20 00:41:24 +0100936
937static PyObject*
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200938make_compiled_pathname(PyObject *pathstr, int debug)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000939{
Martin v. Löwis2db72862011-10-23 17:29:08 +0200940 PyObject *result;
941 Py_ssize_t fname, ext, len, i, pos, taglen;
942 Py_ssize_t pycache_len = sizeof("__pycache__/") - 1;
943 int kind;
944 void *data;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000945
Martin v. Löwis2db72862011-10-23 17:29:08 +0200946 /* Compute the output string size. */
947 len = PyUnicode_GET_LENGTH(pathstr);
948 /* If there is no separator, this returns -1, so
949 lastsep will be 0. */
950 fname = rightmost_sep_obj(pathstr) + 1;
951 ext = fname - 1;
952 for(i = fname; i < len; i++)
953 if (PyUnicode_READ_CHAR(pathstr, i) == '.')
954 ext = i + 1;
955 if (ext < fname)
956 /* No dot in filename; use entire filename */
957 ext = len;
958
959 /* result = pathstr[:fname] + "__pycache__" + SEP +
960 pathstr[fname:ext] + tag + ".py[co]" */
961 taglen = strlen(pyc_tag);
962 result = PyUnicode_New(ext + pycache_len + taglen + 4,
963 PyUnicode_MAX_CHAR_VALUE(pathstr));
964 if (!result)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200965 return NULL;
Martin v. Löwis2db72862011-10-23 17:29:08 +0200966 kind = PyUnicode_KIND(result);
967 data = PyUnicode_DATA(result);
968 PyUnicode_CopyCharacters(result, 0, pathstr, 0, fname);
969 pos = fname;
970 for (i = 0; i < pycache_len - 1; i++)
971 PyUnicode_WRITE(kind, data, pos++, "__pycache__"[i]);
972 PyUnicode_WRITE(kind, data, pos++, SEP);
973 PyUnicode_CopyCharacters(result, pos, pathstr,
974 fname, ext - fname);
975 pos += ext - fname;
976 for (i = 0; pyc_tag[i]; i++)
977 PyUnicode_WRITE(kind, data, pos++, pyc_tag[i]);
978 PyUnicode_WRITE(kind, data, pos++, '.');
979 PyUnicode_WRITE(kind, data, pos++, 'p');
980 PyUnicode_WRITE(kind, data, pos++, 'y');
981 PyUnicode_WRITE(kind, data, pos++, debug ? 'c' : 'o');
982 return result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000983}
984
985
Barry Warsaw28a691b2010-04-17 00:19:56 +0000986/* Given a pathname to a Python byte compiled file, return the path to the
987 source file, if the path matches the PEP 3147 format. This does not check
988 for any file existence, however, if the pyc file name does not match PEP
989 3147 style, NULL is returned. buf must be at least as big as pathname;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400990 the resulting path will always be shorter.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000991
Victor Stinnerc9abda02011-03-14 13:33:46 -0400992 (...)/__pycache__/foo.<tag>.pyc -> (...)/foo.py */
993
994static PyObject*
995make_source_pathname(PyObject *pathobj)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000996{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200997 Py_UCS4 buf[MAXPATHLEN];
998 Py_UCS4 *pathname;
999 Py_UCS4 *left, *right, *dot0, *dot1, sep;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001000 size_t i, j;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001001
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001002 if (PyUnicode_GET_LENGTH(pathobj) > MAXPATHLEN)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001003 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001004 pathname = PyUnicode_AsUCS4Copy(pathobj);
1005 if (!pathname)
1006 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001007
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001008 /* Look back two slashes from the end. In between these two slashes
1009 must be the string __pycache__ or this is not a PEP 3147 style
1010 path. It's possible for there to be only one slash.
1011 */
Victor Stinner2f42ae52011-03-20 00:41:24 +01001012 right = rightmost_sep(pathname);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001013 if (right == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001014 return NULL;
1015 sep = *right;
1016 *right = '\0';
Victor Stinner2f42ae52011-03-20 00:41:24 +01001017 left = rightmost_sep(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001018 *right = sep;
1019 if (left == NULL)
1020 left = pathname;
1021 else
1022 left++;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001023 if (right-left != Py_UCS4_strlen(CACHEDIR_UNICODE) ||
1024 Py_UCS4_strncmp(left, CACHEDIR_UNICODE, right-left) != 0)
1025 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001026
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001027 /* Now verify that the path component to the right of the last slash
1028 has two dots in it.
1029 */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001030 if ((dot0 = Py_UCS4_strchr(right + 1, '.')) == NULL)
1031 goto error;
1032 if ((dot1 = Py_UCS4_strchr(dot0 + 1, '.')) == NULL)
1033 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001034 /* Too many dots? */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001035 if (Py_UCS4_strchr(dot1 + 1, '.') != NULL)
1036 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001037
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001038 /* This is a PEP 3147 path. Start by copying everything from the
1039 start of pathname up to and including the leftmost slash. Then
1040 copy the file's basename, removing the magic tag and adding a .py
1041 suffix.
1042 */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001043 Py_UCS4_strncpy(buf, pathname, (i=left-pathname));
1044 Py_UCS4_strncpy(buf+i, right+1, (j=dot0-right));
Victor Stinnerc9abda02011-03-14 13:33:46 -04001045 buf[i+j] = 'p';
1046 buf[i+j+1] = 'y';
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001047 PyMem_Free(pathname);
1048 return PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, i+j+2);
1049 error:
1050 PyMem_Free(pathname);
1051 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001052}
1053
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001054/* Given a pathname for a Python source file, its time of last
1055 modification, and a pathname for a compiled file, check whether the
1056 compiled file represents the same version of the source. If so,
1057 return a FILE pointer for the compiled file, positioned just after
1058 the header; if not, return NULL.
1059 Doesn't set an exception. */
1060
1061static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001062check_compiled_module(PyObject *pathname, time_t mtime, PyObject *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001063{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001064 FILE *fp;
1065 long magic;
1066 long pyc_mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001067
Victor Stinner2f42ae52011-03-20 00:41:24 +01001068 fp = _Py_fopen(cpathname, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001069 if (fp == NULL)
1070 return NULL;
1071 magic = PyMarshal_ReadLongFromFile(fp);
1072 if (magic != pyc_magic) {
1073 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001074 PySys_FormatStderr("# %R has bad magic\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 fclose(fp);
1076 return NULL;
1077 }
1078 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
1079 if (pyc_mtime != mtime) {
1080 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001081 PySys_FormatStderr("# %R has bad mtime\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001082 fclose(fp);
1083 return NULL;
1084 }
1085 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001086 PySys_FormatStderr("# %R matches %R\n", cpathname, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001087 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001088}
1089
1090
1091/* Read a code object from a file and check it for validity */
1092
Guido van Rossum79f25d91997-04-29 20:08:16 +00001093static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001094read_compiled_module(PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001095{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001096 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001097
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001098 co = PyMarshal_ReadLastObjectFromFile(fp);
1099 if (co == NULL)
1100 return NULL;
1101 if (!PyCode_Check(co)) {
1102 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001103 "Non-code object in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001104 Py_DECREF(co);
1105 return NULL;
1106 }
1107 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001108}
1109
1110
1111/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001112 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001113
Guido van Rossum79f25d91997-04-29 20:08:16 +00001114static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001115load_compiled_module(PyObject *name, PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001116{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001117 long magic;
1118 PyCodeObject *co;
1119 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001120
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001121 magic = PyMarshal_ReadLongFromFile(fp);
1122 if (magic != pyc_magic) {
1123 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001124 "Bad magic number in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001125 return NULL;
1126 }
1127 (void) PyMarshal_ReadLongFromFile(fp);
1128 co = read_compiled_module(cpathname, fp);
1129 if (co == NULL)
1130 return NULL;
1131 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001132 PySys_FormatStderr("import %U # precompiled from %R\n",
1133 name, cpathname);
1134 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1135 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001136 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001137
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001138 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001139}
1140
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001141/* Parse a source file and return the corresponding code object */
1142
Guido van Rossum79f25d91997-04-29 20:08:16 +00001143static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001144parse_source_module(PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001145{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001146 PyCodeObject *co;
1147 PyObject *pathbytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001148 mod_ty mod;
1149 PyCompilerFlags flags;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001150 PyArena *arena;
1151
1152 pathbytes = PyUnicode_EncodeFSDefault(pathname);
1153 if (pathbytes == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001154 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001155
Victor Stinner2f42ae52011-03-20 00:41:24 +01001156 arena = PyArena_New();
1157 if (arena == NULL) {
1158 Py_DECREF(pathbytes);
1159 return NULL;
1160 }
1161
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001162 flags.cf_flags = 0;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001163 mod = PyParser_ASTFromFile(fp, PyBytes_AS_STRING(pathbytes), NULL,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001164 Py_file_input, 0, 0, &flags,
1165 NULL, arena);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001166 if (mod != NULL)
1167 co = PyAST_Compile(mod, PyBytes_AS_STRING(pathbytes), NULL, arena);
1168 else
1169 co = NULL;
1170 Py_DECREF(pathbytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001171 PyArena_Free(arena);
1172 return co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001173}
1174
Guido van Rossum55a83382000-09-20 20:31:38 +00001175/* Helper to open a bytecode file for writing in exclusive mode */
1176
Victor Stinner783c82c2011-04-20 03:27:51 +02001177#ifndef MS_WINDOWS
Guido van Rossum55a83382000-09-20 20:31:38 +00001178static FILE *
Christian Heimes05e8be12008-02-23 18:30:17 +00001179open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +00001180{
1181#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001182 /* Use O_EXCL to avoid a race condition when another process tries to
1183 write the same file. When that happens, our open() call fails,
1184 which is just fine (since it's only a cache).
1185 XXX If the file exists and is writable but the directory is not
1186 writable, the file will never be written. Oh well.
1187 */
1188 int fd;
1189 (void) unlink(filename);
1190 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
Tim Peters42c83af2000-09-29 04:03:10 +00001191#ifdef O_BINARY
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001192 |O_BINARY /* necessary for Windows */
Tim Peters42c83af2000-09-29 04:03:10 +00001193#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001194#ifdef __VMS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001195 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001196#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001197 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001198#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001199 );
1200 if (fd < 0)
1201 return NULL;
1202 return fdopen(fd, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001203#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001204 /* Best we can do -- on Windows this can't happen anyway */
1205 return fopen(filename, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001206#endif
1207}
Victor Stinner783c82c2011-04-20 03:27:51 +02001208#endif
Guido van Rossum55a83382000-09-20 20:31:38 +00001209
1210
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001211/* Write a compiled module to a file, placing the time of last
1212 modification of its source into the header.
1213 Errors are ignored, if a write error occurs an attempt is made to
1214 remove the file. */
1215
1216static void
Victor Stinner2f42ae52011-03-20 00:41:24 +01001217write_compiled_module(PyCodeObject *co, PyObject *cpathname,
1218 struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001219{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001220 Py_UCS4 *cpathname_ucs4;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001221 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001222 time_t mtime = srcstat->st_mtime;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001223#ifdef MS_WINDOWS /* since Windows uses different permissions */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001224 mode_t mode = srcstat->st_mode & ~S_IEXEC;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001225#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001226 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
1227 mode_t dirmode = (srcstat->st_mode |
1228 S_IXUSR | S_IXGRP | S_IXOTH |
1229 S_IWUSR | S_IWGRP | S_IWOTH);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001230 PyObject *dirbytes;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001231#endif
Victor Stinner783c82c2011-04-20 03:27:51 +02001232#ifdef MS_WINDOWS
1233 int fd;
1234#else
Antoine Pitrou707033a2011-10-17 19:28:44 +02001235 PyObject *cpathbytes, *cpathbytes_tmp;
1236 Py_ssize_t cpathbytes_len;
Victor Stinner783c82c2011-04-20 03:27:51 +02001237#endif
1238 PyObject *dirname;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001239 Py_UCS4 *dirsep;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001240 int res, ok;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001241
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001242 /* Ensure that the __pycache__ directory exists. */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001243 cpathname_ucs4 = PyUnicode_AsUCS4Copy(cpathname);
1244 if (!cpathname_ucs4)
1245 return;
1246 dirsep = rightmost_sep(cpathname_ucs4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001247 if (dirsep == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001249 PySys_FormatStderr("# no %s path found %R\n", CACHEDIR, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001250 return;
1251 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001252 dirname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
1253 cpathname_ucs4,
1254 dirsep - cpathname_ucs4);
1255 PyMem_Free(cpathname_ucs4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001256 if (dirname == NULL) {
1257 PyErr_Clear();
1258 return;
1259 }
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001260
1261#ifdef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001262 res = CreateDirectoryW(PyUnicode_AS_UNICODE(dirname), NULL);
1263 ok = (res != 0);
1264 if (!ok && GetLastError() == ERROR_ALREADY_EXISTS)
1265 ok = 1;
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001266#else
Victor Stinner2f42ae52011-03-20 00:41:24 +01001267 dirbytes = PyUnicode_EncodeFSDefault(dirname);
1268 if (dirbytes == NULL) {
1269 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001270 return;
1271 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001272 res = mkdir(PyBytes_AS_STRING(dirbytes), dirmode);
1273 Py_DECREF(dirbytes);
1274 if (0 <= res)
1275 ok = 1;
1276 else
1277 ok = (errno == EEXIST);
1278#endif
1279 if (!ok) {
1280 if (Py_VerboseFlag)
1281 PySys_FormatStderr("# cannot create cache dir %R\n", dirname);
1282 Py_DECREF(dirname);
1283 return;
1284 }
1285 Py_DECREF(dirname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001286
Victor Stinner783c82c2011-04-20 03:27:51 +02001287#ifdef MS_WINDOWS
1288 (void)DeleteFileW(PyUnicode_AS_UNICODE(cpathname));
1289 fd = _wopen(PyUnicode_AS_UNICODE(cpathname),
1290 O_EXCL | O_CREAT | O_WRONLY | O_TRUNC | O_BINARY,
1291 mode);
1292 if (0 <= fd)
1293 fp = fdopen(fd, "wb");
1294 else
1295 fp = NULL;
1296#else
Antoine Pitrou707033a2011-10-17 19:28:44 +02001297 /* Under POSIX, we first write to a tmp file and then take advantage
1298 of atomic renaming. */
Victor Stinner2f42ae52011-03-20 00:41:24 +01001299 cpathbytes = PyUnicode_EncodeFSDefault(cpathname);
1300 if (cpathbytes == NULL) {
1301 PyErr_Clear();
1302 return;
1303 }
Antoine Pitrou707033a2011-10-17 19:28:44 +02001304 cpathbytes_len = PyBytes_GET_SIZE(cpathbytes);
1305 cpathbytes_tmp = PyBytes_FromStringAndSize(NULL, cpathbytes_len + 4);
1306 if (cpathbytes_tmp == NULL) {
1307 Py_DECREF(cpathbytes);
1308 PyErr_Clear();
1309 return;
1310 }
1311 memcpy(PyBytes_AS_STRING(cpathbytes_tmp), PyBytes_AS_STRING(cpathbytes),
1312 cpathbytes_len);
1313 memcpy(PyBytes_AS_STRING(cpathbytes_tmp) + cpathbytes_len, ".tmp", 4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001314
Antoine Pitrou707033a2011-10-17 19:28:44 +02001315 fp = open_exclusive(PyBytes_AS_STRING(cpathbytes_tmp), mode);
Victor Stinner783c82c2011-04-20 03:27:51 +02001316#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001317 if (fp == NULL) {
1318 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001319 PySys_FormatStderr(
1320 "# can't create %R\n", cpathname);
Victor Stinner783c82c2011-04-20 03:27:51 +02001321#ifndef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001322 Py_DECREF(cpathbytes);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001323 Py_DECREF(cpathbytes_tmp);
Victor Stinner783c82c2011-04-20 03:27:51 +02001324#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001325 return;
1326 }
1327 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
1328 /* First write a 0 for mtime */
1329 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
1330 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001331 fflush(fp);
1332 /* Now write the true mtime */
1333 fseek(fp, 4L, 0);
1334 assert(mtime < LONG_MAX);
1335 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001336 if (fflush(fp) != 0 || ferror(fp)) {
1337 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001338 PySys_FormatStderr("# can't write %R\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001339 /* Don't keep partial file */
1340 fclose(fp);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001341#ifdef MS_WINDOWS
1342 (void)DeleteFileW(PyUnicode_AS_UNICODE(cpathname));
1343#else
Antoine Pitrou707033a2011-10-17 19:28:44 +02001344 (void) unlink(PyBytes_AS_STRING(cpathbytes_tmp));
Victor Stinner2f42ae52011-03-20 00:41:24 +01001345 Py_DECREF(cpathbytes);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001346 Py_DECREF(cpathbytes_tmp);
Victor Stinner783c82c2011-04-20 03:27:51 +02001347#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001348 return;
1349 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001350 fclose(fp);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001351 /* Under POSIX, do an atomic rename */
1352#ifndef MS_WINDOWS
1353 if (rename(PyBytes_AS_STRING(cpathbytes_tmp),
1354 PyBytes_AS_STRING(cpathbytes))) {
1355 if (Py_VerboseFlag)
1356 PySys_FormatStderr("# can't write %R\n", cpathname);
1357 /* Don't keep tmp file */
1358 unlink(PyBytes_AS_STRING(cpathbytes_tmp));
1359 Py_DECREF(cpathbytes);
1360 Py_DECREF(cpathbytes_tmp);
1361 return;
1362 }
1363 Py_DECREF(cpathbytes);
1364 Py_DECREF(cpathbytes_tmp);
1365#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001366 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001367 PySys_FormatStderr("# wrote %R\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001368}
1369
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001370static void
1371update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
1372{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001373 PyObject *constants, *tmp;
1374 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001375
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001376 if (PyUnicode_Compare(co->co_filename, oldname))
1377 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001378
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001379 tmp = co->co_filename;
1380 co->co_filename = newname;
1381 Py_INCREF(co->co_filename);
1382 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001383
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001384 constants = co->co_consts;
1385 n = PyTuple_GET_SIZE(constants);
1386 for (i = 0; i < n; i++) {
1387 tmp = PyTuple_GET_ITEM(constants, i);
1388 if (PyCode_Check(tmp))
1389 update_code_filenames((PyCodeObject *)tmp,
1390 oldname, newname);
1391 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001392}
1393
Victor Stinner2f42ae52011-03-20 00:41:24 +01001394static void
1395update_compiled_module(PyCodeObject *co, PyObject *newname)
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001396{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001397 PyObject *oldname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001398
Victor Stinner2f42ae52011-03-20 00:41:24 +01001399 if (PyUnicode_Compare(co->co_filename, newname) == 0)
1400 return;
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +00001401
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001402 oldname = co->co_filename;
1403 Py_INCREF(oldname);
1404 update_code_filenames(co, oldname, newname);
1405 Py_DECREF(oldname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001406}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001407
Brett Cannon442c9b92011-03-23 16:14:42 -07001408static PyObject *
1409imp_fix_co_filename(PyObject *self, PyObject *args)
1410{
1411 PyObject *co;
1412 PyObject *file_path;
1413
1414 if (!PyArg_ParseTuple(args, "OO:_fix_co_filename", &co, &file_path))
1415 return NULL;
1416
1417 if (!PyCode_Check(co)) {
1418 PyErr_SetString(PyExc_TypeError,
1419 "first argument must be a code object");
1420 return NULL;
1421 }
1422
1423 if (!PyUnicode_Check(file_path)) {
1424 PyErr_SetString(PyExc_TypeError,
1425 "second argument must be a string");
1426 return NULL;
1427 }
1428
1429 update_compiled_module((PyCodeObject*)co, file_path);
1430
1431 Py_RETURN_NONE;
1432}
1433
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001434/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001435 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
1436 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001437
Guido van Rossum79f25d91997-04-29 20:08:16 +00001438static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001439load_source_module(PyObject *name, PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001440{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001441 struct stat st;
1442 FILE *fpc;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001443 PyObject *cpathname = NULL, *cpathbytes = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001444 PyCodeObject *co;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001445 PyObject *m = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 if (fstat(fileno(fp), &st) != 0) {
1448 PyErr_Format(PyExc_RuntimeError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001449 "unable to get file status from %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001450 pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001451 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001452 }
Fred Drake4c82b232000-06-30 16:18:57 +00001453#if SIZEOF_TIME_T > 4
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001454 /* Python's .pyc timestamp handling presumes that the timestamp fits
1455 in 4 bytes. This will be fine until sometime in the year 2038,
1456 when a 4-byte signed time_t will overflow.
1457 */
1458 if (st.st_mtime >> 32) {
1459 PyErr_SetString(PyExc_OverflowError,
1460 "modification time overflows a 4 byte field");
Victor Stinner2f42ae52011-03-20 00:41:24 +01001461 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001462 }
Fred Drake4c82b232000-06-30 16:18:57 +00001463#endif
Martin v. Löwis30260a72011-10-23 17:35:46 +02001464 if (PyUnicode_READY(pathname) < 0)
1465 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001466 cpathname = make_compiled_pathname(pathname, !Py_OptimizeFlag);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001467
1468 if (cpathname != NULL)
1469 fpc = check_compiled_module(pathname, st.st_mtime, cpathname);
1470 else
1471 fpc = NULL;
1472
1473 if (fpc) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001474 co = read_compiled_module(cpathname, fpc);
1475 fclose(fpc);
1476 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001477 goto error;
1478 update_compiled_module(co, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001479 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001480 PySys_FormatStderr("import %U # precompiled from %R\n",
1481 name, cpathname);
1482 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1483 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001484 }
1485 else {
1486 co = parse_source_module(pathname, fp);
1487 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001488 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001489 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001490 PySys_FormatStderr("import %U # from %R\n",
Victor Stinner98dbba52011-03-14 15:15:47 -04001491 name, pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001492 if (cpathname != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001493 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1494 if (ro == NULL || !PyObject_IsTrue(ro))
1495 write_compiled_module(co, cpathname, &st);
1496 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001497 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1498 pathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001499 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001500 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001501
Victor Stinner2f42ae52011-03-20 00:41:24 +01001502error:
1503 Py_XDECREF(cpathbytes);
1504 Py_XDECREF(cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001505 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001506}
1507
Christian Heimes3b06e532008-01-07 20:12:44 +00001508/* Get source file -> unicode or None
1509 * Returns the path to the py file if available, else the given path
1510 */
1511static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001512get_sourcefile(PyObject *filename)
Christian Heimes3b06e532008-01-07 20:12:44 +00001513{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001514 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001515 Py_UCS4 *fileuni;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001516 PyObject *py;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001517 struct stat statbuf;
Christian Heimes3b06e532008-01-07 20:12:44 +00001518
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001519 len = PyUnicode_GET_LENGTH(filename);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001520 if (len == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001521 Py_RETURN_NONE;
Christian Heimes3b06e532008-01-07 20:12:44 +00001522
Victor Stinnerc9abda02011-03-14 13:33:46 -04001523 /* don't match *.pyc or *.pyo? */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001524 fileuni = PyUnicode_AsUCS4Copy(filename);
1525 if (!fileuni)
1526 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001527 if (len < 5
1528 || fileuni[len-4] != '.'
1529 || (fileuni[len-3] != 'p' && fileuni[len-3] != 'P')
1530 || (fileuni[len-2] != 'y' && fileuni[len-2] != 'Y'))
1531 goto unchanged;
Christian Heimes3b06e532008-01-07 20:12:44 +00001532
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001533 /* Start by trying to turn PEP 3147 path into source path. If that
1534 * fails, just chop off the trailing character, i.e. legacy pyc path
1535 * to py.
1536 */
Victor Stinnerc9abda02011-03-14 13:33:46 -04001537 py = make_source_pathname(filename);
1538 if (py == NULL) {
1539 PyErr_Clear();
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001540 py = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, fileuni, len - 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001541 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001542 if (py == NULL)
1543 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001544
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001545 if (_Py_stat(py, &statbuf) == 0 && S_ISREG(statbuf.st_mode)) {
1546 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001547 return py;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001548 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001549 Py_DECREF(py);
1550 goto unchanged;
1551
1552error:
1553 PyErr_Clear();
1554unchanged:
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001555 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001556 Py_INCREF(filename);
1557 return filename;
Christian Heimes3b06e532008-01-07 20:12:44 +00001558}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001559
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001560/* Forward */
Victor Stinner41c5fec2011-03-13 21:46:30 -04001561static PyObject *load_module(PyObject *, FILE *, PyObject *, int, PyObject *);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001562static struct filedescr *find_module(PyObject *, PyObject *, PyObject *,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001563 PyObject **, FILE **, PyObject **);
Victor Stinner53dc7352011-03-20 01:50:21 +01001564static struct _frozen * find_frozen(PyObject *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001565
1566/* Load a package and return its module object WITH INCREMENTED
1567 REFERENCE COUNT */
1568
1569static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001570load_package(PyObject *name, PyObject *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001571{
Victor Stinner41c5fec2011-03-13 21:46:30 -04001572 PyObject *m, *d, *bufobj;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001573 PyObject *file = NULL, *path_list = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001574 int err;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001575 FILE *fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001576 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001577
Victor Stinnerc9abda02011-03-14 13:33:46 -04001578 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001579 if (m == NULL)
1580 return NULL;
1581 if (Py_VerboseFlag)
Victor Stinner98dbba52011-03-14 15:15:47 -04001582 PySys_FormatStderr("import %U # directory %R\n",
1583 name, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001584 file = get_sourcefile(pathname);
1585 if (file == NULL)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001586 return NULL;
1587 path_list = Py_BuildValue("[O]", file);
1588 if (path_list == NULL) {
1589 Py_DECREF(file);
1590 return NULL;
1591 }
1592 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001593 err = PyDict_SetItemString(d, "__file__", file);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001594 Py_DECREF(file);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001595 if (err == 0)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001596 err = PyDict_SetItemString(d, "__path__", path_list);
1597 if (err != 0) {
1598 Py_DECREF(path_list);
1599 return NULL;
1600 }
Victor Stinner533d7832011-03-14 13:22:54 -04001601 fdp = find_module(name, initstr, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001602 &bufobj, &fp, NULL);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001603 Py_DECREF(path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001604 if (fdp == NULL) {
1605 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1606 PyErr_Clear();
1607 Py_INCREF(m);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001608 return m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001609 }
1610 else
Victor Stinnerc9abda02011-03-14 13:33:46 -04001611 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001612 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001613 m = load_module(name, fp, bufobj, fdp->type, NULL);
1614 Py_XDECREF(bufobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001615 if (fp != NULL)
1616 fclose(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001617 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001618}
1619
1620
1621/* Helper to test for built-in module */
1622
1623static int
Victor Stinner95872862011-03-07 18:20:56 +01001624is_builtin(PyObject *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001625{
Victor Stinner95872862011-03-07 18:20:56 +01001626 int i, cmp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001627 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
Victor Stinner95872862011-03-07 18:20:56 +01001628 cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name);
1629 if (cmp == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001630 if (PyImport_Inittab[i].initfunc == NULL)
1631 return -1;
1632 else
1633 return 1;
1634 }
1635 }
1636 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001637}
1638
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001639
Just van Rossum52e14d62002-12-30 22:08:05 +00001640/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1641 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001642 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001643 that can handle the path item. Return None if no hook could;
1644 this tells our caller it should fall back to the builtin
1645 import mechanism. Cache the result in path_importer_cache.
1646 Returns a borrowed reference. */
1647
1648static PyObject *
1649get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001650 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001651{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001652 PyObject *importer;
1653 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001654
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001655 /* These conditions are the caller's responsibility: */
1656 assert(PyList_Check(path_hooks));
1657 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001658
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001659 nhooks = PyList_Size(path_hooks);
1660 if (nhooks < 0)
1661 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001662
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001663 importer = PyDict_GetItem(path_importer_cache, p);
1664 if (importer != NULL)
1665 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001666
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001667 /* set path_importer_cache[p] to None to avoid recursion */
1668 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1669 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001670
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001671 for (j = 0; j < nhooks; j++) {
1672 PyObject *hook = PyList_GetItem(path_hooks, j);
1673 if (hook == NULL)
1674 return NULL;
1675 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1676 if (importer != NULL)
1677 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001678
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001679 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1680 return NULL;
1681 }
1682 PyErr_Clear();
1683 }
1684 if (importer == NULL) {
1685 importer = PyObject_CallFunctionObjArgs(
1686 (PyObject *)&PyNullImporter_Type, p, NULL
1687 );
1688 if (importer == NULL) {
1689 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1690 PyErr_Clear();
1691 return Py_None;
1692 }
1693 }
1694 }
1695 if (importer != NULL) {
1696 int err = PyDict_SetItem(path_importer_cache, p, importer);
1697 Py_DECREF(importer);
1698 if (err != 0)
1699 return NULL;
1700 }
1701 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001702}
1703
Christian Heimes9cd17752007-11-18 19:35:23 +00001704PyAPI_FUNC(PyObject *)
1705PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001707
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001708 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1709 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1710 importer = get_path_importer(path_importer_cache,
1711 path_hooks, path);
1712 }
1713 }
1714 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1715 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001716}
1717
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001718/* Search the path (default sys.path) for a module. Return the
1719 corresponding filedescr struct, and (via return arguments) the
1720 pathname and an open file. Return NULL if the module is not found. */
1721
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001722#ifdef MS_COREDLL
Victor Stinner4d6c1c42011-03-08 23:49:04 +01001723extern FILE *_PyWin_FindRegisteredModule(PyObject *, struct filedescr **,
1724 PyObject **p_path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001725#endif
1726
Victor Stinner547a2a62011-03-20 03:07:28 +01001727/* Forward */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001728static int case_ok(PyObject *, Py_ssize_t, PyObject *);
Victor Stinner547a2a62011-03-20 03:07:28 +01001729static int find_init_module(PyObject *);
Just van Rossum52e14d62002-12-30 22:08:05 +00001730static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001731
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001732/* Get the path of a module: get its importer and call importer.find_module()
1733 hook, or check if the module if a package (if path/__init__.py exists).
1734
1735 -1: error: a Python error occurred
1736 0: ignore: an error occurred because of invalid data, but the error is not
1737 important enough to be reported.
1738 1: get path: module not found, but *buf contains its path
1739 2: found: *p_fd is the file descriptor (IMP_HOOK or PKG_DIRECTORY)
1740 and *buf is the path */
1741
1742static int
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001743find_module_path(PyObject *fullname, PyObject *name, PyObject *path,
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001744 PyObject *path_hooks, PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001745 PyObject **p_path, PyObject **p_loader, struct filedescr **p_fd)
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001746{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001747 Py_UCS4 buf[MAXPATHLEN+1];
Victor Stinner2fd76e42011-03-14 15:19:39 -04001748 PyObject *path_unicode, *filename;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001749 Py_ssize_t len;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001750 struct stat statbuf;
1751 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
1752
1753 if (PyUnicode_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001754 Py_INCREF(path);
1755 path_unicode = path;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001756 }
1757 else if (PyBytes_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001758 path_unicode = PyUnicode_DecodeFSDefaultAndSize(
1759 PyBytes_AS_STRING(path), PyBytes_GET_SIZE(path));
1760 if (path_unicode == NULL)
1761 return -1;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001762 }
1763 else
1764 return 0;
1765
Victor Stinner46084ba2011-10-06 02:39:42 +02001766 if (PyUnicode_READY(path_unicode))
1767 return -1;
1768
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001769 len = PyUnicode_GET_LENGTH(path_unicode);
Georg Brandl4cb0de22011-09-28 21:49:49 +02001770 if (!PyUnicode_AsUCS4(path_unicode, buf, Py_ARRAY_LENGTH(buf), 1)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001771 Py_DECREF(path_unicode);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001772 PyErr_Clear();
1773 return 0;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001774 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001775 Py_DECREF(path_unicode);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001776
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001777 if (Py_UCS4_strlen(buf) != len)
Victor Stinner2fd76e42011-03-14 15:19:39 -04001778 return 0; /* path contains '\0' */
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001779
1780 /* sys.path_hooks import hook */
1781 if (p_loader != NULL) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001782 _Py_IDENTIFIER(find_module);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001783 PyObject *importer;
1784
1785 importer = get_path_importer(path_importer_cache,
1786 path_hooks, path);
1787 if (importer == NULL) {
1788 return -1;
1789 }
1790 /* Note: importer is a borrowed reference */
1791 if (importer != Py_None) {
1792 PyObject *loader;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001793 loader = _PyObject_CallMethodId(importer,
1794 &PyId_find_module, "O", fullname);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001795 if (loader == NULL)
1796 return -1; /* error */
1797 if (loader != Py_None) {
1798 /* a loader was found */
1799 *p_loader = loader;
1800 *p_fd = &importhookdescr;
1801 return 2;
1802 }
1803 Py_DECREF(loader);
1804 return 0;
1805 }
1806 }
1807 /* no hook was found, use builtin import */
1808
1809 if (len > 0 && buf[len-1] != SEP
1810#ifdef ALTSEP
1811 && buf[len-1] != ALTSEP
1812#endif
1813 )
1814 buf[len++] = SEP;
Georg Brandl4cb0de22011-09-28 21:49:49 +02001815 if (!PyUnicode_AsUCS4(name, buf+len, Py_ARRAY_LENGTH(buf)-len, 1)) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001816 PyErr_Clear();
1817 return 0;
1818 }
1819 len += PyUnicode_GET_LENGTH(name);
Victor Stinner2fd76e42011-03-14 15:19:39 -04001820
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001821 filename = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
1822 buf, len);
Victor Stinner2fd76e42011-03-14 15:19:39 -04001823 if (filename == NULL)
1824 return -1;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001825
1826 /* Check for package import (buf holds a directory name,
1827 and there's an __init__ module in that directory */
1828#ifdef HAVE_STAT
Victor Stinner2fd76e42011-03-14 15:19:39 -04001829 if (_Py_stat(filename, &statbuf) == 0 && /* it exists */
Victor Stinnerd0296212011-03-14 14:04:10 -04001830 S_ISDIR(statbuf.st_mode)) /* it's a directory */
1831 {
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001832 int match;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001833
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001834 match = case_ok(filename, 0, name);
1835 if (match < 0) {
1836 Py_DECREF(filename);
1837 return -1;
1838 }
1839 if (match) { /* case matches */
1840 if (find_init_module(filename)) { /* and has __init__.py */
Victor Stinner2fd76e42011-03-14 15:19:39 -04001841 *p_path = filename;
Victor Stinnerd0296212011-03-14 14:04:10 -04001842 *p_fd = &fd_package;
1843 return 2;
1844 }
1845 else {
1846 int err;
Victor Stinnerd0296212011-03-14 14:04:10 -04001847 err = PyErr_WarnFormat(PyExc_ImportWarning, 1,
Victor Stinner547a2a62011-03-20 03:07:28 +01001848 "Not importing directory %R: missing __init__.py",
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001849 filename);
Victor Stinner547a2a62011-03-20 03:07:28 +01001850 if (err) {
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001851 Py_DECREF(filename);
Victor Stinnerd0296212011-03-14 14:04:10 -04001852 return -1;
Victor Stinner547a2a62011-03-20 03:07:28 +01001853 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001854 }
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001855 }
1856 }
1857#endif
Victor Stinner2fd76e42011-03-14 15:19:39 -04001858 *p_path = filename;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001859 return 1;
1860}
1861
1862/* Find a module in search_path_list. For each path, try
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001863 find_module_path() or try each _PyImport_Filetab suffix.
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001864
1865 If the module is found, return a file descriptor, write the path in
1866 *p_filename, write the pointer to the file object into *p_fp, and (if
1867 p_loader is not NULL) the loader into *p_loader.
1868
1869 Otherwise, raise an exception and return NULL. */
1870
Victor Stinner37580282011-03-20 01:34:43 +01001871static struct filedescr*
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001872find_module_path_list(PyObject *fullname, PyObject *name,
Victor Stinner37580282011-03-20 01:34:43 +01001873 PyObject *search_path_list, PyObject *path_hooks,
1874 PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001875 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001876{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001877 Py_ssize_t i, npath;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001878 struct filedescr *fdp = NULL;
1879 char *filemode;
1880 FILE *fp = NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001881 PyObject *prefix, *filename;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001882 int match;
Victor Stinner53dc7352011-03-20 01:50:21 +01001883
Victor Stinner37580282011-03-20 01:34:43 +01001884 npath = PyList_Size(search_path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001885 for (i = 0; i < npath; i++) {
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001886 PyObject *path;
1887 int ok;
1888
1889 path = PyList_GetItem(search_path_list, i);
1890 if (path == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001891 return NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001892
Victor Stinner2fd76e42011-03-14 15:19:39 -04001893 prefix = NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001894 ok = find_module_path(fullname, name, path,
1895 path_hooks, path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001896 &prefix, p_loader, &fdp);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001897 if (ok < 0)
1898 return NULL;
1899 if (ok == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 continue;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001901 if (ok == 2) {
1902 *p_path = prefix;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001903 return fdp;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001904 }
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001905
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001906 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001907 struct stat statbuf;
1908
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001909 filemode = fdp->mode;
1910 if (filemode[0] == 'U')
1911 filemode = "r" PY_STDIOTEXTMODE;
Victor Stinnerd0296212011-03-14 14:04:10 -04001912
Victor Stinner2fd76e42011-03-14 15:19:39 -04001913 filename = PyUnicode_FromFormat("%U%s", prefix, fdp->suffix);
1914 if (filename == NULL) {
1915 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001916 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001917 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001918
1919 if (Py_VerboseFlag > 1)
1920 PySys_FormatStderr("# trying %R\n", filename);
1921
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001922 if (_Py_stat(filename, &statbuf) == 0 && /* it exists */
1923 S_ISDIR(statbuf.st_mode)) /* it's a directory */
1924 {
1925 Py_DECREF(filename);
1926 continue;
1927 }
1928
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001929 fp = _Py_fopen(filename, filemode);
1930 if (fp == NULL) {
1931 Py_DECREF(filename);
Victor Stinner925ef392011-06-20 15:01:10 +02001932 if (PyErr_Occurred()) {
1933 Py_DECREF(prefix);
1934 return NULL;
1935 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001936 continue;
1937 }
1938 match = case_ok(filename, -(Py_ssize_t)strlen(fdp->suffix), name);
1939 if (match < 0) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001940 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001941 Py_DECREF(filename);
1942 return NULL;
1943 }
1944 if (match) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001945 Py_DECREF(prefix);
1946 *p_path = filename;
Victor Stinnerd0296212011-03-14 14:04:10 -04001947 *p_fp = fp;
1948 return fdp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001949 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001950 Py_DECREF(filename);
Victor Stinnerd0296212011-03-14 14:04:10 -04001951
1952 fclose(fp);
1953 fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001954 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001955 Py_DECREF(prefix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001956 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001957 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04001958 "No module named %R", name);
Victor Stinnerd0296212011-03-14 14:04:10 -04001959 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001960}
1961
Victor Stinner37580282011-03-20 01:34:43 +01001962/* Find a module:
1963
1964 - try find_module() of each sys.meta_path hook
1965 - try find_frozen()
1966 - try is_builtin()
1967 - try _PyWin_FindRegisteredModule() (Windows only)
1968 - otherwise, call find_module_path_list() with search_path_list (if not
1969 NULL) or sys.path
1970
Victor Stinner2fd76e42011-03-14 15:19:39 -04001971 fullname can be NULL, but only if p_loader is NULL.
1972
Victor Stinner37580282011-03-20 01:34:43 +01001973 Return:
1974
1975 - &fd_builtin (C_BUILTIN) if it is a builtin
1976 - &fd_frozen (PY_FROZEN) if it is frozen
Victor Stinner2fd76e42011-03-14 15:19:39 -04001977 - &fd_package (PKG_DIRECTORY) and write the filename into *p_path
Victor Stinner37580282011-03-20 01:34:43 +01001978 if it is a package
1979 - &importhookdescr (IMP_HOOK) and write the loader into *p_loader if a
1980 importer loader was found
1981 - a file descriptor (PY_SOURCE, PY_COMPILED, C_EXTENSION, PY_RESOURCE or
1982 PY_CODERESOURCE: see _PyImport_Filetab), write the filename into
Victor Stinner2fd76e42011-03-14 15:19:39 -04001983 *p_path and the pointer to the open file into *p_fp
Victor Stinner37580282011-03-20 01:34:43 +01001984 - NULL on error
1985
Victor Stinner2fd76e42011-03-14 15:19:39 -04001986 By default, *p_path, *p_fp and *p_loader (if set) are set to NULL.
1987 Eg. *p_path is set to NULL for a builtin package.
1988*/
Victor Stinner37580282011-03-20 01:34:43 +01001989
1990static struct filedescr *
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001991find_module(PyObject *fullname, PyObject *name, PyObject *search_path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001992 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Victor Stinner37580282011-03-20 01:34:43 +01001993{
1994 Py_ssize_t i, npath;
1995 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1996 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1997 PyObject *path_hooks, *path_importer_cache;
Victor Stinner37580282011-03-20 01:34:43 +01001998
Victor Stinner2fd76e42011-03-14 15:19:39 -04001999 *p_path = NULL;
Victor Stinner37580282011-03-20 01:34:43 +01002000 *p_fp = NULL;
2001 if (p_loader != NULL)
2002 *p_loader = NULL;
2003
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002004 if (PyUnicode_GET_LENGTH(name) > MAXPATHLEN) {
2005 PyErr_SetString(PyExc_OverflowError,
2006 "module name is too long");
2007 return NULL;
2008 }
2009
Victor Stinner37580282011-03-20 01:34:43 +01002010 /* sys.meta_path import hook */
2011 if (p_loader != NULL) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002012 _Py_IDENTIFIER(find_module);
Victor Stinner37580282011-03-20 01:34:43 +01002013 PyObject *meta_path;
2014
2015 meta_path = PySys_GetObject("meta_path");
2016 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinner16191322011-09-15 19:28:05 +02002017 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002018 "sys.meta_path must be a list of "
2019 "import hooks");
2020 return NULL;
2021 }
2022 Py_INCREF(meta_path); /* zap guard */
2023 npath = PyList_Size(meta_path);
2024 for (i = 0; i < npath; i++) {
2025 PyObject *loader;
2026 PyObject *hook = PyList_GetItem(meta_path, i);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002027 loader = _PyObject_CallMethodId(hook, &PyId_find_module,
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002028 "OO", fullname,
Victor Stinner37580282011-03-20 01:34:43 +01002029 search_path_list != NULL ?
2030 search_path_list : Py_None);
2031 if (loader == NULL) {
2032 Py_DECREF(meta_path);
2033 return NULL; /* true error */
2034 }
2035 if (loader != Py_None) {
2036 /* a loader was found */
2037 *p_loader = loader;
2038 Py_DECREF(meta_path);
2039 return &importhookdescr;
2040 }
2041 Py_DECREF(loader);
2042 }
2043 Py_DECREF(meta_path);
2044 }
2045
Victor Stinnerdf75a022011-03-14 13:40:04 -04002046 if (find_frozen(fullname) != NULL)
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002047 return &fd_frozen;
Victor Stinner37580282011-03-20 01:34:43 +01002048
2049 if (search_path_list == NULL) {
2050#ifdef MS_COREDLL
2051 FILE *fp;
2052 struct filedescr *fdp;
Victor Stinner37580282011-03-20 01:34:43 +01002053#endif
Victor Stinnerdf75a022011-03-14 13:40:04 -04002054 if (is_builtin(name))
Victor Stinner37580282011-03-20 01:34:43 +01002055 return &fd_builtin;
Victor Stinner37580282011-03-20 01:34:43 +01002056#ifdef MS_COREDLL
Victor Stinner2fd76e42011-03-14 15:19:39 -04002057 fp = _PyWin_FindRegisteredModule(name, &fdp, p_path);
Victor Stinner37580282011-03-20 01:34:43 +01002058 if (fp != NULL) {
Victor Stinner37580282011-03-20 01:34:43 +01002059 *p_fp = fp;
2060 return fdp;
2061 }
2062 else if (PyErr_Occurred())
2063 return NULL;
2064#endif
Victor Stinner37580282011-03-20 01:34:43 +01002065 search_path_list = PySys_GetObject("path");
2066 }
2067
2068 if (search_path_list == NULL || !PyList_Check(search_path_list)) {
Victor Stinner16191322011-09-15 19:28:05 +02002069 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002070 "sys.path must be a list of directory names");
2071 return NULL;
2072 }
2073
2074 path_hooks = PySys_GetObject("path_hooks");
2075 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinner16191322011-09-15 19:28:05 +02002076 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002077 "sys.path_hooks must be a list of "
2078 "import hooks");
2079 return NULL;
2080 }
2081 path_importer_cache = PySys_GetObject("path_importer_cache");
2082 if (path_importer_cache == NULL ||
2083 !PyDict_Check(path_importer_cache)) {
Victor Stinner16191322011-09-15 19:28:05 +02002084 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002085 "sys.path_importer_cache must be a dict");
2086 return NULL;
2087 }
2088
2089 return find_module_path_list(fullname, name,
2090 search_path_list, path_hooks,
2091 path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04002092 p_path, p_fp, p_loader);
Victor Stinner37580282011-03-20 01:34:43 +01002093}
2094
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002095/* case_bytes(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00002096 * The arguments here are tricky, best shown by example:
2097 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
2098 * ^ ^ ^ ^
2099 * |--------------------- buf ---------------------|
2100 * |------------------- len ------------------|
2101 * |------ name -------|
2102 * |----- namelen -----|
2103 * buf is the full path, but len only counts up to (& exclusive of) the
2104 * extension. name is the module name, also exclusive of extension.
2105 *
2106 * We've already done a successful stat() or fopen() on buf, so know that
2107 * there's some match, possibly case-insensitive.
2108 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002109 * case_bytes() is to return 1 if there's a case-sensitive match for
2110 * name, else 0. case_bytes() is also to return 1 if envar PYTHONCASEOK
Tim Peters50d8d372001-02-28 05:34:27 +00002111 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00002112 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002113 * case_bytes() is used to implement case-sensitive import semantics even
Tim Peters50d8d372001-02-28 05:34:27 +00002114 * on platforms with case-insensitive filesystems. It's trivial to implement
2115 * for case-sensitive filesystems. It's pretty much a cross-platform
2116 * nightmare for systems with case-insensitive filesystems.
2117 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00002118
Tim Peters50d8d372001-02-28 05:34:27 +00002119/* First we may need a pile of platform-specific header files; the sequence
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002120 * of #if's here should match the sequence in the body of case_bytes().
Tim Peters50d8d372001-02-28 05:34:27 +00002121 */
Jason Tishler7961aa62005-05-20 00:56:54 +00002122#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002123#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00002124
Tim Peters50d8d372001-02-28 05:34:27 +00002125#elif defined(DJGPP)
2126#include <dir.h>
2127
Jason Tishler7961aa62005-05-20 00:56:54 +00002128#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00002129#include <sys/types.h>
2130#include <dirent.h>
2131
Andrew MacIntyred9400542002-02-26 11:41:34 +00002132#elif defined(PYOS_OS2)
2133#define INCL_DOS
2134#define INCL_DOSERRORS
2135#define INCL_NOPMAPI
2136#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00002137#endif
2138
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002139#if defined(DJGPP) \
2140 || ((defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) \
2141 && defined(HAVE_DIRENT_H)) \
2142 || defined(PYOS_OS2)
2143# define USE_CASE_OK_BYTES
2144#endif
2145
2146
2147#ifdef USE_CASE_OK_BYTES
Guido van Rossum0980bd91998-02-13 17:18:36 +00002148static int
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002149case_bytes(char *buf, Py_ssize_t len, Py_ssize_t namelen, const char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002150{
Tim Peters50d8d372001-02-28 05:34:27 +00002151/* Pick a platform-specific implementation; the sequence of #if's here should
2152 * match the sequence just above.
2153 */
2154
Tim Peters50d8d372001-02-28 05:34:27 +00002155/* DJGPP */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002156#if defined(DJGPP)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002157 struct ffblk ffblk;
2158 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00002159
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002160 if (Py_GETENV("PYTHONCASEOK") != NULL)
2161 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00002162
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002163 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
2164 if (done) {
2165 PyErr_Format(PyExc_NameError,
2166 "Can't find file for module %.100s\n(filename %.300s)",
2167 name, buf);
Victor Stinner9c61e242011-03-22 01:22:27 +01002168 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002169 }
2170 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002171
Jason Tishler7961aa62005-05-20 00:56:54 +00002172/* new-fangled macintosh (macosx) or Cygwin */
2173#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002174 DIR *dirp;
2175 struct dirent *dp;
2176 char dirname[MAXPATHLEN + 1];
2177 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00002178
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002179 if (Py_GETENV("PYTHONCASEOK") != NULL)
2180 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00002181
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002182 /* Copy the dir component into dirname; substitute "." if empty */
2183 if (dirlen <= 0) {
2184 dirname[0] = '.';
2185 dirname[1] = '\0';
2186 }
2187 else {
2188 assert(dirlen <= MAXPATHLEN);
2189 memcpy(dirname, buf, dirlen);
2190 dirname[dirlen] = '\0';
2191 }
2192 /* Open the directory and search the entries for an exact match. */
2193 dirp = opendir(dirname);
2194 if (dirp) {
2195 char *nameWithExt = buf + len - namelen;
2196 while ((dp = readdir(dirp)) != NULL) {
2197 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00002198#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002199 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00002200#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002201 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00002202#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002203 if (thislen >= namelen &&
2204 strcmp(dp->d_name, nameWithExt) == 0) {
2205 (void)closedir(dirp);
2206 return 1; /* Found */
2207 }
2208 }
2209 (void)closedir(dirp);
2210 }
2211 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00002212
Andrew MacIntyred9400542002-02-26 11:41:34 +00002213/* OS/2 */
2214#elif defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002215 HDIR hdir = 1;
2216 ULONG srchcnt = 1;
2217 FILEFINDBUF3 ffbuf;
2218 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002219
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002220 if (Py_GETENV("PYTHONCASEOK") != NULL)
2221 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002222
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002223 rc = DosFindFirst(buf,
2224 &hdir,
2225 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
2226 &ffbuf, sizeof(ffbuf),
2227 &srchcnt,
2228 FIL_STANDARD);
2229 if (rc != NO_ERROR)
2230 return 0;
2231 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002232
Tim Peters50d8d372001-02-28 05:34:27 +00002233/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
2234#else
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002235# error "USE_CASE_OK_BYTES is not correctly defined"
2236#endif
2237}
2238#endif
2239
2240/*
2241 * Check if a filename case matchs the name case. We've already done a
2242 * successful stat() or fopen() on buf, so know that there's some match,
2243 * possibly case-insensitive.
2244 *
2245 * case_ok() is to return 1 if there's a case-sensitive match for name, 0 if it
2246 * the filename doesn't match, or -1 on error. case_ok() is also to return 1
2247 * if envar PYTHONCASEOK exists.
2248 *
2249 * case_ok() is used to implement case-sensitive import semantics even
2250 * on platforms with case-insensitive filesystems. It's trivial to implement
2251 * for case-sensitive filesystems. It's pretty much a cross-platform
2252 * nightmare for systems with case-insensitive filesystems.
2253 */
2254
2255static int
2256case_ok(PyObject *filename, Py_ssize_t prefix_delta, PyObject *name)
2257{
2258#ifdef MS_WINDOWS
2259 WIN32_FIND_DATAW data;
2260 HANDLE h;
2261 int cmp;
Victor Stinnerbeac78b2011-10-11 21:55:01 +02002262 wchar_t *wname;
Victor Stinner8c981892011-10-11 22:27:13 +02002263 Py_ssize_t wname_len;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002264
2265 if (Py_GETENV("PYTHONCASEOK") != NULL)
2266 return 1;
2267
2268 h = FindFirstFileW(PyUnicode_AS_UNICODE(filename), &data);
2269 if (h == INVALID_HANDLE_VALUE) {
2270 PyErr_Format(PyExc_NameError,
2271 "Can't find file for module %R\n(filename %R)",
2272 name, filename);
2273 return 0;
2274 }
2275 FindClose(h);
Victor Stinnerbeac78b2011-10-11 21:55:01 +02002276
2277 wname = PyUnicode_AsUnicodeAndSize(name, &wname_len);
2278 if (wname == NULL)
2279 return -1;
2280
2281 cmp = wcsncmp(data.cFileName, wname, wname_len);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002282 return cmp == 0;
2283#elif defined(USE_CASE_OK_BYTES)
2284 int match;
2285 PyObject *filebytes, *namebytes;
2286 filebytes = PyUnicode_EncodeFSDefault(filename);
2287 if (filebytes == NULL)
2288 return -1;
2289 namebytes = PyUnicode_EncodeFSDefault(name);
2290 if (namebytes == NULL) {
2291 Py_DECREF(filebytes);
2292 return -1;
2293 }
2294 match = case_bytes(
2295 PyBytes_AS_STRING(filebytes),
2296 PyBytes_GET_SIZE(filebytes) + prefix_delta,
Victor Stinner1304f2d2011-03-20 04:28:55 +01002297 PyBytes_GET_SIZE(namebytes),
2298 PyBytes_AS_STRING(namebytes));
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002299 Py_DECREF(filebytes);
2300 Py_DECREF(namebytes);
2301 return match;
2302#else
2303 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002304 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002305
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002306#endif
Tim Peters50d8d372001-02-28 05:34:27 +00002307}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002308
Guido van Rossum197346f1997-10-31 18:38:52 +00002309#ifdef HAVE_STAT
Victor Stinner4f4402c2010-08-14 14:50:26 +00002310
Victor Stinner547a2a62011-03-20 03:07:28 +01002311/* Helper to look for __init__.py or __init__.py[co] in potential package.
2312 Return 1 if __init__ was found, 0 if not, or -1 on error. */
Guido van Rossum197346f1997-10-31 18:38:52 +00002313static int
Victor Stinner547a2a62011-03-20 03:07:28 +01002314find_init_module(PyObject *directory)
Guido van Rossum197346f1997-10-31 18:38:52 +00002315{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002316 struct stat statbuf;
Victor Stinner547a2a62011-03-20 03:07:28 +01002317 PyObject *filename;
2318 int match;
Guido van Rossum197346f1997-10-31 18:38:52 +00002319
Victor Stinner547a2a62011-03-20 03:07:28 +01002320 filename = PyUnicode_FromFormat("%U%c__init__.py", directory, SEP);
2321 if (filename == NULL)
2322 return -1;
2323 if (_Py_stat(filename, &statbuf) == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002324 /* 3=len(".py") */
2325 match = case_ok(filename, -3, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002326 if (match < 0) {
2327 Py_DECREF(filename);
2328 return -1;
2329 }
2330 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002331 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002332 return 1;
2333 }
2334 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002335 Py_DECREF(filename);
2336
2337 filename = PyUnicode_FromFormat("%U%c__init__.py%c",
2338 directory, SEP, Py_OptimizeFlag ? 'o' : 'c');
2339 if (filename == NULL)
2340 return -1;
2341 if (_Py_stat(filename, &statbuf) == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002342 /* 4=len(".pyc") */
2343 match = case_ok(filename, -4, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002344 if (match < 0) {
2345 Py_DECREF(filename);
2346 return -1;
2347 }
2348 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002349 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002350 return 1;
2351 }
2352 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002353 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002354 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00002355}
Guido van Rossum48a680c2001-03-02 06:34:14 +00002356
Guido van Rossum197346f1997-10-31 18:38:52 +00002357#endif /* HAVE_STAT */
2358
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002359
Victor Stinner95872862011-03-07 18:20:56 +01002360static int init_builtin(PyObject *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002361
Victor Stinner44c6c152010-08-09 00:59:10 +00002362static PyObject*
Victor Stinner95872862011-03-07 18:20:56 +01002363load_builtin(PyObject *name, int type)
Victor Stinner44c6c152010-08-09 00:59:10 +00002364{
2365 PyObject *m, *modules;
2366 int err;
2367
Victor Stinner44c6c152010-08-09 00:59:10 +00002368 if (type == C_BUILTIN)
2369 err = init_builtin(name);
2370 else
Victor Stinner95872862011-03-07 18:20:56 +01002371 err = PyImport_ImportFrozenModuleObject(name);
Victor Stinner44c6c152010-08-09 00:59:10 +00002372 if (err < 0)
2373 return NULL;
2374 if (err == 0) {
2375 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002376 "Purported %s module %R not found",
2377 type == C_BUILTIN ? "builtin" : "frozen",
Victor Stinner44c6c152010-08-09 00:59:10 +00002378 name);
2379 return NULL;
2380 }
2381
2382 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +01002383 m = PyDict_GetItem(modules, name);
Victor Stinner44c6c152010-08-09 00:59:10 +00002384 if (m == NULL) {
2385 PyErr_Format(
2386 PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002387 "%s module %R not properly initialized",
2388 type == C_BUILTIN ? "builtin" : "frozen",
Victor Stinner44c6c152010-08-09 00:59:10 +00002389 name);
2390 return NULL;
2391 }
2392 Py_INCREF(m);
2393 return m;
2394}
2395
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002396/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002397 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002398
Guido van Rossum79f25d91997-04-29 20:08:16 +00002399static PyObject *
Victor Stinner41c5fec2011-03-13 21:46:30 -04002400load_module(PyObject *name, FILE *fp, PyObject *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002401{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002402 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002403
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002404 /* First check that there's an open file (if we need one) */
2405 switch (type) {
2406 case PY_SOURCE:
2407 case PY_COMPILED:
2408 if (fp == NULL) {
2409 PyErr_Format(PyExc_ValueError,
Victor Stinner41c5fec2011-03-13 21:46:30 -04002410 "file object required for import (type code %d)",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002411 type);
2412 return NULL;
2413 }
2414 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002415
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002416 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002417
Victor Stinner41c5fec2011-03-13 21:46:30 -04002418 case PY_SOURCE:
2419 m = load_source_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002420 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002421
Victor Stinner41c5fec2011-03-13 21:46:30 -04002422 case PY_COMPILED:
2423 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002424 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002425
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002426#ifdef HAVE_DYNAMIC_LOADING
Victor Stinner41c5fec2011-03-13 21:46:30 -04002427 case C_EXTENSION:
2428 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002429 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002430#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002431
Victor Stinner41c5fec2011-03-13 21:46:30 -04002432 case PKG_DIRECTORY:
2433 m = load_package(name, pathname);
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 C_BUILTIN:
Victor Stinner41c5fec2011-03-13 21:46:30 -04002437 case PY_FROZEN:
2438 m = load_builtin(name, type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002439 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002440
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002441 case IMP_HOOK: {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002442 _Py_IDENTIFIER(load_module);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002443 if (loader == NULL) {
2444 PyErr_SetString(PyExc_ImportError,
2445 "import hook without loader");
2446 return NULL;
2447 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002448 m = _PyObject_CallMethodId(loader, &PyId_load_module, "O", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002449 break;
2450 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002451
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002452 default:
2453 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04002454 "Don't know how to import %R (type code %d)",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002455 name, type);
2456 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002457
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002458 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002459
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002460 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002461}
2462
2463
2464/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00002465 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002466 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002467
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002468static int
Victor Stinner95872862011-03-07 18:20:56 +01002469init_builtin(PyObject *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002470{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002471 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002472
Victor Stinner95872862011-03-07 18:20:56 +01002473 if (_PyImport_FindExtensionObject(name, name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002474 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002475
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002476 for (p = PyImport_Inittab; p->name != NULL; p++) {
2477 PyObject *mod;
Victor Stinner95872862011-03-07 18:20:56 +01002478 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002479 if (p->initfunc == NULL) {
2480 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002481 "Cannot re-init internal module %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002482 name);
2483 return -1;
2484 }
2485 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +01002486 PySys_FormatStderr("import %U # builtin\n", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002487 mod = (*p->initfunc)();
2488 if (mod == 0)
2489 return -1;
Victor Stinner95872862011-03-07 18:20:56 +01002490 if (_PyImport_FixupExtensionObject(mod, name, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002491 return -1;
2492 /* FixupExtension has put the module into sys.modules,
2493 so we can release our own reference. */
2494 Py_DECREF(mod);
2495 return 1;
2496 }
2497 }
2498 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002499}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002500
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002501
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002502/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002503
Guido van Rossumcfd0a221996-06-17 17:06:34 +00002504static struct _frozen *
Victor Stinner53dc7352011-03-20 01:50:21 +01002505find_frozen(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002506{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002507 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002508
Victor Stinner53dc7352011-03-20 01:50:21 +01002509 if (name == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002510 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00002511
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002512 for (p = PyImport_FrozenModules; ; p++) {
2513 if (p->name == NULL)
2514 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01002515 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002516 break;
2517 }
2518 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002519}
2520
Guido van Rossum79f25d91997-04-29 20:08:16 +00002521static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002522get_frozen_object(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002523{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002524 struct _frozen *p = find_frozen(name);
2525 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002527 if (p == NULL) {
2528 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002529 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002530 name);
2531 return NULL;
2532 }
2533 if (p->code == NULL) {
2534 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002535 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002536 name);
2537 return NULL;
2538 }
2539 size = p->size;
2540 if (size < 0)
2541 size = -size;
2542 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002543}
2544
Brett Cannon8d110132009-03-15 02:20:16 +00002545static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002546is_frozen_package(PyObject *name)
Brett Cannon8d110132009-03-15 02:20:16 +00002547{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002548 struct _frozen *p = find_frozen(name);
2549 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00002550
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002551 if (p == NULL) {
2552 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002553 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002554 name);
2555 return NULL;
2556 }
Brett Cannon8d110132009-03-15 02:20:16 +00002557
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002558 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00002559
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002560 if (size < 0)
2561 Py_RETURN_TRUE;
2562 else
2563 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00002564}
2565
2566
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002567/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00002568 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002569 an exception set if the initialization failed.
2570 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002571
2572int
Victor Stinner53dc7352011-03-20 01:50:21 +01002573PyImport_ImportFrozenModuleObject(PyObject *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002574{
Victor Stinner53dc7352011-03-20 01:50:21 +01002575 struct _frozen *p;
2576 PyObject *co, *m, *path;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002577 int ispackage;
2578 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002579
Victor Stinner53dc7352011-03-20 01:50:21 +01002580 p = find_frozen(name);
2581
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002582 if (p == NULL)
2583 return 0;
2584 if (p->code == NULL) {
2585 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002586 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002587 name);
2588 return -1;
2589 }
2590 size = p->size;
2591 ispackage = (size < 0);
2592 if (ispackage)
2593 size = -size;
2594 if (Py_VerboseFlag)
Victor Stinner53dc7352011-03-20 01:50:21 +01002595 PySys_FormatStderr("import %U # frozen%s\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002596 name, ispackage ? " package" : "");
2597 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2598 if (co == NULL)
2599 return -1;
2600 if (!PyCode_Check(co)) {
2601 PyErr_Format(PyExc_TypeError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002602 "frozen object %R is not a code object",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002603 name);
2604 goto err_return;
2605 }
2606 if (ispackage) {
2607 /* Set __path__ to the package name */
Victor Stinner53dc7352011-03-20 01:50:21 +01002608 PyObject *d, *l;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002609 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01002610 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002611 if (m == NULL)
2612 goto err_return;
2613 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002614 l = PyList_New(1);
2615 if (l == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002616 goto err_return;
2617 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002618 Py_INCREF(name);
2619 PyList_SET_ITEM(l, 0, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002620 err = PyDict_SetItemString(d, "__path__", l);
2621 Py_DECREF(l);
2622 if (err != 0)
2623 goto err_return;
2624 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002625 path = PyUnicode_FromString("<frozen>");
2626 if (path == NULL)
2627 goto err_return;
2628 m = PyImport_ExecCodeModuleObject(name, co, path, NULL);
2629 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002630 if (m == NULL)
2631 goto err_return;
2632 Py_DECREF(co);
2633 Py_DECREF(m);
2634 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002635err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002636 Py_DECREF(co);
2637 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002638}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002639
Victor Stinner53dc7352011-03-20 01:50:21 +01002640int
2641PyImport_ImportFrozenModule(char *name)
2642{
2643 PyObject *nameobj;
2644 int ret;
2645 nameobj = PyUnicode_InternFromString(name);
2646 if (nameobj == NULL)
2647 return -1;
2648 ret = PyImport_ImportFrozenModuleObject(nameobj);
2649 Py_DECREF(nameobj);
2650 return ret;
2651}
2652
Guido van Rossum74e6a111994-08-29 12:54:38 +00002653
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002654/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002655 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002656
Guido van Rossum79f25d91997-04-29 20:08:16 +00002657PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002658PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002659{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002660 PyObject *pname;
2661 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002662
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002663 pname = PyUnicode_FromString(name);
2664 if (pname == NULL)
2665 return NULL;
2666 result = PyImport_Import(pname);
2667 Py_DECREF(pname);
2668 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002669}
2670
Christian Heimes072c0f12008-01-03 23:01:04 +00002671/* Import a module without blocking
2672 *
2673 * At first it tries to fetch the module from sys.modules. If the module was
2674 * never loaded before it loads it with PyImport_ImportModule() unless another
2675 * thread holds the import lock. In the latter case the function raises an
2676 * ImportError instead of blocking.
2677 *
2678 * Returns the module object with incremented ref count.
2679 */
2680PyObject *
2681PyImport_ImportModuleNoBlock(const char *name)
2682{
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002683 PyObject *nameobj, *modules, *result;
Victor Stinner0af03062011-09-02 00:11:43 +02002684#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002685 long me;
Victor Stinner0af03062011-09-02 00:11:43 +02002686#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002687
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002688 /* Try to get the module from sys.modules[name] */
2689 modules = PyImport_GetModuleDict();
2690 if (modules == NULL)
2691 return NULL;
Christian Heimes072c0f12008-01-03 23:01:04 +00002692
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002693 nameobj = PyUnicode_FromString(name);
2694 if (nameobj == NULL)
2695 return NULL;
2696 result = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002697 if (result != NULL) {
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002698 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002699 Py_INCREF(result);
2700 return result;
2701 }
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002702 PyErr_Clear();
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002703#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002704 /* check the import lock
2705 * me might be -1 but I ignore the error here, the lock function
2706 * takes care of the problem */
2707 me = PyThread_get_thread_ident();
2708 if (import_lock_thread == -1 || import_lock_thread == me) {
2709 /* no thread or me is holding the lock */
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002710 result = PyImport_Import(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002711 }
2712 else {
2713 PyErr_Format(PyExc_ImportError,
Victor Stinnerc24c8102011-03-13 22:38:06 -04002714 "Failed to import %R because the import lock"
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002715 "is held by another thread.",
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002716 nameobj);
2717 result = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002718 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002719#else
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002720 result = PyImport_Import(nameobj);
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002721#endif
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002722 Py_DECREF(nameobj);
2723 return result;
Christian Heimes072c0f12008-01-03 23:01:04 +00002724}
2725
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002726/* Forward declarations for helper routines */
Victor Stinner974389d2011-03-15 09:33:57 +01002727static PyObject *get_parent(PyObject *globals,
2728 PyObject **p_name,
2729 int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002730static PyObject *load_next(PyObject *mod, PyObject *altmod,
Victor Stinner974389d2011-03-15 09:33:57 +01002731 PyObject *inputname, PyObject **p_outputname,
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002732 Py_UCS4 *buf, Py_ssize_t *p_buflen,
Victor Stinner974389d2011-03-15 09:33:57 +01002733 Py_ssize_t bufsize);
2734static int mark_miss(PyObject *name);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002735static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Victor Stinner974389d2011-03-15 09:33:57 +01002736 PyObject *buf, int recursive);
2737static PyObject * import_submodule(PyObject *mod, PyObject *name,
2738 PyObject *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002739
2740/* The Magnum Opus of dotted-name import :-) */
2741
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002742static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01002743import_module_level(PyObject *name, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002744 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002745{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002746 Py_UCS4 buf[MAXPATHLEN+1];
Victor Stinner974389d2011-03-15 09:33:57 +01002747 Py_ssize_t buflen;
2748 Py_ssize_t bufsize = MAXPATHLEN+1;
2749 PyObject *parent, *head, *next, *tail, *inputname, *outputname;
2750 PyObject *parent_name, *ensure_name;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002751 Py_ssize_t sep, altsep;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002752
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002753 if (PyUnicode_READY(name))
2754 return NULL;
Victor Stinner974389d2011-03-15 09:33:57 +01002755
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002756 sep = PyUnicode_FindChar(name, SEP, 0, PyUnicode_GET_LENGTH(name), 1);
2757 if (sep == -2)
2758 return NULL;
Victor Stinner974389d2011-03-15 09:33:57 +01002759#ifdef ALTSEP
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002760 altsep = PyUnicode_FindChar(name, ALTSEP, 0, PyUnicode_GET_LENGTH(name), 1);
2761 if (altsep == -2)
2762 return NULL;
2763#else
2764 altsep = -1;
Christian Heimes454f37b2008-01-10 00:10:02 +00002765#endif
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002766 if (sep != -1 || altsep != -1)
2767 {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002768 PyErr_SetString(PyExc_ImportError,
2769 "Import by filename is not supported.");
2770 return NULL;
2771 }
Christian Heimes454f37b2008-01-10 00:10:02 +00002772
Victor Stinner974389d2011-03-15 09:33:57 +01002773 parent = get_parent(globals, &parent_name, level);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002774 if (parent == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002775 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002776 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002777
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002778 if (PyUnicode_READY(parent_name))
2779 return NULL;
2780 buflen = PyUnicode_GET_LENGTH(parent_name);
Georg Brandl4cb0de22011-09-28 21:49:49 +02002781 if (!PyUnicode_AsUCS4(parent_name, buf, Py_ARRAY_LENGTH(buf), 1)) {
Victor Stinner974389d2011-03-15 09:33:57 +01002782 Py_DECREF(parent_name);
2783 PyErr_SetString(PyExc_ValueError,
2784 "Module name too long");
2785 return NULL;
2786 }
Victor Stinner974389d2011-03-15 09:33:57 +01002787 Py_DECREF(parent_name);
2788
2789 head = load_next(parent, level < 0 ? Py_None : parent, name, &outputname,
2790 buf, &buflen, bufsize);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002791 if (head == NULL)
2792 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002793
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002794 tail = head;
2795 Py_INCREF(tail);
Victor Stinner974389d2011-03-15 09:33:57 +01002796
2797 if (outputname != NULL) {
2798 while (1) {
2799 inputname = outputname;
2800 next = load_next(tail, tail, inputname, &outputname,
2801 buf, &buflen, bufsize);
2802 Py_DECREF(tail);
2803 Py_DECREF(inputname);
2804 if (next == NULL) {
2805 Py_DECREF(head);
2806 return NULL;
2807 }
2808 tail = next;
2809
2810 if (outputname == NULL) {
2811 break;
2812 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002813 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002814 }
2815 if (tail == Py_None) {
2816 /* If tail is Py_None, both get_parent and load_next found
2817 an empty module name: someone called __import__("") or
2818 doctored faulty bytecode */
2819 Py_DECREF(tail);
2820 Py_DECREF(head);
Victor Stinner974389d2011-03-15 09:33:57 +01002821 PyErr_SetString(PyExc_ValueError, "Empty module name");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002822 return NULL;
2823 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002824
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002825 if (fromlist != NULL) {
2826 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2827 fromlist = NULL;
2828 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002829
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002830 if (fromlist == NULL) {
2831 Py_DECREF(tail);
2832 return head;
2833 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002834
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002835 Py_DECREF(head);
Victor Stinner974389d2011-03-15 09:33:57 +01002836
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002837 ensure_name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
2838 buf, Py_UCS4_strlen(buf));
Victor Stinner974389d2011-03-15 09:33:57 +01002839 if (ensure_name == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002840 Py_DECREF(tail);
2841 return NULL;
2842 }
Victor Stinner974389d2011-03-15 09:33:57 +01002843 if (!ensure_fromlist(tail, fromlist, ensure_name, 0)) {
2844 Py_DECREF(tail);
2845 Py_DECREF(ensure_name);
2846 return NULL;
2847 }
2848 Py_DECREF(ensure_name);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002849
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002850 return tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002851}
2852
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002853PyObject *
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002854PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
2855 PyObject *locals, PyObject *fromlist,
2856 int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002857{
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002858 PyObject *mod;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002859 _PyImport_AcquireLock();
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002860 mod = import_module_level(name, globals, locals, fromlist, level);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002861 if (_PyImport_ReleaseLock() < 0) {
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002862 Py_XDECREF(mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002863 PyErr_SetString(PyExc_RuntimeError,
2864 "not holding the import lock");
2865 return NULL;
2866 }
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002867 return mod;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002868}
2869
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002870PyObject *
Benjamin Peterson04778a82011-05-25 09:29:00 -05002871PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002872 PyObject *fromlist, int level)
2873{
2874 PyObject *nameobj, *mod;
2875 nameobj = PyUnicode_FromString(name);
2876 if (nameobj == NULL)
2877 return NULL;
2878 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
2879 fromlist, level);
2880 Py_DECREF(nameobj);
2881 return mod;
2882}
2883
2884
Fred Drake87590902004-05-28 20:21:36 +00002885/* Return the package that an import is being performed in. If globals comes
2886 from the module foo.bar.bat (not itself a package), this returns the
2887 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002888 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002889
Victor Stinner974389d2011-03-15 09:33:57 +01002890 The name of the returned package is returned in *p_name.
Fred Drake87590902004-05-28 20:21:36 +00002891
2892 If globals doesn't come from a package or a module in a package, or a
2893 corresponding entry is not found in sys.modules, Py_None is returned.
2894*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002895static PyObject *
Victor Stinner9599de52011-03-13 22:38:38 -04002896get_parent(PyObject *globals, PyObject **p_name, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002897{
Victor Stinner974389d2011-03-15 09:33:57 +01002898 PyObject *nameobj;
2899
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002900 static PyObject *namestr = NULL;
2901 static PyObject *pathstr = NULL;
2902 static PyObject *pkgstr = NULL;
2903 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2904 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002905
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002906 if (globals == NULL || !PyDict_Check(globals) || !level)
Victor Stinner974389d2011-03-15 09:33:57 +01002907 goto return_none;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002908
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002909 if (namestr == NULL) {
2910 namestr = PyUnicode_InternFromString("__name__");
2911 if (namestr == NULL)
2912 return NULL;
2913 }
2914 if (pathstr == NULL) {
2915 pathstr = PyUnicode_InternFromString("__path__");
2916 if (pathstr == NULL)
2917 return NULL;
2918 }
2919 if (pkgstr == NULL) {
2920 pkgstr = PyUnicode_InternFromString("__package__");
2921 if (pkgstr == NULL)
2922 return NULL;
2923 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002924
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002925 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002926
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002927 if ((pkgname != NULL) && (pkgname != Py_None)) {
2928 /* __package__ is set, so use it */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002929 if (!PyUnicode_Check(pkgname)) {
2930 PyErr_SetString(PyExc_ValueError,
2931 "__package__ set to non-string");
2932 return NULL;
2933 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002934 if (PyUnicode_GET_LENGTH(pkgname) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002935 if (level > 0) {
2936 PyErr_SetString(PyExc_ValueError,
2937 "Attempted relative import in non-package");
2938 return NULL;
2939 }
Victor Stinner974389d2011-03-15 09:33:57 +01002940 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002941 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002942 Py_INCREF(pkgname);
2943 nameobj = pkgname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002944 } else {
2945 /* __package__ not set, so figure it out and set it */
2946 modname = PyDict_GetItem(globals, namestr);
2947 if (modname == NULL || !PyUnicode_Check(modname))
Victor Stinner974389d2011-03-15 09:33:57 +01002948 goto return_none;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00002949
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002950 modpath = PyDict_GetItem(globals, pathstr);
2951 if (modpath != NULL) {
2952 /* __path__ is set, so modname is already the package name */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002953 int error;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002954
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002955 error = PyDict_SetItem(globals, pkgstr, modname);
2956 if (error) {
2957 PyErr_SetString(PyExc_ValueError,
2958 "Could not set __package__");
2959 return NULL;
2960 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002961 Py_INCREF(modname);
2962 nameobj = modname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002963 } else {
2964 /* Normal module, so work out the package name if any */
Victor Stinner974389d2011-03-15 09:33:57 +01002965 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002966 len = PyUnicode_FindChar(modname, '.',
2967 0, PyUnicode_GET_LENGTH(modname), -1);
2968 if (len == -2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002969 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002970 if (len < 0) {
2971 if (level > 0) {
2972 PyErr_SetString(PyExc_ValueError,
2973 "Attempted relative import in non-package");
2974 return NULL;
2975 }
2976 if (PyDict_SetItem(globals, pkgstr, Py_None)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002977 PyErr_SetString(PyExc_ValueError,
2978 "Could not set __package__");
2979 return NULL;
2980 }
Victor Stinner974389d2011-03-15 09:33:57 +01002981 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002982 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002983 pkgname = PyUnicode_Substring(modname, 0, len);
2984 if (pkgname == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002985 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002986 if (PyDict_SetItem(globals, pkgstr, pkgname)) {
2987 Py_DECREF(pkgname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002988 PyErr_SetString(PyExc_ValueError,
2989 "Could not set __package__");
2990 return NULL;
2991 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002992 nameobj = pkgname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002993 }
2994 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002995 if (level > 1) {
2996 Py_ssize_t dot, end = PyUnicode_GET_LENGTH(nameobj);
2997 PyObject *newname;
2998 while (--level > 0) {
2999 dot = PyUnicode_FindChar(nameobj, '.', 0, end, -1);
3000 if (dot == -2) {
3001 Py_DECREF(nameobj);
3002 return NULL;
3003 }
3004 if (dot < 0) {
3005 Py_DECREF(nameobj);
3006 PyErr_SetString(PyExc_ValueError,
3007 "Attempted relative import beyond "
3008 "toplevel package");
3009 return NULL;
3010 }
3011 end = dot;
3012 }
3013 newname = PyUnicode_Substring(nameobj, 0, end);
3014 Py_DECREF(nameobj);
3015 if (newname == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003016 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003017 nameobj = newname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003018 }
Victor Stinner974389d2011-03-15 09:33:57 +01003019
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003020 modules = PyImport_GetModuleDict();
Victor Stinner974389d2011-03-15 09:33:57 +01003021 parent = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003022 if (parent == NULL) {
Victor Stinner974389d2011-03-15 09:33:57 +01003023 int err;
3024
3025 if (orig_level >= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003026 PyErr_Format(PyExc_SystemError,
Victor Stinner974389d2011-03-15 09:33:57 +01003027 "Parent module %R not loaded, "
3028 "cannot perform relative import", nameobj);
3029 Py_DECREF(nameobj);
3030 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003031 }
Victor Stinner974389d2011-03-15 09:33:57 +01003032
3033 err = PyErr_WarnFormat(
3034 PyExc_RuntimeWarning, 1,
3035 "Parent module %R not found while handling absolute import",
3036 nameobj);
3037 Py_DECREF(nameobj);
3038 if (err)
3039 return NULL;
3040
3041 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003042 }
Victor Stinner974389d2011-03-15 09:33:57 +01003043 *p_name = nameobj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003044 return parent;
3045 /* We expect, but can't guarantee, if parent != None, that:
Victor Stinner974389d2011-03-15 09:33:57 +01003046 - parent.__name__ == name
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003047 - parent.__dict__ is globals
3048 If this is violated... Who cares? */
Victor Stinner974389d2011-03-15 09:33:57 +01003049
3050return_none:
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003051 nameobj = PyUnicode_New(0, 0);
Victor Stinner974389d2011-03-15 09:33:57 +01003052 if (nameobj == NULL)
3053 return NULL;
3054 *p_name = nameobj;
3055 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003056}
3057
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003058/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003059static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01003060load_next(PyObject *mod, PyObject *altmod,
3061 PyObject *inputname, PyObject **p_outputname,
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003062 Py_UCS4 *buf, Py_ssize_t *p_buflen, Py_ssize_t bufsize)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003063{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003064 Py_UCS4 *dot;
Victor Stinner974389d2011-03-15 09:33:57 +01003065 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003066 Py_UCS4 *p;
Victor Stinner974389d2011-03-15 09:33:57 +01003067 PyObject *fullname, *name, *result, *mark_name;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003068 Py_UCS4 *nameuni;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003069
Victor Stinner974389d2011-03-15 09:33:57 +01003070 *p_outputname = NULL;
3071
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003072 if (PyUnicode_GET_LENGTH(inputname) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003073 /* completely empty module name should only happen in
3074 'from . import' (or '__import__("")')*/
3075 Py_INCREF(mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003076 return mod;
3077 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00003078
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003079 nameuni = PyUnicode_AsUCS4Copy(inputname);
Victor Stinner974389d2011-03-15 09:33:57 +01003080 if (nameuni == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003081 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003082
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003083 dot = Py_UCS4_strchr(nameuni, '.');
Victor Stinner974389d2011-03-15 09:33:57 +01003084 if (dot != NULL) {
3085 len = dot - nameuni;
3086 if (len == 0) {
3087 PyErr_SetString(PyExc_ValueError,
3088 "Empty module name");
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003089 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003090 }
3091 }
3092 else
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003093 len = PyUnicode_GET_LENGTH(inputname);
Victor Stinner974389d2011-03-15 09:33:57 +01003094
3095 if (*p_buflen+len+1 >= bufsize) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003096 PyErr_SetString(PyExc_ValueError,
3097 "Module name too long");
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003098 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003099 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003100
Victor Stinner974389d2011-03-15 09:33:57 +01003101 p = buf + *p_buflen;
3102 if (p != buf) {
3103 *p++ = '.';
3104 *p_buflen += 1;
3105 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003106 Py_UCS4_strncpy(p, nameuni, len);
Victor Stinner974389d2011-03-15 09:33:57 +01003107 p[len] = '\0';
3108 *p_buflen += len;
3109
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003110 fullname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3111 buf, *p_buflen);
Victor Stinner974389d2011-03-15 09:33:57 +01003112 if (fullname == NULL)
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003113 goto error;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003114 name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3115 p, len);
Victor Stinner974389d2011-03-15 09:33:57 +01003116 if (name == NULL) {
3117 Py_DECREF(fullname);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003118 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003119 }
3120 result = import_submodule(mod, name, fullname);
3121 Py_DECREF(fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003122 if (result == Py_None && altmod != mod) {
3123 Py_DECREF(result);
3124 /* Here, altmod must be None and mod must not be None */
Victor Stinner974389d2011-03-15 09:33:57 +01003125 result = import_submodule(altmod, name, name);
3126 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003127 if (result != NULL && result != Py_None) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003128 mark_name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3129 buf, *p_buflen);
Victor Stinner974389d2011-03-15 09:33:57 +01003130 if (mark_name == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003131 Py_DECREF(result);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003132 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003133 }
Victor Stinner974389d2011-03-15 09:33:57 +01003134 if (mark_miss(mark_name) != 0) {
3135 Py_DECREF(result);
3136 Py_DECREF(mark_name);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003137 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003138 }
3139 Py_DECREF(mark_name);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003140 Py_UCS4_strncpy(buf, nameuni, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003141 buf[len] = '\0';
3142 *p_buflen = len;
3143 }
3144 }
Victor Stinner974389d2011-03-15 09:33:57 +01003145 else
3146 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003147 if (result == NULL)
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003148 goto error;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003149
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003150 if (result == Py_None) {
3151 Py_DECREF(result);
3152 PyErr_Format(PyExc_ImportError,
Victor Stinner974389d2011-03-15 09:33:57 +01003153 "No module named %R", inputname);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003154 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003155 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003156
Victor Stinner974389d2011-03-15 09:33:57 +01003157 if (dot != NULL) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003158 *p_outputname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3159 dot+1, Py_UCS4_strlen(dot+1));
Victor Stinner974389d2011-03-15 09:33:57 +01003160 if (*p_outputname == NULL) {
3161 Py_DECREF(result);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003162 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003163 }
3164 }
3165
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003166 PyMem_Free(nameuni);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003167 return result;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003168
3169error:
3170 PyMem_Free(nameuni);
3171 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003172}
3173
3174static int
Victor Stinner974389d2011-03-15 09:33:57 +01003175mark_miss(PyObject *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00003176{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003177 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner974389d2011-03-15 09:33:57 +01003178 return PyDict_SetItem(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00003179}
3180
3181static int
Victor Stinner974389d2011-03-15 09:33:57 +01003182ensure_fromlist(PyObject *mod, PyObject *fromlist, PyObject *name,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003183 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003184{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003185 int i;
Victor Stinner974389d2011-03-15 09:33:57 +01003186 PyObject *fullname;
3187 Py_ssize_t fromlist_len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003188
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003189 if (!_PyObject_HasAttrId(mod, &PyId___path__))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003190 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003191
Victor Stinner974389d2011-03-15 09:33:57 +01003192 fromlist_len = PySequence_Size(fromlist);
3193
3194 for (i = 0; i < fromlist_len; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003195 PyObject *item = PySequence_GetItem(fromlist, i);
3196 int hasit;
Victor Stinner974389d2011-03-15 09:33:57 +01003197 if (item == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003198 return 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003199 if (!PyUnicode_Check(item)) {
3200 PyErr_SetString(PyExc_TypeError,
3201 "Item in ``from list'' not a string");
3202 Py_DECREF(item);
3203 return 0;
3204 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003205 if (PyUnicode_READ_CHAR(item, 0) == '*') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003206 PyObject *all;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02003207 _Py_IDENTIFIER(__all__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003208 Py_DECREF(item);
3209 /* See if the package defines __all__ */
3210 if (recursive)
3211 continue; /* Avoid endless recursion */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003212 all = _PyObject_GetAttrId(mod, &PyId___all__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003213 if (all == NULL)
3214 PyErr_Clear();
3215 else {
Victor Stinner974389d2011-03-15 09:33:57 +01003216 int ret = ensure_fromlist(mod, all, name, 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003217 Py_DECREF(all);
3218 if (!ret)
3219 return 0;
3220 }
3221 continue;
3222 }
3223 hasit = PyObject_HasAttr(mod, item);
3224 if (!hasit) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003225 PyObject *submod;
Victor Stinner974389d2011-03-15 09:33:57 +01003226 fullname = PyUnicode_FromFormat("%U.%U", name, item);
3227 if (fullname != NULL) {
3228 submod = import_submodule(mod, item, fullname);
3229 Py_DECREF(fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003230 }
Victor Stinner974389d2011-03-15 09:33:57 +01003231 else
3232 submod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003233 Py_XDECREF(submod);
3234 if (submod == NULL) {
3235 Py_DECREF(item);
3236 return 0;
3237 }
3238 }
3239 Py_DECREF(item);
3240 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003241
Victor Stinner974389d2011-03-15 09:33:57 +01003242 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003243}
3244
Neil Schemenauer00b09662003-06-16 21:03:07 +00003245static int
Victor Stinner974389d2011-03-15 09:33:57 +01003246add_submodule(PyObject *mod, PyObject *submod, PyObject *fullname,
3247 PyObject *subname, PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00003248{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003249 if (mod == Py_None)
3250 return 1;
3251 /* Irrespective of the success of this load, make a
3252 reference to it in the parent package module. A copy gets
3253 saved in the modules dictionary under the full name, so get a
3254 reference from there, if need be. (The exception is when the
3255 load failed with a SyntaxError -- then there's no trace in
3256 sys.modules. In that case, of course, do nothing extra.) */
3257 if (submod == NULL) {
Victor Stinner974389d2011-03-15 09:33:57 +01003258 submod = PyDict_GetItem(modules, fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003259 if (submod == NULL)
3260 return 1;
3261 }
3262 if (PyModule_Check(mod)) {
3263 /* We can't use setattr here since it can give a
3264 * spurious warning if the submodule name shadows a
3265 * builtin name */
3266 PyObject *dict = PyModule_GetDict(mod);
3267 if (!dict)
3268 return 0;
Victor Stinner974389d2011-03-15 09:33:57 +01003269 if (PyDict_SetItem(dict, subname, submod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003270 return 0;
3271 }
3272 else {
Victor Stinner974389d2011-03-15 09:33:57 +01003273 if (PyObject_SetAttr(mod, subname, submod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003274 return 0;
3275 }
3276 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00003277}
3278
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003279static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01003280import_submodule(PyObject *mod, PyObject *subname, PyObject *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003281{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003282 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner533d7832011-03-14 13:22:54 -04003283 PyObject *m = NULL, *bufobj, *path_list, *loader;
Victor Stinner9599de52011-03-13 22:38:38 -04003284 struct filedescr *fdp;
3285 FILE *fp;
Guido van Rossum74e6a111994-08-29 12:54:38 +00003286
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003287 /* Require:
3288 if mod == None: subname == fullname
3289 else: mod.__name__ + "." + subname == fullname
3290 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003291
Victor Stinner974389d2011-03-15 09:33:57 +01003292 if ((m = PyDict_GetItem(modules, fullname)) != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003293 Py_INCREF(m);
Victor Stinner9599de52011-03-13 22:38:38 -04003294 return m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003295 }
Victor Stinner9599de52011-03-13 22:38:38 -04003296
3297 if (mod == Py_None)
Victor Stinner533d7832011-03-14 13:22:54 -04003298 path_list = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003299 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003300 path_list = _PyObject_GetAttrId(mod, &PyId___path__);
Victor Stinner533d7832011-03-14 13:22:54 -04003301 if (path_list == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003302 PyErr_Clear();
3303 Py_INCREF(Py_None);
3304 return Py_None;
3305 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003306 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003307
Victor Stinner533d7832011-03-14 13:22:54 -04003308 fdp = find_module(fullname, subname, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003309 &bufobj, &fp, &loader);
Victor Stinner533d7832011-03-14 13:22:54 -04003310 Py_XDECREF(path_list);
Victor Stinner9599de52011-03-13 22:38:38 -04003311 if (fdp == NULL) {
3312 if (!PyErr_ExceptionMatches(PyExc_ImportError))
3313 return NULL;
3314 PyErr_Clear();
3315 Py_INCREF(Py_None);
3316 return Py_None;
3317 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003318 m = load_module(fullname, fp, bufobj, fdp->type, loader);
3319 Py_XDECREF(bufobj);
Victor Stinner9599de52011-03-13 22:38:38 -04003320 Py_XDECREF(loader);
3321 if (fp)
3322 fclose(fp);
3323 if (m == NULL)
3324 return NULL;
3325 if (!add_submodule(mod, m, fullname, subname, modules)) {
3326 Py_XDECREF(m);
3327 return NULL;
3328 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003329 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00003330}
3331
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003332
3333/* Re-import a module of any kind and return its module object, WITH
3334 INCREMENTED REFERENCE COUNT */
3335
Guido van Rossum79f25d91997-04-29 20:08:16 +00003336PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003337PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003338{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003339 PyInterpreterState *interp = PyThreadState_Get()->interp;
3340 PyObject *modules_reloading = interp->modules_reloading;
3341 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner533d7832011-03-14 13:22:54 -04003342 PyObject *path_list = NULL, *loader = NULL, *existing_m = NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003343 PyObject *nameobj, *bufobj, *subnameobj;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003344 Py_UCS4 *name = NULL, *subname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003345 struct filedescr *fdp;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003346 FILE *fp = NULL;
3347 PyObject *newm = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00003348
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003349 if (modules_reloading == NULL) {
3350 Py_FatalError("PyImport_ReloadModule: "
3351 "no modules_reloading dictionary!");
3352 return NULL;
3353 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003354
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003355 if (m == NULL || !PyModule_Check(m)) {
3356 PyErr_SetString(PyExc_TypeError,
3357 "reload() argument must be module");
3358 return NULL;
3359 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003360 nameobj = PyModule_GetNameObject(m);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003361 if (nameobj == NULL || PyUnicode_READY(nameobj) == -1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003362 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003363 if (m != PyDict_GetItem(modules, nameobj)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003364 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003365 "reload(): module %R not in sys.modules",
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003366 nameobj);
3367 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003368 return NULL;
3369 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003370 existing_m = PyDict_GetItem(modules_reloading, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003371 if (existing_m != NULL) {
3372 /* Due to a recursive reload, this module is already
3373 being reloaded. */
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003374 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003375 Py_INCREF(existing_m);
3376 return existing_m;
3377 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003378 if (PyDict_SetItem(modules_reloading, nameobj, m) < 0) {
3379 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003380 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003381 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00003382
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003383 name = PyUnicode_AsUCS4Copy(nameobj);
3384 if (!name) {
3385 Py_DECREF(nameobj);
3386 return NULL;
3387 }
3388 subname = Py_UCS4_strrchr(name, '.');
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003389 if (subname == NULL) {
3390 Py_INCREF(nameobj);
3391 subnameobj = nameobj;
3392 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003393 else {
3394 PyObject *parentname, *parent;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003395 Py_ssize_t len;
3396 len = subname - name;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003397 parentname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3398 name, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003399 if (parentname == NULL) {
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003400 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003401 }
3402 parent = PyDict_GetItem(modules, parentname);
3403 if (parent == NULL) {
3404 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003405 "reload(): parent %R not in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003406 parentname);
3407 Py_DECREF(parentname);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003408 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003409 }
3410 Py_DECREF(parentname);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003411 path_list = _PyObject_GetAttrId(parent, &PyId___path__);
Victor Stinner533d7832011-03-14 13:22:54 -04003412 if (path_list == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003413 PyErr_Clear();
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003414 subname++;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003415 len = PyUnicode_GET_LENGTH(nameobj) - (len + 1);
3416 subnameobj = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3417 subname, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003418 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003419 if (subnameobj == NULL)
3420 goto error;
Victor Stinner533d7832011-03-14 13:22:54 -04003421 fdp = find_module(nameobj, subnameobj, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003422 &bufobj, &fp, &loader);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003423 Py_DECREF(subnameobj);
Victor Stinner533d7832011-03-14 13:22:54 -04003424 Py_XDECREF(path_list);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003425
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003426 if (fdp == NULL) {
3427 Py_XDECREF(loader);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003428 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003429 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003430
Victor Stinner2fd76e42011-03-14 15:19:39 -04003431 newm = load_module(nameobj, fp, bufobj, fdp->type, loader);
3432 Py_XDECREF(bufobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003433 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003434
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003435 if (fp)
3436 fclose(fp);
3437 if (newm == NULL) {
3438 /* load_module probably removed name from modules because of
3439 * the error. Put back the original module object. We're
3440 * going to return NULL in this case regardless of whether
3441 * replacing name succeeds, so the return value is ignored.
3442 */
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003443 PyDict_SetItem(modules, nameobj, m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003444 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003445
3446error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003447 imp_modules_reloading_clear();
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003448 Py_DECREF(nameobj);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003449 PyMem_Free(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003450 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003451}
3452
3453
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003454/* Higher-level import emulator which emulates the "import" statement
3455 more accurately -- it invokes the __import__() function from the
3456 builtins of the current globals. This means that the import is
3457 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00003458 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00003459 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00003460 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00003461 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003462
3463PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003464PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003465{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003466 static PyObject *silly_list = NULL;
3467 static PyObject *builtins_str = NULL;
3468 static PyObject *import_str = NULL;
3469 PyObject *globals = NULL;
3470 PyObject *import = NULL;
3471 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003472 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003473 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003474
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003475 /* Initialize constant string objects */
3476 if (silly_list == NULL) {
3477 import_str = PyUnicode_InternFromString("__import__");
3478 if (import_str == NULL)
3479 return NULL;
3480 builtins_str = PyUnicode_InternFromString("__builtins__");
3481 if (builtins_str == NULL)
3482 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003483 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003484 if (silly_list == NULL)
3485 return NULL;
3486 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003487
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003488 /* Get the builtins from current globals */
3489 globals = PyEval_GetGlobals();
3490 if (globals != NULL) {
3491 Py_INCREF(globals);
3492 builtins = PyObject_GetItem(globals, builtins_str);
3493 if (builtins == NULL)
3494 goto err;
3495 }
3496 else {
3497 /* No globals -- use standard builtins, and fake globals */
3498 builtins = PyImport_ImportModuleLevel("builtins",
3499 NULL, NULL, NULL, 0);
3500 if (builtins == NULL)
3501 return NULL;
3502 globals = Py_BuildValue("{OO}", builtins_str, builtins);
3503 if (globals == NULL)
3504 goto err;
3505 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003506
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003507 /* Get the __import__ function from the builtins */
3508 if (PyDict_Check(builtins)) {
3509 import = PyObject_GetItem(builtins, import_str);
3510 if (import == NULL)
3511 PyErr_SetObject(PyExc_KeyError, import_str);
3512 }
3513 else
3514 import = PyObject_GetAttr(builtins, import_str);
3515 if (import == NULL)
3516 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003518 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00003519 Always use absolute import here.
3520 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003521 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
3522 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00003523 if (r == NULL)
3524 goto err;
3525 Py_DECREF(r);
3526
3527 modules = PyImport_GetModuleDict();
3528 r = PyDict_GetItem(modules, module_name);
3529 if (r != NULL)
3530 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003531
3532 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003533 Py_XDECREF(globals);
3534 Py_XDECREF(builtins);
3535 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00003536
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003537 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003538}
3539
3540
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003541/* Module 'imp' provides Python access to the primitives used for
3542 importing modules.
3543*/
3544
Guido van Rossum79f25d91997-04-29 20:08:16 +00003545static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00003546imp_make_magic(long magic)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003547{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003548 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003549
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003550 buf[0] = (char) ((magic >> 0) & 0xff);
3551 buf[1] = (char) ((magic >> 8) & 0xff);
3552 buf[2] = (char) ((magic >> 16) & 0xff);
3553 buf[3] = (char) ((magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003554
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003555 return PyBytes_FromStringAndSize(buf, 4);
Victor Stinner3e2b7172010-11-09 09:32:19 +00003556}
Barry Warsaw28a691b2010-04-17 00:19:56 +00003557
3558static PyObject *
3559imp_get_magic(PyObject *self, PyObject *noargs)
3560{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003561 return imp_make_magic(pyc_magic);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003562}
3563
3564static PyObject *
3565imp_get_tag(PyObject *self, PyObject *noargs)
3566{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003567 return PyUnicode_FromString(pyc_tag);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003568}
3569
Guido van Rossum79f25d91997-04-29 20:08:16 +00003570static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003571imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003572{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003573 PyObject *list;
3574 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003575
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003576 list = PyList_New(0);
3577 if (list == NULL)
3578 return NULL;
3579 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
3580 PyObject *item = Py_BuildValue("ssi",
3581 fdp->suffix, fdp->mode, fdp->type);
3582 if (item == NULL) {
3583 Py_DECREF(list);
3584 return NULL;
3585 }
3586 if (PyList_Append(list, item) < 0) {
3587 Py_DECREF(list);
3588 Py_DECREF(item);
3589 return NULL;
3590 }
3591 Py_DECREF(item);
3592 }
3593 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003594}
3595
Guido van Rossum79f25d91997-04-29 20:08:16 +00003596static PyObject *
Victor Stinner533d7832011-03-14 13:22:54 -04003597call_find_module(PyObject *name, PyObject *path_list)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003598{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003599 extern int fclose(FILE *);
3600 PyObject *fob, *ret;
3601 PyObject *pathobj;
3602 struct filedescr *fdp;
Victor Stinner7d8b77c2011-03-12 08:45:02 -05003603 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003604 int fd = -1;
3605 char *found_encoding = NULL;
3606 char *encoding = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003607
Victor Stinner533d7832011-03-14 13:22:54 -04003608 if (path_list == Py_None)
3609 path_list = NULL;
3610 fdp = find_module(NULL, name, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003611 &pathobj, &fp, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003612 if (fdp == NULL)
3613 return NULL;
3614 if (fp != NULL) {
3615 fd = fileno(fp);
3616 if (fd != -1)
3617 fd = dup(fd);
3618 fclose(fp);
Victor Stinnerd417d012011-06-20 15:16:55 +02003619 if (fd == -1) {
3620 PyErr_SetFromErrno(PyExc_OSError);
3621 return NULL;
3622 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003623 fp = NULL;
3624 }
3625 if (fd != -1) {
3626 if (strchr(fdp->mode, 'b') == NULL) {
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003627 /* PyTokenizer_FindEncodingFilename() returns PyMem_MALLOC'ed
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003628 memory. */
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003629 found_encoding = PyTokenizer_FindEncodingFilename(fd, pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003630 lseek(fd, 0, 0); /* Reset position */
Victor Stinner2fd76e42011-03-14 15:19:39 -04003631 if (found_encoding == NULL && PyErr_Occurred()) {
3632 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003633 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04003634 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003635 encoding = (found_encoding != NULL) ? found_encoding :
3636 (char*)PyUnicode_GetDefaultEncoding();
3637 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003638 fob = PyFile_FromFd(fd, NULL, fdp->mode, -1,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003639 (char*)encoding, NULL, NULL, 1);
3640 if (fob == NULL) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04003641 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003642 close(fd);
3643 PyMem_FREE(found_encoding);
3644 return NULL;
3645 }
3646 }
3647 else {
3648 fob = Py_None;
3649 Py_INCREF(fob);
3650 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003651 if (pathobj == NULL) {
3652 Py_INCREF(Py_None);
3653 pathobj = Py_None;
3654 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003655 ret = Py_BuildValue("NN(ssi)",
3656 fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
3657 PyMem_FREE(found_encoding);
Brett Cannon3bb42d92007-10-20 03:43:15 +00003658
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003659 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003660}
3661
Guido van Rossum79f25d91997-04-29 20:08:16 +00003662static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003663imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003664{
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003665 PyObject *name, *path_list = NULL;
3666 if (!PyArg_ParseTuple(args, "U|O:find_module",
3667 &name, &path_list))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003668 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003669 return call_find_module(name, path_list);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003670}
3671
3672static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003673imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003674{
Victor Stinner95872862011-03-07 18:20:56 +01003675 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003676 int ret;
3677 PyObject *m;
Victor Stinner95872862011-03-07 18:20:56 +01003678 if (!PyArg_ParseTuple(args, "U:init_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003679 return NULL;
3680 ret = init_builtin(name);
3681 if (ret < 0)
3682 return NULL;
3683 if (ret == 0) {
3684 Py_INCREF(Py_None);
3685 return Py_None;
3686 }
Victor Stinner95872862011-03-07 18:20:56 +01003687 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003688 Py_XINCREF(m);
3689 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003690}
3691
Guido van Rossum79f25d91997-04-29 20:08:16 +00003692static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003693imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003694{
Victor Stinner53dc7352011-03-20 01:50:21 +01003695 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003696 int ret;
3697 PyObject *m;
Victor Stinner53dc7352011-03-20 01:50:21 +01003698 if (!PyArg_ParseTuple(args, "U:init_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003699 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01003700 ret = PyImport_ImportFrozenModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003701 if (ret < 0)
3702 return NULL;
3703 if (ret == 0) {
3704 Py_INCREF(Py_None);
3705 return Py_None;
3706 }
Victor Stinner53dc7352011-03-20 01:50:21 +01003707 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003708 Py_XINCREF(m);
3709 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003710}
3711
Guido van Rossum79f25d91997-04-29 20:08:16 +00003712static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003713imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003714{
Victor Stinner53dc7352011-03-20 01:50:21 +01003715 PyObject *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00003716
Victor Stinner53dc7352011-03-20 01:50:21 +01003717 if (!PyArg_ParseTuple(args, "U:get_frozen_object", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003718 return NULL;
3719 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003720}
3721
Guido van Rossum79f25d91997-04-29 20:08:16 +00003722static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00003723imp_is_frozen_package(PyObject *self, PyObject *args)
3724{
Victor Stinner53dc7352011-03-20 01:50:21 +01003725 PyObject *name;
Brett Cannon8d110132009-03-15 02:20:16 +00003726
Victor Stinner53dc7352011-03-20 01:50:21 +01003727 if (!PyArg_ParseTuple(args, "U:is_frozen_package", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003728 return NULL;
3729 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00003730}
3731
3732static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003733imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003734{
Victor Stinner95872862011-03-07 18:20:56 +01003735 PyObject *name;
3736 if (!PyArg_ParseTuple(args, "U:is_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003737 return NULL;
3738 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003739}
3740
Guido van Rossum79f25d91997-04-29 20:08:16 +00003741static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003742imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003743{
Victor Stinner53dc7352011-03-20 01:50:21 +01003744 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003745 struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01003746 if (!PyArg_ParseTuple(args, "U:is_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003747 return NULL;
3748 p = find_frozen(name);
3749 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003750}
3751
3752static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01003753get_file(PyObject *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003754{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003755 FILE *fp;
3756 if (mode[0] == 'U')
3757 mode = "r" PY_STDIOTEXTMODE;
3758 if (fob == NULL) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003759 fp = _Py_fopen(pathname, mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003760 }
3761 else {
3762 int fd = PyObject_AsFileDescriptor(fob);
3763 if (fd == -1)
3764 return NULL;
3765 if (!_PyVerify_fd(fd))
3766 goto error;
3767 /* the FILE struct gets a new fd, so that it can be closed
3768 * independently of the file descriptor given
3769 */
3770 fd = dup(fd);
3771 if (fd == -1)
3772 goto error;
3773 fp = fdopen(fd, mode);
3774 }
3775 if (fp)
3776 return fp;
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003777error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003778 PyErr_SetFromErrno(PyExc_IOError);
3779 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003780}
3781
Guido van Rossum79f25d91997-04-29 20:08:16 +00003782static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003783imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003784{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003785 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003786 PyObject *fob = NULL;
3787 PyObject *m;
3788 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003789 if (!PyArg_ParseTuple(args, "UO&|O:load_compiled",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003790 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003791 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003792 &fob))
3793 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003794 fp = get_file(pathname, fob, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003795 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003796 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003797 return NULL;
3798 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003799 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003800 fclose(fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003801 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003802 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003803}
3804
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003805#ifdef HAVE_DYNAMIC_LOADING
3806
Guido van Rossum79f25d91997-04-29 20:08:16 +00003807static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003808imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003809{
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003810 PyObject *name, *pathname, *fob = NULL, *mod;
3811 FILE *fp;
3812
3813 if (!PyArg_ParseTuple(args, "UO&|O:load_dynamic",
3814 &name, PyUnicode_FSDecoder, &pathname, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003815 return NULL;
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003816 if (fob != NULL) {
3817 fp = get_file(NULL, fob, "r");
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003818 if (fp == NULL) {
3819 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003820 return NULL;
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003821 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003822 }
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003823 else
3824 fp = NULL;
3825 mod = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003826 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003827 if (fp)
3828 fclose(fp);
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003829 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003830}
3831
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003832#endif /* HAVE_DYNAMIC_LOADING */
3833
Guido van Rossum79f25d91997-04-29 20:08:16 +00003834static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003835imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003836{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003837 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003838 PyObject *fob = NULL;
3839 PyObject *m;
3840 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003841 if (!PyArg_ParseTuple(args, "UO&|O:load_source",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003842 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003843 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003844 &fob))
3845 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003846 fp = get_file(pathname, fob, "r");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003847 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003848 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003849 return NULL;
3850 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003851 m = load_source_module(name, pathname, fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003852 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003853 fclose(fp);
3854 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003855}
3856
Guido van Rossum79f25d91997-04-29 20:08:16 +00003857static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003858imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003859{
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003860 PyObject *name, *fob, *pathname, *pathname_obj, *ret;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003861 char *suffix; /* Unused */
3862 char *mode;
3863 int type;
3864 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003865
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003866 if (!PyArg_ParseTuple(args, "UOO(ssi):load_module",
3867 &name, &fob, &pathname_obj, &suffix, &mode, &type))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003868 return NULL;
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003869 if (pathname_obj != Py_None) {
3870 if (!PyUnicode_FSDecoder(pathname_obj, &pathname))
3871 return NULL;
3872 }
3873 else
3874 pathname = NULL;
3875
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003876 if (*mode) {
3877 /* Mode must start with 'r' or 'U' and must not contain '+'.
3878 Implicit in this test is the assumption that the mode
3879 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003880
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003881 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3882 PyErr_Format(PyExc_ValueError,
3883 "invalid file open mode %.200s", mode);
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003884 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003885 return NULL;
3886 }
3887 }
3888 if (fob == Py_None)
3889 fp = NULL;
3890 else {
3891 fp = get_file(NULL, fob, mode);
3892 if (fp == NULL) {
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003893 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003894 return NULL;
3895 }
3896 }
Victor Stinner41c5fec2011-03-13 21:46:30 -04003897 ret = load_module(name, fp, pathname, type, NULL);
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003898 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003899 if (fp)
3900 fclose(fp);
3901 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003902}
3903
3904static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003905imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003906{
Victor Stinnerc9abda02011-03-14 13:33:46 -04003907 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003908 PyObject * ret;
Victor Stinnerc9abda02011-03-14 13:33:46 -04003909 if (!PyArg_ParseTuple(args, "UO&:load_package",
3910 &name, PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003911 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04003912 ret = load_package(name, pathname);
Victor Stinnerebc00522010-12-03 17:06:43 +00003913 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003914 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003915}
3916
3917static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003918imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003919{
Victor Stinnerfe19d212011-03-14 14:53:28 -04003920 PyObject *name;
3921 if (!PyArg_ParseTuple(args, "U:new_module", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003922 return NULL;
Victor Stinnerfe19d212011-03-14 14:53:28 -04003923 return PyModule_NewObject(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003924}
3925
Christian Heimes13a7a212008-01-07 17:13:09 +00003926static PyObject *
3927imp_reload(PyObject *self, PyObject *v)
3928{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003929 return PyImport_ReloadModule(v);
Christian Heimes13a7a212008-01-07 17:13:09 +00003930}
3931
3932PyDoc_STRVAR(doc_reload,
3933"reload(module) -> module\n\
3934\n\
3935Reload the module. The module must have been successfully imported before.");
3936
Barry Warsaw28a691b2010-04-17 00:19:56 +00003937static PyObject *
3938imp_cache_from_source(PyObject *self, PyObject *args, PyObject *kws)
3939{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003940 static char *kwlist[] = {"path", "debug_override", NULL};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003941
Victor Stinner2f42ae52011-03-20 00:41:24 +01003942 PyObject *pathname, *cpathname;
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003943 PyObject *debug_override = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003944 int debug = !Py_OptimizeFlag;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003945
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003946 if (!PyArg_ParseTupleAndKeywords(
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003947 args, kws, "O&|O", kwlist,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003948 PyUnicode_FSDecoder, &pathname, &debug_override))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003949 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003950
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003951 if (debug_override != NULL &&
3952 (debug = PyObject_IsTrue(debug_override)) < 0) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003953 Py_DECREF(pathname);
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003954 return NULL;
3955 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00003956
Martin v. Löwis30260a72011-10-23 17:35:46 +02003957 if (PyUnicode_READY(pathname) < 0)
3958 return NULL;
3959
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003960 cpathname = make_compiled_pathname(pathname, debug);
Victor Stinner2f42ae52011-03-20 00:41:24 +01003961 Py_DECREF(pathname);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003962
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003963 if (cpathname == NULL) {
3964 PyErr_Format(PyExc_SystemError, "path buffer too short");
3965 return NULL;
3966 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003967 return cpathname;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003968}
3969
3970PyDoc_STRVAR(doc_cache_from_source,
3971"Given the path to a .py file, return the path to its .pyc/.pyo file.\n\
3972\n\
3973The .py file does not need to exist; this simply returns the path to the\n\
3974.pyc/.pyo file calculated as if the .py file were imported. The extension\n\
3975will be .pyc unless __debug__ is not defined, then it will be .pyo.\n\
3976\n\
3977If debug_override is not None, then it must be a boolean and is taken as\n\
3978the value of __debug__ instead.");
3979
3980static PyObject *
3981imp_source_from_cache(PyObject *self, PyObject *args, PyObject *kws)
3982{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003983 static char *kwlist[] = {"path", NULL};
Victor Stinnerc9abda02011-03-14 13:33:46 -04003984 PyObject *pathname, *source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003985
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003986 if (!PyArg_ParseTupleAndKeywords(
Victor Stinnerebc00522010-12-03 17:06:43 +00003987 args, kws, "O&", kwlist,
Victor Stinnerc9abda02011-03-14 13:33:46 -04003988 PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003989 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003990
Victor Stinnerc9abda02011-03-14 13:33:46 -04003991 source = make_source_pathname(pathname);
3992 if (source == NULL) {
3993 PyErr_Format(PyExc_ValueError, "Not a PEP 3147 pyc path: %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003994 pathname);
Victor Stinnerc9abda02011-03-14 13:33:46 -04003995 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003996 return NULL;
3997 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04003998 Py_DECREF(pathname);
3999 return source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00004000}
4001
4002PyDoc_STRVAR(doc_source_from_cache,
4003"Given the path to a .pyc./.pyo file, return the path to its .py file.\n\
4004\n\
4005The .pyc/.pyo file does not need to exist; this simply returns the path to\n\
4006the .py file calculated to correspond to the .pyc/.pyo file. If path\n\
4007does not conform to PEP 3147 format, ValueError will be raised.");
4008
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004009/* Doc strings */
4010
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004011PyDoc_STRVAR(doc_imp,
4012"This module provides the components needed to build your own\n\
4013__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004014
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004015PyDoc_STRVAR(doc_find_module,
4016"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004017Search for a module. If path is omitted or None, search for a\n\
4018built-in, frozen or special module and continue search in sys.path.\n\
4019The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004020package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004021
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004022PyDoc_STRVAR(doc_load_module,
4023"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004024Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004025The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004026
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004027PyDoc_STRVAR(doc_get_magic,
4028"get_magic() -> string\n\
4029Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004030
Barry Warsaw28a691b2010-04-17 00:19:56 +00004031PyDoc_STRVAR(doc_get_tag,
4032"get_tag() -> string\n\
4033Return the magic tag for .pyc or .pyo files.");
4034
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004035PyDoc_STRVAR(doc_get_suffixes,
4036"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004037Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004038that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004039
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004040PyDoc_STRVAR(doc_new_module,
4041"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004042Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004043The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004044
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004045PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00004046"lock_held() -> boolean\n\
4047Return True if the import lock is currently held, else False.\n\
4048On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00004049
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00004050PyDoc_STRVAR(doc_acquire_lock,
4051"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00004052Acquires the interpreter's import lock for the current thread.\n\
4053This lock should be used by import hooks to ensure thread-safety\n\
4054when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00004055On platforms without threads, this function does nothing.");
4056
4057PyDoc_STRVAR(doc_release_lock,
4058"release_lock() -> None\n\
4059Release the interpreter's import lock.\n\
4060On platforms without threads, this function does nothing.");
4061
Guido van Rossum79f25d91997-04-29 20:08:16 +00004062static PyMethodDef imp_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004063 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
4064 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
4065 {"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag},
4066 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
4067 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
4068 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
4069 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
4070 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
4071 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
4072 {"reload", imp_reload, METH_O, doc_reload},
4073 {"cache_from_source", (PyCFunction)imp_cache_from_source,
4074 METH_VARARGS | METH_KEYWORDS, doc_cache_from_source},
4075 {"source_from_cache", (PyCFunction)imp_source_from_cache,
4076 METH_VARARGS | METH_KEYWORDS, doc_source_from_cache},
4077 /* The rest are obsolete */
4078 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
4079 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
4080 {"init_builtin", imp_init_builtin, METH_VARARGS},
4081 {"init_frozen", imp_init_frozen, METH_VARARGS},
4082 {"is_builtin", imp_is_builtin, METH_VARARGS},
4083 {"is_frozen", imp_is_frozen, METH_VARARGS},
4084 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00004085#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004086 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00004087#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004088 {"load_package", imp_load_package, METH_VARARGS},
4089 {"load_source", imp_load_source, METH_VARARGS},
Brett Cannon442c9b92011-03-23 16:14:42 -07004090 {"_fix_co_filename", imp_fix_co_filename, METH_VARARGS},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004091 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004092};
4093
Guido van Rossum1a8791e1998-08-04 22:46:29 +00004094static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004095setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004096{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004097 PyObject *v;
4098 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004099
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004100 v = PyLong_FromLong((long)value);
4101 err = PyDict_SetItemString(d, name, v);
4102 Py_XDECREF(v);
4103 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004104}
4105
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004106typedef struct {
4107 PyObject_HEAD
4108} NullImporter;
4109
4110static int
4111NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
4112{
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004113#ifndef MS_WINDOWS
4114 PyObject *path;
4115 struct stat statbuf;
4116 int rv;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004117
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004118 if (!_PyArg_NoKeywords("NullImporter()", kwds))
4119 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004120
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004121 if (!PyArg_ParseTuple(args, "O&:NullImporter",
4122 PyUnicode_FSConverter, &path))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004123 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004124
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004125 if (PyBytes_GET_SIZE(path) == 0) {
4126 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004127 PyErr_SetString(PyExc_ImportError, "empty pathname");
4128 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004129 }
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004130
4131 rv = stat(PyBytes_AS_STRING(path), &statbuf);
4132 Py_DECREF(path);
4133 if (rv == 0) {
4134 /* it exists */
4135 if (S_ISDIR(statbuf.st_mode)) {
4136 /* it's a directory */
4137 PyErr_SetString(PyExc_ImportError, "existing directory");
4138 return -1;
4139 }
4140 }
4141#else /* MS_WINDOWS */
4142 PyObject *pathobj;
4143 DWORD rv;
Victor Stinner255dfdb2010-09-29 10:28:51 +00004144 wchar_t *path;
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004145
4146 if (!_PyArg_NoKeywords("NullImporter()", kwds))
4147 return -1;
4148
4149 if (!PyArg_ParseTuple(args, "U:NullImporter",
4150 &pathobj))
4151 return -1;
4152
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02004153 if (PyUnicode_GET_LENGTH(pathobj) == 0) {
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004154 PyErr_SetString(PyExc_ImportError, "empty pathname");
4155 return -1;
4156 }
4157
Victor Stinnerbeb4135b2010-10-07 01:02:42 +00004158 path = PyUnicode_AsWideCharString(pathobj, NULL);
Victor Stinner255dfdb2010-09-29 10:28:51 +00004159 if (path == NULL)
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004160 return -1;
4161 /* see issue1293 and issue3677:
4162 * stat() on Windows doesn't recognise paths like
4163 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
4164 */
4165 rv = GetFileAttributesW(path);
Victor Stinner255dfdb2010-09-29 10:28:51 +00004166 PyMem_Free(path);
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004167 if (rv != INVALID_FILE_ATTRIBUTES) {
4168 /* it exists */
4169 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
4170 /* it's a directory */
4171 PyErr_SetString(PyExc_ImportError, "existing directory");
4172 return -1;
4173 }
4174 }
4175#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004176 return 0;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004177}
4178
4179static PyObject *
4180NullImporter_find_module(NullImporter *self, PyObject *args)
4181{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004182 Py_RETURN_NONE;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004183}
4184
4185static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004186 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
4187 "Always return None"
4188 },
4189 {NULL} /* Sentinel */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004190};
4191
4192
Christian Heimes9cd17752007-11-18 19:35:23 +00004193PyTypeObject PyNullImporter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004194 PyVarObject_HEAD_INIT(NULL, 0)
4195 "imp.NullImporter", /*tp_name*/
4196 sizeof(NullImporter), /*tp_basicsize*/
4197 0, /*tp_itemsize*/
4198 0, /*tp_dealloc*/
4199 0, /*tp_print*/
4200 0, /*tp_getattr*/
4201 0, /*tp_setattr*/
4202 0, /*tp_reserved*/
4203 0, /*tp_repr*/
4204 0, /*tp_as_number*/
4205 0, /*tp_as_sequence*/
4206 0, /*tp_as_mapping*/
4207 0, /*tp_hash */
4208 0, /*tp_call*/
4209 0, /*tp_str*/
4210 0, /*tp_getattro*/
4211 0, /*tp_setattro*/
4212 0, /*tp_as_buffer*/
4213 Py_TPFLAGS_DEFAULT, /*tp_flags*/
4214 "Null importer object", /* tp_doc */
4215 0, /* tp_traverse */
4216 0, /* tp_clear */
4217 0, /* tp_richcompare */
4218 0, /* tp_weaklistoffset */
4219 0, /* tp_iter */
4220 0, /* tp_iternext */
4221 NullImporter_methods, /* tp_methods */
4222 0, /* tp_members */
4223 0, /* tp_getset */
4224 0, /* tp_base */
4225 0, /* tp_dict */
4226 0, /* tp_descr_get */
4227 0, /* tp_descr_set */
4228 0, /* tp_dictoffset */
4229 (initproc)NullImporter_init, /* tp_init */
4230 0, /* tp_alloc */
4231 PyType_GenericNew /* tp_new */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004232};
4233
Martin v. Löwis1a214512008-06-11 05:26:20 +00004234static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004235 PyModuleDef_HEAD_INIT,
4236 "imp",
4237 doc_imp,
4238 0,
4239 imp_methods,
4240 NULL,
4241 NULL,
4242 NULL,
4243 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00004244};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004245
Jason Tishler6bc06ec2003-09-04 11:59:50 +00004246PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00004247PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004248{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004249 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004250
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004251 if (PyType_Ready(&PyNullImporter_Type) < 0)
4252 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004253
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004254 m = PyModule_Create(&impmodule);
4255 if (m == NULL)
4256 goto failure;
4257 d = PyModule_GetDict(m);
4258 if (d == NULL)
4259 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004260
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004261 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
4262 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
4263 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
4264 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
4265 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
4266 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
4267 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
4268 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
4269 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
4270 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004271
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004272 Py_INCREF(&PyNullImporter_Type);
4273 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
4274 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004275 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004276 Py_XDECREF(m);
4277 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004278}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004279
4280
Guido van Rossumb18618d2000-05-03 23:44:39 +00004281/* API for embedding applications that want to add their own entries
4282 to the table of built-in modules. This should normally be called
4283 *before* Py_Initialize(). When the table resize fails, -1 is
4284 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004285
4286 After a similar function by Just van Rossum. */
4287
4288int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004289PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004290{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004291 static struct _inittab *our_copy = NULL;
4292 struct _inittab *p;
4293 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004294
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004295 /* Count the number of entries in both tables */
4296 for (n = 0; newtab[n].name != NULL; n++)
4297 ;
4298 if (n == 0)
4299 return 0; /* Nothing to do */
4300 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
4301 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004303 /* Allocate new memory for the combined table */
4304 p = our_copy;
4305 PyMem_RESIZE(p, struct _inittab, i+n+1);
4306 if (p == NULL)
4307 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004308
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004309 /* Copy the tables into the new memory */
4310 if (our_copy != PyImport_Inittab)
4311 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
4312 PyImport_Inittab = our_copy = p;
4313 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004314
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004315 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004316}
4317
4318/* Shorthand to add a single entry given a name and a function */
4319
4320int
Brett Cannona826f322009-04-02 03:41:46 +00004321PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004322{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004323 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004324
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004325 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004326
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004327 newtab[0].name = (char *)name;
4328 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004329
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004330 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004331}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004332
4333#ifdef __cplusplus
4334}
4335#endif