blob: 6eca90a0f799e2f5689cf0bf21e752efcec47d8f [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;
157
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000158
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000159/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000160
161void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000162_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000163{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000164 const struct filedescr *scan;
165 struct filedescr *filetab;
166 int countD = 0;
167 int countS = 0;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000168
Victor Stinnerd0296212011-03-14 14:04:10 -0400169 initstr = PyUnicode_InternFromString("__init__");
170 if (initstr == NULL)
171 Py_FatalError("Can't initialize import variables");
172
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000173 /* prepare _PyImport_Filetab: copy entries from
174 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
175 */
Guido van Rossum04110fb2007-08-24 16:32:05 +0000176#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000177 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
178 ++countD;
Guido van Rossum04110fb2007-08-24 16:32:05 +0000179#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000180 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
181 ++countS;
182 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
183 if (filetab == NULL)
184 Py_FatalError("Can't initialize import file table.");
Guido van Rossum04110fb2007-08-24 16:32:05 +0000185#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000186 memcpy(filetab, _PyImport_DynLoadFiletab,
187 countD * sizeof(struct filedescr));
Guido van Rossum04110fb2007-08-24 16:32:05 +0000188#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000189 memcpy(filetab + countD, _PyImport_StandardFiletab,
190 countS * sizeof(struct filedescr));
191 filetab[countD + countS].suffix = NULL;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000192
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000193 _PyImport_Filetab = filetab;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000194
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000195 if (Py_OptimizeFlag) {
196 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
197 for (; filetab->suffix != NULL; filetab++) {
198 if (strcmp(filetab->suffix, ".pyc") == 0)
199 filetab->suffix = ".pyo";
200 }
201 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000202}
203
Guido van Rossum25ce5661997-08-02 03:10:38 +0000204void
Just van Rossum52e14d62002-12-30 22:08:05 +0000205_PyImportHooks_Init(void)
206{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000207 PyObject *v, *path_hooks = NULL, *zimpimport;
208 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000209
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000210 /* adding sys.path_hooks and sys.path_importer_cache, setting up
211 zipimport */
212 if (PyType_Ready(&PyNullImporter_Type) < 0)
213 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000214
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000215 if (Py_VerboseFlag)
216 PySys_WriteStderr("# installing zipimport hook\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000217
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000218 v = PyList_New(0);
219 if (v == NULL)
220 goto error;
221 err = PySys_SetObject("meta_path", v);
222 Py_DECREF(v);
223 if (err)
224 goto error;
225 v = PyDict_New();
226 if (v == NULL)
227 goto error;
228 err = PySys_SetObject("path_importer_cache", v);
229 Py_DECREF(v);
230 if (err)
231 goto error;
232 path_hooks = PyList_New(0);
233 if (path_hooks == NULL)
234 goto error;
235 err = PySys_SetObject("path_hooks", path_hooks);
236 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000237 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000238 PyErr_Print();
239 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
240 "path_importer_cache, or NullImporter failed"
241 );
242 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000244 zimpimport = PyImport_ImportModule("zipimport");
245 if (zimpimport == NULL) {
246 PyErr_Clear(); /* No zip import module -- okay */
247 if (Py_VerboseFlag)
248 PySys_WriteStderr("# can't import zipimport\n");
249 }
250 else {
251 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
252 "zipimporter");
253 Py_DECREF(zimpimport);
254 if (zipimporter == NULL) {
255 PyErr_Clear(); /* No zipimporter object -- okay */
256 if (Py_VerboseFlag)
257 PySys_WriteStderr(
258 "# can't import zipimport.zipimporter\n");
259 }
260 else {
261 /* sys.path_hooks.append(zipimporter) */
262 err = PyList_Append(path_hooks, zipimporter);
263 Py_DECREF(zipimporter);
264 if (err)
265 goto error;
266 if (Py_VerboseFlag)
267 PySys_WriteStderr(
268 "# installed zipimport hook\n");
269 }
270 }
271 Py_DECREF(path_hooks);
Just van Rossum52e14d62002-12-30 22:08:05 +0000272}
273
274void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000275_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000276{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000277 Py_XDECREF(extensions);
278 extensions = NULL;
279 PyMem_DEL(_PyImport_Filetab);
280 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000281}
282
283
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000284/* Locking primitives to prevent parallel imports of the same module
285 in different threads to return with a partially loaded module.
286 These calls are serialized by the global interpreter lock. */
287
288#ifdef WITH_THREAD
289
Guido van Rossum49b56061998-10-01 20:42:43 +0000290#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000291
Guido van Rossum65d5b571998-12-21 19:32:43 +0000292static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000293static long import_lock_thread = -1;
294static int import_lock_level = 0;
295
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000296void
297_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000298{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000299 long me = PyThread_get_thread_ident();
300 if (me == -1)
301 return; /* Too bad */
302 if (import_lock == NULL) {
303 import_lock = PyThread_allocate_lock();
304 if (import_lock == NULL)
305 return; /* Nothing much we can do. */
306 }
307 if (import_lock_thread == me) {
308 import_lock_level++;
309 return;
310 }
311 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
312 {
313 PyThreadState *tstate = PyEval_SaveThread();
314 PyThread_acquire_lock(import_lock, 1);
315 PyEval_RestoreThread(tstate);
316 }
317 import_lock_thread = me;
318 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000319}
320
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000321int
322_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000323{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000324 long me = PyThread_get_thread_ident();
325 if (me == -1 || import_lock == NULL)
326 return 0; /* Too bad */
327 if (import_lock_thread != me)
328 return -1;
329 import_lock_level--;
330 if (import_lock_level == 0) {
331 import_lock_thread = -1;
332 PyThread_release_lock(import_lock);
333 }
334 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000335}
336
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000337/* This function is called from PyOS_AfterFork to ensure that newly
338 created child processes do not share locks with the parent.
339 We now acquire the import lock around fork() calls but on some platforms
340 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000341
342void
343_PyImport_ReInitLock(void)
344{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000345 if (import_lock != NULL)
346 import_lock = PyThread_allocate_lock();
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000347 if (import_lock_level > 1) {
348 /* Forked as a side effect of import */
349 long me = PyThread_get_thread_ident();
350 PyThread_acquire_lock(import_lock, 0);
Victor Stinner942003c2011-03-07 16:57:48 +0100351 /* XXX: can the previous line fail? */
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000352 import_lock_thread = me;
353 import_lock_level--;
354 } else {
355 import_lock_thread = -1;
356 import_lock_level = 0;
357 }
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000358}
359
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000360#endif
361
Tim Peters69232342001-08-30 05:16:13 +0000362static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000363imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000364{
Tim Peters69232342001-08-30 05:16:13 +0000365#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000366 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000367#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000368 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000369#endif
370}
371
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000372static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000373imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000374{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000375#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000376 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000377#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000378 Py_INCREF(Py_None);
379 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000380}
381
382static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000383imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000384{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000385#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000386 if (_PyImport_ReleaseLock() < 0) {
387 PyErr_SetString(PyExc_RuntimeError,
388 "not holding the import lock");
389 return NULL;
390 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000391#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000392 Py_INCREF(Py_None);
393 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000394}
395
Guido van Rossumd8faa362007-04-27 19:54:29 +0000396static void
397imp_modules_reloading_clear(void)
398{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000399 PyInterpreterState *interp = PyThreadState_Get()->interp;
400 if (interp->modules_reloading != NULL)
401 PyDict_Clear(interp->modules_reloading);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000402}
403
Guido van Rossum25ce5661997-08-02 03:10:38 +0000404/* Helper for sys */
405
406PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000407PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000408{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000409 PyInterpreterState *interp = PyThreadState_GET()->interp;
410 if (interp->modules == NULL)
411 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
412 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000413}
414
Guido van Rossum3f5da241990-12-20 15:06:42 +0000415
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000416/* List of names to clear in sys */
417static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000418 "path", "argv", "ps1", "ps2",
419 "last_type", "last_value", "last_traceback",
420 "path_hooks", "path_importer_cache", "meta_path",
421 /* misc stuff */
422 "flags", "float_info",
423 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000424};
425
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000426static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000427 "stdin", "__stdin__",
428 "stdout", "__stdout__",
429 "stderr", "__stderr__",
430 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000431};
432
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000433
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000434/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000435
Guido van Rossum3f5da241990-12-20 15:06:42 +0000436void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000437PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000438{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000439 Py_ssize_t pos, ndone;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000440 PyObject *key, *value, *dict;
441 PyInterpreterState *interp = PyThreadState_GET()->interp;
442 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000443
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000444 if (modules == NULL)
445 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000447 /* Delete some special variables first. These are common
448 places where user values hide and people complain when their
449 destructors fail. Since the modules containing them are
450 deleted *last* of all, they would come too late in the normal
451 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000452
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000453 value = PyDict_GetItemString(modules, "builtins");
454 if (value != NULL && PyModule_Check(value)) {
455 dict = PyModule_GetDict(value);
456 if (Py_VerboseFlag)
457 PySys_WriteStderr("# clear builtins._\n");
458 PyDict_SetItemString(dict, "_", Py_None);
459 }
460 value = PyDict_GetItemString(modules, "sys");
461 if (value != NULL && PyModule_Check(value)) {
462 char **p;
463 PyObject *v;
464 dict = PyModule_GetDict(value);
465 for (p = sys_deletes; *p != NULL; p++) {
466 if (Py_VerboseFlag)
467 PySys_WriteStderr("# clear sys.%s\n", *p);
468 PyDict_SetItemString(dict, *p, Py_None);
469 }
470 for (p = sys_files; *p != NULL; p+=2) {
471 if (Py_VerboseFlag)
472 PySys_WriteStderr("# restore sys.%s\n", *p);
473 v = PyDict_GetItemString(dict, *(p+1));
474 if (v == NULL)
475 v = Py_None;
476 PyDict_SetItemString(dict, *p, v);
477 }
478 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000479
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000480 /* First, delete __main__ */
481 value = PyDict_GetItemString(modules, "__main__");
482 if (value != NULL && PyModule_Check(value)) {
483 if (Py_VerboseFlag)
484 PySys_WriteStderr("# cleanup __main__\n");
485 _PyModule_Clear(value);
486 PyDict_SetItemString(modules, "__main__", Py_None);
487 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000488
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000489 /* The special treatment of "builtins" here is because even
490 when it's not referenced as a module, its dictionary is
491 referenced by almost every module's __builtins__. Since
492 deleting a module clears its dictionary (even if there are
493 references left to it), we need to delete the "builtins"
494 module last. Likewise, we don't delete sys until the very
495 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000496
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000497 Also note that we 'delete' modules by replacing their entry
498 in the modules dict with None, rather than really deleting
499 them; this avoids a rehash of the modules dictionary and
500 also marks them as "non existent" so they won't be
501 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000502
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000503 /* Next, repeatedly delete modules with a reference count of
504 one (skipping builtins and sys) and delete them */
505 do {
506 ndone = 0;
507 pos = 0;
508 while (PyDict_Next(modules, &pos, &key, &value)) {
509 if (value->ob_refcnt != 1)
510 continue;
511 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100512 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000513 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100514 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000515 continue;
516 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100517 PySys_FormatStderr(
518 "# cleanup[1] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000519 _PyModule_Clear(value);
520 PyDict_SetItem(modules, key, Py_None);
521 ndone++;
522 }
523 }
524 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000525
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000526 /* Next, delete all modules (still skipping builtins and sys) */
527 pos = 0;
528 while (PyDict_Next(modules, &pos, &key, &value)) {
529 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100530 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000531 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100532 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000533 continue;
534 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100535 PySys_FormatStderr("# cleanup[2] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 _PyModule_Clear(value);
537 PyDict_SetItem(modules, key, Py_None);
538 }
539 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000540
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000541 /* Next, delete sys and builtins (in that order) */
542 value = PyDict_GetItemString(modules, "sys");
543 if (value != NULL && PyModule_Check(value)) {
544 if (Py_VerboseFlag)
545 PySys_WriteStderr("# cleanup sys\n");
546 _PyModule_Clear(value);
547 PyDict_SetItemString(modules, "sys", Py_None);
548 }
549 value = PyDict_GetItemString(modules, "builtins");
550 if (value != NULL && PyModule_Check(value)) {
551 if (Py_VerboseFlag)
552 PySys_WriteStderr("# cleanup builtins\n");
553 _PyModule_Clear(value);
554 PyDict_SetItemString(modules, "builtins", Py_None);
555 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000556
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000557 /* Finally, clear and delete the modules directory */
558 PyDict_Clear(modules);
559 interp->modules = NULL;
560 Py_DECREF(modules);
561 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000562}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000563
564
Barry Warsaw28a691b2010-04-17 00:19:56 +0000565/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000566
567long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000568PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000569{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000570 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000571}
572
573
Barry Warsaw28a691b2010-04-17 00:19:56 +0000574const char *
575PyImport_GetMagicTag(void)
576{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000577 return pyc_tag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000578}
579
Guido van Rossum25ce5661997-08-02 03:10:38 +0000580/* Magic for extension modules (built-in as well as dynamically
581 loaded). To prevent initializing an extension module more than
582 once, we keep a static dictionary 'extensions' keyed by module name
583 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000584 modules), containing these modules. A copy of the module's
Victor Stinner95872862011-03-07 18:20:56 +0100585 dictionary is stored by calling _PyImport_FixupExtensionObject()
Guido van Rossum25ce5661997-08-02 03:10:38 +0000586 immediately after the module initialization function succeeds. A
587 copy can be retrieved from there by calling
Victor Stinner95872862011-03-07 18:20:56 +0100588 _PyImport_FindExtensionObject().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000589
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000590 Modules which do support multiple initialization set their m_size
591 field to a non-negative number (indicating the size of the
592 module-specific state). They are still recorded in the extensions
593 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000594*/
595
596int
Victor Stinner95872862011-03-07 18:20:56 +0100597_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
598 PyObject *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000599{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000600 PyObject *modules, *dict;
601 struct PyModuleDef *def;
602 if (extensions == NULL) {
603 extensions = PyDict_New();
604 if (extensions == NULL)
605 return -1;
606 }
607 if (mod == NULL || !PyModule_Check(mod)) {
608 PyErr_BadInternalCall();
609 return -1;
610 }
611 def = PyModule_GetDef(mod);
612 if (!def) {
613 PyErr_BadInternalCall();
614 return -1;
615 }
616 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +0100617 if (PyDict_SetItem(modules, name, mod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000618 return -1;
619 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100620 PyDict_DelItem(modules, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000621 return -1;
622 }
623 if (def->m_size == -1) {
624 if (def->m_base.m_copy) {
625 /* Somebody already imported the module,
626 likely under a different name.
627 XXX this should really not happen. */
628 Py_DECREF(def->m_base.m_copy);
629 def->m_base.m_copy = NULL;
630 }
631 dict = PyModule_GetDict(mod);
632 if (dict == NULL)
633 return -1;
634 def->m_base.m_copy = PyDict_Copy(dict);
635 if (def->m_base.m_copy == NULL)
636 return -1;
637 }
Victor Stinner49d3f252010-10-17 01:24:53 +0000638 PyDict_SetItem(extensions, filename, (PyObject*)def);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000639 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000640}
641
Victor Stinner49d3f252010-10-17 01:24:53 +0000642int
643_PyImport_FixupBuiltin(PyObject *mod, char *name)
644{
645 int res;
Victor Stinner95872862011-03-07 18:20:56 +0100646 PyObject *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100647 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100648 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000649 return -1;
Victor Stinner95872862011-03-07 18:20:56 +0100650 res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj);
651 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000652 return res;
653}
654
Guido van Rossum25ce5661997-08-02 03:10:38 +0000655PyObject *
Victor Stinner95872862011-03-07 18:20:56 +0100656_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000657{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000658 PyObject *mod, *mdict;
659 PyModuleDef* def;
660 if (extensions == NULL)
661 return NULL;
Victor Stinner49d3f252010-10-17 01:24:53 +0000662 def = (PyModuleDef*)PyDict_GetItem(extensions, filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000663 if (def == NULL)
664 return NULL;
665 if (def->m_size == -1) {
666 /* Module does not support repeated initialization */
667 if (def->m_base.m_copy == NULL)
668 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100669 mod = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000670 if (mod == NULL)
671 return NULL;
672 mdict = PyModule_GetDict(mod);
673 if (mdict == NULL)
674 return NULL;
675 if (PyDict_Update(mdict, def->m_base.m_copy))
676 return NULL;
677 }
678 else {
679 if (def->m_base.m_init == NULL)
680 return NULL;
681 mod = def->m_base.m_init();
682 if (mod == NULL)
683 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100684 PyDict_SetItem(PyImport_GetModuleDict(), name, mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000685 Py_DECREF(mod);
686 }
687 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100688 PyDict_DelItem(PyImport_GetModuleDict(), name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000689 Py_DECREF(mod);
690 return NULL;
691 }
692 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +0100693 PySys_FormatStderr("import %U # previously loaded (%R)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 name, filename);
695 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000696
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000697}
698
Victor Stinner49d3f252010-10-17 01:24:53 +0000699PyObject *
Victor Stinner501c09a2011-02-23 00:02:00 +0000700_PyImport_FindBuiltin(const char *name)
Victor Stinner49d3f252010-10-17 01:24:53 +0000701{
Victor Stinner95872862011-03-07 18:20:56 +0100702 PyObject *res, *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100703 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100704 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000705 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100706 res = _PyImport_FindExtensionObject(nameobj, nameobj);
707 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000708 return res;
709}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000710
711/* Get the module object corresponding to a module name.
712 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000713 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000714 Because the former action is most common, THIS DOES NOT RETURN A
715 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000716
Guido van Rossum79f25d91997-04-29 20:08:16 +0000717PyObject *
Victor Stinner27ee0892011-03-04 12:57:09 +0000718PyImport_AddModuleObject(PyObject *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000719{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000720 PyObject *modules = PyImport_GetModuleDict();
721 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000722
Victor Stinner27ee0892011-03-04 12:57:09 +0000723 if ((m = PyDict_GetItem(modules, name)) != NULL &&
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000724 PyModule_Check(m))
725 return m;
Victor Stinner27ee0892011-03-04 12:57:09 +0000726 m = PyModule_NewObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000727 if (m == NULL)
728 return NULL;
Victor Stinner27ee0892011-03-04 12:57:09 +0000729 if (PyDict_SetItem(modules, name, m) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000730 Py_DECREF(m);
731 return NULL;
732 }
733 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000734
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000735 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000736}
737
Victor Stinner27ee0892011-03-04 12:57:09 +0000738PyObject *
739PyImport_AddModule(const char *name)
740{
741 PyObject *nameobj, *module;
742 nameobj = PyUnicode_FromString(name);
743 if (nameobj == NULL)
744 return NULL;
745 module = PyImport_AddModuleObject(nameobj);
746 Py_DECREF(nameobj);
747 return module;
748}
749
750
Tim Peters1cd70172004-08-02 03:52:12 +0000751/* Remove name from sys.modules, if it's there. */
752static void
Victor Stinner27ee0892011-03-04 12:57:09 +0000753remove_module(PyObject *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000754{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000755 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner27ee0892011-03-04 12:57:09 +0000756 if (PyDict_GetItem(modules, name) == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000757 return;
Victor Stinner27ee0892011-03-04 12:57:09 +0000758 if (PyDict_DelItem(modules, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000759 Py_FatalError("import: deleting existing key in"
760 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000761}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000762
Victor Stinnerc9abda02011-03-14 13:33:46 -0400763static PyObject * get_sourcefile(PyObject *filename);
764static PyObject *make_source_pathname(PyObject *pathname);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200765static PyObject* make_compiled_pathname(PyObject *pathname, int debug);
Christian Heimes3b06e532008-01-07 20:12:44 +0000766
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000767/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000768 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
769 * removed from sys.modules, to avoid leaving damaged module objects
770 * in sys.modules. The caller may wish to restore the original
771 * module object (if any) in this case; PyImport_ReloadModule is an
772 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000773 *
774 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
775 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000776 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000777PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000778PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000779{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000780 return PyImport_ExecCodeModuleWithPathnames(
781 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000782}
783
784PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000785PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000786{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000787 return PyImport_ExecCodeModuleWithPathnames(
788 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000789}
790
791PyObject *
792PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000793 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000794{
Victor Stinner27ee0892011-03-04 12:57:09 +0000795 PyObject *m = NULL;
796 PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL;
797
798 nameobj = PyUnicode_FromString(name);
799 if (nameobj == NULL)
800 return NULL;
801
802 if (pathname != NULL) {
803 pathobj = PyUnicode_DecodeFSDefault(pathname);
804 if (pathobj == NULL)
805 goto error;
806 } else
807 pathobj = NULL;
808 if (cpathname != NULL) {
809 cpathobj = PyUnicode_DecodeFSDefault(cpathname);
810 if (cpathobj == NULL)
811 goto error;
812 } else
813 cpathobj = NULL;
814 m = PyImport_ExecCodeModuleObject(nameobj, co, pathobj, cpathobj);
815error:
816 Py_DECREF(nameobj);
817 Py_XDECREF(pathobj);
818 Py_XDECREF(cpathobj);
819 return m;
820}
821
822PyObject*
823PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
824 PyObject *cpathname)
825{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000826 PyObject *modules = PyImport_GetModuleDict();
827 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000828
Victor Stinner27ee0892011-03-04 12:57:09 +0000829 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000830 if (m == NULL)
831 return NULL;
832 /* If the module is being reloaded, we get the old module back
833 and re-use its dict to exec the new code. */
834 d = PyModule_GetDict(m);
835 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
836 if (PyDict_SetItemString(d, "__builtins__",
837 PyEval_GetBuiltins()) != 0)
838 goto error;
839 }
840 /* Remember the filename as the __file__ attribute */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000841 if (pathname != NULL) {
Victor Stinnerc9abda02011-03-14 13:33:46 -0400842 v = get_sourcefile(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000843 if (v == NULL)
844 PyErr_Clear();
845 }
Victor Stinner27ee0892011-03-04 12:57:09 +0000846 else
847 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000848 if (v == NULL) {
849 v = ((PyCodeObject *)co)->co_filename;
850 Py_INCREF(v);
851 }
852 if (PyDict_SetItemString(d, "__file__", v) != 0)
853 PyErr_Clear(); /* Not important enough to report */
854 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000855
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000856 /* Remember the pyc path name as the __cached__ attribute. */
Victor Stinner27ee0892011-03-04 12:57:09 +0000857 if (cpathname != NULL)
858 v = cpathname;
859 else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000860 v = Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 if (PyDict_SetItemString(d, "__cached__", v) != 0)
862 PyErr_Clear(); /* Not important enough to report */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000863
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000864 v = PyEval_EvalCode(co, d, d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000865 if (v == NULL)
866 goto error;
867 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000868
Victor Stinner27ee0892011-03-04 12:57:09 +0000869 if ((m = PyDict_GetItem(modules, name)) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000870 PyErr_Format(PyExc_ImportError,
Victor Stinner27ee0892011-03-04 12:57:09 +0000871 "Loaded module %R not found in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000872 name);
873 return NULL;
874 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000875
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000876 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000877
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000878 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000879
880 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 remove_module(name);
882 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000883}
884
885
Barry Warsaw28a691b2010-04-17 00:19:56 +0000886/* Like strrchr(string, '/') but searches for the rightmost of either SEP
887 or ALTSEP, if the latter is defined.
888*/
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200889static Py_UCS4*
890rightmost_sep(Py_UCS4 *s)
Victor Stinnerc9abda02011-03-14 13:33:46 -0400891{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200892 Py_UCS4 *found, c;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400893 for (found = NULL; (c = *s); s++) {
894 if (c == SEP
895#ifdef ALTSEP
896 || c == ALTSEP
897#endif
898 )
899 {
900 found = s;
901 }
902 }
903 return found;
904}
905
906
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000907/* Given a pathname for a Python source file, fill a buffer with the
908 pathname for the corresponding compiled file. Return the pathname
909 for the compiled file, or NULL if there's no space in the buffer.
Victor Stinner2f42ae52011-03-20 00:41:24 +0100910 Doesn't set an exception.
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000911
Victor Stinner2f42ae52011-03-20 00:41:24 +0100912 foo.py -> __pycache__/foo.<tag>.pyc */
913
914static PyObject*
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200915make_compiled_pathname(PyObject *pathstr, int debug)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000916{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200917 Py_UCS4 *pathname;
918 Py_UCS4 buf[MAXPATHLEN];
Victor Stinner2f42ae52011-03-20 00:41:24 +0100919 size_t buflen = (size_t)MAXPATHLEN;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200920 size_t len;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000921 size_t i, save;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200922 Py_UCS4 *pos;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000923 int sep = SEP;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000924
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200925 pathname = PyUnicode_AsUCS4Copy(pathstr);
926 if (!pathname)
927 return NULL;
928 len = Py_UCS4_strlen(pathname);
929
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000930 /* Sanity check that the buffer has roughly enough space to hold what
931 will eventually be the full path to the compiled file. The 5 extra
932 bytes include the slash afer __pycache__, the two extra dots, the
933 extra trailing character ('c' or 'o') and null. This isn't exact
934 because the contents of the buffer can affect how many actual
935 characters of the string get into the buffer. We'll do a final
936 sanity check before writing the extension to ensure we do not
937 overflow the buffer.
938 */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200939 if (len + Py_UCS4_strlen(CACHEDIR_UNICODE) + Py_UCS4_strlen(PYC_TAG_UNICODE) + 5 > buflen) {
940 PyMem_Free(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000941 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200942 }
Tim Petersc1731372001-08-04 08:12:36 +0000943
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000944 /* Find the last path separator and copy everything from the start of
945 the source string up to and including the separator.
946 */
Victor Stinner2f42ae52011-03-20 00:41:24 +0100947 pos = rightmost_sep(pathname);
948 if (pos == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000949 i = 0;
950 }
951 else {
952 sep = *pos;
953 i = pos - pathname + 1;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200954 Py_UCS4_strncpy(buf, pathname, i);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000955 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000956
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000957 save = i;
958 buf[i++] = '\0';
959 /* Add __pycache__/ */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200960 Py_UCS4_strcat(buf, CACHEDIR_UNICODE);
961 i += Py_UCS4_strlen(CACHEDIR_UNICODE) - 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000962 buf[i++] = sep;
Victor Stinnerccbf4752011-03-14 15:05:12 -0400963 buf[i] = '\0';
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000964 /* Add the base filename, but remove the .py or .pyw extension, since
965 the tag name must go before the extension.
966 */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200967 Py_UCS4_strcat(buf, pathname + save);
968 pos = Py_UCS4_strrchr(buf + i, '.');
Victor Stinner2f42ae52011-03-20 00:41:24 +0100969 if (pos != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000970 *++pos = '\0';
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200971
972 /* pathname is not used from here on. */
973 PyMem_Free(pathname);
974
975 Py_UCS4_strcat(buf, PYC_TAG_UNICODE);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000976 /* The length test above assumes that we're only adding one character
977 to the end of what would normally be the extension. What if there
978 is no extension, or the string ends in '.' or '.p', and otherwise
979 fills the buffer? By appending 4 more characters onto the string
980 here, we could overrun the buffer.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 As a simple example, let's say buflen=32 and the input string is
983 'xxx.py'. strlen() would be 6 and the test above would yield:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000984
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000985 (6 + 11 + 10 + 5 == 32) > 32
Barry Warsaw28a691b2010-04-17 00:19:56 +0000986
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000987 which is false and so the name mangling would continue. This would
988 be fine because we'd end up with this string in buf:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000989
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000990 __pycache__/xxx.cpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000991
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000992 strlen(of that) == 30 + the nul fits inside a 32 character buffer.
993 We can even handle an input string of say 'xxxxx' above because
994 that's (5 + 11 + 10 + 5 == 31) > 32 which is also false. Name
995 mangling that yields:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000996
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997 __pycache__/xxxxxcpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000998
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000999 which is 32 characters including the nul, and thus fits in the
1000 buffer. However, an input string of 'xxxxxx' would yield a result
1001 string of:
Barry Warsaw28a691b2010-04-17 00:19:56 +00001002
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001003 __pycache__/xxxxxxcpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +00001004
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001005 which is 33 characters long (including the nul), thus overflowing
1006 the buffer, even though the first test would fail, i.e.: the input
1007 string is also 6 characters long, so 32 > 32 is false.
Barry Warsaw28a691b2010-04-17 00:19:56 +00001008
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001009 The reason the first test fails but we still overflow the buffer is
1010 that the test above only expects to add one extra character to be
1011 added to the extension, and here we're adding three (pyc). We
1012 don't add the first dot, so that reclaims one of expected
1013 positions, leaving us overflowing by 1 byte (3 extra - 1 reclaimed
1014 dot - 1 expected extra == 1 overflowed).
Barry Warsaw28a691b2010-04-17 00:19:56 +00001015
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001016 The best we can do is ensure that we still have enough room in the
1017 target buffer before we write the extension. Because it's always
1018 only the extension that can cause the overflow, and never the other
1019 path bytes we've written, it's sufficient to just do one more test
1020 here. Still, the assertion that follows can't hurt.
1021 */
Barry Warsaw28a691b2010-04-17 00:19:56 +00001022#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001023 printf("strlen(buf): %d; buflen: %d\n", (int)strlen(buf), (int)buflen);
Barry Warsaw28a691b2010-04-17 00:19:56 +00001024#endif
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001025 len = Py_UCS4_strlen(buf);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001026 if (len + 5 > buflen)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001027 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001028 buf[len] = '.'; len++;
1029 buf[len] = 'p'; len++;
1030 buf[len] = 'y'; len++;
1031 buf[len] = debug ? 'c' : 'o'; len++;
1032 assert(len <= buflen);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001033 return PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, len);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001034}
1035
1036
Barry Warsaw28a691b2010-04-17 00:19:56 +00001037/* Given a pathname to a Python byte compiled file, return the path to the
1038 source file, if the path matches the PEP 3147 format. This does not check
1039 for any file existence, however, if the pyc file name does not match PEP
1040 3147 style, NULL is returned. buf must be at least as big as pathname;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001041 the resulting path will always be shorter.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001042
Victor Stinnerc9abda02011-03-14 13:33:46 -04001043 (...)/__pycache__/foo.<tag>.pyc -> (...)/foo.py */
1044
1045static PyObject*
1046make_source_pathname(PyObject *pathobj)
Barry Warsaw28a691b2010-04-17 00:19:56 +00001047{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001048 Py_UCS4 buf[MAXPATHLEN];
1049 Py_UCS4 *pathname;
1050 Py_UCS4 *left, *right, *dot0, *dot1, sep;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001051 size_t i, j;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001052
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001053 if (PyUnicode_GET_LENGTH(pathobj) > MAXPATHLEN)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001054 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001055 pathname = PyUnicode_AsUCS4Copy(pathobj);
1056 if (!pathname)
1057 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001058
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001059 /* Look back two slashes from the end. In between these two slashes
1060 must be the string __pycache__ or this is not a PEP 3147 style
1061 path. It's possible for there to be only one slash.
1062 */
Victor Stinner2f42ae52011-03-20 00:41:24 +01001063 right = rightmost_sep(pathname);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001064 if (right == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001065 return NULL;
1066 sep = *right;
1067 *right = '\0';
Victor Stinner2f42ae52011-03-20 00:41:24 +01001068 left = rightmost_sep(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001069 *right = sep;
1070 if (left == NULL)
1071 left = pathname;
1072 else
1073 left++;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001074 if (right-left != Py_UCS4_strlen(CACHEDIR_UNICODE) ||
1075 Py_UCS4_strncmp(left, CACHEDIR_UNICODE, right-left) != 0)
1076 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001077
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001078 /* Now verify that the path component to the right of the last slash
1079 has two dots in it.
1080 */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001081 if ((dot0 = Py_UCS4_strchr(right + 1, '.')) == NULL)
1082 goto error;
1083 if ((dot1 = Py_UCS4_strchr(dot0 + 1, '.')) == NULL)
1084 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001085 /* Too many dots? */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001086 if (Py_UCS4_strchr(dot1 + 1, '.') != NULL)
1087 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001088
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001089 /* This is a PEP 3147 path. Start by copying everything from the
1090 start of pathname up to and including the leftmost slash. Then
1091 copy the file's basename, removing the magic tag and adding a .py
1092 suffix.
1093 */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001094 Py_UCS4_strncpy(buf, pathname, (i=left-pathname));
1095 Py_UCS4_strncpy(buf+i, right+1, (j=dot0-right));
Victor Stinnerc9abda02011-03-14 13:33:46 -04001096 buf[i+j] = 'p';
1097 buf[i+j+1] = 'y';
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001098 PyMem_Free(pathname);
1099 return PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, i+j+2);
1100 error:
1101 PyMem_Free(pathname);
1102 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001103}
1104
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001105/* Given a pathname for a Python source file, its time of last
1106 modification, and a pathname for a compiled file, check whether the
1107 compiled file represents the same version of the source. If so,
1108 return a FILE pointer for the compiled file, positioned just after
1109 the header; if not, return NULL.
1110 Doesn't set an exception. */
1111
1112static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001113check_compiled_module(PyObject *pathname, time_t mtime, PyObject *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001114{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001115 FILE *fp;
1116 long magic;
1117 long pyc_mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001118
Victor Stinner2f42ae52011-03-20 00:41:24 +01001119 fp = _Py_fopen(cpathname, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001120 if (fp == NULL)
1121 return NULL;
1122 magic = PyMarshal_ReadLongFromFile(fp);
1123 if (magic != pyc_magic) {
1124 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001125 PySys_FormatStderr("# %R has bad magic\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001126 fclose(fp);
1127 return NULL;
1128 }
1129 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
1130 if (pyc_mtime != mtime) {
1131 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001132 PySys_FormatStderr("# %R has bad mtime\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001133 fclose(fp);
1134 return NULL;
1135 }
1136 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001137 PySys_FormatStderr("# %R matches %R\n", cpathname, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001138 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001139}
1140
1141
1142/* Read a code object from a file and check it for validity */
1143
Guido van Rossum79f25d91997-04-29 20:08:16 +00001144static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001145read_compiled_module(PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001146{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001147 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001148
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001149 co = PyMarshal_ReadLastObjectFromFile(fp);
1150 if (co == NULL)
1151 return NULL;
1152 if (!PyCode_Check(co)) {
1153 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001154 "Non-code object in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001155 Py_DECREF(co);
1156 return NULL;
1157 }
1158 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001159}
1160
1161
1162/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001163 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001164
Guido van Rossum79f25d91997-04-29 20:08:16 +00001165static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001166load_compiled_module(PyObject *name, PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001167{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001168 long magic;
1169 PyCodeObject *co;
1170 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001171
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001172 magic = PyMarshal_ReadLongFromFile(fp);
1173 if (magic != pyc_magic) {
1174 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001175 "Bad magic number in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001176 return NULL;
1177 }
1178 (void) PyMarshal_ReadLongFromFile(fp);
1179 co = read_compiled_module(cpathname, fp);
1180 if (co == NULL)
1181 return NULL;
1182 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001183 PySys_FormatStderr("import %U # precompiled from %R\n",
1184 name, cpathname);
1185 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1186 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001187 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001188
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001189 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001190}
1191
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001192/* Parse a source file and return the corresponding code object */
1193
Guido van Rossum79f25d91997-04-29 20:08:16 +00001194static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001195parse_source_module(PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001196{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001197 PyCodeObject *co;
1198 PyObject *pathbytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001199 mod_ty mod;
1200 PyCompilerFlags flags;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001201 PyArena *arena;
1202
1203 pathbytes = PyUnicode_EncodeFSDefault(pathname);
1204 if (pathbytes == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001205 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001206
Victor Stinner2f42ae52011-03-20 00:41:24 +01001207 arena = PyArena_New();
1208 if (arena == NULL) {
1209 Py_DECREF(pathbytes);
1210 return NULL;
1211 }
1212
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001213 flags.cf_flags = 0;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001214 mod = PyParser_ASTFromFile(fp, PyBytes_AS_STRING(pathbytes), NULL,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001215 Py_file_input, 0, 0, &flags,
1216 NULL, arena);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001217 if (mod != NULL)
1218 co = PyAST_Compile(mod, PyBytes_AS_STRING(pathbytes), NULL, arena);
1219 else
1220 co = NULL;
1221 Py_DECREF(pathbytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001222 PyArena_Free(arena);
1223 return co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001224}
1225
Guido van Rossum55a83382000-09-20 20:31:38 +00001226/* Helper to open a bytecode file for writing in exclusive mode */
1227
Victor Stinner783c82c2011-04-20 03:27:51 +02001228#ifndef MS_WINDOWS
Guido van Rossum55a83382000-09-20 20:31:38 +00001229static FILE *
Christian Heimes05e8be12008-02-23 18:30:17 +00001230open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +00001231{
1232#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001233 /* Use O_EXCL to avoid a race condition when another process tries to
1234 write the same file. When that happens, our open() call fails,
1235 which is just fine (since it's only a cache).
1236 XXX If the file exists and is writable but the directory is not
1237 writable, the file will never be written. Oh well.
1238 */
1239 int fd;
1240 (void) unlink(filename);
1241 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
Tim Peters42c83af2000-09-29 04:03:10 +00001242#ifdef O_BINARY
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001243 |O_BINARY /* necessary for Windows */
Tim Peters42c83af2000-09-29 04:03:10 +00001244#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001245#ifdef __VMS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001246 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001247#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001249#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001250 );
1251 if (fd < 0)
1252 return NULL;
1253 return fdopen(fd, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001254#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001255 /* Best we can do -- on Windows this can't happen anyway */
1256 return fopen(filename, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001257#endif
1258}
Victor Stinner783c82c2011-04-20 03:27:51 +02001259#endif
Guido van Rossum55a83382000-09-20 20:31:38 +00001260
1261
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001262/* Write a compiled module to a file, placing the time of last
1263 modification of its source into the header.
1264 Errors are ignored, if a write error occurs an attempt is made to
1265 remove the file. */
1266
1267static void
Victor Stinner2f42ae52011-03-20 00:41:24 +01001268write_compiled_module(PyCodeObject *co, PyObject *cpathname,
1269 struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001270{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001271 Py_UCS4 *cpathname_ucs4;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001272 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001273 time_t mtime = srcstat->st_mtime;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001274#ifdef MS_WINDOWS /* since Windows uses different permissions */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001275 mode_t mode = srcstat->st_mode & ~S_IEXEC;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001276#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001277 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
1278 mode_t dirmode = (srcstat->st_mode |
1279 S_IXUSR | S_IXGRP | S_IXOTH |
1280 S_IWUSR | S_IWGRP | S_IWOTH);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001281 PyObject *dirbytes;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001282#endif
Victor Stinner783c82c2011-04-20 03:27:51 +02001283#ifdef MS_WINDOWS
1284 int fd;
1285#else
1286 PyObject *cpathbytes;
1287#endif
1288 PyObject *dirname;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001289 Py_UCS4 *dirsep;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001290 int res, ok;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001291
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001292 /* Ensure that the __pycache__ directory exists. */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001293 cpathname_ucs4 = PyUnicode_AsUCS4Copy(cpathname);
1294 if (!cpathname_ucs4)
1295 return;
1296 dirsep = rightmost_sep(cpathname_ucs4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001297 if (dirsep == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001298 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001299 PySys_FormatStderr("# no %s path found %R\n", CACHEDIR, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001300 return;
1301 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001302 dirname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
1303 cpathname_ucs4,
1304 dirsep - cpathname_ucs4);
1305 PyMem_Free(cpathname_ucs4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001306 if (dirname == NULL) {
1307 PyErr_Clear();
1308 return;
1309 }
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001310
1311#ifdef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001312 res = CreateDirectoryW(PyUnicode_AS_UNICODE(dirname), NULL);
1313 ok = (res != 0);
1314 if (!ok && GetLastError() == ERROR_ALREADY_EXISTS)
1315 ok = 1;
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001316#else
Victor Stinner2f42ae52011-03-20 00:41:24 +01001317 dirbytes = PyUnicode_EncodeFSDefault(dirname);
1318 if (dirbytes == NULL) {
1319 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001320 return;
1321 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001322 res = mkdir(PyBytes_AS_STRING(dirbytes), dirmode);
1323 Py_DECREF(dirbytes);
1324 if (0 <= res)
1325 ok = 1;
1326 else
1327 ok = (errno == EEXIST);
1328#endif
1329 if (!ok) {
1330 if (Py_VerboseFlag)
1331 PySys_FormatStderr("# cannot create cache dir %R\n", dirname);
1332 Py_DECREF(dirname);
1333 return;
1334 }
1335 Py_DECREF(dirname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001336
Victor Stinner783c82c2011-04-20 03:27:51 +02001337#ifdef MS_WINDOWS
1338 (void)DeleteFileW(PyUnicode_AS_UNICODE(cpathname));
1339 fd = _wopen(PyUnicode_AS_UNICODE(cpathname),
1340 O_EXCL | O_CREAT | O_WRONLY | O_TRUNC | O_BINARY,
1341 mode);
1342 if (0 <= fd)
1343 fp = fdopen(fd, "wb");
1344 else
1345 fp = NULL;
1346#else
Victor Stinner2f42ae52011-03-20 00:41:24 +01001347 cpathbytes = PyUnicode_EncodeFSDefault(cpathname);
1348 if (cpathbytes == NULL) {
1349 PyErr_Clear();
1350 return;
1351 }
1352
1353 fp = open_exclusive(PyBytes_AS_STRING(cpathbytes), mode);
Victor Stinner783c82c2011-04-20 03:27:51 +02001354#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001355 if (fp == NULL) {
1356 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001357 PySys_FormatStderr(
1358 "# can't create %R\n", cpathname);
Victor Stinner783c82c2011-04-20 03:27:51 +02001359#ifndef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001360 Py_DECREF(cpathbytes);
Victor Stinner783c82c2011-04-20 03:27:51 +02001361#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001362 return;
1363 }
1364 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
1365 /* First write a 0 for mtime */
1366 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
1367 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
1368 if (fflush(fp) != 0 || ferror(fp)) {
1369 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001370 PySys_FormatStderr("# can't write %R\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001371 /* Don't keep partial file */
1372 fclose(fp);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001373#ifdef MS_WINDOWS
1374 (void)DeleteFileW(PyUnicode_AS_UNICODE(cpathname));
1375#else
1376 (void) unlink(PyBytes_AS_STRING(cpathbytes));
Victor Stinner2f42ae52011-03-20 00:41:24 +01001377 Py_DECREF(cpathbytes);
Victor Stinner783c82c2011-04-20 03:27:51 +02001378#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001379 return;
1380 }
Victor Stinner783c82c2011-04-20 03:27:51 +02001381#ifndef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001382 Py_DECREF(cpathbytes);
Victor Stinner783c82c2011-04-20 03:27:51 +02001383#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001384 /* Now write the true mtime */
1385 fseek(fp, 4L, 0);
1386 assert(mtime < LONG_MAX);
1387 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
1388 fflush(fp);
1389 fclose(fp);
1390 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001391 PySys_FormatStderr("# wrote %R\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001392}
1393
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001394static void
1395update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
1396{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001397 PyObject *constants, *tmp;
1398 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001399
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001400 if (PyUnicode_Compare(co->co_filename, oldname))
1401 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001402
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001403 tmp = co->co_filename;
1404 co->co_filename = newname;
1405 Py_INCREF(co->co_filename);
1406 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001407
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001408 constants = co->co_consts;
1409 n = PyTuple_GET_SIZE(constants);
1410 for (i = 0; i < n; i++) {
1411 tmp = PyTuple_GET_ITEM(constants, i);
1412 if (PyCode_Check(tmp))
1413 update_code_filenames((PyCodeObject *)tmp,
1414 oldname, newname);
1415 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001416}
1417
Victor Stinner2f42ae52011-03-20 00:41:24 +01001418static void
1419update_compiled_module(PyCodeObject *co, PyObject *newname)
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001420{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001421 PyObject *oldname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001422
Victor Stinner2f42ae52011-03-20 00:41:24 +01001423 if (PyUnicode_Compare(co->co_filename, newname) == 0)
1424 return;
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +00001425
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001426 oldname = co->co_filename;
1427 Py_INCREF(oldname);
1428 update_code_filenames(co, oldname, newname);
1429 Py_DECREF(oldname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001430}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001431
Brett Cannon442c9b92011-03-23 16:14:42 -07001432static PyObject *
1433imp_fix_co_filename(PyObject *self, PyObject *args)
1434{
1435 PyObject *co;
1436 PyObject *file_path;
1437
1438 if (!PyArg_ParseTuple(args, "OO:_fix_co_filename", &co, &file_path))
1439 return NULL;
1440
1441 if (!PyCode_Check(co)) {
1442 PyErr_SetString(PyExc_TypeError,
1443 "first argument must be a code object");
1444 return NULL;
1445 }
1446
1447 if (!PyUnicode_Check(file_path)) {
1448 PyErr_SetString(PyExc_TypeError,
1449 "second argument must be a string");
1450 return NULL;
1451 }
1452
1453 update_compiled_module((PyCodeObject*)co, file_path);
1454
1455 Py_RETURN_NONE;
1456}
1457
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001458/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001459 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
1460 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001461
Guido van Rossum79f25d91997-04-29 20:08:16 +00001462static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001463load_source_module(PyObject *name, PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001464{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001465 struct stat st;
1466 FILE *fpc;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001467 PyObject *cpathname = NULL, *cpathbytes = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001468 PyCodeObject *co;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001469 PyObject *m = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001470
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001471 if (fstat(fileno(fp), &st) != 0) {
1472 PyErr_Format(PyExc_RuntimeError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001473 "unable to get file status from %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001474 pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001475 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001476 }
Fred Drake4c82b232000-06-30 16:18:57 +00001477#if SIZEOF_TIME_T > 4
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001478 /* Python's .pyc timestamp handling presumes that the timestamp fits
1479 in 4 bytes. This will be fine until sometime in the year 2038,
1480 when a 4-byte signed time_t will overflow.
1481 */
1482 if (st.st_mtime >> 32) {
1483 PyErr_SetString(PyExc_OverflowError,
1484 "modification time overflows a 4 byte field");
Victor Stinner2f42ae52011-03-20 00:41:24 +01001485 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001486 }
Fred Drake4c82b232000-06-30 16:18:57 +00001487#endif
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001488 cpathname = make_compiled_pathname(pathname, !Py_OptimizeFlag);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001489
1490 if (cpathname != NULL)
1491 fpc = check_compiled_module(pathname, st.st_mtime, cpathname);
1492 else
1493 fpc = NULL;
1494
1495 if (fpc) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001496 co = read_compiled_module(cpathname, fpc);
1497 fclose(fpc);
1498 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001499 goto error;
1500 update_compiled_module(co, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001501 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001502 PySys_FormatStderr("import %U # precompiled from %R\n",
1503 name, cpathname);
1504 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1505 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001506 }
1507 else {
1508 co = parse_source_module(pathname, fp);
1509 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001510 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001511 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001512 PySys_FormatStderr("import %U # from %R\n",
Victor Stinner98dbba52011-03-14 15:15:47 -04001513 name, pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001514 if (cpathname != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001515 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1516 if (ro == NULL || !PyObject_IsTrue(ro))
1517 write_compiled_module(co, cpathname, &st);
1518 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001519 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1520 pathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001521 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001522 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001523
Victor Stinner2f42ae52011-03-20 00:41:24 +01001524error:
1525 Py_XDECREF(cpathbytes);
1526 Py_XDECREF(cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001527 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001528}
1529
Christian Heimes3b06e532008-01-07 20:12:44 +00001530/* Get source file -> unicode or None
1531 * Returns the path to the py file if available, else the given path
1532 */
1533static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001534get_sourcefile(PyObject *filename)
Christian Heimes3b06e532008-01-07 20:12:44 +00001535{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001536 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001537 Py_UCS4 *fileuni;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001538 PyObject *py;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001539 struct stat statbuf;
Christian Heimes3b06e532008-01-07 20:12:44 +00001540
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001541 len = PyUnicode_GET_LENGTH(filename);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001542 if (len == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001543 Py_RETURN_NONE;
Christian Heimes3b06e532008-01-07 20:12:44 +00001544
Victor Stinnerc9abda02011-03-14 13:33:46 -04001545 /* don't match *.pyc or *.pyo? */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001546 fileuni = PyUnicode_AsUCS4Copy(filename);
1547 if (!fileuni)
1548 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001549 if (len < 5
1550 || fileuni[len-4] != '.'
1551 || (fileuni[len-3] != 'p' && fileuni[len-3] != 'P')
1552 || (fileuni[len-2] != 'y' && fileuni[len-2] != 'Y'))
1553 goto unchanged;
Christian Heimes3b06e532008-01-07 20:12:44 +00001554
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001555 /* Start by trying to turn PEP 3147 path into source path. If that
1556 * fails, just chop off the trailing character, i.e. legacy pyc path
1557 * to py.
1558 */
Victor Stinnerc9abda02011-03-14 13:33:46 -04001559 py = make_source_pathname(filename);
1560 if (py == NULL) {
1561 PyErr_Clear();
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001562 py = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, fileuni, len - 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001563 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001564 if (py == NULL)
1565 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001566
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001567 if (_Py_stat(py, &statbuf) == 0 && S_ISREG(statbuf.st_mode)) {
1568 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001569 return py;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001570 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001571 Py_DECREF(py);
1572 goto unchanged;
1573
1574error:
1575 PyErr_Clear();
1576unchanged:
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001577 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001578 Py_INCREF(filename);
1579 return filename;
Christian Heimes3b06e532008-01-07 20:12:44 +00001580}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001581
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001582/* Forward */
Victor Stinner41c5fec2011-03-13 21:46:30 -04001583static PyObject *load_module(PyObject *, FILE *, PyObject *, int, PyObject *);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001584static struct filedescr *find_module(PyObject *, PyObject *, PyObject *,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001585 PyObject **, FILE **, PyObject **);
Victor Stinner53dc7352011-03-20 01:50:21 +01001586static struct _frozen * find_frozen(PyObject *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001587
1588/* Load a package and return its module object WITH INCREMENTED
1589 REFERENCE COUNT */
1590
1591static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001592load_package(PyObject *name, PyObject *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001593{
Victor Stinner41c5fec2011-03-13 21:46:30 -04001594 PyObject *m, *d, *bufobj;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001595 PyObject *file = NULL, *path_list = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001596 int err;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001597 FILE *fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001598 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001599
Victor Stinnerc9abda02011-03-14 13:33:46 -04001600 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001601 if (m == NULL)
1602 return NULL;
1603 if (Py_VerboseFlag)
Victor Stinner98dbba52011-03-14 15:15:47 -04001604 PySys_FormatStderr("import %U # directory %R\n",
1605 name, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001606 file = get_sourcefile(pathname);
1607 if (file == NULL)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001608 return NULL;
1609 path_list = Py_BuildValue("[O]", file);
1610 if (path_list == NULL) {
1611 Py_DECREF(file);
1612 return NULL;
1613 }
1614 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001615 err = PyDict_SetItemString(d, "__file__", file);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001616 Py_DECREF(file);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001617 if (err == 0)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001618 err = PyDict_SetItemString(d, "__path__", path_list);
1619 if (err != 0) {
1620 Py_DECREF(path_list);
1621 return NULL;
1622 }
Victor Stinner533d7832011-03-14 13:22:54 -04001623 fdp = find_module(name, initstr, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001624 &bufobj, &fp, NULL);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001625 Py_DECREF(path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001626 if (fdp == NULL) {
1627 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1628 PyErr_Clear();
1629 Py_INCREF(m);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001630 return m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001631 }
1632 else
Victor Stinnerc9abda02011-03-14 13:33:46 -04001633 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001634 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001635 m = load_module(name, fp, bufobj, fdp->type, NULL);
1636 Py_XDECREF(bufobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001637 if (fp != NULL)
1638 fclose(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001639 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001640}
1641
1642
1643/* Helper to test for built-in module */
1644
1645static int
Victor Stinner95872862011-03-07 18:20:56 +01001646is_builtin(PyObject *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001647{
Victor Stinner95872862011-03-07 18:20:56 +01001648 int i, cmp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001649 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
Victor Stinner95872862011-03-07 18:20:56 +01001650 cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name);
1651 if (cmp == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001652 if (PyImport_Inittab[i].initfunc == NULL)
1653 return -1;
1654 else
1655 return 1;
1656 }
1657 }
1658 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001659}
1660
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001661
Just van Rossum52e14d62002-12-30 22:08:05 +00001662/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1663 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001664 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001665 that can handle the path item. Return None if no hook could;
1666 this tells our caller it should fall back to the builtin
1667 import mechanism. Cache the result in path_importer_cache.
1668 Returns a borrowed reference. */
1669
1670static PyObject *
1671get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001672 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001673{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001674 PyObject *importer;
1675 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001676
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001677 /* These conditions are the caller's responsibility: */
1678 assert(PyList_Check(path_hooks));
1679 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001680
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001681 nhooks = PyList_Size(path_hooks);
1682 if (nhooks < 0)
1683 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001684
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001685 importer = PyDict_GetItem(path_importer_cache, p);
1686 if (importer != NULL)
1687 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001688
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001689 /* set path_importer_cache[p] to None to avoid recursion */
1690 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1691 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001692
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001693 for (j = 0; j < nhooks; j++) {
1694 PyObject *hook = PyList_GetItem(path_hooks, j);
1695 if (hook == NULL)
1696 return NULL;
1697 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1698 if (importer != NULL)
1699 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001700
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001701 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1702 return NULL;
1703 }
1704 PyErr_Clear();
1705 }
1706 if (importer == NULL) {
1707 importer = PyObject_CallFunctionObjArgs(
1708 (PyObject *)&PyNullImporter_Type, p, NULL
1709 );
1710 if (importer == NULL) {
1711 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1712 PyErr_Clear();
1713 return Py_None;
1714 }
1715 }
1716 }
1717 if (importer != NULL) {
1718 int err = PyDict_SetItem(path_importer_cache, p, importer);
1719 Py_DECREF(importer);
1720 if (err != 0)
1721 return NULL;
1722 }
1723 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001724}
1725
Christian Heimes9cd17752007-11-18 19:35:23 +00001726PyAPI_FUNC(PyObject *)
1727PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001728 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001729
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001730 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1731 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1732 importer = get_path_importer(path_importer_cache,
1733 path_hooks, path);
1734 }
1735 }
1736 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1737 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001738}
1739
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001740/* Search the path (default sys.path) for a module. Return the
1741 corresponding filedescr struct, and (via return arguments) the
1742 pathname and an open file. Return NULL if the module is not found. */
1743
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001744#ifdef MS_COREDLL
Victor Stinner4d6c1c42011-03-08 23:49:04 +01001745extern FILE *_PyWin_FindRegisteredModule(PyObject *, struct filedescr **,
1746 PyObject **p_path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001747#endif
1748
Victor Stinner547a2a62011-03-20 03:07:28 +01001749/* Forward */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001750static int case_ok(PyObject *, Py_ssize_t, PyObject *);
Victor Stinner547a2a62011-03-20 03:07:28 +01001751static int find_init_module(PyObject *);
Just van Rossum52e14d62002-12-30 22:08:05 +00001752static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001753
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001754/* Get the path of a module: get its importer and call importer.find_module()
1755 hook, or check if the module if a package (if path/__init__.py exists).
1756
1757 -1: error: a Python error occurred
1758 0: ignore: an error occurred because of invalid data, but the error is not
1759 important enough to be reported.
1760 1: get path: module not found, but *buf contains its path
1761 2: found: *p_fd is the file descriptor (IMP_HOOK or PKG_DIRECTORY)
1762 and *buf is the path */
1763
1764static int
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001765find_module_path(PyObject *fullname, PyObject *name, PyObject *path,
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001766 PyObject *path_hooks, PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001767 PyObject **p_path, PyObject **p_loader, struct filedescr **p_fd)
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001768{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001769 Py_UCS4 buf[MAXPATHLEN+1];
Victor Stinner2fd76e42011-03-14 15:19:39 -04001770 PyObject *path_unicode, *filename;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001771 Py_ssize_t len;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001772 struct stat statbuf;
1773 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
1774
1775 if (PyUnicode_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001776 Py_INCREF(path);
1777 path_unicode = path;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001778 }
1779 else if (PyBytes_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001780 path_unicode = PyUnicode_DecodeFSDefaultAndSize(
1781 PyBytes_AS_STRING(path), PyBytes_GET_SIZE(path));
1782 if (path_unicode == NULL)
1783 return -1;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001784 }
1785 else
1786 return 0;
1787
Victor Stinner46084ba2011-10-06 02:39:42 +02001788 if (PyUnicode_READY(path_unicode))
1789 return -1;
1790
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001791 len = PyUnicode_GET_LENGTH(path_unicode);
Georg Brandl4cb0de22011-09-28 21:49:49 +02001792 if (!PyUnicode_AsUCS4(path_unicode, buf, Py_ARRAY_LENGTH(buf), 1)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001793 Py_DECREF(path_unicode);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001794 PyErr_Clear();
1795 return 0;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001796 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001797 Py_DECREF(path_unicode);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001798
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001799 if (Py_UCS4_strlen(buf) != len)
Victor Stinner2fd76e42011-03-14 15:19:39 -04001800 return 0; /* path contains '\0' */
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001801
1802 /* sys.path_hooks import hook */
1803 if (p_loader != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001804 _Py_identifier(find_module);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001805 PyObject *importer;
1806
1807 importer = get_path_importer(path_importer_cache,
1808 path_hooks, path);
1809 if (importer == NULL) {
1810 return -1;
1811 }
1812 /* Note: importer is a borrowed reference */
1813 if (importer != Py_None) {
1814 PyObject *loader;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001815 loader = _PyObject_CallMethodId(importer,
1816 &PyId_find_module, "O", fullname);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001817 if (loader == NULL)
1818 return -1; /* error */
1819 if (loader != Py_None) {
1820 /* a loader was found */
1821 *p_loader = loader;
1822 *p_fd = &importhookdescr;
1823 return 2;
1824 }
1825 Py_DECREF(loader);
1826 return 0;
1827 }
1828 }
1829 /* no hook was found, use builtin import */
1830
1831 if (len > 0 && buf[len-1] != SEP
1832#ifdef ALTSEP
1833 && buf[len-1] != ALTSEP
1834#endif
1835 )
1836 buf[len++] = SEP;
Georg Brandl4cb0de22011-09-28 21:49:49 +02001837 if (!PyUnicode_AsUCS4(name, buf+len, Py_ARRAY_LENGTH(buf)-len, 1)) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001838 PyErr_Clear();
1839 return 0;
1840 }
1841 len += PyUnicode_GET_LENGTH(name);
Victor Stinner2fd76e42011-03-14 15:19:39 -04001842
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001843 filename = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
1844 buf, len);
Victor Stinner2fd76e42011-03-14 15:19:39 -04001845 if (filename == NULL)
1846 return -1;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001847
1848 /* Check for package import (buf holds a directory name,
1849 and there's an __init__ module in that directory */
1850#ifdef HAVE_STAT
Victor Stinner2fd76e42011-03-14 15:19:39 -04001851 if (_Py_stat(filename, &statbuf) == 0 && /* it exists */
Victor Stinnerd0296212011-03-14 14:04:10 -04001852 S_ISDIR(statbuf.st_mode)) /* it's a directory */
1853 {
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001854 int match;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001855
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001856 match = case_ok(filename, 0, name);
1857 if (match < 0) {
1858 Py_DECREF(filename);
1859 return -1;
1860 }
1861 if (match) { /* case matches */
1862 if (find_init_module(filename)) { /* and has __init__.py */
Victor Stinner2fd76e42011-03-14 15:19:39 -04001863 *p_path = filename;
Victor Stinnerd0296212011-03-14 14:04:10 -04001864 *p_fd = &fd_package;
1865 return 2;
1866 }
1867 else {
1868 int err;
Victor Stinnerd0296212011-03-14 14:04:10 -04001869 err = PyErr_WarnFormat(PyExc_ImportWarning, 1,
Victor Stinner547a2a62011-03-20 03:07:28 +01001870 "Not importing directory %R: missing __init__.py",
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001871 filename);
Victor Stinner547a2a62011-03-20 03:07:28 +01001872 if (err) {
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001873 Py_DECREF(filename);
Victor Stinnerd0296212011-03-14 14:04:10 -04001874 return -1;
Victor Stinner547a2a62011-03-20 03:07:28 +01001875 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001876 }
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001877 }
1878 }
1879#endif
Victor Stinner2fd76e42011-03-14 15:19:39 -04001880 *p_path = filename;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001881 return 1;
1882}
1883
1884/* Find a module in search_path_list. For each path, try
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001885 find_module_path() or try each _PyImport_Filetab suffix.
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001886
1887 If the module is found, return a file descriptor, write the path in
1888 *p_filename, write the pointer to the file object into *p_fp, and (if
1889 p_loader is not NULL) the loader into *p_loader.
1890
1891 Otherwise, raise an exception and return NULL. */
1892
Victor Stinner37580282011-03-20 01:34:43 +01001893static struct filedescr*
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001894find_module_path_list(PyObject *fullname, PyObject *name,
Victor Stinner37580282011-03-20 01:34:43 +01001895 PyObject *search_path_list, PyObject *path_hooks,
1896 PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001897 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001898{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001899 Py_ssize_t i, npath;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 struct filedescr *fdp = NULL;
1901 char *filemode;
1902 FILE *fp = NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001903 PyObject *prefix, *filename;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001904 int match;
Victor Stinner53dc7352011-03-20 01:50:21 +01001905
Victor Stinner37580282011-03-20 01:34:43 +01001906 npath = PyList_Size(search_path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001907 for (i = 0; i < npath; i++) {
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001908 PyObject *path;
1909 int ok;
1910
1911 path = PyList_GetItem(search_path_list, i);
1912 if (path == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001913 return NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001914
Victor Stinner2fd76e42011-03-14 15:19:39 -04001915 prefix = NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001916 ok = find_module_path(fullname, name, path,
1917 path_hooks, path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001918 &prefix, p_loader, &fdp);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001919 if (ok < 0)
1920 return NULL;
1921 if (ok == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001922 continue;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001923 if (ok == 2) {
1924 *p_path = prefix;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001925 return fdp;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001926 }
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001927
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001928 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001929 struct stat statbuf;
1930
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001931 filemode = fdp->mode;
1932 if (filemode[0] == 'U')
1933 filemode = "r" PY_STDIOTEXTMODE;
Victor Stinnerd0296212011-03-14 14:04:10 -04001934
Victor Stinner2fd76e42011-03-14 15:19:39 -04001935 filename = PyUnicode_FromFormat("%U%s", prefix, fdp->suffix);
1936 if (filename == NULL) {
1937 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001938 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001939 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001940
1941 if (Py_VerboseFlag > 1)
1942 PySys_FormatStderr("# trying %R\n", filename);
1943
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001944 if (_Py_stat(filename, &statbuf) == 0 && /* it exists */
1945 S_ISDIR(statbuf.st_mode)) /* it's a directory */
1946 {
1947 Py_DECREF(filename);
1948 continue;
1949 }
1950
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001951 fp = _Py_fopen(filename, filemode);
1952 if (fp == NULL) {
1953 Py_DECREF(filename);
Victor Stinner925ef392011-06-20 15:01:10 +02001954 if (PyErr_Occurred()) {
1955 Py_DECREF(prefix);
1956 return NULL;
1957 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001958 continue;
1959 }
1960 match = case_ok(filename, -(Py_ssize_t)strlen(fdp->suffix), name);
1961 if (match < 0) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001962 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001963 Py_DECREF(filename);
1964 return NULL;
1965 }
1966 if (match) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001967 Py_DECREF(prefix);
1968 *p_path = filename;
Victor Stinnerd0296212011-03-14 14:04:10 -04001969 *p_fp = fp;
1970 return fdp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001971 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001972 Py_DECREF(filename);
Victor Stinnerd0296212011-03-14 14:04:10 -04001973
1974 fclose(fp);
1975 fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001976 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001977 Py_DECREF(prefix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001978 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001979 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04001980 "No module named %R", name);
Victor Stinnerd0296212011-03-14 14:04:10 -04001981 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001982}
1983
Victor Stinner37580282011-03-20 01:34:43 +01001984/* Find a module:
1985
1986 - try find_module() of each sys.meta_path hook
1987 - try find_frozen()
1988 - try is_builtin()
1989 - try _PyWin_FindRegisteredModule() (Windows only)
1990 - otherwise, call find_module_path_list() with search_path_list (if not
1991 NULL) or sys.path
1992
Victor Stinner2fd76e42011-03-14 15:19:39 -04001993 fullname can be NULL, but only if p_loader is NULL.
1994
Victor Stinner37580282011-03-20 01:34:43 +01001995 Return:
1996
1997 - &fd_builtin (C_BUILTIN) if it is a builtin
1998 - &fd_frozen (PY_FROZEN) if it is frozen
Victor Stinner2fd76e42011-03-14 15:19:39 -04001999 - &fd_package (PKG_DIRECTORY) and write the filename into *p_path
Victor Stinner37580282011-03-20 01:34:43 +01002000 if it is a package
2001 - &importhookdescr (IMP_HOOK) and write the loader into *p_loader if a
2002 importer loader was found
2003 - a file descriptor (PY_SOURCE, PY_COMPILED, C_EXTENSION, PY_RESOURCE or
2004 PY_CODERESOURCE: see _PyImport_Filetab), write the filename into
Victor Stinner2fd76e42011-03-14 15:19:39 -04002005 *p_path and the pointer to the open file into *p_fp
Victor Stinner37580282011-03-20 01:34:43 +01002006 - NULL on error
2007
Victor Stinner2fd76e42011-03-14 15:19:39 -04002008 By default, *p_path, *p_fp and *p_loader (if set) are set to NULL.
2009 Eg. *p_path is set to NULL for a builtin package.
2010*/
Victor Stinner37580282011-03-20 01:34:43 +01002011
2012static struct filedescr *
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002013find_module(PyObject *fullname, PyObject *name, PyObject *search_path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04002014 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Victor Stinner37580282011-03-20 01:34:43 +01002015{
2016 Py_ssize_t i, npath;
2017 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
2018 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
2019 PyObject *path_hooks, *path_importer_cache;
Victor Stinner37580282011-03-20 01:34:43 +01002020
Victor Stinner2fd76e42011-03-14 15:19:39 -04002021 *p_path = NULL;
Victor Stinner37580282011-03-20 01:34:43 +01002022 *p_fp = NULL;
2023 if (p_loader != NULL)
2024 *p_loader = NULL;
2025
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002026 if (PyUnicode_GET_LENGTH(name) > MAXPATHLEN) {
2027 PyErr_SetString(PyExc_OverflowError,
2028 "module name is too long");
2029 return NULL;
2030 }
2031
Victor Stinner37580282011-03-20 01:34:43 +01002032 /* sys.meta_path import hook */
2033 if (p_loader != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002034 _Py_identifier(find_module);
Victor Stinner37580282011-03-20 01:34:43 +01002035 PyObject *meta_path;
2036
2037 meta_path = PySys_GetObject("meta_path");
2038 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinner16191322011-09-15 19:28:05 +02002039 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002040 "sys.meta_path must be a list of "
2041 "import hooks");
2042 return NULL;
2043 }
2044 Py_INCREF(meta_path); /* zap guard */
2045 npath = PyList_Size(meta_path);
2046 for (i = 0; i < npath; i++) {
2047 PyObject *loader;
2048 PyObject *hook = PyList_GetItem(meta_path, i);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002049 loader = _PyObject_CallMethodId(hook, &PyId_find_module,
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002050 "OO", fullname,
Victor Stinner37580282011-03-20 01:34:43 +01002051 search_path_list != NULL ?
2052 search_path_list : Py_None);
2053 if (loader == NULL) {
2054 Py_DECREF(meta_path);
2055 return NULL; /* true error */
2056 }
2057 if (loader != Py_None) {
2058 /* a loader was found */
2059 *p_loader = loader;
2060 Py_DECREF(meta_path);
2061 return &importhookdescr;
2062 }
2063 Py_DECREF(loader);
2064 }
2065 Py_DECREF(meta_path);
2066 }
2067
Victor Stinnerdf75a022011-03-14 13:40:04 -04002068 if (find_frozen(fullname) != NULL)
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002069 return &fd_frozen;
Victor Stinner37580282011-03-20 01:34:43 +01002070
2071 if (search_path_list == NULL) {
2072#ifdef MS_COREDLL
2073 FILE *fp;
2074 struct filedescr *fdp;
Victor Stinner37580282011-03-20 01:34:43 +01002075#endif
Victor Stinnerdf75a022011-03-14 13:40:04 -04002076 if (is_builtin(name))
Victor Stinner37580282011-03-20 01:34:43 +01002077 return &fd_builtin;
Victor Stinner37580282011-03-20 01:34:43 +01002078#ifdef MS_COREDLL
Victor Stinner2fd76e42011-03-14 15:19:39 -04002079 fp = _PyWin_FindRegisteredModule(name, &fdp, p_path);
Victor Stinner37580282011-03-20 01:34:43 +01002080 if (fp != NULL) {
Victor Stinner37580282011-03-20 01:34:43 +01002081 *p_fp = fp;
2082 return fdp;
2083 }
2084 else if (PyErr_Occurred())
2085 return NULL;
2086#endif
Victor Stinner37580282011-03-20 01:34:43 +01002087 search_path_list = PySys_GetObject("path");
2088 }
2089
2090 if (search_path_list == NULL || !PyList_Check(search_path_list)) {
Victor Stinner16191322011-09-15 19:28:05 +02002091 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002092 "sys.path must be a list of directory names");
2093 return NULL;
2094 }
2095
2096 path_hooks = PySys_GetObject("path_hooks");
2097 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinner16191322011-09-15 19:28:05 +02002098 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002099 "sys.path_hooks must be a list of "
2100 "import hooks");
2101 return NULL;
2102 }
2103 path_importer_cache = PySys_GetObject("path_importer_cache");
2104 if (path_importer_cache == NULL ||
2105 !PyDict_Check(path_importer_cache)) {
Victor Stinner16191322011-09-15 19:28:05 +02002106 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002107 "sys.path_importer_cache must be a dict");
2108 return NULL;
2109 }
2110
2111 return find_module_path_list(fullname, name,
2112 search_path_list, path_hooks,
2113 path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04002114 p_path, p_fp, p_loader);
Victor Stinner37580282011-03-20 01:34:43 +01002115}
2116
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002117/* case_bytes(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00002118 * The arguments here are tricky, best shown by example:
2119 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
2120 * ^ ^ ^ ^
2121 * |--------------------- buf ---------------------|
2122 * |------------------- len ------------------|
2123 * |------ name -------|
2124 * |----- namelen -----|
2125 * buf is the full path, but len only counts up to (& exclusive of) the
2126 * extension. name is the module name, also exclusive of extension.
2127 *
2128 * We've already done a successful stat() or fopen() on buf, so know that
2129 * there's some match, possibly case-insensitive.
2130 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002131 * case_bytes() is to return 1 if there's a case-sensitive match for
2132 * name, else 0. case_bytes() is also to return 1 if envar PYTHONCASEOK
Tim Peters50d8d372001-02-28 05:34:27 +00002133 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00002134 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002135 * case_bytes() is used to implement case-sensitive import semantics even
Tim Peters50d8d372001-02-28 05:34:27 +00002136 * on platforms with case-insensitive filesystems. It's trivial to implement
2137 * for case-sensitive filesystems. It's pretty much a cross-platform
2138 * nightmare for systems with case-insensitive filesystems.
2139 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00002140
Tim Peters50d8d372001-02-28 05:34:27 +00002141/* First we may need a pile of platform-specific header files; the sequence
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002142 * of #if's here should match the sequence in the body of case_bytes().
Tim Peters50d8d372001-02-28 05:34:27 +00002143 */
Jason Tishler7961aa62005-05-20 00:56:54 +00002144#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002145#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00002146
Tim Peters50d8d372001-02-28 05:34:27 +00002147#elif defined(DJGPP)
2148#include <dir.h>
2149
Jason Tishler7961aa62005-05-20 00:56:54 +00002150#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00002151#include <sys/types.h>
2152#include <dirent.h>
2153
Andrew MacIntyred9400542002-02-26 11:41:34 +00002154#elif defined(PYOS_OS2)
2155#define INCL_DOS
2156#define INCL_DOSERRORS
2157#define INCL_NOPMAPI
2158#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00002159#endif
2160
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002161#if defined(DJGPP) \
2162 || ((defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) \
2163 && defined(HAVE_DIRENT_H)) \
2164 || defined(PYOS_OS2)
2165# define USE_CASE_OK_BYTES
2166#endif
2167
2168
2169#ifdef USE_CASE_OK_BYTES
Guido van Rossum0980bd91998-02-13 17:18:36 +00002170static int
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002171case_bytes(char *buf, Py_ssize_t len, Py_ssize_t namelen, const char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002172{
Tim Peters50d8d372001-02-28 05:34:27 +00002173/* Pick a platform-specific implementation; the sequence of #if's here should
2174 * match the sequence just above.
2175 */
2176
Tim Peters50d8d372001-02-28 05:34:27 +00002177/* DJGPP */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002178#if defined(DJGPP)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002179 struct ffblk ffblk;
2180 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00002181
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002182 if (Py_GETENV("PYTHONCASEOK") != NULL)
2183 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00002184
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002185 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
2186 if (done) {
2187 PyErr_Format(PyExc_NameError,
2188 "Can't find file for module %.100s\n(filename %.300s)",
2189 name, buf);
Victor Stinner9c61e242011-03-22 01:22:27 +01002190 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002191 }
2192 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002193
Jason Tishler7961aa62005-05-20 00:56:54 +00002194/* new-fangled macintosh (macosx) or Cygwin */
2195#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002196 DIR *dirp;
2197 struct dirent *dp;
2198 char dirname[MAXPATHLEN + 1];
2199 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00002200
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002201 if (Py_GETENV("PYTHONCASEOK") != NULL)
2202 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00002203
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002204 /* Copy the dir component into dirname; substitute "." if empty */
2205 if (dirlen <= 0) {
2206 dirname[0] = '.';
2207 dirname[1] = '\0';
2208 }
2209 else {
2210 assert(dirlen <= MAXPATHLEN);
2211 memcpy(dirname, buf, dirlen);
2212 dirname[dirlen] = '\0';
2213 }
2214 /* Open the directory and search the entries for an exact match. */
2215 dirp = opendir(dirname);
2216 if (dirp) {
2217 char *nameWithExt = buf + len - namelen;
2218 while ((dp = readdir(dirp)) != NULL) {
2219 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00002220#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002221 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00002222#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002223 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00002224#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002225 if (thislen >= namelen &&
2226 strcmp(dp->d_name, nameWithExt) == 0) {
2227 (void)closedir(dirp);
2228 return 1; /* Found */
2229 }
2230 }
2231 (void)closedir(dirp);
2232 }
2233 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00002234
Andrew MacIntyred9400542002-02-26 11:41:34 +00002235/* OS/2 */
2236#elif defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002237 HDIR hdir = 1;
2238 ULONG srchcnt = 1;
2239 FILEFINDBUF3 ffbuf;
2240 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002241
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002242 if (Py_GETENV("PYTHONCASEOK") != NULL)
2243 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002244
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002245 rc = DosFindFirst(buf,
2246 &hdir,
2247 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
2248 &ffbuf, sizeof(ffbuf),
2249 &srchcnt,
2250 FIL_STANDARD);
2251 if (rc != NO_ERROR)
2252 return 0;
2253 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002254
Tim Peters50d8d372001-02-28 05:34:27 +00002255/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
2256#else
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002257# error "USE_CASE_OK_BYTES is not correctly defined"
2258#endif
2259}
2260#endif
2261
2262/*
2263 * Check if a filename case matchs the name case. We've already done a
2264 * successful stat() or fopen() on buf, so know that there's some match,
2265 * possibly case-insensitive.
2266 *
2267 * case_ok() is to return 1 if there's a case-sensitive match for name, 0 if it
2268 * the filename doesn't match, or -1 on error. case_ok() is also to return 1
2269 * if envar PYTHONCASEOK exists.
2270 *
2271 * case_ok() is used to implement case-sensitive import semantics even
2272 * on platforms with case-insensitive filesystems. It's trivial to implement
2273 * for case-sensitive filesystems. It's pretty much a cross-platform
2274 * nightmare for systems with case-insensitive filesystems.
2275 */
2276
2277static int
2278case_ok(PyObject *filename, Py_ssize_t prefix_delta, PyObject *name)
2279{
2280#ifdef MS_WINDOWS
2281 WIN32_FIND_DATAW data;
2282 HANDLE h;
2283 int cmp;
2284
2285 if (Py_GETENV("PYTHONCASEOK") != NULL)
2286 return 1;
2287
2288 h = FindFirstFileW(PyUnicode_AS_UNICODE(filename), &data);
2289 if (h == INVALID_HANDLE_VALUE) {
2290 PyErr_Format(PyExc_NameError,
2291 "Can't find file for module %R\n(filename %R)",
2292 name, filename);
2293 return 0;
2294 }
2295 FindClose(h);
2296 cmp = wcsncmp(data.cFileName,
2297 PyUnicode_AS_UNICODE(name),
2298 PyUnicode_GET_SIZE(name));
2299 return cmp == 0;
2300#elif defined(USE_CASE_OK_BYTES)
2301 int match;
2302 PyObject *filebytes, *namebytes;
2303 filebytes = PyUnicode_EncodeFSDefault(filename);
2304 if (filebytes == NULL)
2305 return -1;
2306 namebytes = PyUnicode_EncodeFSDefault(name);
2307 if (namebytes == NULL) {
2308 Py_DECREF(filebytes);
2309 return -1;
2310 }
2311 match = case_bytes(
2312 PyBytes_AS_STRING(filebytes),
2313 PyBytes_GET_SIZE(filebytes) + prefix_delta,
Victor Stinner1304f2d2011-03-20 04:28:55 +01002314 PyBytes_GET_SIZE(namebytes),
2315 PyBytes_AS_STRING(namebytes));
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002316 Py_DECREF(filebytes);
2317 Py_DECREF(namebytes);
2318 return match;
2319#else
2320 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002321 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002322
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002323#endif
Tim Peters50d8d372001-02-28 05:34:27 +00002324}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002325
Guido van Rossum197346f1997-10-31 18:38:52 +00002326#ifdef HAVE_STAT
Victor Stinner4f4402c2010-08-14 14:50:26 +00002327
Victor Stinner547a2a62011-03-20 03:07:28 +01002328/* Helper to look for __init__.py or __init__.py[co] in potential package.
2329 Return 1 if __init__ was found, 0 if not, or -1 on error. */
Guido van Rossum197346f1997-10-31 18:38:52 +00002330static int
Victor Stinner547a2a62011-03-20 03:07:28 +01002331find_init_module(PyObject *directory)
Guido van Rossum197346f1997-10-31 18:38:52 +00002332{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002333 struct stat statbuf;
Victor Stinner547a2a62011-03-20 03:07:28 +01002334 PyObject *filename;
2335 int match;
Guido van Rossum197346f1997-10-31 18:38:52 +00002336
Victor Stinner547a2a62011-03-20 03:07:28 +01002337 filename = PyUnicode_FromFormat("%U%c__init__.py", directory, SEP);
2338 if (filename == NULL)
2339 return -1;
2340 if (_Py_stat(filename, &statbuf) == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002341 /* 3=len(".py") */
2342 match = case_ok(filename, -3, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002343 if (match < 0) {
2344 Py_DECREF(filename);
2345 return -1;
2346 }
2347 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002348 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002349 return 1;
2350 }
2351 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002352 Py_DECREF(filename);
2353
2354 filename = PyUnicode_FromFormat("%U%c__init__.py%c",
2355 directory, SEP, Py_OptimizeFlag ? 'o' : 'c');
2356 if (filename == NULL)
2357 return -1;
2358 if (_Py_stat(filename, &statbuf) == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002359 /* 4=len(".pyc") */
2360 match = case_ok(filename, -4, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002361 if (match < 0) {
2362 Py_DECREF(filename);
2363 return -1;
2364 }
2365 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002366 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002367 return 1;
2368 }
2369 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002370 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002371 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00002372}
Guido van Rossum48a680c2001-03-02 06:34:14 +00002373
Guido van Rossum197346f1997-10-31 18:38:52 +00002374#endif /* HAVE_STAT */
2375
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002376
Victor Stinner95872862011-03-07 18:20:56 +01002377static int init_builtin(PyObject *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002378
Victor Stinner44c6c152010-08-09 00:59:10 +00002379static PyObject*
Victor Stinner95872862011-03-07 18:20:56 +01002380load_builtin(PyObject *name, int type)
Victor Stinner44c6c152010-08-09 00:59:10 +00002381{
2382 PyObject *m, *modules;
2383 int err;
2384
Victor Stinner44c6c152010-08-09 00:59:10 +00002385 if (type == C_BUILTIN)
2386 err = init_builtin(name);
2387 else
Victor Stinner95872862011-03-07 18:20:56 +01002388 err = PyImport_ImportFrozenModuleObject(name);
Victor Stinner44c6c152010-08-09 00:59:10 +00002389 if (err < 0)
2390 return NULL;
2391 if (err == 0) {
2392 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002393 "Purported %s module %R not found",
2394 type == C_BUILTIN ? "builtin" : "frozen",
Victor Stinner44c6c152010-08-09 00:59:10 +00002395 name);
2396 return NULL;
2397 }
2398
2399 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +01002400 m = PyDict_GetItem(modules, name);
Victor Stinner44c6c152010-08-09 00:59:10 +00002401 if (m == NULL) {
2402 PyErr_Format(
2403 PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002404 "%s module %R not properly initialized",
2405 type == C_BUILTIN ? "builtin" : "frozen",
Victor Stinner44c6c152010-08-09 00:59:10 +00002406 name);
2407 return NULL;
2408 }
2409 Py_INCREF(m);
2410 return m;
2411}
2412
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002413/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002414 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002415
Guido van Rossum79f25d91997-04-29 20:08:16 +00002416static PyObject *
Victor Stinner41c5fec2011-03-13 21:46:30 -04002417load_module(PyObject *name, FILE *fp, PyObject *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002418{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002419 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002420
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002421 /* First check that there's an open file (if we need one) */
2422 switch (type) {
2423 case PY_SOURCE:
2424 case PY_COMPILED:
2425 if (fp == NULL) {
2426 PyErr_Format(PyExc_ValueError,
Victor Stinner41c5fec2011-03-13 21:46:30 -04002427 "file object required for import (type code %d)",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002428 type);
2429 return NULL;
2430 }
2431 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002432
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002433 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002434
Victor Stinner41c5fec2011-03-13 21:46:30 -04002435 case PY_SOURCE:
2436 m = load_source_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002437 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002438
Victor Stinner41c5fec2011-03-13 21:46:30 -04002439 case PY_COMPILED:
2440 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002441 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002442
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002443#ifdef HAVE_DYNAMIC_LOADING
Victor Stinner41c5fec2011-03-13 21:46:30 -04002444 case C_EXTENSION:
2445 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002446 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002447#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002448
Victor Stinner41c5fec2011-03-13 21:46:30 -04002449 case PKG_DIRECTORY:
2450 m = load_package(name, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002451 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002452
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002453 case C_BUILTIN:
Victor Stinner41c5fec2011-03-13 21:46:30 -04002454 case PY_FROZEN:
2455 m = load_builtin(name, type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002456 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002457
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002458 case IMP_HOOK: {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002459 _Py_identifier(load_module);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002460 if (loader == NULL) {
2461 PyErr_SetString(PyExc_ImportError,
2462 "import hook without loader");
2463 return NULL;
2464 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002465 m = _PyObject_CallMethodId(loader, &PyId_load_module, "O", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002466 break;
2467 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002468
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002469 default:
2470 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04002471 "Don't know how to import %R (type code %d)",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002472 name, type);
2473 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002474
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002475 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002476
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002477 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002478}
2479
2480
2481/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00002482 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002483 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002484
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002485static int
Victor Stinner95872862011-03-07 18:20:56 +01002486init_builtin(PyObject *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002487{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002488 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002489
Victor Stinner95872862011-03-07 18:20:56 +01002490 if (_PyImport_FindExtensionObject(name, name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002491 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002492
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002493 for (p = PyImport_Inittab; p->name != NULL; p++) {
2494 PyObject *mod;
Victor Stinner95872862011-03-07 18:20:56 +01002495 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002496 if (p->initfunc == NULL) {
2497 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002498 "Cannot re-init internal module %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002499 name);
2500 return -1;
2501 }
2502 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +01002503 PySys_FormatStderr("import %U # builtin\n", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002504 mod = (*p->initfunc)();
2505 if (mod == 0)
2506 return -1;
Victor Stinner95872862011-03-07 18:20:56 +01002507 if (_PyImport_FixupExtensionObject(mod, name, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002508 return -1;
2509 /* FixupExtension has put the module into sys.modules,
2510 so we can release our own reference. */
2511 Py_DECREF(mod);
2512 return 1;
2513 }
2514 }
2515 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002516}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002517
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002518
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002519/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002520
Guido van Rossumcfd0a221996-06-17 17:06:34 +00002521static struct _frozen *
Victor Stinner53dc7352011-03-20 01:50:21 +01002522find_frozen(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002523{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002524 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002525
Victor Stinner53dc7352011-03-20 01:50:21 +01002526 if (name == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002527 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00002528
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002529 for (p = PyImport_FrozenModules; ; p++) {
2530 if (p->name == NULL)
2531 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01002532 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002533 break;
2534 }
2535 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002536}
2537
Guido van Rossum79f25d91997-04-29 20:08:16 +00002538static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002539get_frozen_object(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002540{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002541 struct _frozen *p = find_frozen(name);
2542 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002543
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002544 if (p == NULL) {
2545 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002546 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002547 name);
2548 return NULL;
2549 }
2550 if (p->code == NULL) {
2551 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002552 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002553 name);
2554 return NULL;
2555 }
2556 size = p->size;
2557 if (size < 0)
2558 size = -size;
2559 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002560}
2561
Brett Cannon8d110132009-03-15 02:20:16 +00002562static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002563is_frozen_package(PyObject *name)
Brett Cannon8d110132009-03-15 02:20:16 +00002564{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002565 struct _frozen *p = find_frozen(name);
2566 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00002567
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002568 if (p == NULL) {
2569 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002570 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002571 name);
2572 return NULL;
2573 }
Brett Cannon8d110132009-03-15 02:20:16 +00002574
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002575 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00002576
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002577 if (size < 0)
2578 Py_RETURN_TRUE;
2579 else
2580 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00002581}
2582
2583
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002584/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00002585 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002586 an exception set if the initialization failed.
2587 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002588
2589int
Victor Stinner53dc7352011-03-20 01:50:21 +01002590PyImport_ImportFrozenModuleObject(PyObject *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002591{
Victor Stinner53dc7352011-03-20 01:50:21 +01002592 struct _frozen *p;
2593 PyObject *co, *m, *path;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002594 int ispackage;
2595 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002596
Victor Stinner53dc7352011-03-20 01:50:21 +01002597 p = find_frozen(name);
2598
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002599 if (p == NULL)
2600 return 0;
2601 if (p->code == NULL) {
2602 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002603 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002604 name);
2605 return -1;
2606 }
2607 size = p->size;
2608 ispackage = (size < 0);
2609 if (ispackage)
2610 size = -size;
2611 if (Py_VerboseFlag)
Victor Stinner53dc7352011-03-20 01:50:21 +01002612 PySys_FormatStderr("import %U # frozen%s\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002613 name, ispackage ? " package" : "");
2614 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2615 if (co == NULL)
2616 return -1;
2617 if (!PyCode_Check(co)) {
2618 PyErr_Format(PyExc_TypeError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002619 "frozen object %R is not a code object",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002620 name);
2621 goto err_return;
2622 }
2623 if (ispackage) {
2624 /* Set __path__ to the package name */
Victor Stinner53dc7352011-03-20 01:50:21 +01002625 PyObject *d, *l;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002626 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01002627 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002628 if (m == NULL)
2629 goto err_return;
2630 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002631 l = PyList_New(1);
2632 if (l == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002633 goto err_return;
2634 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002635 Py_INCREF(name);
2636 PyList_SET_ITEM(l, 0, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002637 err = PyDict_SetItemString(d, "__path__", l);
2638 Py_DECREF(l);
2639 if (err != 0)
2640 goto err_return;
2641 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002642 path = PyUnicode_FromString("<frozen>");
2643 if (path == NULL)
2644 goto err_return;
2645 m = PyImport_ExecCodeModuleObject(name, co, path, NULL);
2646 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002647 if (m == NULL)
2648 goto err_return;
2649 Py_DECREF(co);
2650 Py_DECREF(m);
2651 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002652err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002653 Py_DECREF(co);
2654 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002655}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002656
Victor Stinner53dc7352011-03-20 01:50:21 +01002657int
2658PyImport_ImportFrozenModule(char *name)
2659{
2660 PyObject *nameobj;
2661 int ret;
2662 nameobj = PyUnicode_InternFromString(name);
2663 if (nameobj == NULL)
2664 return -1;
2665 ret = PyImport_ImportFrozenModuleObject(nameobj);
2666 Py_DECREF(nameobj);
2667 return ret;
2668}
2669
Guido van Rossum74e6a111994-08-29 12:54:38 +00002670
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002671/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002672 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002673
Guido van Rossum79f25d91997-04-29 20:08:16 +00002674PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002675PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002676{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002677 PyObject *pname;
2678 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002679
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002680 pname = PyUnicode_FromString(name);
2681 if (pname == NULL)
2682 return NULL;
2683 result = PyImport_Import(pname);
2684 Py_DECREF(pname);
2685 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002686}
2687
Christian Heimes072c0f12008-01-03 23:01:04 +00002688/* Import a module without blocking
2689 *
2690 * At first it tries to fetch the module from sys.modules. If the module was
2691 * never loaded before it loads it with PyImport_ImportModule() unless another
2692 * thread holds the import lock. In the latter case the function raises an
2693 * ImportError instead of blocking.
2694 *
2695 * Returns the module object with incremented ref count.
2696 */
2697PyObject *
2698PyImport_ImportModuleNoBlock(const char *name)
2699{
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002700 PyObject *nameobj, *modules, *result;
Victor Stinner0af03062011-09-02 00:11:43 +02002701#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002702 long me;
Victor Stinner0af03062011-09-02 00:11:43 +02002703#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002704
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002705 /* Try to get the module from sys.modules[name] */
2706 modules = PyImport_GetModuleDict();
2707 if (modules == NULL)
2708 return NULL;
Christian Heimes072c0f12008-01-03 23:01:04 +00002709
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002710 nameobj = PyUnicode_FromString(name);
2711 if (nameobj == NULL)
2712 return NULL;
2713 result = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002714 if (result != NULL) {
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002715 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002716 Py_INCREF(result);
2717 return result;
2718 }
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002719 PyErr_Clear();
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002720#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002721 /* check the import lock
2722 * me might be -1 but I ignore the error here, the lock function
2723 * takes care of the problem */
2724 me = PyThread_get_thread_ident();
2725 if (import_lock_thread == -1 || import_lock_thread == me) {
2726 /* no thread or me is holding the lock */
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002727 result = PyImport_Import(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002728 }
2729 else {
2730 PyErr_Format(PyExc_ImportError,
Victor Stinnerc24c8102011-03-13 22:38:06 -04002731 "Failed to import %R because the import lock"
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002732 "is held by another thread.",
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002733 nameobj);
2734 result = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002735 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002736#else
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002737 result = PyImport_Import(nameobj);
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002738#endif
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002739 Py_DECREF(nameobj);
2740 return result;
Christian Heimes072c0f12008-01-03 23:01:04 +00002741}
2742
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002743/* Forward declarations for helper routines */
Victor Stinner974389d2011-03-15 09:33:57 +01002744static PyObject *get_parent(PyObject *globals,
2745 PyObject **p_name,
2746 int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002747static PyObject *load_next(PyObject *mod, PyObject *altmod,
Victor Stinner974389d2011-03-15 09:33:57 +01002748 PyObject *inputname, PyObject **p_outputname,
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002749 Py_UCS4 *buf, Py_ssize_t *p_buflen,
Victor Stinner974389d2011-03-15 09:33:57 +01002750 Py_ssize_t bufsize);
2751static int mark_miss(PyObject *name);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002752static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Victor Stinner974389d2011-03-15 09:33:57 +01002753 PyObject *buf, int recursive);
2754static PyObject * import_submodule(PyObject *mod, PyObject *name,
2755 PyObject *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002756
2757/* The Magnum Opus of dotted-name import :-) */
2758
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002759static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01002760import_module_level(PyObject *name, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002761 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002762{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002763 Py_UCS4 buf[MAXPATHLEN+1];
Victor Stinner974389d2011-03-15 09:33:57 +01002764 Py_ssize_t buflen;
2765 Py_ssize_t bufsize = MAXPATHLEN+1;
2766 PyObject *parent, *head, *next, *tail, *inputname, *outputname;
2767 PyObject *parent_name, *ensure_name;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002768 Py_ssize_t sep, altsep;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002769
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002770 if (PyUnicode_READY(name))
2771 return NULL;
Victor Stinner974389d2011-03-15 09:33:57 +01002772
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002773 sep = PyUnicode_FindChar(name, SEP, 0, PyUnicode_GET_LENGTH(name), 1);
2774 if (sep == -2)
2775 return NULL;
Victor Stinner974389d2011-03-15 09:33:57 +01002776#ifdef ALTSEP
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002777 altsep = PyUnicode_FindChar(name, ALTSEP, 0, PyUnicode_GET_LENGTH(name), 1);
2778 if (altsep == -2)
2779 return NULL;
2780#else
2781 altsep = -1;
Christian Heimes454f37b2008-01-10 00:10:02 +00002782#endif
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002783 if (sep != -1 || altsep != -1)
2784 {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002785 PyErr_SetString(PyExc_ImportError,
2786 "Import by filename is not supported.");
2787 return NULL;
2788 }
Christian Heimes454f37b2008-01-10 00:10:02 +00002789
Victor Stinner974389d2011-03-15 09:33:57 +01002790 parent = get_parent(globals, &parent_name, level);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002791 if (parent == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002792 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002793 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002794
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002795 if (PyUnicode_READY(parent_name))
2796 return NULL;
2797 buflen = PyUnicode_GET_LENGTH(parent_name);
Georg Brandl4cb0de22011-09-28 21:49:49 +02002798 if (!PyUnicode_AsUCS4(parent_name, buf, Py_ARRAY_LENGTH(buf), 1)) {
Victor Stinner974389d2011-03-15 09:33:57 +01002799 Py_DECREF(parent_name);
2800 PyErr_SetString(PyExc_ValueError,
2801 "Module name too long");
2802 return NULL;
2803 }
Victor Stinner974389d2011-03-15 09:33:57 +01002804 Py_DECREF(parent_name);
2805
2806 head = load_next(parent, level < 0 ? Py_None : parent, name, &outputname,
2807 buf, &buflen, bufsize);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002808 if (head == NULL)
2809 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002810
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002811 tail = head;
2812 Py_INCREF(tail);
Victor Stinner974389d2011-03-15 09:33:57 +01002813
2814 if (outputname != NULL) {
2815 while (1) {
2816 inputname = outputname;
2817 next = load_next(tail, tail, inputname, &outputname,
2818 buf, &buflen, bufsize);
2819 Py_DECREF(tail);
2820 Py_DECREF(inputname);
2821 if (next == NULL) {
2822 Py_DECREF(head);
2823 return NULL;
2824 }
2825 tail = next;
2826
2827 if (outputname == NULL) {
2828 break;
2829 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002830 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002831 }
2832 if (tail == Py_None) {
2833 /* If tail is Py_None, both get_parent and load_next found
2834 an empty module name: someone called __import__("") or
2835 doctored faulty bytecode */
2836 Py_DECREF(tail);
2837 Py_DECREF(head);
Victor Stinner974389d2011-03-15 09:33:57 +01002838 PyErr_SetString(PyExc_ValueError, "Empty module name");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002839 return NULL;
2840 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002841
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002842 if (fromlist != NULL) {
2843 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2844 fromlist = NULL;
2845 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002846
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002847 if (fromlist == NULL) {
2848 Py_DECREF(tail);
2849 return head;
2850 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002851
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002852 Py_DECREF(head);
Victor Stinner974389d2011-03-15 09:33:57 +01002853
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002854 ensure_name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
2855 buf, Py_UCS4_strlen(buf));
Victor Stinner974389d2011-03-15 09:33:57 +01002856 if (ensure_name == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002857 Py_DECREF(tail);
2858 return NULL;
2859 }
Victor Stinner974389d2011-03-15 09:33:57 +01002860 if (!ensure_fromlist(tail, fromlist, ensure_name, 0)) {
2861 Py_DECREF(tail);
2862 Py_DECREF(ensure_name);
2863 return NULL;
2864 }
2865 Py_DECREF(ensure_name);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002866
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002867 return tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002868}
2869
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002870PyObject *
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002871PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
2872 PyObject *locals, PyObject *fromlist,
2873 int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002874{
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002875 PyObject *mod;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002876 _PyImport_AcquireLock();
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002877 mod = import_module_level(name, globals, locals, fromlist, level);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002878 if (_PyImport_ReleaseLock() < 0) {
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002879 Py_XDECREF(mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002880 PyErr_SetString(PyExc_RuntimeError,
2881 "not holding the import lock");
2882 return NULL;
2883 }
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002884 return mod;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002885}
2886
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002887PyObject *
Benjamin Peterson04778a82011-05-25 09:29:00 -05002888PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002889 PyObject *fromlist, int level)
2890{
2891 PyObject *nameobj, *mod;
2892 nameobj = PyUnicode_FromString(name);
2893 if (nameobj == NULL)
2894 return NULL;
2895 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
2896 fromlist, level);
2897 Py_DECREF(nameobj);
2898 return mod;
2899}
2900
2901
Fred Drake87590902004-05-28 20:21:36 +00002902/* Return the package that an import is being performed in. If globals comes
2903 from the module foo.bar.bat (not itself a package), this returns the
2904 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002905 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002906
Victor Stinner974389d2011-03-15 09:33:57 +01002907 The name of the returned package is returned in *p_name.
Fred Drake87590902004-05-28 20:21:36 +00002908
2909 If globals doesn't come from a package or a module in a package, or a
2910 corresponding entry is not found in sys.modules, Py_None is returned.
2911*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002912static PyObject *
Victor Stinner9599de52011-03-13 22:38:38 -04002913get_parent(PyObject *globals, PyObject **p_name, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002914{
Victor Stinner974389d2011-03-15 09:33:57 +01002915 PyObject *nameobj;
2916
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002917 static PyObject *namestr = NULL;
2918 static PyObject *pathstr = NULL;
2919 static PyObject *pkgstr = NULL;
2920 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2921 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002923 if (globals == NULL || !PyDict_Check(globals) || !level)
Victor Stinner974389d2011-03-15 09:33:57 +01002924 goto return_none;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002925
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002926 if (namestr == NULL) {
2927 namestr = PyUnicode_InternFromString("__name__");
2928 if (namestr == NULL)
2929 return NULL;
2930 }
2931 if (pathstr == NULL) {
2932 pathstr = PyUnicode_InternFromString("__path__");
2933 if (pathstr == NULL)
2934 return NULL;
2935 }
2936 if (pkgstr == NULL) {
2937 pkgstr = PyUnicode_InternFromString("__package__");
2938 if (pkgstr == NULL)
2939 return NULL;
2940 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002941
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002942 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002943
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002944 if ((pkgname != NULL) && (pkgname != Py_None)) {
2945 /* __package__ is set, so use it */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002946 if (!PyUnicode_Check(pkgname)) {
2947 PyErr_SetString(PyExc_ValueError,
2948 "__package__ set to non-string");
2949 return NULL;
2950 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002951 if (PyUnicode_GET_LENGTH(pkgname) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002952 if (level > 0) {
2953 PyErr_SetString(PyExc_ValueError,
2954 "Attempted relative import in non-package");
2955 return NULL;
2956 }
Victor Stinner974389d2011-03-15 09:33:57 +01002957 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002958 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002959 Py_INCREF(pkgname);
2960 nameobj = pkgname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002961 } else {
2962 /* __package__ not set, so figure it out and set it */
2963 modname = PyDict_GetItem(globals, namestr);
2964 if (modname == NULL || !PyUnicode_Check(modname))
Victor Stinner974389d2011-03-15 09:33:57 +01002965 goto return_none;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00002966
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002967 modpath = PyDict_GetItem(globals, pathstr);
2968 if (modpath != NULL) {
2969 /* __path__ is set, so modname is already the package name */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002970 int error;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002971
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002972 error = PyDict_SetItem(globals, pkgstr, modname);
2973 if (error) {
2974 PyErr_SetString(PyExc_ValueError,
2975 "Could not set __package__");
2976 return NULL;
2977 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002978 Py_INCREF(modname);
2979 nameobj = modname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002980 } else {
2981 /* Normal module, so work out the package name if any */
Victor Stinner974389d2011-03-15 09:33:57 +01002982 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002983 len = PyUnicode_FindChar(modname, '.',
2984 0, PyUnicode_GET_LENGTH(modname), -1);
2985 if (len == -2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002986 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002987 if (len < 0) {
2988 if (level > 0) {
2989 PyErr_SetString(PyExc_ValueError,
2990 "Attempted relative import in non-package");
2991 return NULL;
2992 }
2993 if (PyDict_SetItem(globals, pkgstr, Py_None)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002994 PyErr_SetString(PyExc_ValueError,
2995 "Could not set __package__");
2996 return NULL;
2997 }
Victor Stinner974389d2011-03-15 09:33:57 +01002998 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002999 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003000 pkgname = PyUnicode_Substring(modname, 0, len);
3001 if (pkgname == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003002 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003003 if (PyDict_SetItem(globals, pkgstr, pkgname)) {
3004 Py_DECREF(pkgname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003005 PyErr_SetString(PyExc_ValueError,
3006 "Could not set __package__");
3007 return NULL;
3008 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003009 nameobj = pkgname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003010 }
3011 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003012 if (level > 1) {
3013 Py_ssize_t dot, end = PyUnicode_GET_LENGTH(nameobj);
3014 PyObject *newname;
3015 while (--level > 0) {
3016 dot = PyUnicode_FindChar(nameobj, '.', 0, end, -1);
3017 if (dot == -2) {
3018 Py_DECREF(nameobj);
3019 return NULL;
3020 }
3021 if (dot < 0) {
3022 Py_DECREF(nameobj);
3023 PyErr_SetString(PyExc_ValueError,
3024 "Attempted relative import beyond "
3025 "toplevel package");
3026 return NULL;
3027 }
3028 end = dot;
3029 }
3030 newname = PyUnicode_Substring(nameobj, 0, end);
3031 Py_DECREF(nameobj);
3032 if (newname == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003033 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003034 nameobj = newname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003035 }
Victor Stinner974389d2011-03-15 09:33:57 +01003036
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003037 modules = PyImport_GetModuleDict();
Victor Stinner974389d2011-03-15 09:33:57 +01003038 parent = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003039 if (parent == NULL) {
Victor Stinner974389d2011-03-15 09:33:57 +01003040 int err;
3041
3042 if (orig_level >= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003043 PyErr_Format(PyExc_SystemError,
Victor Stinner974389d2011-03-15 09:33:57 +01003044 "Parent module %R not loaded, "
3045 "cannot perform relative import", nameobj);
3046 Py_DECREF(nameobj);
3047 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003048 }
Victor Stinner974389d2011-03-15 09:33:57 +01003049
3050 err = PyErr_WarnFormat(
3051 PyExc_RuntimeWarning, 1,
3052 "Parent module %R not found while handling absolute import",
3053 nameobj);
3054 Py_DECREF(nameobj);
3055 if (err)
3056 return NULL;
3057
3058 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003059 }
Victor Stinner974389d2011-03-15 09:33:57 +01003060 *p_name = nameobj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003061 return parent;
3062 /* We expect, but can't guarantee, if parent != None, that:
Victor Stinner974389d2011-03-15 09:33:57 +01003063 - parent.__name__ == name
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003064 - parent.__dict__ is globals
3065 If this is violated... Who cares? */
Victor Stinner974389d2011-03-15 09:33:57 +01003066
3067return_none:
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003068 nameobj = PyUnicode_New(0, 0);
Victor Stinner974389d2011-03-15 09:33:57 +01003069 if (nameobj == NULL)
3070 return NULL;
3071 *p_name = nameobj;
3072 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003073}
3074
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003075/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003076static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01003077load_next(PyObject *mod, PyObject *altmod,
3078 PyObject *inputname, PyObject **p_outputname,
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003079 Py_UCS4 *buf, Py_ssize_t *p_buflen, Py_ssize_t bufsize)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003080{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003081 Py_UCS4 *dot;
Victor Stinner974389d2011-03-15 09:33:57 +01003082 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003083 Py_UCS4 *p;
Victor Stinner974389d2011-03-15 09:33:57 +01003084 PyObject *fullname, *name, *result, *mark_name;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003085 Py_UCS4 *nameuni;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003086
Victor Stinner974389d2011-03-15 09:33:57 +01003087 *p_outputname = NULL;
3088
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003089 if (PyUnicode_GET_LENGTH(inputname) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003090 /* completely empty module name should only happen in
3091 'from . import' (or '__import__("")')*/
3092 Py_INCREF(mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003093 return mod;
3094 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00003095
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003096 nameuni = PyUnicode_AsUCS4Copy(inputname);
Victor Stinner974389d2011-03-15 09:33:57 +01003097 if (nameuni == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003098 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003099
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003100 dot = Py_UCS4_strchr(nameuni, '.');
Victor Stinner974389d2011-03-15 09:33:57 +01003101 if (dot != NULL) {
3102 len = dot - nameuni;
3103 if (len == 0) {
3104 PyErr_SetString(PyExc_ValueError,
3105 "Empty module name");
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003106 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003107 }
3108 }
3109 else
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003110 len = PyUnicode_GET_LENGTH(inputname);
Victor Stinner974389d2011-03-15 09:33:57 +01003111
3112 if (*p_buflen+len+1 >= bufsize) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003113 PyErr_SetString(PyExc_ValueError,
3114 "Module name too long");
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003115 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003116 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003117
Victor Stinner974389d2011-03-15 09:33:57 +01003118 p = buf + *p_buflen;
3119 if (p != buf) {
3120 *p++ = '.';
3121 *p_buflen += 1;
3122 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003123 Py_UCS4_strncpy(p, nameuni, len);
Victor Stinner974389d2011-03-15 09:33:57 +01003124 p[len] = '\0';
3125 *p_buflen += len;
3126
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003127 fullname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3128 buf, *p_buflen);
Victor Stinner974389d2011-03-15 09:33:57 +01003129 if (fullname == NULL)
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003130 goto error;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003131 name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3132 p, len);
Victor Stinner974389d2011-03-15 09:33:57 +01003133 if (name == NULL) {
3134 Py_DECREF(fullname);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003135 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003136 }
3137 result = import_submodule(mod, name, fullname);
3138 Py_DECREF(fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003139 if (result == Py_None && altmod != mod) {
3140 Py_DECREF(result);
3141 /* Here, altmod must be None and mod must not be None */
Victor Stinner974389d2011-03-15 09:33:57 +01003142 result = import_submodule(altmod, name, name);
3143 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003144 if (result != NULL && result != Py_None) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003145 mark_name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3146 buf, *p_buflen);
Victor Stinner974389d2011-03-15 09:33:57 +01003147 if (mark_name == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003148 Py_DECREF(result);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003149 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003150 }
Victor Stinner974389d2011-03-15 09:33:57 +01003151 if (mark_miss(mark_name) != 0) {
3152 Py_DECREF(result);
3153 Py_DECREF(mark_name);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003154 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003155 }
3156 Py_DECREF(mark_name);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003157 Py_UCS4_strncpy(buf, nameuni, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003158 buf[len] = '\0';
3159 *p_buflen = len;
3160 }
3161 }
Victor Stinner974389d2011-03-15 09:33:57 +01003162 else
3163 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003164 if (result == NULL)
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003165 goto error;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003166
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003167 if (result == Py_None) {
3168 Py_DECREF(result);
3169 PyErr_Format(PyExc_ImportError,
Victor Stinner974389d2011-03-15 09:33:57 +01003170 "No module named %R", inputname);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003171 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003172 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003173
Victor Stinner974389d2011-03-15 09:33:57 +01003174 if (dot != NULL) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003175 *p_outputname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3176 dot+1, Py_UCS4_strlen(dot+1));
Victor Stinner974389d2011-03-15 09:33:57 +01003177 if (*p_outputname == NULL) {
3178 Py_DECREF(result);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003179 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003180 }
3181 }
3182
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003183 PyMem_Free(nameuni);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003184 return result;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003185
3186error:
3187 PyMem_Free(nameuni);
3188 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003189}
3190
3191static int
Victor Stinner974389d2011-03-15 09:33:57 +01003192mark_miss(PyObject *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00003193{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003194 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner974389d2011-03-15 09:33:57 +01003195 return PyDict_SetItem(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00003196}
3197
3198static int
Victor Stinner974389d2011-03-15 09:33:57 +01003199ensure_fromlist(PyObject *mod, PyObject *fromlist, PyObject *name,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003200 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003201{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003202 int i;
Victor Stinner974389d2011-03-15 09:33:57 +01003203 PyObject *fullname;
3204 Py_ssize_t fromlist_len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003205
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003206 if (!PyObject_HasAttrString(mod, "__path__"))
3207 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003208
Victor Stinner974389d2011-03-15 09:33:57 +01003209 fromlist_len = PySequence_Size(fromlist);
3210
3211 for (i = 0; i < fromlist_len; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003212 PyObject *item = PySequence_GetItem(fromlist, i);
3213 int hasit;
Victor Stinner974389d2011-03-15 09:33:57 +01003214 if (item == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003215 return 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003216 if (!PyUnicode_Check(item)) {
3217 PyErr_SetString(PyExc_TypeError,
3218 "Item in ``from list'' not a string");
3219 Py_DECREF(item);
3220 return 0;
3221 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003222 if (PyUnicode_READ_CHAR(item, 0) == '*') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003223 PyObject *all;
3224 Py_DECREF(item);
3225 /* See if the package defines __all__ */
3226 if (recursive)
3227 continue; /* Avoid endless recursion */
3228 all = PyObject_GetAttrString(mod, "__all__");
3229 if (all == NULL)
3230 PyErr_Clear();
3231 else {
Victor Stinner974389d2011-03-15 09:33:57 +01003232 int ret = ensure_fromlist(mod, all, name, 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003233 Py_DECREF(all);
3234 if (!ret)
3235 return 0;
3236 }
3237 continue;
3238 }
3239 hasit = PyObject_HasAttr(mod, item);
3240 if (!hasit) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003241 PyObject *submod;
Victor Stinner974389d2011-03-15 09:33:57 +01003242 fullname = PyUnicode_FromFormat("%U.%U", name, item);
3243 if (fullname != NULL) {
3244 submod = import_submodule(mod, item, fullname);
3245 Py_DECREF(fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003246 }
Victor Stinner974389d2011-03-15 09:33:57 +01003247 else
3248 submod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003249 Py_XDECREF(submod);
3250 if (submod == NULL) {
3251 Py_DECREF(item);
3252 return 0;
3253 }
3254 }
3255 Py_DECREF(item);
3256 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003257
Victor Stinner974389d2011-03-15 09:33:57 +01003258 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003259}
3260
Neil Schemenauer00b09662003-06-16 21:03:07 +00003261static int
Victor Stinner974389d2011-03-15 09:33:57 +01003262add_submodule(PyObject *mod, PyObject *submod, PyObject *fullname,
3263 PyObject *subname, PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00003264{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003265 if (mod == Py_None)
3266 return 1;
3267 /* Irrespective of the success of this load, make a
3268 reference to it in the parent package module. A copy gets
3269 saved in the modules dictionary under the full name, so get a
3270 reference from there, if need be. (The exception is when the
3271 load failed with a SyntaxError -- then there's no trace in
3272 sys.modules. In that case, of course, do nothing extra.) */
3273 if (submod == NULL) {
Victor Stinner974389d2011-03-15 09:33:57 +01003274 submod = PyDict_GetItem(modules, fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003275 if (submod == NULL)
3276 return 1;
3277 }
3278 if (PyModule_Check(mod)) {
3279 /* We can't use setattr here since it can give a
3280 * spurious warning if the submodule name shadows a
3281 * builtin name */
3282 PyObject *dict = PyModule_GetDict(mod);
3283 if (!dict)
3284 return 0;
Victor Stinner974389d2011-03-15 09:33:57 +01003285 if (PyDict_SetItem(dict, subname, submod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003286 return 0;
3287 }
3288 else {
Victor Stinner974389d2011-03-15 09:33:57 +01003289 if (PyObject_SetAttr(mod, subname, submod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003290 return 0;
3291 }
3292 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00003293}
3294
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003295static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01003296import_submodule(PyObject *mod, PyObject *subname, PyObject *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003297{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003298 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner533d7832011-03-14 13:22:54 -04003299 PyObject *m = NULL, *bufobj, *path_list, *loader;
Victor Stinner9599de52011-03-13 22:38:38 -04003300 struct filedescr *fdp;
3301 FILE *fp;
Guido van Rossum74e6a111994-08-29 12:54:38 +00003302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003303 /* Require:
3304 if mod == None: subname == fullname
3305 else: mod.__name__ + "." + subname == fullname
3306 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003307
Victor Stinner974389d2011-03-15 09:33:57 +01003308 if ((m = PyDict_GetItem(modules, fullname)) != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003309 Py_INCREF(m);
Victor Stinner9599de52011-03-13 22:38:38 -04003310 return m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003311 }
Victor Stinner9599de52011-03-13 22:38:38 -04003312
3313 if (mod == Py_None)
Victor Stinner533d7832011-03-14 13:22:54 -04003314 path_list = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003315 else {
Victor Stinner533d7832011-03-14 13:22:54 -04003316 path_list = PyObject_GetAttrString(mod, "__path__");
3317 if (path_list == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003318 PyErr_Clear();
3319 Py_INCREF(Py_None);
3320 return Py_None;
3321 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003322 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003323
Victor Stinner533d7832011-03-14 13:22:54 -04003324 fdp = find_module(fullname, subname, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003325 &bufobj, &fp, &loader);
Victor Stinner533d7832011-03-14 13:22:54 -04003326 Py_XDECREF(path_list);
Victor Stinner9599de52011-03-13 22:38:38 -04003327 if (fdp == NULL) {
3328 if (!PyErr_ExceptionMatches(PyExc_ImportError))
3329 return NULL;
3330 PyErr_Clear();
3331 Py_INCREF(Py_None);
3332 return Py_None;
3333 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003334 m = load_module(fullname, fp, bufobj, fdp->type, loader);
3335 Py_XDECREF(bufobj);
Victor Stinner9599de52011-03-13 22:38:38 -04003336 Py_XDECREF(loader);
3337 if (fp)
3338 fclose(fp);
3339 if (m == NULL)
3340 return NULL;
3341 if (!add_submodule(mod, m, fullname, subname, modules)) {
3342 Py_XDECREF(m);
3343 return NULL;
3344 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003345 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00003346}
3347
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003348
3349/* Re-import a module of any kind and return its module object, WITH
3350 INCREMENTED REFERENCE COUNT */
3351
Guido van Rossum79f25d91997-04-29 20:08:16 +00003352PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003353PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003354{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003355 PyInterpreterState *interp = PyThreadState_Get()->interp;
3356 PyObject *modules_reloading = interp->modules_reloading;
3357 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner533d7832011-03-14 13:22:54 -04003358 PyObject *path_list = NULL, *loader = NULL, *existing_m = NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003359 PyObject *nameobj, *bufobj, *subnameobj;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003360 Py_UCS4 *name = NULL, *subname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003361 struct filedescr *fdp;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003362 FILE *fp = NULL;
3363 PyObject *newm = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00003364
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003365 if (modules_reloading == NULL) {
3366 Py_FatalError("PyImport_ReloadModule: "
3367 "no modules_reloading dictionary!");
3368 return NULL;
3369 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003370
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003371 if (m == NULL || !PyModule_Check(m)) {
3372 PyErr_SetString(PyExc_TypeError,
3373 "reload() argument must be module");
3374 return NULL;
3375 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003376 nameobj = PyModule_GetNameObject(m);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003377 if (nameobj == NULL || PyUnicode_READY(nameobj) == -1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003378 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003379 if (m != PyDict_GetItem(modules, nameobj)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003380 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003381 "reload(): module %R not in sys.modules",
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003382 nameobj);
3383 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003384 return NULL;
3385 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003386 existing_m = PyDict_GetItem(modules_reloading, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003387 if (existing_m != NULL) {
3388 /* Due to a recursive reload, this module is already
3389 being reloaded. */
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003390 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003391 Py_INCREF(existing_m);
3392 return existing_m;
3393 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003394 if (PyDict_SetItem(modules_reloading, nameobj, m) < 0) {
3395 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003396 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003397 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00003398
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003399 name = PyUnicode_AsUCS4Copy(nameobj);
3400 if (!name) {
3401 Py_DECREF(nameobj);
3402 return NULL;
3403 }
3404 subname = Py_UCS4_strrchr(name, '.');
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003405 if (subname == NULL) {
3406 Py_INCREF(nameobj);
3407 subnameobj = nameobj;
3408 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003409 else {
3410 PyObject *parentname, *parent;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003411 Py_ssize_t len;
3412 len = subname - name;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003413 parentname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3414 name, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003415 if (parentname == NULL) {
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003416 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003417 }
3418 parent = PyDict_GetItem(modules, parentname);
3419 if (parent == NULL) {
3420 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003421 "reload(): parent %R not in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003422 parentname);
3423 Py_DECREF(parentname);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003424 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003425 }
3426 Py_DECREF(parentname);
Victor Stinner533d7832011-03-14 13:22:54 -04003427 path_list = PyObject_GetAttrString(parent, "__path__");
3428 if (path_list == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003429 PyErr_Clear();
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003430 subname++;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003431 len = PyUnicode_GET_LENGTH(nameobj) - (len + 1);
3432 subnameobj = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3433 subname, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003434 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003435 if (subnameobj == NULL)
3436 goto error;
Victor Stinner533d7832011-03-14 13:22:54 -04003437 fdp = find_module(nameobj, subnameobj, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003438 &bufobj, &fp, &loader);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003439 Py_DECREF(subnameobj);
Victor Stinner533d7832011-03-14 13:22:54 -04003440 Py_XDECREF(path_list);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003441
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003442 if (fdp == NULL) {
3443 Py_XDECREF(loader);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003444 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003445 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003446
Victor Stinner2fd76e42011-03-14 15:19:39 -04003447 newm = load_module(nameobj, fp, bufobj, fdp->type, loader);
3448 Py_XDECREF(bufobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003449 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003450
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003451 if (fp)
3452 fclose(fp);
3453 if (newm == NULL) {
3454 /* load_module probably removed name from modules because of
3455 * the error. Put back the original module object. We're
3456 * going to return NULL in this case regardless of whether
3457 * replacing name succeeds, so the return value is ignored.
3458 */
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003459 PyDict_SetItem(modules, nameobj, m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003460 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003461
3462error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003463 imp_modules_reloading_clear();
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003464 Py_DECREF(nameobj);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003465 PyMem_Free(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003466 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003467}
3468
3469
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003470/* Higher-level import emulator which emulates the "import" statement
3471 more accurately -- it invokes the __import__() function from the
3472 builtins of the current globals. This means that the import is
3473 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00003474 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00003475 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00003476 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00003477 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003478
3479PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003480PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003481{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003482 static PyObject *silly_list = NULL;
3483 static PyObject *builtins_str = NULL;
3484 static PyObject *import_str = NULL;
3485 PyObject *globals = NULL;
3486 PyObject *import = NULL;
3487 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003488 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003489 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003490
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003491 /* Initialize constant string objects */
3492 if (silly_list == NULL) {
3493 import_str = PyUnicode_InternFromString("__import__");
3494 if (import_str == NULL)
3495 return NULL;
3496 builtins_str = PyUnicode_InternFromString("__builtins__");
3497 if (builtins_str == NULL)
3498 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003499 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003500 if (silly_list == NULL)
3501 return NULL;
3502 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003504 /* Get the builtins from current globals */
3505 globals = PyEval_GetGlobals();
3506 if (globals != NULL) {
3507 Py_INCREF(globals);
3508 builtins = PyObject_GetItem(globals, builtins_str);
3509 if (builtins == NULL)
3510 goto err;
3511 }
3512 else {
3513 /* No globals -- use standard builtins, and fake globals */
3514 builtins = PyImport_ImportModuleLevel("builtins",
3515 NULL, NULL, NULL, 0);
3516 if (builtins == NULL)
3517 return NULL;
3518 globals = Py_BuildValue("{OO}", builtins_str, builtins);
3519 if (globals == NULL)
3520 goto err;
3521 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003522
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003523 /* Get the __import__ function from the builtins */
3524 if (PyDict_Check(builtins)) {
3525 import = PyObject_GetItem(builtins, import_str);
3526 if (import == NULL)
3527 PyErr_SetObject(PyExc_KeyError, import_str);
3528 }
3529 else
3530 import = PyObject_GetAttr(builtins, import_str);
3531 if (import == NULL)
3532 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003533
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003534 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00003535 Always use absolute import here.
3536 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003537 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
3538 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00003539 if (r == NULL)
3540 goto err;
3541 Py_DECREF(r);
3542
3543 modules = PyImport_GetModuleDict();
3544 r = PyDict_GetItem(modules, module_name);
3545 if (r != NULL)
3546 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003547
3548 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003549 Py_XDECREF(globals);
3550 Py_XDECREF(builtins);
3551 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00003552
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003553 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003554}
3555
3556
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003557/* Module 'imp' provides Python access to the primitives used for
3558 importing modules.
3559*/
3560
Guido van Rossum79f25d91997-04-29 20:08:16 +00003561static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00003562imp_make_magic(long magic)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003563{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003564 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003565
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003566 buf[0] = (char) ((magic >> 0) & 0xff);
3567 buf[1] = (char) ((magic >> 8) & 0xff);
3568 buf[2] = (char) ((magic >> 16) & 0xff);
3569 buf[3] = (char) ((magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003570
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003571 return PyBytes_FromStringAndSize(buf, 4);
Victor Stinner3e2b7172010-11-09 09:32:19 +00003572}
Barry Warsaw28a691b2010-04-17 00:19:56 +00003573
3574static PyObject *
3575imp_get_magic(PyObject *self, PyObject *noargs)
3576{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003577 return imp_make_magic(pyc_magic);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003578}
3579
3580static PyObject *
3581imp_get_tag(PyObject *self, PyObject *noargs)
3582{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003583 return PyUnicode_FromString(pyc_tag);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003584}
3585
Guido van Rossum79f25d91997-04-29 20:08:16 +00003586static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003587imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003588{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003589 PyObject *list;
3590 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003591
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003592 list = PyList_New(0);
3593 if (list == NULL)
3594 return NULL;
3595 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
3596 PyObject *item = Py_BuildValue("ssi",
3597 fdp->suffix, fdp->mode, fdp->type);
3598 if (item == NULL) {
3599 Py_DECREF(list);
3600 return NULL;
3601 }
3602 if (PyList_Append(list, item) < 0) {
3603 Py_DECREF(list);
3604 Py_DECREF(item);
3605 return NULL;
3606 }
3607 Py_DECREF(item);
3608 }
3609 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003610}
3611
Guido van Rossum79f25d91997-04-29 20:08:16 +00003612static PyObject *
Victor Stinner533d7832011-03-14 13:22:54 -04003613call_find_module(PyObject *name, PyObject *path_list)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003614{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003615 extern int fclose(FILE *);
3616 PyObject *fob, *ret;
3617 PyObject *pathobj;
3618 struct filedescr *fdp;
Victor Stinner7d8b77c2011-03-12 08:45:02 -05003619 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003620 int fd = -1;
3621 char *found_encoding = NULL;
3622 char *encoding = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003623
Victor Stinner533d7832011-03-14 13:22:54 -04003624 if (path_list == Py_None)
3625 path_list = NULL;
3626 fdp = find_module(NULL, name, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003627 &pathobj, &fp, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003628 if (fdp == NULL)
3629 return NULL;
3630 if (fp != NULL) {
3631 fd = fileno(fp);
3632 if (fd != -1)
3633 fd = dup(fd);
3634 fclose(fp);
Victor Stinnerd417d012011-06-20 15:16:55 +02003635 if (fd == -1) {
3636 PyErr_SetFromErrno(PyExc_OSError);
3637 return NULL;
3638 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003639 fp = NULL;
3640 }
3641 if (fd != -1) {
3642 if (strchr(fdp->mode, 'b') == NULL) {
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003643 /* PyTokenizer_FindEncodingFilename() returns PyMem_MALLOC'ed
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003644 memory. */
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003645 found_encoding = PyTokenizer_FindEncodingFilename(fd, pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003646 lseek(fd, 0, 0); /* Reset position */
Victor Stinner2fd76e42011-03-14 15:19:39 -04003647 if (found_encoding == NULL && PyErr_Occurred()) {
3648 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003649 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04003650 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003651 encoding = (found_encoding != NULL) ? found_encoding :
3652 (char*)PyUnicode_GetDefaultEncoding();
3653 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003654 fob = PyFile_FromFd(fd, NULL, fdp->mode, -1,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003655 (char*)encoding, NULL, NULL, 1);
3656 if (fob == NULL) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04003657 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003658 close(fd);
3659 PyMem_FREE(found_encoding);
3660 return NULL;
3661 }
3662 }
3663 else {
3664 fob = Py_None;
3665 Py_INCREF(fob);
3666 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003667 if (pathobj == NULL) {
3668 Py_INCREF(Py_None);
3669 pathobj = Py_None;
3670 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003671 ret = Py_BuildValue("NN(ssi)",
3672 fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
3673 PyMem_FREE(found_encoding);
Brett Cannon3bb42d92007-10-20 03:43:15 +00003674
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003675 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003676}
3677
Guido van Rossum79f25d91997-04-29 20:08:16 +00003678static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003679imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003680{
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003681 PyObject *name, *path_list = NULL;
3682 if (!PyArg_ParseTuple(args, "U|O:find_module",
3683 &name, &path_list))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003684 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003685 return call_find_module(name, path_list);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003686}
3687
3688static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003689imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003690{
Victor Stinner95872862011-03-07 18:20:56 +01003691 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003692 int ret;
3693 PyObject *m;
Victor Stinner95872862011-03-07 18:20:56 +01003694 if (!PyArg_ParseTuple(args, "U:init_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003695 return NULL;
3696 ret = init_builtin(name);
3697 if (ret < 0)
3698 return NULL;
3699 if (ret == 0) {
3700 Py_INCREF(Py_None);
3701 return Py_None;
3702 }
Victor Stinner95872862011-03-07 18:20:56 +01003703 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003704 Py_XINCREF(m);
3705 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003706}
3707
Guido van Rossum79f25d91997-04-29 20:08:16 +00003708static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003709imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003710{
Victor Stinner53dc7352011-03-20 01:50:21 +01003711 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003712 int ret;
3713 PyObject *m;
Victor Stinner53dc7352011-03-20 01:50:21 +01003714 if (!PyArg_ParseTuple(args, "U:init_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003715 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01003716 ret = PyImport_ImportFrozenModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003717 if (ret < 0)
3718 return NULL;
3719 if (ret == 0) {
3720 Py_INCREF(Py_None);
3721 return Py_None;
3722 }
Victor Stinner53dc7352011-03-20 01:50:21 +01003723 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003724 Py_XINCREF(m);
3725 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003726}
3727
Guido van Rossum79f25d91997-04-29 20:08:16 +00003728static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003729imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003730{
Victor Stinner53dc7352011-03-20 01:50:21 +01003731 PyObject *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00003732
Victor Stinner53dc7352011-03-20 01:50:21 +01003733 if (!PyArg_ParseTuple(args, "U:get_frozen_object", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003734 return NULL;
3735 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003736}
3737
Guido van Rossum79f25d91997-04-29 20:08:16 +00003738static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00003739imp_is_frozen_package(PyObject *self, PyObject *args)
3740{
Victor Stinner53dc7352011-03-20 01:50:21 +01003741 PyObject *name;
Brett Cannon8d110132009-03-15 02:20:16 +00003742
Victor Stinner53dc7352011-03-20 01:50:21 +01003743 if (!PyArg_ParseTuple(args, "U:is_frozen_package", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003744 return NULL;
3745 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00003746}
3747
3748static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003749imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003750{
Victor Stinner95872862011-03-07 18:20:56 +01003751 PyObject *name;
3752 if (!PyArg_ParseTuple(args, "U:is_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003753 return NULL;
3754 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003755}
3756
Guido van Rossum79f25d91997-04-29 20:08:16 +00003757static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003758imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003759{
Victor Stinner53dc7352011-03-20 01:50:21 +01003760 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003761 struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01003762 if (!PyArg_ParseTuple(args, "U:is_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003763 return NULL;
3764 p = find_frozen(name);
3765 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003766}
3767
3768static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01003769get_file(PyObject *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003770{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003771 FILE *fp;
3772 if (mode[0] == 'U')
3773 mode = "r" PY_STDIOTEXTMODE;
3774 if (fob == NULL) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003775 fp = _Py_fopen(pathname, mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003776 }
3777 else {
3778 int fd = PyObject_AsFileDescriptor(fob);
3779 if (fd == -1)
3780 return NULL;
3781 if (!_PyVerify_fd(fd))
3782 goto error;
3783 /* the FILE struct gets a new fd, so that it can be closed
3784 * independently of the file descriptor given
3785 */
3786 fd = dup(fd);
3787 if (fd == -1)
3788 goto error;
3789 fp = fdopen(fd, mode);
3790 }
3791 if (fp)
3792 return fp;
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003793error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003794 PyErr_SetFromErrno(PyExc_IOError);
3795 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003796}
3797
Guido van Rossum79f25d91997-04-29 20:08:16 +00003798static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003799imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003800{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003801 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003802 PyObject *fob = NULL;
3803 PyObject *m;
3804 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003805 if (!PyArg_ParseTuple(args, "UO&|O:load_compiled",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003806 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003807 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003808 &fob))
3809 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003810 fp = get_file(pathname, fob, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003811 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003812 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003813 return NULL;
3814 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003815 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003816 fclose(fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003817 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003818 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003819}
3820
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003821#ifdef HAVE_DYNAMIC_LOADING
3822
Guido van Rossum79f25d91997-04-29 20:08:16 +00003823static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003824imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003825{
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003826 PyObject *name, *pathname, *fob = NULL, *mod;
3827 FILE *fp;
3828
3829 if (!PyArg_ParseTuple(args, "UO&|O:load_dynamic",
3830 &name, PyUnicode_FSDecoder, &pathname, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003831 return NULL;
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003832 if (fob != NULL) {
3833 fp = get_file(NULL, fob, "r");
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003834 if (fp == NULL) {
3835 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003836 return NULL;
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003837 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003838 }
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003839 else
3840 fp = NULL;
3841 mod = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003842 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003843 if (fp)
3844 fclose(fp);
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003845 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003846}
3847
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003848#endif /* HAVE_DYNAMIC_LOADING */
3849
Guido van Rossum79f25d91997-04-29 20:08:16 +00003850static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003851imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003852{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003853 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003854 PyObject *fob = NULL;
3855 PyObject *m;
3856 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003857 if (!PyArg_ParseTuple(args, "UO&|O:load_source",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003858 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003859 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003860 &fob))
3861 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003862 fp = get_file(pathname, fob, "r");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003863 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003864 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003865 return NULL;
3866 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003867 m = load_source_module(name, pathname, fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003868 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003869 fclose(fp);
3870 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003871}
3872
Guido van Rossum79f25d91997-04-29 20:08:16 +00003873static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003874imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003875{
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003876 PyObject *name, *fob, *pathname, *pathname_obj, *ret;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003877 char *suffix; /* Unused */
3878 char *mode;
3879 int type;
3880 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003881
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003882 if (!PyArg_ParseTuple(args, "UOO(ssi):load_module",
3883 &name, &fob, &pathname_obj, &suffix, &mode, &type))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003884 return NULL;
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003885 if (pathname_obj != Py_None) {
3886 if (!PyUnicode_FSDecoder(pathname_obj, &pathname))
3887 return NULL;
3888 }
3889 else
3890 pathname = NULL;
3891
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003892 if (*mode) {
3893 /* Mode must start with 'r' or 'U' and must not contain '+'.
3894 Implicit in this test is the assumption that the mode
3895 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003896
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003897 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3898 PyErr_Format(PyExc_ValueError,
3899 "invalid file open mode %.200s", mode);
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003900 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003901 return NULL;
3902 }
3903 }
3904 if (fob == Py_None)
3905 fp = NULL;
3906 else {
3907 fp = get_file(NULL, fob, mode);
3908 if (fp == NULL) {
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003909 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003910 return NULL;
3911 }
3912 }
Victor Stinner41c5fec2011-03-13 21:46:30 -04003913 ret = load_module(name, fp, pathname, type, NULL);
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003914 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003915 if (fp)
3916 fclose(fp);
3917 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003918}
3919
3920static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003921imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003922{
Victor Stinnerc9abda02011-03-14 13:33:46 -04003923 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003924 PyObject * ret;
Victor Stinnerc9abda02011-03-14 13:33:46 -04003925 if (!PyArg_ParseTuple(args, "UO&:load_package",
3926 &name, PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003927 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04003928 ret = load_package(name, pathname);
Victor Stinnerebc00522010-12-03 17:06:43 +00003929 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003930 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003931}
3932
3933static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003934imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003935{
Victor Stinnerfe19d212011-03-14 14:53:28 -04003936 PyObject *name;
3937 if (!PyArg_ParseTuple(args, "U:new_module", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003938 return NULL;
Victor Stinnerfe19d212011-03-14 14:53:28 -04003939 return PyModule_NewObject(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003940}
3941
Christian Heimes13a7a212008-01-07 17:13:09 +00003942static PyObject *
3943imp_reload(PyObject *self, PyObject *v)
3944{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003945 return PyImport_ReloadModule(v);
Christian Heimes13a7a212008-01-07 17:13:09 +00003946}
3947
3948PyDoc_STRVAR(doc_reload,
3949"reload(module) -> module\n\
3950\n\
3951Reload the module. The module must have been successfully imported before.");
3952
Barry Warsaw28a691b2010-04-17 00:19:56 +00003953static PyObject *
3954imp_cache_from_source(PyObject *self, PyObject *args, PyObject *kws)
3955{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003956 static char *kwlist[] = {"path", "debug_override", NULL};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003957
Victor Stinner2f42ae52011-03-20 00:41:24 +01003958 PyObject *pathname, *cpathname;
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003959 PyObject *debug_override = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003960 int debug = !Py_OptimizeFlag;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003961
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003962 if (!PyArg_ParseTupleAndKeywords(
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003963 args, kws, "O&|O", kwlist,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003964 PyUnicode_FSDecoder, &pathname, &debug_override))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003965 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003966
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003967 if (debug_override != NULL &&
3968 (debug = PyObject_IsTrue(debug_override)) < 0) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003969 Py_DECREF(pathname);
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003970 return NULL;
3971 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00003972
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003973 cpathname = make_compiled_pathname(pathname, debug);
Victor Stinner2f42ae52011-03-20 00:41:24 +01003974 Py_DECREF(pathname);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003975
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003976 if (cpathname == NULL) {
3977 PyErr_Format(PyExc_SystemError, "path buffer too short");
3978 return NULL;
3979 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003980 return cpathname;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003981}
3982
3983PyDoc_STRVAR(doc_cache_from_source,
3984"Given the path to a .py file, return the path to its .pyc/.pyo file.\n\
3985\n\
3986The .py file does not need to exist; this simply returns the path to the\n\
3987.pyc/.pyo file calculated as if the .py file were imported. The extension\n\
3988will be .pyc unless __debug__ is not defined, then it will be .pyo.\n\
3989\n\
3990If debug_override is not None, then it must be a boolean and is taken as\n\
3991the value of __debug__ instead.");
3992
3993static PyObject *
3994imp_source_from_cache(PyObject *self, PyObject *args, PyObject *kws)
3995{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003996 static char *kwlist[] = {"path", NULL};
Victor Stinnerc9abda02011-03-14 13:33:46 -04003997 PyObject *pathname, *source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003998
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003999 if (!PyArg_ParseTupleAndKeywords(
Victor Stinnerebc00522010-12-03 17:06:43 +00004000 args, kws, "O&", kwlist,
Victor Stinnerc9abda02011-03-14 13:33:46 -04004001 PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004002 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00004003
Victor Stinnerc9abda02011-03-14 13:33:46 -04004004 source = make_source_pathname(pathname);
4005 if (source == NULL) {
4006 PyErr_Format(PyExc_ValueError, "Not a PEP 3147 pyc path: %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004007 pathname);
Victor Stinnerc9abda02011-03-14 13:33:46 -04004008 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004009 return NULL;
4010 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04004011 Py_DECREF(pathname);
4012 return source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00004013}
4014
4015PyDoc_STRVAR(doc_source_from_cache,
4016"Given the path to a .pyc./.pyo file, return the path to its .py file.\n\
4017\n\
4018The .pyc/.pyo file does not need to exist; this simply returns the path to\n\
4019the .py file calculated to correspond to the .pyc/.pyo file. If path\n\
4020does not conform to PEP 3147 format, ValueError will be raised.");
4021
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004022/* Doc strings */
4023
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004024PyDoc_STRVAR(doc_imp,
4025"This module provides the components needed to build your own\n\
4026__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004027
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004028PyDoc_STRVAR(doc_find_module,
4029"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004030Search for a module. If path is omitted or None, search for a\n\
4031built-in, frozen or special module and continue search in sys.path.\n\
4032The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004033package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004034
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004035PyDoc_STRVAR(doc_load_module,
4036"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004037Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004038The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004039
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004040PyDoc_STRVAR(doc_get_magic,
4041"get_magic() -> string\n\
4042Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004043
Barry Warsaw28a691b2010-04-17 00:19:56 +00004044PyDoc_STRVAR(doc_get_tag,
4045"get_tag() -> string\n\
4046Return the magic tag for .pyc or .pyo files.");
4047
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004048PyDoc_STRVAR(doc_get_suffixes,
4049"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004050Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004051that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004052
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004053PyDoc_STRVAR(doc_new_module,
4054"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004055Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004056The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004057
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004058PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00004059"lock_held() -> boolean\n\
4060Return True if the import lock is currently held, else False.\n\
4061On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00004062
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00004063PyDoc_STRVAR(doc_acquire_lock,
4064"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00004065Acquires the interpreter's import lock for the current thread.\n\
4066This lock should be used by import hooks to ensure thread-safety\n\
4067when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00004068On platforms without threads, this function does nothing.");
4069
4070PyDoc_STRVAR(doc_release_lock,
4071"release_lock() -> None\n\
4072Release the interpreter's import lock.\n\
4073On platforms without threads, this function does nothing.");
4074
Guido van Rossum79f25d91997-04-29 20:08:16 +00004075static PyMethodDef imp_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004076 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
4077 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
4078 {"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag},
4079 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
4080 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
4081 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
4082 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
4083 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
4084 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
4085 {"reload", imp_reload, METH_O, doc_reload},
4086 {"cache_from_source", (PyCFunction)imp_cache_from_source,
4087 METH_VARARGS | METH_KEYWORDS, doc_cache_from_source},
4088 {"source_from_cache", (PyCFunction)imp_source_from_cache,
4089 METH_VARARGS | METH_KEYWORDS, doc_source_from_cache},
4090 /* The rest are obsolete */
4091 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
4092 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
4093 {"init_builtin", imp_init_builtin, METH_VARARGS},
4094 {"init_frozen", imp_init_frozen, METH_VARARGS},
4095 {"is_builtin", imp_is_builtin, METH_VARARGS},
4096 {"is_frozen", imp_is_frozen, METH_VARARGS},
4097 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00004098#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004099 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00004100#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004101 {"load_package", imp_load_package, METH_VARARGS},
4102 {"load_source", imp_load_source, METH_VARARGS},
Brett Cannon442c9b92011-03-23 16:14:42 -07004103 {"_fix_co_filename", imp_fix_co_filename, METH_VARARGS},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004104 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004105};
4106
Guido van Rossum1a8791e1998-08-04 22:46:29 +00004107static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004108setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004109{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004110 PyObject *v;
4111 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004112
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004113 v = PyLong_FromLong((long)value);
4114 err = PyDict_SetItemString(d, name, v);
4115 Py_XDECREF(v);
4116 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004117}
4118
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004119typedef struct {
4120 PyObject_HEAD
4121} NullImporter;
4122
4123static int
4124NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
4125{
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004126#ifndef MS_WINDOWS
4127 PyObject *path;
4128 struct stat statbuf;
4129 int rv;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004130
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004131 if (!_PyArg_NoKeywords("NullImporter()", kwds))
4132 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004133
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004134 if (!PyArg_ParseTuple(args, "O&:NullImporter",
4135 PyUnicode_FSConverter, &path))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004136 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004137
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004138 if (PyBytes_GET_SIZE(path) == 0) {
4139 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004140 PyErr_SetString(PyExc_ImportError, "empty pathname");
4141 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004142 }
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004143
4144 rv = stat(PyBytes_AS_STRING(path), &statbuf);
4145 Py_DECREF(path);
4146 if (rv == 0) {
4147 /* it exists */
4148 if (S_ISDIR(statbuf.st_mode)) {
4149 /* it's a directory */
4150 PyErr_SetString(PyExc_ImportError, "existing directory");
4151 return -1;
4152 }
4153 }
4154#else /* MS_WINDOWS */
4155 PyObject *pathobj;
4156 DWORD rv;
Victor Stinner255dfdb2010-09-29 10:28:51 +00004157 wchar_t *path;
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004158
4159 if (!_PyArg_NoKeywords("NullImporter()", kwds))
4160 return -1;
4161
4162 if (!PyArg_ParseTuple(args, "U:NullImporter",
4163 &pathobj))
4164 return -1;
4165
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02004166 if (PyUnicode_GET_LENGTH(pathobj) == 0) {
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004167 PyErr_SetString(PyExc_ImportError, "empty pathname");
4168 return -1;
4169 }
4170
Victor Stinnerbeb4135b2010-10-07 01:02:42 +00004171 path = PyUnicode_AsWideCharString(pathobj, NULL);
Victor Stinner255dfdb2010-09-29 10:28:51 +00004172 if (path == NULL)
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004173 return -1;
4174 /* see issue1293 and issue3677:
4175 * stat() on Windows doesn't recognise paths like
4176 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
4177 */
4178 rv = GetFileAttributesW(path);
Victor Stinner255dfdb2010-09-29 10:28:51 +00004179 PyMem_Free(path);
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004180 if (rv != INVALID_FILE_ATTRIBUTES) {
4181 /* it exists */
4182 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
4183 /* it's a directory */
4184 PyErr_SetString(PyExc_ImportError, "existing directory");
4185 return -1;
4186 }
4187 }
4188#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004189 return 0;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004190}
4191
4192static PyObject *
4193NullImporter_find_module(NullImporter *self, PyObject *args)
4194{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004195 Py_RETURN_NONE;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004196}
4197
4198static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004199 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
4200 "Always return None"
4201 },
4202 {NULL} /* Sentinel */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004203};
4204
4205
Christian Heimes9cd17752007-11-18 19:35:23 +00004206PyTypeObject PyNullImporter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004207 PyVarObject_HEAD_INIT(NULL, 0)
4208 "imp.NullImporter", /*tp_name*/
4209 sizeof(NullImporter), /*tp_basicsize*/
4210 0, /*tp_itemsize*/
4211 0, /*tp_dealloc*/
4212 0, /*tp_print*/
4213 0, /*tp_getattr*/
4214 0, /*tp_setattr*/
4215 0, /*tp_reserved*/
4216 0, /*tp_repr*/
4217 0, /*tp_as_number*/
4218 0, /*tp_as_sequence*/
4219 0, /*tp_as_mapping*/
4220 0, /*tp_hash */
4221 0, /*tp_call*/
4222 0, /*tp_str*/
4223 0, /*tp_getattro*/
4224 0, /*tp_setattro*/
4225 0, /*tp_as_buffer*/
4226 Py_TPFLAGS_DEFAULT, /*tp_flags*/
4227 "Null importer object", /* tp_doc */
4228 0, /* tp_traverse */
4229 0, /* tp_clear */
4230 0, /* tp_richcompare */
4231 0, /* tp_weaklistoffset */
4232 0, /* tp_iter */
4233 0, /* tp_iternext */
4234 NullImporter_methods, /* tp_methods */
4235 0, /* tp_members */
4236 0, /* tp_getset */
4237 0, /* tp_base */
4238 0, /* tp_dict */
4239 0, /* tp_descr_get */
4240 0, /* tp_descr_set */
4241 0, /* tp_dictoffset */
4242 (initproc)NullImporter_init, /* tp_init */
4243 0, /* tp_alloc */
4244 PyType_GenericNew /* tp_new */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004245};
4246
Martin v. Löwis1a214512008-06-11 05:26:20 +00004247static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004248 PyModuleDef_HEAD_INIT,
4249 "imp",
4250 doc_imp,
4251 0,
4252 imp_methods,
4253 NULL,
4254 NULL,
4255 NULL,
4256 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00004257};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004258
Jason Tishler6bc06ec2003-09-04 11:59:50 +00004259PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00004260PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004261{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004262 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004263
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004264 if (PyType_Ready(&PyNullImporter_Type) < 0)
4265 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004266
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004267 m = PyModule_Create(&impmodule);
4268 if (m == NULL)
4269 goto failure;
4270 d = PyModule_GetDict(m);
4271 if (d == NULL)
4272 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004273
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004274 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
4275 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
4276 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
4277 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
4278 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
4279 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
4280 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
4281 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
4282 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
4283 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004284
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004285 Py_INCREF(&PyNullImporter_Type);
4286 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
4287 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004288 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004289 Py_XDECREF(m);
4290 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004291}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004292
4293
Guido van Rossumb18618d2000-05-03 23:44:39 +00004294/* API for embedding applications that want to add their own entries
4295 to the table of built-in modules. This should normally be called
4296 *before* Py_Initialize(). When the table resize fails, -1 is
4297 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004298
4299 After a similar function by Just van Rossum. */
4300
4301int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004302PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004303{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004304 static struct _inittab *our_copy = NULL;
4305 struct _inittab *p;
4306 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004307
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004308 /* Count the number of entries in both tables */
4309 for (n = 0; newtab[n].name != NULL; n++)
4310 ;
4311 if (n == 0)
4312 return 0; /* Nothing to do */
4313 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
4314 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004315
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004316 /* Allocate new memory for the combined table */
4317 p = our_copy;
4318 PyMem_RESIZE(p, struct _inittab, i+n+1);
4319 if (p == NULL)
4320 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004321
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004322 /* Copy the tables into the new memory */
4323 if (our_copy != PyImport_Inittab)
4324 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
4325 PyImport_Inittab = our_copy = p;
4326 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004327
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004328 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004329}
4330
4331/* Shorthand to add a single entry given a name and a function */
4332
4333int
Brett Cannona826f322009-04-02 03:41:46 +00004334PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004335{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004336 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004337
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004338 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004339
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004340 newtab[0].name = (char *)name;
4341 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004342
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004343 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004344}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004345
4346#ifdef __cplusplus
4347}
4348#endif