blob: 6e3e0f181e6ef1c0f58eed2ceccc24ec7b1f9b71 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Module definition and import implementation */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00005
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "Python-ast.h"
Guido van Rossumd8faa362007-04-27 19:54:29 +00007#undef Yield /* undefine macro conflicting with winbase.h */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00008#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +00009#include "marshal.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010#include "code.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000011#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000012#include "importdl.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000013
Guido van Rossum55a83382000-09-20 20:31:38 +000014#ifdef HAVE_FCNTL_H
15#include <fcntl.h>
16#endif
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000017#ifdef __cplusplus
Brett Cannon9a5b25a2010-03-01 02:09:17 +000018extern "C" {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000019#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000020
Christian Heimesd3eb5a152008-02-24 00:38:49 +000021#ifdef MS_WINDOWS
22/* for stat.st_mode */
23typedef unsigned short mode_t;
Daniel Stutzbachc7937792010-09-09 21:18:04 +000024/* for _mkdir */
25#include <direct.h>
Christian Heimesd3eb5a152008-02-24 00:38:49 +000026#endif
27
Guido van Rossum21d335e1993-10-15 13:01:11 +000028
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000029/* Magic word to reject .pyc files generated by other Python versions.
30 It should change for each incompatible change to the bytecode.
31
32 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000033 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000034 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000035
Guido van Rossum45aecf42006-03-15 04:58:47 +000036 The magic numbers must be spaced apart at least 2 values, as the
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000037 -U interpeter flag will cause MAGIC+1 being used. They have been
38 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000039
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000040 There were a variety of old schemes for setting the magic number.
41 The current working scheme is to increment the previous value by
42 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000043
Barry Warsaw28a691b2010-04-17 00:19:56 +000044 Starting with the adoption of PEP 3147 in Python 3.2, every bump in magic
45 number also includes a new "magic tag", i.e. a human readable string used
46 to represent the magic number in __pycache__ directories. When you change
47 the magic number, you must also set a new unique magic tag. Generally this
48 can be named after the Python major version of the magic number bump, but
49 it can really be anything, as long as it's different than anything else
50 that's come before. The tags are included in the following table, starting
51 with Python 3.2a0.
52
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000053 Known values:
54 Python 1.5: 20121
55 Python 1.5.1: 20121
56 Python 1.5.2: 20121
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000057 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000058 Python 2.0: 50823
59 Python 2.0.1: 50823
60 Python 2.1: 60202
61 Python 2.1.1: 60202
62 Python 2.1.2: 60202
63 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000064 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000065 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000066 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000067 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000068 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000069 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000070 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000071 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000072 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000073 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000074 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
75 Python 2.5b3: 62111 (fix wrong code: x += yield)
76 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000077 storing constants that should have been removed)
Thomas Wouters89f507f2006-12-13 04:49:30 +000078 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
Christian Heimes99170a52007-12-19 02:07:34 +000079 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)
Christian Heimesdd15f6c2008-03-16 00:07:10 +000080 Python 2.6a1: 62161 (WITH_CLEANUP optimization)
Guido van Rossum45aecf42006-03-15 04:58:47 +000081 Python 3000: 3000
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000082 3010 (removed UNARY_CONVERT)
83 3020 (added BUILD_SET)
84 3030 (added keyword-only parameters)
85 3040 (added signature annotations)
86 3050 (print becomes a function)
87 3060 (PEP 3115 metaclass syntax)
88 3061 (string literals become unicode)
89 3071 (PEP 3109 raise changes)
90 3081 (PEP 3137 make __file__ and __name__ unicode)
91 3091 (kill str8 interning)
92 3101 (merge from 2.6a0, see 62151)
93 3103 (__file__ points to source file)
Benjamin Peterson0f6cae02009-12-10 02:09:08 +000094 Python 3.0a4: 3111 (WITH_CLEANUP optimization).
95 Python 3.0a5: 3131 (lexical exception stacking, including POP_EXCEPT)
96 Python 3.1a0: 3141 (optimize list, set and dict comprehensions:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000097 change LIST_APPEND and SET_ADD, add MAP_ADD)
Benjamin Peterson0f6cae02009-12-10 02:09:08 +000098 Python 3.1a0: 3151 (optimize conditional branches:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000099 introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE)
Benjamin Peterson876b2f22009-06-28 03:18:59 +0000100 Python 3.2a0: 3160 (add SETUP_WITH)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000101 tag: cpython-32
Antoine Pitrou74a69fa2010-09-04 18:43:52 +0000102 Python 3.2a1: 3170 (add DUP_TOP_TWO, remove DUP_TOPX and ROT_FOUR)
103 tag: cpython-32
Benjamin Peterson6246d6d2010-09-10 21:51:44 +0000104 Python 3.2a2 3180 (add DELETE_DEREF)
Benjamin Petersone7c15fa2011-06-19 19:54:45 -0500105 Python 3.3a0 3190 __class__ super closure changed
Tim Peters36515e22001-11-18 04:06:29 +0000106*/
Guido van Rossum3ddee711991-12-16 13:06:34 +0000107
Nick Coghlancd419ab2010-09-11 00:39:25 +0000108/* MAGIC must change whenever the bytecode emitted by the compiler may no
109 longer be understood by older implementations of the eval loop (usually
110 due to the addition of new opcodes)
Victor Stinner2f42ae52011-03-20 00:41:24 +0100111 TAG and PYC_TAG_UNICODE must change for each major Python release. The magic
112 number will take care of any bytecode changes that occur during development.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000113*/
Benjamin Peterson48deae12011-06-03 17:50:16 -0500114#define QUOTE(arg) #arg
115#define STRIFY(name) QUOTE(name)
116#define MAJOR STRIFY(PY_MAJOR_VERSION)
117#define MINOR STRIFY(PY_MINOR_VERSION)
Benjamin Petersone7c15fa2011-06-19 19:54:45 -0500118#define MAGIC (3190 | ((long)'\r'<<16) | ((long)'\n'<<24))
Benjamin Peterson48deae12011-06-03 17:50:16 -0500119#define TAG "cpython-" MAJOR MINOR;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000120#define CACHEDIR "__pycache__"
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200121static const Py_UCS4 CACHEDIR_UNICODE[] = {
Victor Stinnerc9abda02011-03-14 13:33:46 -0400122 '_', '_', 'p', 'y', 'c', 'a', 'c', 'h', 'e', '_', '_', '\0'};
Barry Warsaw28a691b2010-04-17 00:19:56 +0000123/* Current magic word and string tag as globals. */
Guido van Rossum96774c12000-05-01 20:19:08 +0000124static long pyc_magic = MAGIC;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000125static const char *pyc_tag = TAG;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200126static const Py_UCS4 PYC_TAG_UNICODE[] = {
Benjamin Peterson48deae12011-06-03 17:50:16 -0500127 'c', 'p', 'y', 't', 'h', 'o', 'n', '-', PY_MAJOR_VERSION + 48, PY_MINOR_VERSION + 48, '\0'};
128#undef QUOTE
129#undef STRIFY
130#undef MAJOR
131#undef MINOR
Guido van Rossum96774c12000-05-01 20:19:08 +0000132
Victor Stinner95872862011-03-07 18:20:56 +0100133/* See _PyImport_FixupExtensionObject() below */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000134static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000135
Victor Stinnerfe7c5b52011-04-05 01:48:03 +0200136/* Function from Parser/tokenizer.c */
137extern char * PyTokenizer_FindEncodingFilename(int, PyObject *);
138
Guido van Rossum771c6c81997-10-31 18:37:24 +0000139/* This table is defined in config.c: */
140extern struct _inittab _PyImport_Inittab[];
141
142struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +0000143
Guido van Rossumed1170e1999-12-20 21:23:41 +0000144/* these tables define the module suffixes that Python recognizes */
145struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +0000146
Guido van Rossumed1170e1999-12-20 21:23:41 +0000147static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000148 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000149#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000150 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000151#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000152 {".pyc", "rb", PY_COMPILED},
153 {0, 0}
Guido van Rossumed1170e1999-12-20 21:23:41 +0000154};
155
Victor Stinnerd0296212011-03-14 14:04:10 -0400156static PyObject *initstr = NULL;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200157_Py_IDENTIFIER(__path__);
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000158
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000159/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000160
161void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000162_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000163{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000164 const struct filedescr *scan;
165 struct filedescr *filetab;
166 int countD = 0;
167 int countS = 0;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000168
Victor Stinnerd0296212011-03-14 14:04:10 -0400169 initstr = PyUnicode_InternFromString("__init__");
170 if (initstr == NULL)
171 Py_FatalError("Can't initialize import variables");
172
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000173 /* prepare _PyImport_Filetab: copy entries from
174 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
175 */
Guido van Rossum04110fb2007-08-24 16:32:05 +0000176#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000177 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
178 ++countD;
Guido van Rossum04110fb2007-08-24 16:32:05 +0000179#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000180 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
181 ++countS;
182 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
183 if (filetab == NULL)
184 Py_FatalError("Can't initialize import file table.");
Guido van Rossum04110fb2007-08-24 16:32:05 +0000185#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000186 memcpy(filetab, _PyImport_DynLoadFiletab,
187 countD * sizeof(struct filedescr));
Guido van Rossum04110fb2007-08-24 16:32:05 +0000188#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000189 memcpy(filetab + countD, _PyImport_StandardFiletab,
190 countS * sizeof(struct filedescr));
191 filetab[countD + countS].suffix = NULL;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000192
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000193 _PyImport_Filetab = filetab;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000194
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000195 if (Py_OptimizeFlag) {
196 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
197 for (; filetab->suffix != NULL; filetab++) {
198 if (strcmp(filetab->suffix, ".pyc") == 0)
199 filetab->suffix = ".pyo";
200 }
201 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000202}
203
Guido van Rossum25ce5661997-08-02 03:10:38 +0000204void
Just van Rossum52e14d62002-12-30 22:08:05 +0000205_PyImportHooks_Init(void)
206{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000207 PyObject *v, *path_hooks = NULL, *zimpimport;
208 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000209
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000210 /* adding sys.path_hooks and sys.path_importer_cache, setting up
211 zipimport */
212 if (PyType_Ready(&PyNullImporter_Type) < 0)
213 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000214
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000215 if (Py_VerboseFlag)
216 PySys_WriteStderr("# installing zipimport hook\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000217
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000218 v = PyList_New(0);
219 if (v == NULL)
220 goto error;
221 err = PySys_SetObject("meta_path", v);
222 Py_DECREF(v);
223 if (err)
224 goto error;
225 v = PyDict_New();
226 if (v == NULL)
227 goto error;
228 err = PySys_SetObject("path_importer_cache", v);
229 Py_DECREF(v);
230 if (err)
231 goto error;
232 path_hooks = PyList_New(0);
233 if (path_hooks == NULL)
234 goto error;
235 err = PySys_SetObject("path_hooks", path_hooks);
236 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000237 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000238 PyErr_Print();
239 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
240 "path_importer_cache, or NullImporter failed"
241 );
242 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000244 zimpimport = PyImport_ImportModule("zipimport");
245 if (zimpimport == NULL) {
246 PyErr_Clear(); /* No zip import module -- okay */
247 if (Py_VerboseFlag)
248 PySys_WriteStderr("# can't import zipimport\n");
249 }
250 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200251 _Py_IDENTIFIER(zipimporter);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200252 PyObject *zipimporter = _PyObject_GetAttrId(zimpimport,
253 &PyId_zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000254 Py_DECREF(zimpimport);
255 if (zipimporter == NULL) {
256 PyErr_Clear(); /* No zipimporter object -- okay */
257 if (Py_VerboseFlag)
258 PySys_WriteStderr(
259 "# can't import zipimport.zipimporter\n");
260 }
261 else {
262 /* sys.path_hooks.append(zipimporter) */
263 err = PyList_Append(path_hooks, zipimporter);
264 Py_DECREF(zipimporter);
265 if (err)
266 goto error;
267 if (Py_VerboseFlag)
268 PySys_WriteStderr(
269 "# installed zipimport hook\n");
270 }
271 }
272 Py_DECREF(path_hooks);
Just van Rossum52e14d62002-12-30 22:08:05 +0000273}
274
275void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000276_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000277{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000278 Py_XDECREF(extensions);
279 extensions = NULL;
280 PyMem_DEL(_PyImport_Filetab);
281 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000282}
283
284
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000285/* Locking primitives to prevent parallel imports of the same module
286 in different threads to return with a partially loaded module.
287 These calls are serialized by the global interpreter lock. */
288
289#ifdef WITH_THREAD
290
Guido van Rossum49b56061998-10-01 20:42:43 +0000291#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000292
Guido van Rossum65d5b571998-12-21 19:32:43 +0000293static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000294static long import_lock_thread = -1;
295static int import_lock_level = 0;
296
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000297void
298_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000299{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000300 long me = PyThread_get_thread_ident();
301 if (me == -1)
302 return; /* Too bad */
303 if (import_lock == NULL) {
304 import_lock = PyThread_allocate_lock();
305 if (import_lock == NULL)
306 return; /* Nothing much we can do. */
307 }
308 if (import_lock_thread == me) {
309 import_lock_level++;
310 return;
311 }
312 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
313 {
314 PyThreadState *tstate = PyEval_SaveThread();
315 PyThread_acquire_lock(import_lock, 1);
316 PyEval_RestoreThread(tstate);
317 }
318 import_lock_thread = me;
319 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000320}
321
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000322int
323_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000324{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000325 long me = PyThread_get_thread_ident();
326 if (me == -1 || import_lock == NULL)
327 return 0; /* Too bad */
328 if (import_lock_thread != me)
329 return -1;
330 import_lock_level--;
331 if (import_lock_level == 0) {
332 import_lock_thread = -1;
333 PyThread_release_lock(import_lock);
334 }
335 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000336}
337
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000338/* This function is called from PyOS_AfterFork to ensure that newly
339 created child processes do not share locks with the parent.
340 We now acquire the import lock around fork() calls but on some platforms
341 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000342
343void
344_PyImport_ReInitLock(void)
345{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000346 if (import_lock != NULL)
347 import_lock = PyThread_allocate_lock();
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000348 if (import_lock_level > 1) {
349 /* Forked as a side effect of import */
350 long me = PyThread_get_thread_ident();
351 PyThread_acquire_lock(import_lock, 0);
Victor Stinner942003c2011-03-07 16:57:48 +0100352 /* XXX: can the previous line fail? */
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000353 import_lock_thread = me;
354 import_lock_level--;
355 } else {
356 import_lock_thread = -1;
357 import_lock_level = 0;
358 }
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000359}
360
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000361#endif
362
Tim Peters69232342001-08-30 05:16:13 +0000363static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000364imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000365{
Tim Peters69232342001-08-30 05:16:13 +0000366#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000367 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000368#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000369 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000370#endif
371}
372
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000373static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000374imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000375{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000376#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000377 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000378#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000379 Py_INCREF(Py_None);
380 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000381}
382
383static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000384imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000385{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000386#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000387 if (_PyImport_ReleaseLock() < 0) {
388 PyErr_SetString(PyExc_RuntimeError,
389 "not holding the import lock");
390 return NULL;
391 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000392#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000393 Py_INCREF(Py_None);
394 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000395}
396
Guido van Rossumd8faa362007-04-27 19:54:29 +0000397static void
398imp_modules_reloading_clear(void)
399{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000400 PyInterpreterState *interp = PyThreadState_Get()->interp;
401 if (interp->modules_reloading != NULL)
402 PyDict_Clear(interp->modules_reloading);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000403}
404
Guido van Rossum25ce5661997-08-02 03:10:38 +0000405/* Helper for sys */
406
407PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000408PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000409{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000410 PyInterpreterState *interp = PyThreadState_GET()->interp;
411 if (interp->modules == NULL)
412 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
413 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000414}
415
Guido van Rossum3f5da241990-12-20 15:06:42 +0000416
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000417/* List of names to clear in sys */
418static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000419 "path", "argv", "ps1", "ps2",
420 "last_type", "last_value", "last_traceback",
421 "path_hooks", "path_importer_cache", "meta_path",
422 /* misc stuff */
423 "flags", "float_info",
424 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000425};
426
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000427static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000428 "stdin", "__stdin__",
429 "stdout", "__stdout__",
430 "stderr", "__stderr__",
431 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000432};
433
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000434
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000435/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000436
Guido van Rossum3f5da241990-12-20 15:06:42 +0000437void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000438PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000439{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000440 Py_ssize_t pos, ndone;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000441 PyObject *key, *value, *dict;
442 PyInterpreterState *interp = PyThreadState_GET()->interp;
443 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000444
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000445 if (modules == NULL)
446 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000447
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000448 /* Delete some special variables first. These are common
449 places where user values hide and people complain when their
450 destructors fail. Since the modules containing them are
451 deleted *last* of all, they would come too late in the normal
452 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000453
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000454 value = PyDict_GetItemString(modules, "builtins");
455 if (value != NULL && PyModule_Check(value)) {
456 dict = PyModule_GetDict(value);
457 if (Py_VerboseFlag)
458 PySys_WriteStderr("# clear builtins._\n");
459 PyDict_SetItemString(dict, "_", Py_None);
460 }
461 value = PyDict_GetItemString(modules, "sys");
462 if (value != NULL && PyModule_Check(value)) {
463 char **p;
464 PyObject *v;
465 dict = PyModule_GetDict(value);
466 for (p = sys_deletes; *p != NULL; p++) {
467 if (Py_VerboseFlag)
468 PySys_WriteStderr("# clear sys.%s\n", *p);
469 PyDict_SetItemString(dict, *p, Py_None);
470 }
471 for (p = sys_files; *p != NULL; p+=2) {
472 if (Py_VerboseFlag)
473 PySys_WriteStderr("# restore sys.%s\n", *p);
474 v = PyDict_GetItemString(dict, *(p+1));
475 if (v == NULL)
476 v = Py_None;
477 PyDict_SetItemString(dict, *p, v);
478 }
479 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000480
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000481 /* First, delete __main__ */
482 value = PyDict_GetItemString(modules, "__main__");
483 if (value != NULL && PyModule_Check(value)) {
484 if (Py_VerboseFlag)
485 PySys_WriteStderr("# cleanup __main__\n");
486 _PyModule_Clear(value);
487 PyDict_SetItemString(modules, "__main__", Py_None);
488 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000489
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000490 /* The special treatment of "builtins" here is because even
491 when it's not referenced as a module, its dictionary is
492 referenced by almost every module's __builtins__. Since
493 deleting a module clears its dictionary (even if there are
494 references left to it), we need to delete the "builtins"
495 module last. Likewise, we don't delete sys until the very
496 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000497
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000498 Also note that we 'delete' modules by replacing their entry
499 in the modules dict with None, rather than really deleting
500 them; this avoids a rehash of the modules dictionary and
501 also marks them as "non existent" so they won't be
502 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000504 /* Next, repeatedly delete modules with a reference count of
505 one (skipping builtins and sys) and delete them */
506 do {
507 ndone = 0;
508 pos = 0;
509 while (PyDict_Next(modules, &pos, &key, &value)) {
510 if (value->ob_refcnt != 1)
511 continue;
512 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100513 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000514 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100515 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000516 continue;
517 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100518 PySys_FormatStderr(
519 "# cleanup[1] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000520 _PyModule_Clear(value);
521 PyDict_SetItem(modules, key, Py_None);
522 ndone++;
523 }
524 }
525 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000527 /* Next, delete all modules (still skipping builtins and sys) */
528 pos = 0;
529 while (PyDict_Next(modules, &pos, &key, &value)) {
530 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100531 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000532 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100533 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000534 continue;
535 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100536 PySys_FormatStderr("# cleanup[2] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000537 _PyModule_Clear(value);
538 PyDict_SetItem(modules, key, Py_None);
539 }
540 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000541
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000542 /* Next, delete sys and builtins (in that order) */
543 value = PyDict_GetItemString(modules, "sys");
544 if (value != NULL && PyModule_Check(value)) {
545 if (Py_VerboseFlag)
546 PySys_WriteStderr("# cleanup sys\n");
547 _PyModule_Clear(value);
548 PyDict_SetItemString(modules, "sys", Py_None);
549 }
550 value = PyDict_GetItemString(modules, "builtins");
551 if (value != NULL && PyModule_Check(value)) {
552 if (Py_VerboseFlag)
553 PySys_WriteStderr("# cleanup builtins\n");
554 _PyModule_Clear(value);
555 PyDict_SetItemString(modules, "builtins", Py_None);
556 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000557
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000558 /* Finally, clear and delete the modules directory */
559 PyDict_Clear(modules);
560 interp->modules = NULL;
561 Py_DECREF(modules);
562 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000563}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000564
565
Barry Warsaw28a691b2010-04-17 00:19:56 +0000566/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000567
568long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000569PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000570{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000571 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000572}
573
574
Barry Warsaw28a691b2010-04-17 00:19:56 +0000575const char *
576PyImport_GetMagicTag(void)
577{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000578 return pyc_tag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000579}
580
Guido van Rossum25ce5661997-08-02 03:10:38 +0000581/* Magic for extension modules (built-in as well as dynamically
582 loaded). To prevent initializing an extension module more than
583 once, we keep a static dictionary 'extensions' keyed by module name
584 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000585 modules), containing these modules. A copy of the module's
Victor Stinner95872862011-03-07 18:20:56 +0100586 dictionary is stored by calling _PyImport_FixupExtensionObject()
Guido van Rossum25ce5661997-08-02 03:10:38 +0000587 immediately after the module initialization function succeeds. A
588 copy can be retrieved from there by calling
Victor Stinner95872862011-03-07 18:20:56 +0100589 _PyImport_FindExtensionObject().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000590
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000591 Modules which do support multiple initialization set their m_size
592 field to a non-negative number (indicating the size of the
593 module-specific state). They are still recorded in the extensions
594 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000595*/
596
597int
Victor Stinner95872862011-03-07 18:20:56 +0100598_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
599 PyObject *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000600{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000601 PyObject *modules, *dict;
602 struct PyModuleDef *def;
603 if (extensions == NULL) {
604 extensions = PyDict_New();
605 if (extensions == NULL)
606 return -1;
607 }
608 if (mod == NULL || !PyModule_Check(mod)) {
609 PyErr_BadInternalCall();
610 return -1;
611 }
612 def = PyModule_GetDef(mod);
613 if (!def) {
614 PyErr_BadInternalCall();
615 return -1;
616 }
617 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +0100618 if (PyDict_SetItem(modules, name, mod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000619 return -1;
620 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100621 PyDict_DelItem(modules, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000622 return -1;
623 }
624 if (def->m_size == -1) {
625 if (def->m_base.m_copy) {
626 /* Somebody already imported the module,
627 likely under a different name.
628 XXX this should really not happen. */
629 Py_DECREF(def->m_base.m_copy);
630 def->m_base.m_copy = NULL;
631 }
632 dict = PyModule_GetDict(mod);
633 if (dict == NULL)
634 return -1;
635 def->m_base.m_copy = PyDict_Copy(dict);
636 if (def->m_base.m_copy == NULL)
637 return -1;
638 }
Victor Stinner49d3f252010-10-17 01:24:53 +0000639 PyDict_SetItem(extensions, filename, (PyObject*)def);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000640 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000641}
642
Victor Stinner49d3f252010-10-17 01:24:53 +0000643int
644_PyImport_FixupBuiltin(PyObject *mod, char *name)
645{
646 int res;
Victor Stinner95872862011-03-07 18:20:56 +0100647 PyObject *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100648 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100649 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000650 return -1;
Victor Stinner95872862011-03-07 18:20:56 +0100651 res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj);
652 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000653 return res;
654}
655
Guido van Rossum25ce5661997-08-02 03:10:38 +0000656PyObject *
Victor Stinner95872862011-03-07 18:20:56 +0100657_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000658{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000659 PyObject *mod, *mdict;
660 PyModuleDef* def;
661 if (extensions == NULL)
662 return NULL;
Victor Stinner49d3f252010-10-17 01:24:53 +0000663 def = (PyModuleDef*)PyDict_GetItem(extensions, filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000664 if (def == NULL)
665 return NULL;
666 if (def->m_size == -1) {
667 /* Module does not support repeated initialization */
668 if (def->m_base.m_copy == NULL)
669 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100670 mod = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000671 if (mod == NULL)
672 return NULL;
673 mdict = PyModule_GetDict(mod);
674 if (mdict == NULL)
675 return NULL;
676 if (PyDict_Update(mdict, def->m_base.m_copy))
677 return NULL;
678 }
679 else {
680 if (def->m_base.m_init == NULL)
681 return NULL;
682 mod = def->m_base.m_init();
683 if (mod == NULL)
684 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100685 PyDict_SetItem(PyImport_GetModuleDict(), name, mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000686 Py_DECREF(mod);
687 }
688 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100689 PyDict_DelItem(PyImport_GetModuleDict(), name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000690 Py_DECREF(mod);
691 return NULL;
692 }
693 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +0100694 PySys_FormatStderr("import %U # previously loaded (%R)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000695 name, filename);
696 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000697
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000698}
699
Victor Stinner49d3f252010-10-17 01:24:53 +0000700PyObject *
Victor Stinner501c09a2011-02-23 00:02:00 +0000701_PyImport_FindBuiltin(const char *name)
Victor Stinner49d3f252010-10-17 01:24:53 +0000702{
Victor Stinner95872862011-03-07 18:20:56 +0100703 PyObject *res, *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100704 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100705 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000706 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100707 res = _PyImport_FindExtensionObject(nameobj, nameobj);
708 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000709 return res;
710}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000711
712/* Get the module object corresponding to a module name.
713 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000714 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000715 Because the former action is most common, THIS DOES NOT RETURN A
716 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000717
Guido van Rossum79f25d91997-04-29 20:08:16 +0000718PyObject *
Victor Stinner27ee0892011-03-04 12:57:09 +0000719PyImport_AddModuleObject(PyObject *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000720{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000721 PyObject *modules = PyImport_GetModuleDict();
722 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000723
Victor Stinner27ee0892011-03-04 12:57:09 +0000724 if ((m = PyDict_GetItem(modules, name)) != NULL &&
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000725 PyModule_Check(m))
726 return m;
Victor Stinner27ee0892011-03-04 12:57:09 +0000727 m = PyModule_NewObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000728 if (m == NULL)
729 return NULL;
Victor Stinner27ee0892011-03-04 12:57:09 +0000730 if (PyDict_SetItem(modules, name, m) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000731 Py_DECREF(m);
732 return NULL;
733 }
734 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000735
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000736 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000737}
738
Victor Stinner27ee0892011-03-04 12:57:09 +0000739PyObject *
740PyImport_AddModule(const char *name)
741{
742 PyObject *nameobj, *module;
743 nameobj = PyUnicode_FromString(name);
744 if (nameobj == NULL)
745 return NULL;
746 module = PyImport_AddModuleObject(nameobj);
747 Py_DECREF(nameobj);
748 return module;
749}
750
751
Tim Peters1cd70172004-08-02 03:52:12 +0000752/* Remove name from sys.modules, if it's there. */
753static void
Victor Stinner27ee0892011-03-04 12:57:09 +0000754remove_module(PyObject *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000755{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000756 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner27ee0892011-03-04 12:57:09 +0000757 if (PyDict_GetItem(modules, name) == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000758 return;
Victor Stinner27ee0892011-03-04 12:57:09 +0000759 if (PyDict_DelItem(modules, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000760 Py_FatalError("import: deleting existing key in"
761 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000762}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000763
Victor Stinnerc9abda02011-03-14 13:33:46 -0400764static PyObject * get_sourcefile(PyObject *filename);
765static PyObject *make_source_pathname(PyObject *pathname);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200766static PyObject* make_compiled_pathname(PyObject *pathname, int debug);
Christian Heimes3b06e532008-01-07 20:12:44 +0000767
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000768/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000769 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
770 * removed from sys.modules, to avoid leaving damaged module objects
771 * in sys.modules. The caller may wish to restore the original
772 * module object (if any) in this case; PyImport_ReloadModule is an
773 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000774 *
775 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
776 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000777 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000778PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000779PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000780{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000781 return PyImport_ExecCodeModuleWithPathnames(
782 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000783}
784
785PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000786PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000787{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 return PyImport_ExecCodeModuleWithPathnames(
789 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000790}
791
792PyObject *
793PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000794 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000795{
Victor Stinner27ee0892011-03-04 12:57:09 +0000796 PyObject *m = NULL;
797 PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL;
798
799 nameobj = PyUnicode_FromString(name);
800 if (nameobj == NULL)
801 return NULL;
802
803 if (pathname != NULL) {
804 pathobj = PyUnicode_DecodeFSDefault(pathname);
805 if (pathobj == NULL)
806 goto error;
807 } else
808 pathobj = NULL;
809 if (cpathname != NULL) {
810 cpathobj = PyUnicode_DecodeFSDefault(cpathname);
811 if (cpathobj == NULL)
812 goto error;
813 } else
814 cpathobj = NULL;
815 m = PyImport_ExecCodeModuleObject(nameobj, co, pathobj, cpathobj);
816error:
817 Py_DECREF(nameobj);
818 Py_XDECREF(pathobj);
819 Py_XDECREF(cpathobj);
820 return m;
821}
822
823PyObject*
824PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
825 PyObject *cpathname)
826{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000827 PyObject *modules = PyImport_GetModuleDict();
828 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000829
Victor Stinner27ee0892011-03-04 12:57:09 +0000830 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000831 if (m == NULL)
832 return NULL;
833 /* If the module is being reloaded, we get the old module back
834 and re-use its dict to exec the new code. */
835 d = PyModule_GetDict(m);
836 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
837 if (PyDict_SetItemString(d, "__builtins__",
838 PyEval_GetBuiltins()) != 0)
839 goto error;
840 }
841 /* Remember the filename as the __file__ attribute */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000842 if (pathname != NULL) {
Victor Stinnerc9abda02011-03-14 13:33:46 -0400843 v = get_sourcefile(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000844 if (v == NULL)
845 PyErr_Clear();
846 }
Victor Stinner27ee0892011-03-04 12:57:09 +0000847 else
848 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000849 if (v == NULL) {
850 v = ((PyCodeObject *)co)->co_filename;
851 Py_INCREF(v);
852 }
853 if (PyDict_SetItemString(d, "__file__", v) != 0)
854 PyErr_Clear(); /* Not important enough to report */
855 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000856
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000857 /* Remember the pyc path name as the __cached__ attribute. */
Victor Stinner27ee0892011-03-04 12:57:09 +0000858 if (cpathname != NULL)
859 v = cpathname;
860 else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 v = Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000862 if (PyDict_SetItemString(d, "__cached__", v) != 0)
863 PyErr_Clear(); /* Not important enough to report */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000864
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000865 v = PyEval_EvalCode(co, d, d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000866 if (v == NULL)
867 goto error;
868 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000869
Victor Stinner27ee0892011-03-04 12:57:09 +0000870 if ((m = PyDict_GetItem(modules, name)) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000871 PyErr_Format(PyExc_ImportError,
Victor Stinner27ee0892011-03-04 12:57:09 +0000872 "Loaded module %R not found in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000873 name);
874 return NULL;
875 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000876
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000877 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000878
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000879 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000880
881 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000882 remove_module(name);
883 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000884}
885
886
Barry Warsaw28a691b2010-04-17 00:19:56 +0000887/* Like strrchr(string, '/') but searches for the rightmost of either SEP
888 or ALTSEP, if the latter is defined.
889*/
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200890static Py_UCS4*
891rightmost_sep(Py_UCS4 *s)
Victor Stinnerc9abda02011-03-14 13:33:46 -0400892{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200893 Py_UCS4 *found, c;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400894 for (found = NULL; (c = *s); s++) {
895 if (c == SEP
896#ifdef ALTSEP
897 || c == ALTSEP
898#endif
899 )
900 {
901 found = s;
902 }
903 }
904 return found;
905}
906
907
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000908/* Given a pathname for a Python source file, fill a buffer with the
909 pathname for the corresponding compiled file. Return the pathname
910 for the compiled file, or NULL if there's no space in the buffer.
Victor Stinner2f42ae52011-03-20 00:41:24 +0100911 Doesn't set an exception.
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000912
Victor Stinner2f42ae52011-03-20 00:41:24 +0100913 foo.py -> __pycache__/foo.<tag>.pyc */
914
915static PyObject*
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200916make_compiled_pathname(PyObject *pathstr, int debug)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000917{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200918 Py_UCS4 *pathname;
919 Py_UCS4 buf[MAXPATHLEN];
Victor Stinner2f42ae52011-03-20 00:41:24 +0100920 size_t buflen = (size_t)MAXPATHLEN;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200921 size_t len;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000922 size_t i, save;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200923 Py_UCS4 *pos;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000924 int sep = SEP;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000925
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200926 pathname = PyUnicode_AsUCS4Copy(pathstr);
927 if (!pathname)
928 return NULL;
929 len = Py_UCS4_strlen(pathname);
930
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000931 /* Sanity check that the buffer has roughly enough space to hold what
932 will eventually be the full path to the compiled file. The 5 extra
933 bytes include the slash afer __pycache__, the two extra dots, the
934 extra trailing character ('c' or 'o') and null. This isn't exact
935 because the contents of the buffer can affect how many actual
936 characters of the string get into the buffer. We'll do a final
937 sanity check before writing the extension to ensure we do not
938 overflow the buffer.
939 */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200940 if (len + Py_UCS4_strlen(CACHEDIR_UNICODE) + Py_UCS4_strlen(PYC_TAG_UNICODE) + 5 > buflen) {
941 PyMem_Free(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000942 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200943 }
Tim Petersc1731372001-08-04 08:12:36 +0000944
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000945 /* Find the last path separator and copy everything from the start of
946 the source string up to and including the separator.
947 */
Victor Stinner2f42ae52011-03-20 00:41:24 +0100948 pos = rightmost_sep(pathname);
949 if (pos == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000950 i = 0;
951 }
952 else {
953 sep = *pos;
954 i = pos - pathname + 1;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200955 Py_UCS4_strncpy(buf, pathname, i);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000956 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000957
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000958 save = i;
959 buf[i++] = '\0';
960 /* Add __pycache__/ */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200961 Py_UCS4_strcat(buf, CACHEDIR_UNICODE);
962 i += Py_UCS4_strlen(CACHEDIR_UNICODE) - 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000963 buf[i++] = sep;
Victor Stinnerccbf4752011-03-14 15:05:12 -0400964 buf[i] = '\0';
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000965 /* Add the base filename, but remove the .py or .pyw extension, since
966 the tag name must go before the extension.
967 */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200968 Py_UCS4_strcat(buf, pathname + save);
969 pos = Py_UCS4_strrchr(buf + i, '.');
Victor Stinner2f42ae52011-03-20 00:41:24 +0100970 if (pos != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000971 *++pos = '\0';
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200972
973 /* pathname is not used from here on. */
974 PyMem_Free(pathname);
975
976 Py_UCS4_strcat(buf, PYC_TAG_UNICODE);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000977 /* The length test above assumes that we're only adding one character
978 to the end of what would normally be the extension. What if there
979 is no extension, or the string ends in '.' or '.p', and otherwise
980 fills the buffer? By appending 4 more characters onto the string
981 here, we could overrun the buffer.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000982
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000983 As a simple example, let's say buflen=32 and the input string is
984 'xxx.py'. strlen() would be 6 and the test above would yield:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000985
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000986 (6 + 11 + 10 + 5 == 32) > 32
Barry Warsaw28a691b2010-04-17 00:19:56 +0000987
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000988 which is false and so the name mangling would continue. This would
989 be fine because we'd end up with this string in buf:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000990
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000991 __pycache__/xxx.cpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000992
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000993 strlen(of that) == 30 + the nul fits inside a 32 character buffer.
994 We can even handle an input string of say 'xxxxx' above because
995 that's (5 + 11 + 10 + 5 == 31) > 32 which is also false. Name
996 mangling that yields:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000997
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000998 __pycache__/xxxxxcpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000999
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001000 which is 32 characters including the nul, and thus fits in the
1001 buffer. However, an input string of 'xxxxxx' would yield a result
1002 string of:
Barry Warsaw28a691b2010-04-17 00:19:56 +00001003
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001004 __pycache__/xxxxxxcpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +00001005
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001006 which is 33 characters long (including the nul), thus overflowing
1007 the buffer, even though the first test would fail, i.e.: the input
1008 string is also 6 characters long, so 32 > 32 is false.
Barry Warsaw28a691b2010-04-17 00:19:56 +00001009
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001010 The reason the first test fails but we still overflow the buffer is
1011 that the test above only expects to add one extra character to be
1012 added to the extension, and here we're adding three (pyc). We
1013 don't add the first dot, so that reclaims one of expected
1014 positions, leaving us overflowing by 1 byte (3 extra - 1 reclaimed
1015 dot - 1 expected extra == 1 overflowed).
Barry Warsaw28a691b2010-04-17 00:19:56 +00001016
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001017 The best we can do is ensure that we still have enough room in the
1018 target buffer before we write the extension. Because it's always
1019 only the extension that can cause the overflow, and never the other
1020 path bytes we've written, it's sufficient to just do one more test
1021 here. Still, the assertion that follows can't hurt.
1022 */
Barry Warsaw28a691b2010-04-17 00:19:56 +00001023#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001024 printf("strlen(buf): %d; buflen: %d\n", (int)strlen(buf), (int)buflen);
Barry Warsaw28a691b2010-04-17 00:19:56 +00001025#endif
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001026 len = Py_UCS4_strlen(buf);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001027 if (len + 5 > buflen)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001028 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001029 buf[len] = '.'; len++;
1030 buf[len] = 'p'; len++;
1031 buf[len] = 'y'; len++;
1032 buf[len] = debug ? 'c' : 'o'; len++;
1033 assert(len <= buflen);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001034 return PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, len);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001035}
1036
1037
Barry Warsaw28a691b2010-04-17 00:19:56 +00001038/* Given a pathname to a Python byte compiled file, return the path to the
1039 source file, if the path matches the PEP 3147 format. This does not check
1040 for any file existence, however, if the pyc file name does not match PEP
1041 3147 style, NULL is returned. buf must be at least as big as pathname;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001042 the resulting path will always be shorter.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001043
Victor Stinnerc9abda02011-03-14 13:33:46 -04001044 (...)/__pycache__/foo.<tag>.pyc -> (...)/foo.py */
1045
1046static PyObject*
1047make_source_pathname(PyObject *pathobj)
Barry Warsaw28a691b2010-04-17 00:19:56 +00001048{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001049 Py_UCS4 buf[MAXPATHLEN];
1050 Py_UCS4 *pathname;
1051 Py_UCS4 *left, *right, *dot0, *dot1, sep;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001052 size_t i, j;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001053
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001054 if (PyUnicode_GET_LENGTH(pathobj) > MAXPATHLEN)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001055 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001056 pathname = PyUnicode_AsUCS4Copy(pathobj);
1057 if (!pathname)
1058 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001059
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001060 /* Look back two slashes from the end. In between these two slashes
1061 must be the string __pycache__ or this is not a PEP 3147 style
1062 path. It's possible for there to be only one slash.
1063 */
Victor Stinner2f42ae52011-03-20 00:41:24 +01001064 right = rightmost_sep(pathname);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001065 if (right == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001066 return NULL;
1067 sep = *right;
1068 *right = '\0';
Victor Stinner2f42ae52011-03-20 00:41:24 +01001069 left = rightmost_sep(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001070 *right = sep;
1071 if (left == NULL)
1072 left = pathname;
1073 else
1074 left++;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001075 if (right-left != Py_UCS4_strlen(CACHEDIR_UNICODE) ||
1076 Py_UCS4_strncmp(left, CACHEDIR_UNICODE, right-left) != 0)
1077 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001078
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001079 /* Now verify that the path component to the right of the last slash
1080 has two dots in it.
1081 */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001082 if ((dot0 = Py_UCS4_strchr(right + 1, '.')) == NULL)
1083 goto error;
1084 if ((dot1 = Py_UCS4_strchr(dot0 + 1, '.')) == NULL)
1085 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001086 /* Too many dots? */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001087 if (Py_UCS4_strchr(dot1 + 1, '.') != NULL)
1088 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001089
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001090 /* This is a PEP 3147 path. Start by copying everything from the
1091 start of pathname up to and including the leftmost slash. Then
1092 copy the file's basename, removing the magic tag and adding a .py
1093 suffix.
1094 */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001095 Py_UCS4_strncpy(buf, pathname, (i=left-pathname));
1096 Py_UCS4_strncpy(buf+i, right+1, (j=dot0-right));
Victor Stinnerc9abda02011-03-14 13:33:46 -04001097 buf[i+j] = 'p';
1098 buf[i+j+1] = 'y';
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001099 PyMem_Free(pathname);
1100 return PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, i+j+2);
1101 error:
1102 PyMem_Free(pathname);
1103 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001104}
1105
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001106/* Given a pathname for a Python source file, its time of last
1107 modification, and a pathname for a compiled file, check whether the
1108 compiled file represents the same version of the source. If so,
1109 return a FILE pointer for the compiled file, positioned just after
1110 the header; if not, return NULL.
1111 Doesn't set an exception. */
1112
1113static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001114check_compiled_module(PyObject *pathname, time_t mtime, PyObject *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001115{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001116 FILE *fp;
1117 long magic;
1118 long pyc_mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001119
Victor Stinner2f42ae52011-03-20 00:41:24 +01001120 fp = _Py_fopen(cpathname, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001121 if (fp == NULL)
1122 return NULL;
1123 magic = PyMarshal_ReadLongFromFile(fp);
1124 if (magic != pyc_magic) {
1125 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001126 PySys_FormatStderr("# %R has bad magic\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001127 fclose(fp);
1128 return NULL;
1129 }
1130 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
1131 if (pyc_mtime != mtime) {
1132 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001133 PySys_FormatStderr("# %R has bad mtime\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001134 fclose(fp);
1135 return NULL;
1136 }
1137 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001138 PySys_FormatStderr("# %R matches %R\n", cpathname, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001139 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001140}
1141
1142
1143/* Read a code object from a file and check it for validity */
1144
Guido van Rossum79f25d91997-04-29 20:08:16 +00001145static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001146read_compiled_module(PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001147{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001148 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001149
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001150 co = PyMarshal_ReadLastObjectFromFile(fp);
1151 if (co == NULL)
1152 return NULL;
1153 if (!PyCode_Check(co)) {
1154 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001155 "Non-code object in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001156 Py_DECREF(co);
1157 return NULL;
1158 }
1159 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001160}
1161
1162
1163/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001164 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001165
Guido van Rossum79f25d91997-04-29 20:08:16 +00001166static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001167load_compiled_module(PyObject *name, PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001168{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001169 long magic;
1170 PyCodeObject *co;
1171 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001172
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001173 magic = PyMarshal_ReadLongFromFile(fp);
1174 if (magic != pyc_magic) {
1175 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001176 "Bad magic number in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001177 return NULL;
1178 }
1179 (void) PyMarshal_ReadLongFromFile(fp);
1180 co = read_compiled_module(cpathname, fp);
1181 if (co == NULL)
1182 return NULL;
1183 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001184 PySys_FormatStderr("import %U # precompiled from %R\n",
1185 name, cpathname);
1186 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1187 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001188 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001189
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001190 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001191}
1192
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001193/* Parse a source file and return the corresponding code object */
1194
Guido van Rossum79f25d91997-04-29 20:08:16 +00001195static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001196parse_source_module(PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001197{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001198 PyCodeObject *co;
1199 PyObject *pathbytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001200 mod_ty mod;
1201 PyCompilerFlags flags;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001202 PyArena *arena;
1203
1204 pathbytes = PyUnicode_EncodeFSDefault(pathname);
1205 if (pathbytes == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001206 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001207
Victor Stinner2f42ae52011-03-20 00:41:24 +01001208 arena = PyArena_New();
1209 if (arena == NULL) {
1210 Py_DECREF(pathbytes);
1211 return NULL;
1212 }
1213
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001214 flags.cf_flags = 0;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001215 mod = PyParser_ASTFromFile(fp, PyBytes_AS_STRING(pathbytes), NULL,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001216 Py_file_input, 0, 0, &flags,
1217 NULL, arena);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001218 if (mod != NULL)
1219 co = PyAST_Compile(mod, PyBytes_AS_STRING(pathbytes), NULL, arena);
1220 else
1221 co = NULL;
1222 Py_DECREF(pathbytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001223 PyArena_Free(arena);
1224 return co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001225}
1226
Guido van Rossum55a83382000-09-20 20:31:38 +00001227/* Helper to open a bytecode file for writing in exclusive mode */
1228
Victor Stinner783c82c2011-04-20 03:27:51 +02001229#ifndef MS_WINDOWS
Guido van Rossum55a83382000-09-20 20:31:38 +00001230static FILE *
Christian Heimes05e8be12008-02-23 18:30:17 +00001231open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +00001232{
1233#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001234 /* Use O_EXCL to avoid a race condition when another process tries to
1235 write the same file. When that happens, our open() call fails,
1236 which is just fine (since it's only a cache).
1237 XXX If the file exists and is writable but the directory is not
1238 writable, the file will never be written. Oh well.
1239 */
1240 int fd;
1241 (void) unlink(filename);
1242 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
Tim Peters42c83af2000-09-29 04:03:10 +00001243#ifdef O_BINARY
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001244 |O_BINARY /* necessary for Windows */
Tim Peters42c83af2000-09-29 04:03:10 +00001245#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001246#ifdef __VMS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001247 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001248#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001249 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001250#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001251 );
1252 if (fd < 0)
1253 return NULL;
1254 return fdopen(fd, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001255#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001256 /* Best we can do -- on Windows this can't happen anyway */
1257 return fopen(filename, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001258#endif
1259}
Victor Stinner783c82c2011-04-20 03:27:51 +02001260#endif
Guido van Rossum55a83382000-09-20 20:31:38 +00001261
1262
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001263/* Write a compiled module to a file, placing the time of last
1264 modification of its source into the header.
1265 Errors are ignored, if a write error occurs an attempt is made to
1266 remove the file. */
1267
1268static void
Victor Stinner2f42ae52011-03-20 00:41:24 +01001269write_compiled_module(PyCodeObject *co, PyObject *cpathname,
1270 struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001271{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001272 Py_UCS4 *cpathname_ucs4;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001273 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001274 time_t mtime = srcstat->st_mtime;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001275#ifdef MS_WINDOWS /* since Windows uses different permissions */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001276 mode_t mode = srcstat->st_mode & ~S_IEXEC;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001277#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001278 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
1279 mode_t dirmode = (srcstat->st_mode |
1280 S_IXUSR | S_IXGRP | S_IXOTH |
1281 S_IWUSR | S_IWGRP | S_IWOTH);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001282 PyObject *dirbytes;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001283#endif
Victor Stinner783c82c2011-04-20 03:27:51 +02001284#ifdef MS_WINDOWS
1285 int fd;
1286#else
1287 PyObject *cpathbytes;
1288#endif
1289 PyObject *dirname;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001290 Py_UCS4 *dirsep;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001291 int res, ok;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001292
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001293 /* Ensure that the __pycache__ directory exists. */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001294 cpathname_ucs4 = PyUnicode_AsUCS4Copy(cpathname);
1295 if (!cpathname_ucs4)
1296 return;
1297 dirsep = rightmost_sep(cpathname_ucs4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001298 if (dirsep == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001299 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001300 PySys_FormatStderr("# no %s path found %R\n", CACHEDIR, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001301 return;
1302 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001303 dirname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
1304 cpathname_ucs4,
1305 dirsep - cpathname_ucs4);
1306 PyMem_Free(cpathname_ucs4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001307 if (dirname == NULL) {
1308 PyErr_Clear();
1309 return;
1310 }
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001311
1312#ifdef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001313 res = CreateDirectoryW(PyUnicode_AS_UNICODE(dirname), NULL);
1314 ok = (res != 0);
1315 if (!ok && GetLastError() == ERROR_ALREADY_EXISTS)
1316 ok = 1;
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001317#else
Victor Stinner2f42ae52011-03-20 00:41:24 +01001318 dirbytes = PyUnicode_EncodeFSDefault(dirname);
1319 if (dirbytes == NULL) {
1320 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001321 return;
1322 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001323 res = mkdir(PyBytes_AS_STRING(dirbytes), dirmode);
1324 Py_DECREF(dirbytes);
1325 if (0 <= res)
1326 ok = 1;
1327 else
1328 ok = (errno == EEXIST);
1329#endif
1330 if (!ok) {
1331 if (Py_VerboseFlag)
1332 PySys_FormatStderr("# cannot create cache dir %R\n", dirname);
1333 Py_DECREF(dirname);
1334 return;
1335 }
1336 Py_DECREF(dirname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001337
Victor Stinner783c82c2011-04-20 03:27:51 +02001338#ifdef MS_WINDOWS
1339 (void)DeleteFileW(PyUnicode_AS_UNICODE(cpathname));
1340 fd = _wopen(PyUnicode_AS_UNICODE(cpathname),
1341 O_EXCL | O_CREAT | O_WRONLY | O_TRUNC | O_BINARY,
1342 mode);
1343 if (0 <= fd)
1344 fp = fdopen(fd, "wb");
1345 else
1346 fp = NULL;
1347#else
Victor Stinner2f42ae52011-03-20 00:41:24 +01001348 cpathbytes = PyUnicode_EncodeFSDefault(cpathname);
1349 if (cpathbytes == NULL) {
1350 PyErr_Clear();
1351 return;
1352 }
1353
1354 fp = open_exclusive(PyBytes_AS_STRING(cpathbytes), mode);
Victor Stinner783c82c2011-04-20 03:27:51 +02001355#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001356 if (fp == NULL) {
1357 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001358 PySys_FormatStderr(
1359 "# can't create %R\n", cpathname);
Victor Stinner783c82c2011-04-20 03:27:51 +02001360#ifndef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001361 Py_DECREF(cpathbytes);
Victor Stinner783c82c2011-04-20 03:27:51 +02001362#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001363 return;
1364 }
1365 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
1366 /* First write a 0 for mtime */
1367 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
1368 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
1369 if (fflush(fp) != 0 || ferror(fp)) {
1370 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001371 PySys_FormatStderr("# can't write %R\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001372 /* Don't keep partial file */
1373 fclose(fp);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001374#ifdef MS_WINDOWS
1375 (void)DeleteFileW(PyUnicode_AS_UNICODE(cpathname));
1376#else
1377 (void) unlink(PyBytes_AS_STRING(cpathbytes));
Victor Stinner2f42ae52011-03-20 00:41:24 +01001378 Py_DECREF(cpathbytes);
Victor Stinner783c82c2011-04-20 03:27:51 +02001379#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001380 return;
1381 }
Victor Stinner783c82c2011-04-20 03:27:51 +02001382#ifndef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001383 Py_DECREF(cpathbytes);
Victor Stinner783c82c2011-04-20 03:27:51 +02001384#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001385 /* Now write the true mtime */
1386 fseek(fp, 4L, 0);
1387 assert(mtime < LONG_MAX);
1388 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
1389 fflush(fp);
1390 fclose(fp);
1391 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001392 PySys_FormatStderr("# wrote %R\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001393}
1394
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001395static void
1396update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
1397{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001398 PyObject *constants, *tmp;
1399 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001401 if (PyUnicode_Compare(co->co_filename, oldname))
1402 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001403
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001404 tmp = co->co_filename;
1405 co->co_filename = newname;
1406 Py_INCREF(co->co_filename);
1407 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001408
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001409 constants = co->co_consts;
1410 n = PyTuple_GET_SIZE(constants);
1411 for (i = 0; i < n; i++) {
1412 tmp = PyTuple_GET_ITEM(constants, i);
1413 if (PyCode_Check(tmp))
1414 update_code_filenames((PyCodeObject *)tmp,
1415 oldname, newname);
1416 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001417}
1418
Victor Stinner2f42ae52011-03-20 00:41:24 +01001419static void
1420update_compiled_module(PyCodeObject *co, PyObject *newname)
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001421{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001422 PyObject *oldname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001423
Victor Stinner2f42ae52011-03-20 00:41:24 +01001424 if (PyUnicode_Compare(co->co_filename, newname) == 0)
1425 return;
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +00001426
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001427 oldname = co->co_filename;
1428 Py_INCREF(oldname);
1429 update_code_filenames(co, oldname, newname);
1430 Py_DECREF(oldname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001431}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001432
Brett Cannon442c9b92011-03-23 16:14:42 -07001433static PyObject *
1434imp_fix_co_filename(PyObject *self, PyObject *args)
1435{
1436 PyObject *co;
1437 PyObject *file_path;
1438
1439 if (!PyArg_ParseTuple(args, "OO:_fix_co_filename", &co, &file_path))
1440 return NULL;
1441
1442 if (!PyCode_Check(co)) {
1443 PyErr_SetString(PyExc_TypeError,
1444 "first argument must be a code object");
1445 return NULL;
1446 }
1447
1448 if (!PyUnicode_Check(file_path)) {
1449 PyErr_SetString(PyExc_TypeError,
1450 "second argument must be a string");
1451 return NULL;
1452 }
1453
1454 update_compiled_module((PyCodeObject*)co, file_path);
1455
1456 Py_RETURN_NONE;
1457}
1458
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001459/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001460 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
1461 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001462
Guido van Rossum79f25d91997-04-29 20:08:16 +00001463static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001464load_source_module(PyObject *name, PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001465{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001466 struct stat st;
1467 FILE *fpc;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001468 PyObject *cpathname = NULL, *cpathbytes = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001469 PyCodeObject *co;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001470 PyObject *m = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001471
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001472 if (fstat(fileno(fp), &st) != 0) {
1473 PyErr_Format(PyExc_RuntimeError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001474 "unable to get file status from %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001475 pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001476 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001477 }
Fred Drake4c82b232000-06-30 16:18:57 +00001478#if SIZEOF_TIME_T > 4
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001479 /* Python's .pyc timestamp handling presumes that the timestamp fits
1480 in 4 bytes. This will be fine until sometime in the year 2038,
1481 when a 4-byte signed time_t will overflow.
1482 */
1483 if (st.st_mtime >> 32) {
1484 PyErr_SetString(PyExc_OverflowError,
1485 "modification time overflows a 4 byte field");
Victor Stinner2f42ae52011-03-20 00:41:24 +01001486 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001487 }
Fred Drake4c82b232000-06-30 16:18:57 +00001488#endif
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001489 cpathname = make_compiled_pathname(pathname, !Py_OptimizeFlag);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001490
1491 if (cpathname != NULL)
1492 fpc = check_compiled_module(pathname, st.st_mtime, cpathname);
1493 else
1494 fpc = NULL;
1495
1496 if (fpc) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001497 co = read_compiled_module(cpathname, fpc);
1498 fclose(fpc);
1499 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001500 goto error;
1501 update_compiled_module(co, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001502 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001503 PySys_FormatStderr("import %U # precompiled from %R\n",
1504 name, cpathname);
1505 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1506 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001507 }
1508 else {
1509 co = parse_source_module(pathname, fp);
1510 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001511 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001512 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001513 PySys_FormatStderr("import %U # from %R\n",
Victor Stinner98dbba52011-03-14 15:15:47 -04001514 name, pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001515 if (cpathname != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001516 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1517 if (ro == NULL || !PyObject_IsTrue(ro))
1518 write_compiled_module(co, cpathname, &st);
1519 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001520 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1521 pathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001522 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001523 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001524
Victor Stinner2f42ae52011-03-20 00:41:24 +01001525error:
1526 Py_XDECREF(cpathbytes);
1527 Py_XDECREF(cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001528 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001529}
1530
Christian Heimes3b06e532008-01-07 20:12:44 +00001531/* Get source file -> unicode or None
1532 * Returns the path to the py file if available, else the given path
1533 */
1534static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001535get_sourcefile(PyObject *filename)
Christian Heimes3b06e532008-01-07 20:12:44 +00001536{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001537 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001538 Py_UCS4 *fileuni;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001539 PyObject *py;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001540 struct stat statbuf;
Christian Heimes3b06e532008-01-07 20:12:44 +00001541
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001542 len = PyUnicode_GET_LENGTH(filename);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001543 if (len == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001544 Py_RETURN_NONE;
Christian Heimes3b06e532008-01-07 20:12:44 +00001545
Victor Stinnerc9abda02011-03-14 13:33:46 -04001546 /* don't match *.pyc or *.pyo? */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001547 fileuni = PyUnicode_AsUCS4Copy(filename);
1548 if (!fileuni)
1549 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001550 if (len < 5
1551 || fileuni[len-4] != '.'
1552 || (fileuni[len-3] != 'p' && fileuni[len-3] != 'P')
1553 || (fileuni[len-2] != 'y' && fileuni[len-2] != 'Y'))
1554 goto unchanged;
Christian Heimes3b06e532008-01-07 20:12:44 +00001555
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001556 /* Start by trying to turn PEP 3147 path into source path. If that
1557 * fails, just chop off the trailing character, i.e. legacy pyc path
1558 * to py.
1559 */
Victor Stinnerc9abda02011-03-14 13:33:46 -04001560 py = make_source_pathname(filename);
1561 if (py == NULL) {
1562 PyErr_Clear();
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001563 py = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, fileuni, len - 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001564 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001565 if (py == NULL)
1566 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001567
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001568 if (_Py_stat(py, &statbuf) == 0 && S_ISREG(statbuf.st_mode)) {
1569 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001570 return py;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001571 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001572 Py_DECREF(py);
1573 goto unchanged;
1574
1575error:
1576 PyErr_Clear();
1577unchanged:
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001578 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001579 Py_INCREF(filename);
1580 return filename;
Christian Heimes3b06e532008-01-07 20:12:44 +00001581}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001582
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001583/* Forward */
Victor Stinner41c5fec2011-03-13 21:46:30 -04001584static PyObject *load_module(PyObject *, FILE *, PyObject *, int, PyObject *);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001585static struct filedescr *find_module(PyObject *, PyObject *, PyObject *,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001586 PyObject **, FILE **, PyObject **);
Victor Stinner53dc7352011-03-20 01:50:21 +01001587static struct _frozen * find_frozen(PyObject *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001588
1589/* Load a package and return its module object WITH INCREMENTED
1590 REFERENCE COUNT */
1591
1592static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001593load_package(PyObject *name, PyObject *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001594{
Victor Stinner41c5fec2011-03-13 21:46:30 -04001595 PyObject *m, *d, *bufobj;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001596 PyObject *file = NULL, *path_list = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001597 int err;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001598 FILE *fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001599 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001600
Victor Stinnerc9abda02011-03-14 13:33:46 -04001601 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001602 if (m == NULL)
1603 return NULL;
1604 if (Py_VerboseFlag)
Victor Stinner98dbba52011-03-14 15:15:47 -04001605 PySys_FormatStderr("import %U # directory %R\n",
1606 name, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001607 file = get_sourcefile(pathname);
1608 if (file == NULL)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001609 return NULL;
1610 path_list = Py_BuildValue("[O]", file);
1611 if (path_list == NULL) {
1612 Py_DECREF(file);
1613 return NULL;
1614 }
1615 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001616 err = PyDict_SetItemString(d, "__file__", file);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001617 Py_DECREF(file);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001618 if (err == 0)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001619 err = PyDict_SetItemString(d, "__path__", path_list);
1620 if (err != 0) {
1621 Py_DECREF(path_list);
1622 return NULL;
1623 }
Victor Stinner533d7832011-03-14 13:22:54 -04001624 fdp = find_module(name, initstr, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001625 &bufobj, &fp, NULL);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001626 Py_DECREF(path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001627 if (fdp == NULL) {
1628 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1629 PyErr_Clear();
1630 Py_INCREF(m);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001631 return m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001632 }
1633 else
Victor Stinnerc9abda02011-03-14 13:33:46 -04001634 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001635 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001636 m = load_module(name, fp, bufobj, fdp->type, NULL);
1637 Py_XDECREF(bufobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001638 if (fp != NULL)
1639 fclose(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001640 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001641}
1642
1643
1644/* Helper to test for built-in module */
1645
1646static int
Victor Stinner95872862011-03-07 18:20:56 +01001647is_builtin(PyObject *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001648{
Victor Stinner95872862011-03-07 18:20:56 +01001649 int i, cmp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001650 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
Victor Stinner95872862011-03-07 18:20:56 +01001651 cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name);
1652 if (cmp == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001653 if (PyImport_Inittab[i].initfunc == NULL)
1654 return -1;
1655 else
1656 return 1;
1657 }
1658 }
1659 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001660}
1661
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001662
Just van Rossum52e14d62002-12-30 22:08:05 +00001663/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1664 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001665 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001666 that can handle the path item. Return None if no hook could;
1667 this tells our caller it should fall back to the builtin
1668 import mechanism. Cache the result in path_importer_cache.
1669 Returns a borrowed reference. */
1670
1671static PyObject *
1672get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001673 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001674{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001675 PyObject *importer;
1676 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001677
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001678 /* These conditions are the caller's responsibility: */
1679 assert(PyList_Check(path_hooks));
1680 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001681
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001682 nhooks = PyList_Size(path_hooks);
1683 if (nhooks < 0)
1684 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001685
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001686 importer = PyDict_GetItem(path_importer_cache, p);
1687 if (importer != NULL)
1688 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001689
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001690 /* set path_importer_cache[p] to None to avoid recursion */
1691 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1692 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001693
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001694 for (j = 0; j < nhooks; j++) {
1695 PyObject *hook = PyList_GetItem(path_hooks, j);
1696 if (hook == NULL)
1697 return NULL;
1698 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1699 if (importer != NULL)
1700 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001701
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001702 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1703 return NULL;
1704 }
1705 PyErr_Clear();
1706 }
1707 if (importer == NULL) {
1708 importer = PyObject_CallFunctionObjArgs(
1709 (PyObject *)&PyNullImporter_Type, p, NULL
1710 );
1711 if (importer == NULL) {
1712 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1713 PyErr_Clear();
1714 return Py_None;
1715 }
1716 }
1717 }
1718 if (importer != NULL) {
1719 int err = PyDict_SetItem(path_importer_cache, p, importer);
1720 Py_DECREF(importer);
1721 if (err != 0)
1722 return NULL;
1723 }
1724 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001725}
1726
Christian Heimes9cd17752007-11-18 19:35:23 +00001727PyAPI_FUNC(PyObject *)
1728PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001729 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001730
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001731 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1732 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1733 importer = get_path_importer(path_importer_cache,
1734 path_hooks, path);
1735 }
1736 }
1737 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1738 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001739}
1740
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001741/* Search the path (default sys.path) for a module. Return the
1742 corresponding filedescr struct, and (via return arguments) the
1743 pathname and an open file. Return NULL if the module is not found. */
1744
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001745#ifdef MS_COREDLL
Victor Stinner4d6c1c42011-03-08 23:49:04 +01001746extern FILE *_PyWin_FindRegisteredModule(PyObject *, struct filedescr **,
1747 PyObject **p_path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001748#endif
1749
Victor Stinner547a2a62011-03-20 03:07:28 +01001750/* Forward */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001751static int case_ok(PyObject *, Py_ssize_t, PyObject *);
Victor Stinner547a2a62011-03-20 03:07:28 +01001752static int find_init_module(PyObject *);
Just van Rossum52e14d62002-12-30 22:08:05 +00001753static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001754
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001755/* Get the path of a module: get its importer and call importer.find_module()
1756 hook, or check if the module if a package (if path/__init__.py exists).
1757
1758 -1: error: a Python error occurred
1759 0: ignore: an error occurred because of invalid data, but the error is not
1760 important enough to be reported.
1761 1: get path: module not found, but *buf contains its path
1762 2: found: *p_fd is the file descriptor (IMP_HOOK or PKG_DIRECTORY)
1763 and *buf is the path */
1764
1765static int
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001766find_module_path(PyObject *fullname, PyObject *name, PyObject *path,
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001767 PyObject *path_hooks, PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001768 PyObject **p_path, PyObject **p_loader, struct filedescr **p_fd)
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001769{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001770 Py_UCS4 buf[MAXPATHLEN+1];
Victor Stinner2fd76e42011-03-14 15:19:39 -04001771 PyObject *path_unicode, *filename;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001772 Py_ssize_t len;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001773 struct stat statbuf;
1774 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
1775
1776 if (PyUnicode_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001777 Py_INCREF(path);
1778 path_unicode = path;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001779 }
1780 else if (PyBytes_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001781 path_unicode = PyUnicode_DecodeFSDefaultAndSize(
1782 PyBytes_AS_STRING(path), PyBytes_GET_SIZE(path));
1783 if (path_unicode == NULL)
1784 return -1;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001785 }
1786 else
1787 return 0;
1788
Victor Stinner46084ba2011-10-06 02:39:42 +02001789 if (PyUnicode_READY(path_unicode))
1790 return -1;
1791
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001792 len = PyUnicode_GET_LENGTH(path_unicode);
Georg Brandl4cb0de22011-09-28 21:49:49 +02001793 if (!PyUnicode_AsUCS4(path_unicode, buf, Py_ARRAY_LENGTH(buf), 1)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001794 Py_DECREF(path_unicode);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001795 PyErr_Clear();
1796 return 0;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001797 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001798 Py_DECREF(path_unicode);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001799
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001800 if (Py_UCS4_strlen(buf) != len)
Victor Stinner2fd76e42011-03-14 15:19:39 -04001801 return 0; /* path contains '\0' */
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001802
1803 /* sys.path_hooks import hook */
1804 if (p_loader != NULL) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001805 _Py_IDENTIFIER(find_module);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001806 PyObject *importer;
1807
1808 importer = get_path_importer(path_importer_cache,
1809 path_hooks, path);
1810 if (importer == NULL) {
1811 return -1;
1812 }
1813 /* Note: importer is a borrowed reference */
1814 if (importer != Py_None) {
1815 PyObject *loader;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001816 loader = _PyObject_CallMethodId(importer,
1817 &PyId_find_module, "O", fullname);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001818 if (loader == NULL)
1819 return -1; /* error */
1820 if (loader != Py_None) {
1821 /* a loader was found */
1822 *p_loader = loader;
1823 *p_fd = &importhookdescr;
1824 return 2;
1825 }
1826 Py_DECREF(loader);
1827 return 0;
1828 }
1829 }
1830 /* no hook was found, use builtin import */
1831
1832 if (len > 0 && buf[len-1] != SEP
1833#ifdef ALTSEP
1834 && buf[len-1] != ALTSEP
1835#endif
1836 )
1837 buf[len++] = SEP;
Georg Brandl4cb0de22011-09-28 21:49:49 +02001838 if (!PyUnicode_AsUCS4(name, buf+len, Py_ARRAY_LENGTH(buf)-len, 1)) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001839 PyErr_Clear();
1840 return 0;
1841 }
1842 len += PyUnicode_GET_LENGTH(name);
Victor Stinner2fd76e42011-03-14 15:19:39 -04001843
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001844 filename = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
1845 buf, len);
Victor Stinner2fd76e42011-03-14 15:19:39 -04001846 if (filename == NULL)
1847 return -1;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001848
1849 /* Check for package import (buf holds a directory name,
1850 and there's an __init__ module in that directory */
1851#ifdef HAVE_STAT
Victor Stinner2fd76e42011-03-14 15:19:39 -04001852 if (_Py_stat(filename, &statbuf) == 0 && /* it exists */
Victor Stinnerd0296212011-03-14 14:04:10 -04001853 S_ISDIR(statbuf.st_mode)) /* it's a directory */
1854 {
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001855 int match;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001856
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001857 match = case_ok(filename, 0, name);
1858 if (match < 0) {
1859 Py_DECREF(filename);
1860 return -1;
1861 }
1862 if (match) { /* case matches */
1863 if (find_init_module(filename)) { /* and has __init__.py */
Victor Stinner2fd76e42011-03-14 15:19:39 -04001864 *p_path = filename;
Victor Stinnerd0296212011-03-14 14:04:10 -04001865 *p_fd = &fd_package;
1866 return 2;
1867 }
1868 else {
1869 int err;
Victor Stinnerd0296212011-03-14 14:04:10 -04001870 err = PyErr_WarnFormat(PyExc_ImportWarning, 1,
Victor Stinner547a2a62011-03-20 03:07:28 +01001871 "Not importing directory %R: missing __init__.py",
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001872 filename);
Victor Stinner547a2a62011-03-20 03:07:28 +01001873 if (err) {
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001874 Py_DECREF(filename);
Victor Stinnerd0296212011-03-14 14:04:10 -04001875 return -1;
Victor Stinner547a2a62011-03-20 03:07:28 +01001876 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001877 }
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001878 }
1879 }
1880#endif
Victor Stinner2fd76e42011-03-14 15:19:39 -04001881 *p_path = filename;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001882 return 1;
1883}
1884
1885/* Find a module in search_path_list. For each path, try
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001886 find_module_path() or try each _PyImport_Filetab suffix.
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001887
1888 If the module is found, return a file descriptor, write the path in
1889 *p_filename, write the pointer to the file object into *p_fp, and (if
1890 p_loader is not NULL) the loader into *p_loader.
1891
1892 Otherwise, raise an exception and return NULL. */
1893
Victor Stinner37580282011-03-20 01:34:43 +01001894static struct filedescr*
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001895find_module_path_list(PyObject *fullname, PyObject *name,
Victor Stinner37580282011-03-20 01:34:43 +01001896 PyObject *search_path_list, PyObject *path_hooks,
1897 PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001898 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001899{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 Py_ssize_t i, npath;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001901 struct filedescr *fdp = NULL;
1902 char *filemode;
1903 FILE *fp = NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001904 PyObject *prefix, *filename;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001905 int match;
Victor Stinner53dc7352011-03-20 01:50:21 +01001906
Victor Stinner37580282011-03-20 01:34:43 +01001907 npath = PyList_Size(search_path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001908 for (i = 0; i < npath; i++) {
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001909 PyObject *path;
1910 int ok;
1911
1912 path = PyList_GetItem(search_path_list, i);
1913 if (path == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001914 return NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001915
Victor Stinner2fd76e42011-03-14 15:19:39 -04001916 prefix = NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001917 ok = find_module_path(fullname, name, path,
1918 path_hooks, path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001919 &prefix, p_loader, &fdp);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001920 if (ok < 0)
1921 return NULL;
1922 if (ok == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001923 continue;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001924 if (ok == 2) {
1925 *p_path = prefix;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001926 return fdp;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001927 }
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001928
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001929 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001930 struct stat statbuf;
1931
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001932 filemode = fdp->mode;
1933 if (filemode[0] == 'U')
1934 filemode = "r" PY_STDIOTEXTMODE;
Victor Stinnerd0296212011-03-14 14:04:10 -04001935
Victor Stinner2fd76e42011-03-14 15:19:39 -04001936 filename = PyUnicode_FromFormat("%U%s", prefix, fdp->suffix);
1937 if (filename == NULL) {
1938 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001939 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001940 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001941
1942 if (Py_VerboseFlag > 1)
1943 PySys_FormatStderr("# trying %R\n", filename);
1944
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001945 if (_Py_stat(filename, &statbuf) == 0 && /* it exists */
1946 S_ISDIR(statbuf.st_mode)) /* it's a directory */
1947 {
1948 Py_DECREF(filename);
1949 continue;
1950 }
1951
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001952 fp = _Py_fopen(filename, filemode);
1953 if (fp == NULL) {
1954 Py_DECREF(filename);
Victor Stinner925ef392011-06-20 15:01:10 +02001955 if (PyErr_Occurred()) {
1956 Py_DECREF(prefix);
1957 return NULL;
1958 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001959 continue;
1960 }
1961 match = case_ok(filename, -(Py_ssize_t)strlen(fdp->suffix), name);
1962 if (match < 0) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001963 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001964 Py_DECREF(filename);
1965 return NULL;
1966 }
1967 if (match) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001968 Py_DECREF(prefix);
1969 *p_path = filename;
Victor Stinnerd0296212011-03-14 14:04:10 -04001970 *p_fp = fp;
1971 return fdp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001972 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001973 Py_DECREF(filename);
Victor Stinnerd0296212011-03-14 14:04:10 -04001974
1975 fclose(fp);
1976 fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001977 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001978 Py_DECREF(prefix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001979 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001980 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04001981 "No module named %R", name);
Victor Stinnerd0296212011-03-14 14:04:10 -04001982 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001983}
1984
Victor Stinner37580282011-03-20 01:34:43 +01001985/* Find a module:
1986
1987 - try find_module() of each sys.meta_path hook
1988 - try find_frozen()
1989 - try is_builtin()
1990 - try _PyWin_FindRegisteredModule() (Windows only)
1991 - otherwise, call find_module_path_list() with search_path_list (if not
1992 NULL) or sys.path
1993
Victor Stinner2fd76e42011-03-14 15:19:39 -04001994 fullname can be NULL, but only if p_loader is NULL.
1995
Victor Stinner37580282011-03-20 01:34:43 +01001996 Return:
1997
1998 - &fd_builtin (C_BUILTIN) if it is a builtin
1999 - &fd_frozen (PY_FROZEN) if it is frozen
Victor Stinner2fd76e42011-03-14 15:19:39 -04002000 - &fd_package (PKG_DIRECTORY) and write the filename into *p_path
Victor Stinner37580282011-03-20 01:34:43 +01002001 if it is a package
2002 - &importhookdescr (IMP_HOOK) and write the loader into *p_loader if a
2003 importer loader was found
2004 - a file descriptor (PY_SOURCE, PY_COMPILED, C_EXTENSION, PY_RESOURCE or
2005 PY_CODERESOURCE: see _PyImport_Filetab), write the filename into
Victor Stinner2fd76e42011-03-14 15:19:39 -04002006 *p_path and the pointer to the open file into *p_fp
Victor Stinner37580282011-03-20 01:34:43 +01002007 - NULL on error
2008
Victor Stinner2fd76e42011-03-14 15:19:39 -04002009 By default, *p_path, *p_fp and *p_loader (if set) are set to NULL.
2010 Eg. *p_path is set to NULL for a builtin package.
2011*/
Victor Stinner37580282011-03-20 01:34:43 +01002012
2013static struct filedescr *
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002014find_module(PyObject *fullname, PyObject *name, PyObject *search_path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04002015 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Victor Stinner37580282011-03-20 01:34:43 +01002016{
2017 Py_ssize_t i, npath;
2018 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
2019 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
2020 PyObject *path_hooks, *path_importer_cache;
Victor Stinner37580282011-03-20 01:34:43 +01002021
Victor Stinner2fd76e42011-03-14 15:19:39 -04002022 *p_path = NULL;
Victor Stinner37580282011-03-20 01:34:43 +01002023 *p_fp = NULL;
2024 if (p_loader != NULL)
2025 *p_loader = NULL;
2026
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002027 if (PyUnicode_GET_LENGTH(name) > MAXPATHLEN) {
2028 PyErr_SetString(PyExc_OverflowError,
2029 "module name is too long");
2030 return NULL;
2031 }
2032
Victor Stinner37580282011-03-20 01:34:43 +01002033 /* sys.meta_path import hook */
2034 if (p_loader != NULL) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002035 _Py_IDENTIFIER(find_module);
Victor Stinner37580282011-03-20 01:34:43 +01002036 PyObject *meta_path;
2037
2038 meta_path = PySys_GetObject("meta_path");
2039 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinner16191322011-09-15 19:28:05 +02002040 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002041 "sys.meta_path must be a list of "
2042 "import hooks");
2043 return NULL;
2044 }
2045 Py_INCREF(meta_path); /* zap guard */
2046 npath = PyList_Size(meta_path);
2047 for (i = 0; i < npath; i++) {
2048 PyObject *loader;
2049 PyObject *hook = PyList_GetItem(meta_path, i);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002050 loader = _PyObject_CallMethodId(hook, &PyId_find_module,
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002051 "OO", fullname,
Victor Stinner37580282011-03-20 01:34:43 +01002052 search_path_list != NULL ?
2053 search_path_list : Py_None);
2054 if (loader == NULL) {
2055 Py_DECREF(meta_path);
2056 return NULL; /* true error */
2057 }
2058 if (loader != Py_None) {
2059 /* a loader was found */
2060 *p_loader = loader;
2061 Py_DECREF(meta_path);
2062 return &importhookdescr;
2063 }
2064 Py_DECREF(loader);
2065 }
2066 Py_DECREF(meta_path);
2067 }
2068
Victor Stinnerdf75a022011-03-14 13:40:04 -04002069 if (find_frozen(fullname) != NULL)
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002070 return &fd_frozen;
Victor Stinner37580282011-03-20 01:34:43 +01002071
2072 if (search_path_list == NULL) {
2073#ifdef MS_COREDLL
2074 FILE *fp;
2075 struct filedescr *fdp;
Victor Stinner37580282011-03-20 01:34:43 +01002076#endif
Victor Stinnerdf75a022011-03-14 13:40:04 -04002077 if (is_builtin(name))
Victor Stinner37580282011-03-20 01:34:43 +01002078 return &fd_builtin;
Victor Stinner37580282011-03-20 01:34:43 +01002079#ifdef MS_COREDLL
Victor Stinner2fd76e42011-03-14 15:19:39 -04002080 fp = _PyWin_FindRegisteredModule(name, &fdp, p_path);
Victor Stinner37580282011-03-20 01:34:43 +01002081 if (fp != NULL) {
Victor Stinner37580282011-03-20 01:34:43 +01002082 *p_fp = fp;
2083 return fdp;
2084 }
2085 else if (PyErr_Occurred())
2086 return NULL;
2087#endif
Victor Stinner37580282011-03-20 01:34:43 +01002088 search_path_list = PySys_GetObject("path");
2089 }
2090
2091 if (search_path_list == NULL || !PyList_Check(search_path_list)) {
Victor Stinner16191322011-09-15 19:28:05 +02002092 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002093 "sys.path must be a list of directory names");
2094 return NULL;
2095 }
2096
2097 path_hooks = PySys_GetObject("path_hooks");
2098 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinner16191322011-09-15 19:28:05 +02002099 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002100 "sys.path_hooks must be a list of "
2101 "import hooks");
2102 return NULL;
2103 }
2104 path_importer_cache = PySys_GetObject("path_importer_cache");
2105 if (path_importer_cache == NULL ||
2106 !PyDict_Check(path_importer_cache)) {
Victor Stinner16191322011-09-15 19:28:05 +02002107 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002108 "sys.path_importer_cache must be a dict");
2109 return NULL;
2110 }
2111
2112 return find_module_path_list(fullname, name,
2113 search_path_list, path_hooks,
2114 path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04002115 p_path, p_fp, p_loader);
Victor Stinner37580282011-03-20 01:34:43 +01002116}
2117
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002118/* case_bytes(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00002119 * The arguments here are tricky, best shown by example:
2120 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
2121 * ^ ^ ^ ^
2122 * |--------------------- buf ---------------------|
2123 * |------------------- len ------------------|
2124 * |------ name -------|
2125 * |----- namelen -----|
2126 * buf is the full path, but len only counts up to (& exclusive of) the
2127 * extension. name is the module name, also exclusive of extension.
2128 *
2129 * We've already done a successful stat() or fopen() on buf, so know that
2130 * there's some match, possibly case-insensitive.
2131 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002132 * case_bytes() is to return 1 if there's a case-sensitive match for
2133 * name, else 0. case_bytes() is also to return 1 if envar PYTHONCASEOK
Tim Peters50d8d372001-02-28 05:34:27 +00002134 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00002135 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002136 * case_bytes() is used to implement case-sensitive import semantics even
Tim Peters50d8d372001-02-28 05:34:27 +00002137 * on platforms with case-insensitive filesystems. It's trivial to implement
2138 * for case-sensitive filesystems. It's pretty much a cross-platform
2139 * nightmare for systems with case-insensitive filesystems.
2140 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00002141
Tim Peters50d8d372001-02-28 05:34:27 +00002142/* First we may need a pile of platform-specific header files; the sequence
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002143 * of #if's here should match the sequence in the body of case_bytes().
Tim Peters50d8d372001-02-28 05:34:27 +00002144 */
Jason Tishler7961aa62005-05-20 00:56:54 +00002145#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002146#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00002147
Tim Peters50d8d372001-02-28 05:34:27 +00002148#elif defined(DJGPP)
2149#include <dir.h>
2150
Jason Tishler7961aa62005-05-20 00:56:54 +00002151#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00002152#include <sys/types.h>
2153#include <dirent.h>
2154
Andrew MacIntyred9400542002-02-26 11:41:34 +00002155#elif defined(PYOS_OS2)
2156#define INCL_DOS
2157#define INCL_DOSERRORS
2158#define INCL_NOPMAPI
2159#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00002160#endif
2161
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002162#if defined(DJGPP) \
2163 || ((defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) \
2164 && defined(HAVE_DIRENT_H)) \
2165 || defined(PYOS_OS2)
2166# define USE_CASE_OK_BYTES
2167#endif
2168
2169
2170#ifdef USE_CASE_OK_BYTES
Guido van Rossum0980bd91998-02-13 17:18:36 +00002171static int
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002172case_bytes(char *buf, Py_ssize_t len, Py_ssize_t namelen, const char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002173{
Tim Peters50d8d372001-02-28 05:34:27 +00002174/* Pick a platform-specific implementation; the sequence of #if's here should
2175 * match the sequence just above.
2176 */
2177
Tim Peters50d8d372001-02-28 05:34:27 +00002178/* DJGPP */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002179#if defined(DJGPP)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002180 struct ffblk ffblk;
2181 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00002182
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002183 if (Py_GETENV("PYTHONCASEOK") != NULL)
2184 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00002185
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002186 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
2187 if (done) {
2188 PyErr_Format(PyExc_NameError,
2189 "Can't find file for module %.100s\n(filename %.300s)",
2190 name, buf);
Victor Stinner9c61e242011-03-22 01:22:27 +01002191 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002192 }
2193 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002194
Jason Tishler7961aa62005-05-20 00:56:54 +00002195/* new-fangled macintosh (macosx) or Cygwin */
2196#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002197 DIR *dirp;
2198 struct dirent *dp;
2199 char dirname[MAXPATHLEN + 1];
2200 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00002201
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002202 if (Py_GETENV("PYTHONCASEOK") != NULL)
2203 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00002204
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002205 /* Copy the dir component into dirname; substitute "." if empty */
2206 if (dirlen <= 0) {
2207 dirname[0] = '.';
2208 dirname[1] = '\0';
2209 }
2210 else {
2211 assert(dirlen <= MAXPATHLEN);
2212 memcpy(dirname, buf, dirlen);
2213 dirname[dirlen] = '\0';
2214 }
2215 /* Open the directory and search the entries for an exact match. */
2216 dirp = opendir(dirname);
2217 if (dirp) {
2218 char *nameWithExt = buf + len - namelen;
2219 while ((dp = readdir(dirp)) != NULL) {
2220 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00002221#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002222 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00002223#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002224 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00002225#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002226 if (thislen >= namelen &&
2227 strcmp(dp->d_name, nameWithExt) == 0) {
2228 (void)closedir(dirp);
2229 return 1; /* Found */
2230 }
2231 }
2232 (void)closedir(dirp);
2233 }
2234 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00002235
Andrew MacIntyred9400542002-02-26 11:41:34 +00002236/* OS/2 */
2237#elif defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002238 HDIR hdir = 1;
2239 ULONG srchcnt = 1;
2240 FILEFINDBUF3 ffbuf;
2241 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002242
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002243 if (Py_GETENV("PYTHONCASEOK") != NULL)
2244 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002245
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002246 rc = DosFindFirst(buf,
2247 &hdir,
2248 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
2249 &ffbuf, sizeof(ffbuf),
2250 &srchcnt,
2251 FIL_STANDARD);
2252 if (rc != NO_ERROR)
2253 return 0;
2254 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002255
Tim Peters50d8d372001-02-28 05:34:27 +00002256/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
2257#else
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002258# error "USE_CASE_OK_BYTES is not correctly defined"
2259#endif
2260}
2261#endif
2262
2263/*
2264 * Check if a filename case matchs the name case. We've already done a
2265 * successful stat() or fopen() on buf, so know that there's some match,
2266 * possibly case-insensitive.
2267 *
2268 * case_ok() is to return 1 if there's a case-sensitive match for name, 0 if it
2269 * the filename doesn't match, or -1 on error. case_ok() is also to return 1
2270 * if envar PYTHONCASEOK exists.
2271 *
2272 * case_ok() is used to implement case-sensitive import semantics even
2273 * on platforms with case-insensitive filesystems. It's trivial to implement
2274 * for case-sensitive filesystems. It's pretty much a cross-platform
2275 * nightmare for systems with case-insensitive filesystems.
2276 */
2277
2278static int
2279case_ok(PyObject *filename, Py_ssize_t prefix_delta, PyObject *name)
2280{
2281#ifdef MS_WINDOWS
2282 WIN32_FIND_DATAW data;
2283 HANDLE h;
2284 int cmp;
Victor Stinnerbeac78b2011-10-11 21:55:01 +02002285 wchar_t *wname;
Victor Stinner8c981892011-10-11 22:27:13 +02002286 Py_ssize_t wname_len;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002287
2288 if (Py_GETENV("PYTHONCASEOK") != NULL)
2289 return 1;
2290
2291 h = FindFirstFileW(PyUnicode_AS_UNICODE(filename), &data);
2292 if (h == INVALID_HANDLE_VALUE) {
2293 PyErr_Format(PyExc_NameError,
2294 "Can't find file for module %R\n(filename %R)",
2295 name, filename);
2296 return 0;
2297 }
2298 FindClose(h);
Victor Stinnerbeac78b2011-10-11 21:55:01 +02002299
2300 wname = PyUnicode_AsUnicodeAndSize(name, &wname_len);
2301 if (wname == NULL)
2302 return -1;
2303
2304 cmp = wcsncmp(data.cFileName, wname, wname_len);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002305 return cmp == 0;
2306#elif defined(USE_CASE_OK_BYTES)
2307 int match;
2308 PyObject *filebytes, *namebytes;
2309 filebytes = PyUnicode_EncodeFSDefault(filename);
2310 if (filebytes == NULL)
2311 return -1;
2312 namebytes = PyUnicode_EncodeFSDefault(name);
2313 if (namebytes == NULL) {
2314 Py_DECREF(filebytes);
2315 return -1;
2316 }
2317 match = case_bytes(
2318 PyBytes_AS_STRING(filebytes),
2319 PyBytes_GET_SIZE(filebytes) + prefix_delta,
Victor Stinner1304f2d2011-03-20 04:28:55 +01002320 PyBytes_GET_SIZE(namebytes),
2321 PyBytes_AS_STRING(namebytes));
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002322 Py_DECREF(filebytes);
2323 Py_DECREF(namebytes);
2324 return match;
2325#else
2326 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002327 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002328
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002329#endif
Tim Peters50d8d372001-02-28 05:34:27 +00002330}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002331
Guido van Rossum197346f1997-10-31 18:38:52 +00002332#ifdef HAVE_STAT
Victor Stinner4f4402c2010-08-14 14:50:26 +00002333
Victor Stinner547a2a62011-03-20 03:07:28 +01002334/* Helper to look for __init__.py or __init__.py[co] in potential package.
2335 Return 1 if __init__ was found, 0 if not, or -1 on error. */
Guido van Rossum197346f1997-10-31 18:38:52 +00002336static int
Victor Stinner547a2a62011-03-20 03:07:28 +01002337find_init_module(PyObject *directory)
Guido van Rossum197346f1997-10-31 18:38:52 +00002338{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002339 struct stat statbuf;
Victor Stinner547a2a62011-03-20 03:07:28 +01002340 PyObject *filename;
2341 int match;
Guido van Rossum197346f1997-10-31 18:38:52 +00002342
Victor Stinner547a2a62011-03-20 03:07:28 +01002343 filename = PyUnicode_FromFormat("%U%c__init__.py", directory, SEP);
2344 if (filename == NULL)
2345 return -1;
2346 if (_Py_stat(filename, &statbuf) == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002347 /* 3=len(".py") */
2348 match = case_ok(filename, -3, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002349 if (match < 0) {
2350 Py_DECREF(filename);
2351 return -1;
2352 }
2353 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002354 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002355 return 1;
2356 }
2357 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002358 Py_DECREF(filename);
2359
2360 filename = PyUnicode_FromFormat("%U%c__init__.py%c",
2361 directory, SEP, Py_OptimizeFlag ? 'o' : 'c');
2362 if (filename == NULL)
2363 return -1;
2364 if (_Py_stat(filename, &statbuf) == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002365 /* 4=len(".pyc") */
2366 match = case_ok(filename, -4, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002367 if (match < 0) {
2368 Py_DECREF(filename);
2369 return -1;
2370 }
2371 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002372 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002373 return 1;
2374 }
2375 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002376 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002377 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00002378}
Guido van Rossum48a680c2001-03-02 06:34:14 +00002379
Guido van Rossum197346f1997-10-31 18:38:52 +00002380#endif /* HAVE_STAT */
2381
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002382
Victor Stinner95872862011-03-07 18:20:56 +01002383static int init_builtin(PyObject *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002384
Victor Stinner44c6c152010-08-09 00:59:10 +00002385static PyObject*
Victor Stinner95872862011-03-07 18:20:56 +01002386load_builtin(PyObject *name, int type)
Victor Stinner44c6c152010-08-09 00:59:10 +00002387{
2388 PyObject *m, *modules;
2389 int err;
2390
Victor Stinner44c6c152010-08-09 00:59:10 +00002391 if (type == C_BUILTIN)
2392 err = init_builtin(name);
2393 else
Victor Stinner95872862011-03-07 18:20:56 +01002394 err = PyImport_ImportFrozenModuleObject(name);
Victor Stinner44c6c152010-08-09 00:59:10 +00002395 if (err < 0)
2396 return NULL;
2397 if (err == 0) {
2398 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002399 "Purported %s module %R not found",
2400 type == C_BUILTIN ? "builtin" : "frozen",
Victor Stinner44c6c152010-08-09 00:59:10 +00002401 name);
2402 return NULL;
2403 }
2404
2405 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +01002406 m = PyDict_GetItem(modules, name);
Victor Stinner44c6c152010-08-09 00:59:10 +00002407 if (m == NULL) {
2408 PyErr_Format(
2409 PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002410 "%s module %R not properly initialized",
2411 type == C_BUILTIN ? "builtin" : "frozen",
Victor Stinner44c6c152010-08-09 00:59:10 +00002412 name);
2413 return NULL;
2414 }
2415 Py_INCREF(m);
2416 return m;
2417}
2418
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002419/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002420 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002421
Guido van Rossum79f25d91997-04-29 20:08:16 +00002422static PyObject *
Victor Stinner41c5fec2011-03-13 21:46:30 -04002423load_module(PyObject *name, FILE *fp, PyObject *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002424{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002425 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002426
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002427 /* First check that there's an open file (if we need one) */
2428 switch (type) {
2429 case PY_SOURCE:
2430 case PY_COMPILED:
2431 if (fp == NULL) {
2432 PyErr_Format(PyExc_ValueError,
Victor Stinner41c5fec2011-03-13 21:46:30 -04002433 "file object required for import (type code %d)",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002434 type);
2435 return NULL;
2436 }
2437 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002438
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002439 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002440
Victor Stinner41c5fec2011-03-13 21:46:30 -04002441 case PY_SOURCE:
2442 m = load_source_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002443 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002444
Victor Stinner41c5fec2011-03-13 21:46:30 -04002445 case PY_COMPILED:
2446 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002447 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002448
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002449#ifdef HAVE_DYNAMIC_LOADING
Victor Stinner41c5fec2011-03-13 21:46:30 -04002450 case C_EXTENSION:
2451 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002452 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002453#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002454
Victor Stinner41c5fec2011-03-13 21:46:30 -04002455 case PKG_DIRECTORY:
2456 m = load_package(name, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002457 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002458
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002459 case C_BUILTIN:
Victor Stinner41c5fec2011-03-13 21:46:30 -04002460 case PY_FROZEN:
2461 m = load_builtin(name, type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002462 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002463
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002464 case IMP_HOOK: {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002465 _Py_IDENTIFIER(load_module);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002466 if (loader == NULL) {
2467 PyErr_SetString(PyExc_ImportError,
2468 "import hook without loader");
2469 return NULL;
2470 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002471 m = _PyObject_CallMethodId(loader, &PyId_load_module, "O", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002472 break;
2473 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002474
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002475 default:
2476 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04002477 "Don't know how to import %R (type code %d)",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002478 name, type);
2479 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002480
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002481 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002482
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002483 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002484}
2485
2486
2487/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00002488 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002489 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002490
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002491static int
Victor Stinner95872862011-03-07 18:20:56 +01002492init_builtin(PyObject *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002493{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002494 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002495
Victor Stinner95872862011-03-07 18:20:56 +01002496 if (_PyImport_FindExtensionObject(name, name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002497 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002498
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002499 for (p = PyImport_Inittab; p->name != NULL; p++) {
2500 PyObject *mod;
Victor Stinner95872862011-03-07 18:20:56 +01002501 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002502 if (p->initfunc == NULL) {
2503 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002504 "Cannot re-init internal module %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002505 name);
2506 return -1;
2507 }
2508 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +01002509 PySys_FormatStderr("import %U # builtin\n", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002510 mod = (*p->initfunc)();
2511 if (mod == 0)
2512 return -1;
Victor Stinner95872862011-03-07 18:20:56 +01002513 if (_PyImport_FixupExtensionObject(mod, name, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002514 return -1;
2515 /* FixupExtension has put the module into sys.modules,
2516 so we can release our own reference. */
2517 Py_DECREF(mod);
2518 return 1;
2519 }
2520 }
2521 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002522}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002523
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002524
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002525/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002526
Guido van Rossumcfd0a221996-06-17 17:06:34 +00002527static struct _frozen *
Victor Stinner53dc7352011-03-20 01:50:21 +01002528find_frozen(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002529{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002530 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002531
Victor Stinner53dc7352011-03-20 01:50:21 +01002532 if (name == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002533 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00002534
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002535 for (p = PyImport_FrozenModules; ; p++) {
2536 if (p->name == NULL)
2537 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01002538 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002539 break;
2540 }
2541 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002542}
2543
Guido van Rossum79f25d91997-04-29 20:08:16 +00002544static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002545get_frozen_object(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002546{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002547 struct _frozen *p = find_frozen(name);
2548 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002549
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002550 if (p == NULL) {
2551 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002552 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002553 name);
2554 return NULL;
2555 }
2556 if (p->code == NULL) {
2557 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002558 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002559 name);
2560 return NULL;
2561 }
2562 size = p->size;
2563 if (size < 0)
2564 size = -size;
2565 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002566}
2567
Brett Cannon8d110132009-03-15 02:20:16 +00002568static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002569is_frozen_package(PyObject *name)
Brett Cannon8d110132009-03-15 02:20:16 +00002570{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002571 struct _frozen *p = find_frozen(name);
2572 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00002573
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002574 if (p == NULL) {
2575 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002576 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002577 name);
2578 return NULL;
2579 }
Brett Cannon8d110132009-03-15 02:20:16 +00002580
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002581 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00002582
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002583 if (size < 0)
2584 Py_RETURN_TRUE;
2585 else
2586 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00002587}
2588
2589
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002590/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00002591 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002592 an exception set if the initialization failed.
2593 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002594
2595int
Victor Stinner53dc7352011-03-20 01:50:21 +01002596PyImport_ImportFrozenModuleObject(PyObject *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002597{
Victor Stinner53dc7352011-03-20 01:50:21 +01002598 struct _frozen *p;
2599 PyObject *co, *m, *path;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002600 int ispackage;
2601 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002602
Victor Stinner53dc7352011-03-20 01:50:21 +01002603 p = find_frozen(name);
2604
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002605 if (p == NULL)
2606 return 0;
2607 if (p->code == NULL) {
2608 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002609 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002610 name);
2611 return -1;
2612 }
2613 size = p->size;
2614 ispackage = (size < 0);
2615 if (ispackage)
2616 size = -size;
2617 if (Py_VerboseFlag)
Victor Stinner53dc7352011-03-20 01:50:21 +01002618 PySys_FormatStderr("import %U # frozen%s\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002619 name, ispackage ? " package" : "");
2620 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2621 if (co == NULL)
2622 return -1;
2623 if (!PyCode_Check(co)) {
2624 PyErr_Format(PyExc_TypeError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002625 "frozen object %R is not a code object",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002626 name);
2627 goto err_return;
2628 }
2629 if (ispackage) {
2630 /* Set __path__ to the package name */
Victor Stinner53dc7352011-03-20 01:50:21 +01002631 PyObject *d, *l;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002632 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01002633 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002634 if (m == NULL)
2635 goto err_return;
2636 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002637 l = PyList_New(1);
2638 if (l == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002639 goto err_return;
2640 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002641 Py_INCREF(name);
2642 PyList_SET_ITEM(l, 0, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002643 err = PyDict_SetItemString(d, "__path__", l);
2644 Py_DECREF(l);
2645 if (err != 0)
2646 goto err_return;
2647 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002648 path = PyUnicode_FromString("<frozen>");
2649 if (path == NULL)
2650 goto err_return;
2651 m = PyImport_ExecCodeModuleObject(name, co, path, NULL);
2652 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002653 if (m == NULL)
2654 goto err_return;
2655 Py_DECREF(co);
2656 Py_DECREF(m);
2657 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002658err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002659 Py_DECREF(co);
2660 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002661}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002662
Victor Stinner53dc7352011-03-20 01:50:21 +01002663int
2664PyImport_ImportFrozenModule(char *name)
2665{
2666 PyObject *nameobj;
2667 int ret;
2668 nameobj = PyUnicode_InternFromString(name);
2669 if (nameobj == NULL)
2670 return -1;
2671 ret = PyImport_ImportFrozenModuleObject(nameobj);
2672 Py_DECREF(nameobj);
2673 return ret;
2674}
2675
Guido van Rossum74e6a111994-08-29 12:54:38 +00002676
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002677/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002678 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002679
Guido van Rossum79f25d91997-04-29 20:08:16 +00002680PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002681PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002682{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002683 PyObject *pname;
2684 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002685
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002686 pname = PyUnicode_FromString(name);
2687 if (pname == NULL)
2688 return NULL;
2689 result = PyImport_Import(pname);
2690 Py_DECREF(pname);
2691 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002692}
2693
Christian Heimes072c0f12008-01-03 23:01:04 +00002694/* Import a module without blocking
2695 *
2696 * At first it tries to fetch the module from sys.modules. If the module was
2697 * never loaded before it loads it with PyImport_ImportModule() unless another
2698 * thread holds the import lock. In the latter case the function raises an
2699 * ImportError instead of blocking.
2700 *
2701 * Returns the module object with incremented ref count.
2702 */
2703PyObject *
2704PyImport_ImportModuleNoBlock(const char *name)
2705{
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002706 PyObject *nameobj, *modules, *result;
Victor Stinner0af03062011-09-02 00:11:43 +02002707#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002708 long me;
Victor Stinner0af03062011-09-02 00:11:43 +02002709#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002710
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002711 /* Try to get the module from sys.modules[name] */
2712 modules = PyImport_GetModuleDict();
2713 if (modules == NULL)
2714 return NULL;
Christian Heimes072c0f12008-01-03 23:01:04 +00002715
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002716 nameobj = PyUnicode_FromString(name);
2717 if (nameobj == NULL)
2718 return NULL;
2719 result = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002720 if (result != NULL) {
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002721 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002722 Py_INCREF(result);
2723 return result;
2724 }
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002725 PyErr_Clear();
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002726#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002727 /* check the import lock
2728 * me might be -1 but I ignore the error here, the lock function
2729 * takes care of the problem */
2730 me = PyThread_get_thread_ident();
2731 if (import_lock_thread == -1 || import_lock_thread == me) {
2732 /* no thread or me is holding the lock */
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002733 result = PyImport_Import(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002734 }
2735 else {
2736 PyErr_Format(PyExc_ImportError,
Victor Stinnerc24c8102011-03-13 22:38:06 -04002737 "Failed to import %R because the import lock"
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002738 "is held by another thread.",
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002739 nameobj);
2740 result = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002741 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002742#else
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002743 result = PyImport_Import(nameobj);
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002744#endif
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002745 Py_DECREF(nameobj);
2746 return result;
Christian Heimes072c0f12008-01-03 23:01:04 +00002747}
2748
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002749/* Forward declarations for helper routines */
Victor Stinner974389d2011-03-15 09:33:57 +01002750static PyObject *get_parent(PyObject *globals,
2751 PyObject **p_name,
2752 int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002753static PyObject *load_next(PyObject *mod, PyObject *altmod,
Victor Stinner974389d2011-03-15 09:33:57 +01002754 PyObject *inputname, PyObject **p_outputname,
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002755 Py_UCS4 *buf, Py_ssize_t *p_buflen,
Victor Stinner974389d2011-03-15 09:33:57 +01002756 Py_ssize_t bufsize);
2757static int mark_miss(PyObject *name);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002758static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Victor Stinner974389d2011-03-15 09:33:57 +01002759 PyObject *buf, int recursive);
2760static PyObject * import_submodule(PyObject *mod, PyObject *name,
2761 PyObject *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002762
2763/* The Magnum Opus of dotted-name import :-) */
2764
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002765static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01002766import_module_level(PyObject *name, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002767 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002768{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002769 Py_UCS4 buf[MAXPATHLEN+1];
Victor Stinner974389d2011-03-15 09:33:57 +01002770 Py_ssize_t buflen;
2771 Py_ssize_t bufsize = MAXPATHLEN+1;
2772 PyObject *parent, *head, *next, *tail, *inputname, *outputname;
2773 PyObject *parent_name, *ensure_name;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002774 Py_ssize_t sep, altsep;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002775
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002776 if (PyUnicode_READY(name))
2777 return NULL;
Victor Stinner974389d2011-03-15 09:33:57 +01002778
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002779 sep = PyUnicode_FindChar(name, SEP, 0, PyUnicode_GET_LENGTH(name), 1);
2780 if (sep == -2)
2781 return NULL;
Victor Stinner974389d2011-03-15 09:33:57 +01002782#ifdef ALTSEP
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002783 altsep = PyUnicode_FindChar(name, ALTSEP, 0, PyUnicode_GET_LENGTH(name), 1);
2784 if (altsep == -2)
2785 return NULL;
2786#else
2787 altsep = -1;
Christian Heimes454f37b2008-01-10 00:10:02 +00002788#endif
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002789 if (sep != -1 || altsep != -1)
2790 {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002791 PyErr_SetString(PyExc_ImportError,
2792 "Import by filename is not supported.");
2793 return NULL;
2794 }
Christian Heimes454f37b2008-01-10 00:10:02 +00002795
Victor Stinner974389d2011-03-15 09:33:57 +01002796 parent = get_parent(globals, &parent_name, level);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002797 if (parent == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002798 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002799 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002800
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002801 if (PyUnicode_READY(parent_name))
2802 return NULL;
2803 buflen = PyUnicode_GET_LENGTH(parent_name);
Georg Brandl4cb0de22011-09-28 21:49:49 +02002804 if (!PyUnicode_AsUCS4(parent_name, buf, Py_ARRAY_LENGTH(buf), 1)) {
Victor Stinner974389d2011-03-15 09:33:57 +01002805 Py_DECREF(parent_name);
2806 PyErr_SetString(PyExc_ValueError,
2807 "Module name too long");
2808 return NULL;
2809 }
Victor Stinner974389d2011-03-15 09:33:57 +01002810 Py_DECREF(parent_name);
2811
2812 head = load_next(parent, level < 0 ? Py_None : parent, name, &outputname,
2813 buf, &buflen, bufsize);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002814 if (head == NULL)
2815 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002816
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002817 tail = head;
2818 Py_INCREF(tail);
Victor Stinner974389d2011-03-15 09:33:57 +01002819
2820 if (outputname != NULL) {
2821 while (1) {
2822 inputname = outputname;
2823 next = load_next(tail, tail, inputname, &outputname,
2824 buf, &buflen, bufsize);
2825 Py_DECREF(tail);
2826 Py_DECREF(inputname);
2827 if (next == NULL) {
2828 Py_DECREF(head);
2829 return NULL;
2830 }
2831 tail = next;
2832
2833 if (outputname == NULL) {
2834 break;
2835 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002836 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002837 }
2838 if (tail == Py_None) {
2839 /* If tail is Py_None, both get_parent and load_next found
2840 an empty module name: someone called __import__("") or
2841 doctored faulty bytecode */
2842 Py_DECREF(tail);
2843 Py_DECREF(head);
Victor Stinner974389d2011-03-15 09:33:57 +01002844 PyErr_SetString(PyExc_ValueError, "Empty module name");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002845 return NULL;
2846 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002847
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002848 if (fromlist != NULL) {
2849 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2850 fromlist = NULL;
2851 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002852
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002853 if (fromlist == NULL) {
2854 Py_DECREF(tail);
2855 return head;
2856 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002857
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002858 Py_DECREF(head);
Victor Stinner974389d2011-03-15 09:33:57 +01002859
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002860 ensure_name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
2861 buf, Py_UCS4_strlen(buf));
Victor Stinner974389d2011-03-15 09:33:57 +01002862 if (ensure_name == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002863 Py_DECREF(tail);
2864 return NULL;
2865 }
Victor Stinner974389d2011-03-15 09:33:57 +01002866 if (!ensure_fromlist(tail, fromlist, ensure_name, 0)) {
2867 Py_DECREF(tail);
2868 Py_DECREF(ensure_name);
2869 return NULL;
2870 }
2871 Py_DECREF(ensure_name);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002872
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002873 return tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002874}
2875
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002876PyObject *
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002877PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
2878 PyObject *locals, PyObject *fromlist,
2879 int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002880{
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002881 PyObject *mod;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002882 _PyImport_AcquireLock();
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002883 mod = import_module_level(name, globals, locals, fromlist, level);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002884 if (_PyImport_ReleaseLock() < 0) {
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002885 Py_XDECREF(mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002886 PyErr_SetString(PyExc_RuntimeError,
2887 "not holding the import lock");
2888 return NULL;
2889 }
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002890 return mod;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002891}
2892
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002893PyObject *
Benjamin Peterson04778a82011-05-25 09:29:00 -05002894PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002895 PyObject *fromlist, int level)
2896{
2897 PyObject *nameobj, *mod;
2898 nameobj = PyUnicode_FromString(name);
2899 if (nameobj == NULL)
2900 return NULL;
2901 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
2902 fromlist, level);
2903 Py_DECREF(nameobj);
2904 return mod;
2905}
2906
2907
Fred Drake87590902004-05-28 20:21:36 +00002908/* Return the package that an import is being performed in. If globals comes
2909 from the module foo.bar.bat (not itself a package), this returns the
2910 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002911 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002912
Victor Stinner974389d2011-03-15 09:33:57 +01002913 The name of the returned package is returned in *p_name.
Fred Drake87590902004-05-28 20:21:36 +00002914
2915 If globals doesn't come from a package or a module in a package, or a
2916 corresponding entry is not found in sys.modules, Py_None is returned.
2917*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002918static PyObject *
Victor Stinner9599de52011-03-13 22:38:38 -04002919get_parent(PyObject *globals, PyObject **p_name, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002920{
Victor Stinner974389d2011-03-15 09:33:57 +01002921 PyObject *nameobj;
2922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002923 static PyObject *namestr = NULL;
2924 static PyObject *pathstr = NULL;
2925 static PyObject *pkgstr = NULL;
2926 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2927 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002928
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002929 if (globals == NULL || !PyDict_Check(globals) || !level)
Victor Stinner974389d2011-03-15 09:33:57 +01002930 goto return_none;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002931
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002932 if (namestr == NULL) {
2933 namestr = PyUnicode_InternFromString("__name__");
2934 if (namestr == NULL)
2935 return NULL;
2936 }
2937 if (pathstr == NULL) {
2938 pathstr = PyUnicode_InternFromString("__path__");
2939 if (pathstr == NULL)
2940 return NULL;
2941 }
2942 if (pkgstr == NULL) {
2943 pkgstr = PyUnicode_InternFromString("__package__");
2944 if (pkgstr == NULL)
2945 return NULL;
2946 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002947
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002948 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002949
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002950 if ((pkgname != NULL) && (pkgname != Py_None)) {
2951 /* __package__ is set, so use it */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002952 if (!PyUnicode_Check(pkgname)) {
2953 PyErr_SetString(PyExc_ValueError,
2954 "__package__ set to non-string");
2955 return NULL;
2956 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002957 if (PyUnicode_GET_LENGTH(pkgname) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002958 if (level > 0) {
2959 PyErr_SetString(PyExc_ValueError,
2960 "Attempted relative import in non-package");
2961 return NULL;
2962 }
Victor Stinner974389d2011-03-15 09:33:57 +01002963 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002964 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002965 Py_INCREF(pkgname);
2966 nameobj = pkgname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002967 } else {
2968 /* __package__ not set, so figure it out and set it */
2969 modname = PyDict_GetItem(globals, namestr);
2970 if (modname == NULL || !PyUnicode_Check(modname))
Victor Stinner974389d2011-03-15 09:33:57 +01002971 goto return_none;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00002972
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002973 modpath = PyDict_GetItem(globals, pathstr);
2974 if (modpath != NULL) {
2975 /* __path__ is set, so modname is already the package name */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002976 int error;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002977
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002978 error = PyDict_SetItem(globals, pkgstr, modname);
2979 if (error) {
2980 PyErr_SetString(PyExc_ValueError,
2981 "Could not set __package__");
2982 return NULL;
2983 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002984 Py_INCREF(modname);
2985 nameobj = modname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002986 } else {
2987 /* Normal module, so work out the package name if any */
Victor Stinner974389d2011-03-15 09:33:57 +01002988 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002989 len = PyUnicode_FindChar(modname, '.',
2990 0, PyUnicode_GET_LENGTH(modname), -1);
2991 if (len == -2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002992 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002993 if (len < 0) {
2994 if (level > 0) {
2995 PyErr_SetString(PyExc_ValueError,
2996 "Attempted relative import in non-package");
2997 return NULL;
2998 }
2999 if (PyDict_SetItem(globals, pkgstr, Py_None)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003000 PyErr_SetString(PyExc_ValueError,
3001 "Could not set __package__");
3002 return NULL;
3003 }
Victor Stinner974389d2011-03-15 09:33:57 +01003004 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003005 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003006 pkgname = PyUnicode_Substring(modname, 0, len);
3007 if (pkgname == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003008 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003009 if (PyDict_SetItem(globals, pkgstr, pkgname)) {
3010 Py_DECREF(pkgname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003011 PyErr_SetString(PyExc_ValueError,
3012 "Could not set __package__");
3013 return NULL;
3014 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003015 nameobj = pkgname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003016 }
3017 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003018 if (level > 1) {
3019 Py_ssize_t dot, end = PyUnicode_GET_LENGTH(nameobj);
3020 PyObject *newname;
3021 while (--level > 0) {
3022 dot = PyUnicode_FindChar(nameobj, '.', 0, end, -1);
3023 if (dot == -2) {
3024 Py_DECREF(nameobj);
3025 return NULL;
3026 }
3027 if (dot < 0) {
3028 Py_DECREF(nameobj);
3029 PyErr_SetString(PyExc_ValueError,
3030 "Attempted relative import beyond "
3031 "toplevel package");
3032 return NULL;
3033 }
3034 end = dot;
3035 }
3036 newname = PyUnicode_Substring(nameobj, 0, end);
3037 Py_DECREF(nameobj);
3038 if (newname == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003039 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003040 nameobj = newname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003041 }
Victor Stinner974389d2011-03-15 09:33:57 +01003042
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003043 modules = PyImport_GetModuleDict();
Victor Stinner974389d2011-03-15 09:33:57 +01003044 parent = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003045 if (parent == NULL) {
Victor Stinner974389d2011-03-15 09:33:57 +01003046 int err;
3047
3048 if (orig_level >= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003049 PyErr_Format(PyExc_SystemError,
Victor Stinner974389d2011-03-15 09:33:57 +01003050 "Parent module %R not loaded, "
3051 "cannot perform relative import", nameobj);
3052 Py_DECREF(nameobj);
3053 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003054 }
Victor Stinner974389d2011-03-15 09:33:57 +01003055
3056 err = PyErr_WarnFormat(
3057 PyExc_RuntimeWarning, 1,
3058 "Parent module %R not found while handling absolute import",
3059 nameobj);
3060 Py_DECREF(nameobj);
3061 if (err)
3062 return NULL;
3063
3064 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003065 }
Victor Stinner974389d2011-03-15 09:33:57 +01003066 *p_name = nameobj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003067 return parent;
3068 /* We expect, but can't guarantee, if parent != None, that:
Victor Stinner974389d2011-03-15 09:33:57 +01003069 - parent.__name__ == name
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003070 - parent.__dict__ is globals
3071 If this is violated... Who cares? */
Victor Stinner974389d2011-03-15 09:33:57 +01003072
3073return_none:
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003074 nameobj = PyUnicode_New(0, 0);
Victor Stinner974389d2011-03-15 09:33:57 +01003075 if (nameobj == NULL)
3076 return NULL;
3077 *p_name = nameobj;
3078 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003079}
3080
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003081/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003082static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01003083load_next(PyObject *mod, PyObject *altmod,
3084 PyObject *inputname, PyObject **p_outputname,
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003085 Py_UCS4 *buf, Py_ssize_t *p_buflen, Py_ssize_t bufsize)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003086{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003087 Py_UCS4 *dot;
Victor Stinner974389d2011-03-15 09:33:57 +01003088 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003089 Py_UCS4 *p;
Victor Stinner974389d2011-03-15 09:33:57 +01003090 PyObject *fullname, *name, *result, *mark_name;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003091 Py_UCS4 *nameuni;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003092
Victor Stinner974389d2011-03-15 09:33:57 +01003093 *p_outputname = NULL;
3094
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003095 if (PyUnicode_GET_LENGTH(inputname) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003096 /* completely empty module name should only happen in
3097 'from . import' (or '__import__("")')*/
3098 Py_INCREF(mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003099 return mod;
3100 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00003101
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003102 nameuni = PyUnicode_AsUCS4Copy(inputname);
Victor Stinner974389d2011-03-15 09:33:57 +01003103 if (nameuni == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003104 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003105
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003106 dot = Py_UCS4_strchr(nameuni, '.');
Victor Stinner974389d2011-03-15 09:33:57 +01003107 if (dot != NULL) {
3108 len = dot - nameuni;
3109 if (len == 0) {
3110 PyErr_SetString(PyExc_ValueError,
3111 "Empty module name");
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003112 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003113 }
3114 }
3115 else
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003116 len = PyUnicode_GET_LENGTH(inputname);
Victor Stinner974389d2011-03-15 09:33:57 +01003117
3118 if (*p_buflen+len+1 >= bufsize) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003119 PyErr_SetString(PyExc_ValueError,
3120 "Module name too long");
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003121 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003122 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003123
Victor Stinner974389d2011-03-15 09:33:57 +01003124 p = buf + *p_buflen;
3125 if (p != buf) {
3126 *p++ = '.';
3127 *p_buflen += 1;
3128 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003129 Py_UCS4_strncpy(p, nameuni, len);
Victor Stinner974389d2011-03-15 09:33:57 +01003130 p[len] = '\0';
3131 *p_buflen += len;
3132
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003133 fullname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3134 buf, *p_buflen);
Victor Stinner974389d2011-03-15 09:33:57 +01003135 if (fullname == NULL)
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003136 goto error;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003137 name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3138 p, len);
Victor Stinner974389d2011-03-15 09:33:57 +01003139 if (name == NULL) {
3140 Py_DECREF(fullname);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003141 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003142 }
3143 result = import_submodule(mod, name, fullname);
3144 Py_DECREF(fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003145 if (result == Py_None && altmod != mod) {
3146 Py_DECREF(result);
3147 /* Here, altmod must be None and mod must not be None */
Victor Stinner974389d2011-03-15 09:33:57 +01003148 result = import_submodule(altmod, name, name);
3149 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003150 if (result != NULL && result != Py_None) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003151 mark_name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3152 buf, *p_buflen);
Victor Stinner974389d2011-03-15 09:33:57 +01003153 if (mark_name == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003154 Py_DECREF(result);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003155 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003156 }
Victor Stinner974389d2011-03-15 09:33:57 +01003157 if (mark_miss(mark_name) != 0) {
3158 Py_DECREF(result);
3159 Py_DECREF(mark_name);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003160 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003161 }
3162 Py_DECREF(mark_name);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003163 Py_UCS4_strncpy(buf, nameuni, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003164 buf[len] = '\0';
3165 *p_buflen = len;
3166 }
3167 }
Victor Stinner974389d2011-03-15 09:33:57 +01003168 else
3169 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003170 if (result == NULL)
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003171 goto error;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003172
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003173 if (result == Py_None) {
3174 Py_DECREF(result);
3175 PyErr_Format(PyExc_ImportError,
Victor Stinner974389d2011-03-15 09:33:57 +01003176 "No module named %R", inputname);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003177 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003178 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003179
Victor Stinner974389d2011-03-15 09:33:57 +01003180 if (dot != NULL) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003181 *p_outputname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3182 dot+1, Py_UCS4_strlen(dot+1));
Victor Stinner974389d2011-03-15 09:33:57 +01003183 if (*p_outputname == NULL) {
3184 Py_DECREF(result);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003185 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003186 }
3187 }
3188
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003189 PyMem_Free(nameuni);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003190 return result;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003191
3192error:
3193 PyMem_Free(nameuni);
3194 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003195}
3196
3197static int
Victor Stinner974389d2011-03-15 09:33:57 +01003198mark_miss(PyObject *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00003199{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003200 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner974389d2011-03-15 09:33:57 +01003201 return PyDict_SetItem(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00003202}
3203
3204static int
Victor Stinner974389d2011-03-15 09:33:57 +01003205ensure_fromlist(PyObject *mod, PyObject *fromlist, PyObject *name,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003206 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003207{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003208 int i;
Victor Stinner974389d2011-03-15 09:33:57 +01003209 PyObject *fullname;
3210 Py_ssize_t fromlist_len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003211
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003212 if (!_PyObject_HasAttrId(mod, &PyId___path__))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003213 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003214
Victor Stinner974389d2011-03-15 09:33:57 +01003215 fromlist_len = PySequence_Size(fromlist);
3216
3217 for (i = 0; i < fromlist_len; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003218 PyObject *item = PySequence_GetItem(fromlist, i);
3219 int hasit;
Victor Stinner974389d2011-03-15 09:33:57 +01003220 if (item == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003221 return 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003222 if (!PyUnicode_Check(item)) {
3223 PyErr_SetString(PyExc_TypeError,
3224 "Item in ``from list'' not a string");
3225 Py_DECREF(item);
3226 return 0;
3227 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003228 if (PyUnicode_READ_CHAR(item, 0) == '*') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003229 PyObject *all;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02003230 _Py_IDENTIFIER(__all__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003231 Py_DECREF(item);
3232 /* See if the package defines __all__ */
3233 if (recursive)
3234 continue; /* Avoid endless recursion */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003235 all = _PyObject_GetAttrId(mod, &PyId___all__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003236 if (all == NULL)
3237 PyErr_Clear();
3238 else {
Victor Stinner974389d2011-03-15 09:33:57 +01003239 int ret = ensure_fromlist(mod, all, name, 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003240 Py_DECREF(all);
3241 if (!ret)
3242 return 0;
3243 }
3244 continue;
3245 }
3246 hasit = PyObject_HasAttr(mod, item);
3247 if (!hasit) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003248 PyObject *submod;
Victor Stinner974389d2011-03-15 09:33:57 +01003249 fullname = PyUnicode_FromFormat("%U.%U", name, item);
3250 if (fullname != NULL) {
3251 submod = import_submodule(mod, item, fullname);
3252 Py_DECREF(fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003253 }
Victor Stinner974389d2011-03-15 09:33:57 +01003254 else
3255 submod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003256 Py_XDECREF(submod);
3257 if (submod == NULL) {
3258 Py_DECREF(item);
3259 return 0;
3260 }
3261 }
3262 Py_DECREF(item);
3263 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003264
Victor Stinner974389d2011-03-15 09:33:57 +01003265 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003266}
3267
Neil Schemenauer00b09662003-06-16 21:03:07 +00003268static int
Victor Stinner974389d2011-03-15 09:33:57 +01003269add_submodule(PyObject *mod, PyObject *submod, PyObject *fullname,
3270 PyObject *subname, PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00003271{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003272 if (mod == Py_None)
3273 return 1;
3274 /* Irrespective of the success of this load, make a
3275 reference to it in the parent package module. A copy gets
3276 saved in the modules dictionary under the full name, so get a
3277 reference from there, if need be. (The exception is when the
3278 load failed with a SyntaxError -- then there's no trace in
3279 sys.modules. In that case, of course, do nothing extra.) */
3280 if (submod == NULL) {
Victor Stinner974389d2011-03-15 09:33:57 +01003281 submod = PyDict_GetItem(modules, fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003282 if (submod == NULL)
3283 return 1;
3284 }
3285 if (PyModule_Check(mod)) {
3286 /* We can't use setattr here since it can give a
3287 * spurious warning if the submodule name shadows a
3288 * builtin name */
3289 PyObject *dict = PyModule_GetDict(mod);
3290 if (!dict)
3291 return 0;
Victor Stinner974389d2011-03-15 09:33:57 +01003292 if (PyDict_SetItem(dict, subname, submod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003293 return 0;
3294 }
3295 else {
Victor Stinner974389d2011-03-15 09:33:57 +01003296 if (PyObject_SetAttr(mod, subname, submod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003297 return 0;
3298 }
3299 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00003300}
3301
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003302static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01003303import_submodule(PyObject *mod, PyObject *subname, PyObject *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003304{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003305 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner533d7832011-03-14 13:22:54 -04003306 PyObject *m = NULL, *bufobj, *path_list, *loader;
Victor Stinner9599de52011-03-13 22:38:38 -04003307 struct filedescr *fdp;
3308 FILE *fp;
Guido van Rossum74e6a111994-08-29 12:54:38 +00003309
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003310 /* Require:
3311 if mod == None: subname == fullname
3312 else: mod.__name__ + "." + subname == fullname
3313 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003314
Victor Stinner974389d2011-03-15 09:33:57 +01003315 if ((m = PyDict_GetItem(modules, fullname)) != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003316 Py_INCREF(m);
Victor Stinner9599de52011-03-13 22:38:38 -04003317 return m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003318 }
Victor Stinner9599de52011-03-13 22:38:38 -04003319
3320 if (mod == Py_None)
Victor Stinner533d7832011-03-14 13:22:54 -04003321 path_list = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003322 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003323 path_list = _PyObject_GetAttrId(mod, &PyId___path__);
Victor Stinner533d7832011-03-14 13:22:54 -04003324 if (path_list == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003325 PyErr_Clear();
3326 Py_INCREF(Py_None);
3327 return Py_None;
3328 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003329 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003330
Victor Stinner533d7832011-03-14 13:22:54 -04003331 fdp = find_module(fullname, subname, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003332 &bufobj, &fp, &loader);
Victor Stinner533d7832011-03-14 13:22:54 -04003333 Py_XDECREF(path_list);
Victor Stinner9599de52011-03-13 22:38:38 -04003334 if (fdp == NULL) {
3335 if (!PyErr_ExceptionMatches(PyExc_ImportError))
3336 return NULL;
3337 PyErr_Clear();
3338 Py_INCREF(Py_None);
3339 return Py_None;
3340 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003341 m = load_module(fullname, fp, bufobj, fdp->type, loader);
3342 Py_XDECREF(bufobj);
Victor Stinner9599de52011-03-13 22:38:38 -04003343 Py_XDECREF(loader);
3344 if (fp)
3345 fclose(fp);
3346 if (m == NULL)
3347 return NULL;
3348 if (!add_submodule(mod, m, fullname, subname, modules)) {
3349 Py_XDECREF(m);
3350 return NULL;
3351 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003352 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00003353}
3354
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003355
3356/* Re-import a module of any kind and return its module object, WITH
3357 INCREMENTED REFERENCE COUNT */
3358
Guido van Rossum79f25d91997-04-29 20:08:16 +00003359PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003360PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003361{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003362 PyInterpreterState *interp = PyThreadState_Get()->interp;
3363 PyObject *modules_reloading = interp->modules_reloading;
3364 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner533d7832011-03-14 13:22:54 -04003365 PyObject *path_list = NULL, *loader = NULL, *existing_m = NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003366 PyObject *nameobj, *bufobj, *subnameobj;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003367 Py_UCS4 *name = NULL, *subname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003368 struct filedescr *fdp;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003369 FILE *fp = NULL;
3370 PyObject *newm = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00003371
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003372 if (modules_reloading == NULL) {
3373 Py_FatalError("PyImport_ReloadModule: "
3374 "no modules_reloading dictionary!");
3375 return NULL;
3376 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003377
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003378 if (m == NULL || !PyModule_Check(m)) {
3379 PyErr_SetString(PyExc_TypeError,
3380 "reload() argument must be module");
3381 return NULL;
3382 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003383 nameobj = PyModule_GetNameObject(m);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003384 if (nameobj == NULL || PyUnicode_READY(nameobj) == -1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003385 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003386 if (m != PyDict_GetItem(modules, nameobj)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003387 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003388 "reload(): module %R not in sys.modules",
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003389 nameobj);
3390 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003391 return NULL;
3392 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003393 existing_m = PyDict_GetItem(modules_reloading, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003394 if (existing_m != NULL) {
3395 /* Due to a recursive reload, this module is already
3396 being reloaded. */
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003397 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003398 Py_INCREF(existing_m);
3399 return existing_m;
3400 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003401 if (PyDict_SetItem(modules_reloading, nameobj, m) < 0) {
3402 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003403 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003404 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00003405
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003406 name = PyUnicode_AsUCS4Copy(nameobj);
3407 if (!name) {
3408 Py_DECREF(nameobj);
3409 return NULL;
3410 }
3411 subname = Py_UCS4_strrchr(name, '.');
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003412 if (subname == NULL) {
3413 Py_INCREF(nameobj);
3414 subnameobj = nameobj;
3415 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003416 else {
3417 PyObject *parentname, *parent;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003418 Py_ssize_t len;
3419 len = subname - name;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003420 parentname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3421 name, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003422 if (parentname == NULL) {
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003423 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003424 }
3425 parent = PyDict_GetItem(modules, parentname);
3426 if (parent == NULL) {
3427 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003428 "reload(): parent %R not in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003429 parentname);
3430 Py_DECREF(parentname);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003431 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003432 }
3433 Py_DECREF(parentname);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003434 path_list = _PyObject_GetAttrId(parent, &PyId___path__);
Victor Stinner533d7832011-03-14 13:22:54 -04003435 if (path_list == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003436 PyErr_Clear();
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003437 subname++;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003438 len = PyUnicode_GET_LENGTH(nameobj) - (len + 1);
3439 subnameobj = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3440 subname, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003441 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003442 if (subnameobj == NULL)
3443 goto error;
Victor Stinner533d7832011-03-14 13:22:54 -04003444 fdp = find_module(nameobj, subnameobj, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003445 &bufobj, &fp, &loader);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003446 Py_DECREF(subnameobj);
Victor Stinner533d7832011-03-14 13:22:54 -04003447 Py_XDECREF(path_list);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003448
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003449 if (fdp == NULL) {
3450 Py_XDECREF(loader);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003451 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003452 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003453
Victor Stinner2fd76e42011-03-14 15:19:39 -04003454 newm = load_module(nameobj, fp, bufobj, fdp->type, loader);
3455 Py_XDECREF(bufobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003456 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003457
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003458 if (fp)
3459 fclose(fp);
3460 if (newm == NULL) {
3461 /* load_module probably removed name from modules because of
3462 * the error. Put back the original module object. We're
3463 * going to return NULL in this case regardless of whether
3464 * replacing name succeeds, so the return value is ignored.
3465 */
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003466 PyDict_SetItem(modules, nameobj, m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003467 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003468
3469error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003470 imp_modules_reloading_clear();
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003471 Py_DECREF(nameobj);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003472 PyMem_Free(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003473 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003474}
3475
3476
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003477/* Higher-level import emulator which emulates the "import" statement
3478 more accurately -- it invokes the __import__() function from the
3479 builtins of the current globals. This means that the import is
3480 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00003481 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00003482 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00003483 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00003484 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003485
3486PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003487PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003488{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003489 static PyObject *silly_list = NULL;
3490 static PyObject *builtins_str = NULL;
3491 static PyObject *import_str = NULL;
3492 PyObject *globals = NULL;
3493 PyObject *import = NULL;
3494 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003495 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003496 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003497
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003498 /* Initialize constant string objects */
3499 if (silly_list == NULL) {
3500 import_str = PyUnicode_InternFromString("__import__");
3501 if (import_str == NULL)
3502 return NULL;
3503 builtins_str = PyUnicode_InternFromString("__builtins__");
3504 if (builtins_str == NULL)
3505 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003506 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003507 if (silly_list == NULL)
3508 return NULL;
3509 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003510
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003511 /* Get the builtins from current globals */
3512 globals = PyEval_GetGlobals();
3513 if (globals != NULL) {
3514 Py_INCREF(globals);
3515 builtins = PyObject_GetItem(globals, builtins_str);
3516 if (builtins == NULL)
3517 goto err;
3518 }
3519 else {
3520 /* No globals -- use standard builtins, and fake globals */
3521 builtins = PyImport_ImportModuleLevel("builtins",
3522 NULL, NULL, NULL, 0);
3523 if (builtins == NULL)
3524 return NULL;
3525 globals = Py_BuildValue("{OO}", builtins_str, builtins);
3526 if (globals == NULL)
3527 goto err;
3528 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003529
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003530 /* Get the __import__ function from the builtins */
3531 if (PyDict_Check(builtins)) {
3532 import = PyObject_GetItem(builtins, import_str);
3533 if (import == NULL)
3534 PyErr_SetObject(PyExc_KeyError, import_str);
3535 }
3536 else
3537 import = PyObject_GetAttr(builtins, import_str);
3538 if (import == NULL)
3539 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003540
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003541 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00003542 Always use absolute import here.
3543 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003544 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
3545 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00003546 if (r == NULL)
3547 goto err;
3548 Py_DECREF(r);
3549
3550 modules = PyImport_GetModuleDict();
3551 r = PyDict_GetItem(modules, module_name);
3552 if (r != NULL)
3553 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003554
3555 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003556 Py_XDECREF(globals);
3557 Py_XDECREF(builtins);
3558 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00003559
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003560 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003561}
3562
3563
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003564/* Module 'imp' provides Python access to the primitives used for
3565 importing modules.
3566*/
3567
Guido van Rossum79f25d91997-04-29 20:08:16 +00003568static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00003569imp_make_magic(long magic)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003570{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003571 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003572
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003573 buf[0] = (char) ((magic >> 0) & 0xff);
3574 buf[1] = (char) ((magic >> 8) & 0xff);
3575 buf[2] = (char) ((magic >> 16) & 0xff);
3576 buf[3] = (char) ((magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003577
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003578 return PyBytes_FromStringAndSize(buf, 4);
Victor Stinner3e2b7172010-11-09 09:32:19 +00003579}
Barry Warsaw28a691b2010-04-17 00:19:56 +00003580
3581static PyObject *
3582imp_get_magic(PyObject *self, PyObject *noargs)
3583{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003584 return imp_make_magic(pyc_magic);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003585}
3586
3587static PyObject *
3588imp_get_tag(PyObject *self, PyObject *noargs)
3589{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003590 return PyUnicode_FromString(pyc_tag);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003591}
3592
Guido van Rossum79f25d91997-04-29 20:08:16 +00003593static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003594imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003595{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003596 PyObject *list;
3597 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003598
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003599 list = PyList_New(0);
3600 if (list == NULL)
3601 return NULL;
3602 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
3603 PyObject *item = Py_BuildValue("ssi",
3604 fdp->suffix, fdp->mode, fdp->type);
3605 if (item == NULL) {
3606 Py_DECREF(list);
3607 return NULL;
3608 }
3609 if (PyList_Append(list, item) < 0) {
3610 Py_DECREF(list);
3611 Py_DECREF(item);
3612 return NULL;
3613 }
3614 Py_DECREF(item);
3615 }
3616 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003617}
3618
Guido van Rossum79f25d91997-04-29 20:08:16 +00003619static PyObject *
Victor Stinner533d7832011-03-14 13:22:54 -04003620call_find_module(PyObject *name, PyObject *path_list)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003621{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003622 extern int fclose(FILE *);
3623 PyObject *fob, *ret;
3624 PyObject *pathobj;
3625 struct filedescr *fdp;
Victor Stinner7d8b77c2011-03-12 08:45:02 -05003626 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003627 int fd = -1;
3628 char *found_encoding = NULL;
3629 char *encoding = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003630
Victor Stinner533d7832011-03-14 13:22:54 -04003631 if (path_list == Py_None)
3632 path_list = NULL;
3633 fdp = find_module(NULL, name, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003634 &pathobj, &fp, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003635 if (fdp == NULL)
3636 return NULL;
3637 if (fp != NULL) {
3638 fd = fileno(fp);
3639 if (fd != -1)
3640 fd = dup(fd);
3641 fclose(fp);
Victor Stinnerd417d012011-06-20 15:16:55 +02003642 if (fd == -1) {
3643 PyErr_SetFromErrno(PyExc_OSError);
3644 return NULL;
3645 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003646 fp = NULL;
3647 }
3648 if (fd != -1) {
3649 if (strchr(fdp->mode, 'b') == NULL) {
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003650 /* PyTokenizer_FindEncodingFilename() returns PyMem_MALLOC'ed
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003651 memory. */
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003652 found_encoding = PyTokenizer_FindEncodingFilename(fd, pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003653 lseek(fd, 0, 0); /* Reset position */
Victor Stinner2fd76e42011-03-14 15:19:39 -04003654 if (found_encoding == NULL && PyErr_Occurred()) {
3655 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003656 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04003657 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003658 encoding = (found_encoding != NULL) ? found_encoding :
3659 (char*)PyUnicode_GetDefaultEncoding();
3660 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003661 fob = PyFile_FromFd(fd, NULL, fdp->mode, -1,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003662 (char*)encoding, NULL, NULL, 1);
3663 if (fob == NULL) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04003664 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003665 close(fd);
3666 PyMem_FREE(found_encoding);
3667 return NULL;
3668 }
3669 }
3670 else {
3671 fob = Py_None;
3672 Py_INCREF(fob);
3673 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003674 if (pathobj == NULL) {
3675 Py_INCREF(Py_None);
3676 pathobj = Py_None;
3677 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003678 ret = Py_BuildValue("NN(ssi)",
3679 fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
3680 PyMem_FREE(found_encoding);
Brett Cannon3bb42d92007-10-20 03:43:15 +00003681
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003682 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003683}
3684
Guido van Rossum79f25d91997-04-29 20:08:16 +00003685static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003686imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003687{
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003688 PyObject *name, *path_list = NULL;
3689 if (!PyArg_ParseTuple(args, "U|O:find_module",
3690 &name, &path_list))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003691 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003692 return call_find_module(name, path_list);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003693}
3694
3695static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003696imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003697{
Victor Stinner95872862011-03-07 18:20:56 +01003698 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003699 int ret;
3700 PyObject *m;
Victor Stinner95872862011-03-07 18:20:56 +01003701 if (!PyArg_ParseTuple(args, "U:init_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003702 return NULL;
3703 ret = init_builtin(name);
3704 if (ret < 0)
3705 return NULL;
3706 if (ret == 0) {
3707 Py_INCREF(Py_None);
3708 return Py_None;
3709 }
Victor Stinner95872862011-03-07 18:20:56 +01003710 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003711 Py_XINCREF(m);
3712 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003713}
3714
Guido van Rossum79f25d91997-04-29 20:08:16 +00003715static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003716imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003717{
Victor Stinner53dc7352011-03-20 01:50:21 +01003718 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003719 int ret;
3720 PyObject *m;
Victor Stinner53dc7352011-03-20 01:50:21 +01003721 if (!PyArg_ParseTuple(args, "U:init_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003722 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01003723 ret = PyImport_ImportFrozenModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003724 if (ret < 0)
3725 return NULL;
3726 if (ret == 0) {
3727 Py_INCREF(Py_None);
3728 return Py_None;
3729 }
Victor Stinner53dc7352011-03-20 01:50:21 +01003730 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003731 Py_XINCREF(m);
3732 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003733}
3734
Guido van Rossum79f25d91997-04-29 20:08:16 +00003735static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003736imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003737{
Victor Stinner53dc7352011-03-20 01:50:21 +01003738 PyObject *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00003739
Victor Stinner53dc7352011-03-20 01:50:21 +01003740 if (!PyArg_ParseTuple(args, "U:get_frozen_object", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003741 return NULL;
3742 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003743}
3744
Guido van Rossum79f25d91997-04-29 20:08:16 +00003745static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00003746imp_is_frozen_package(PyObject *self, PyObject *args)
3747{
Victor Stinner53dc7352011-03-20 01:50:21 +01003748 PyObject *name;
Brett Cannon8d110132009-03-15 02:20:16 +00003749
Victor Stinner53dc7352011-03-20 01:50:21 +01003750 if (!PyArg_ParseTuple(args, "U:is_frozen_package", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003751 return NULL;
3752 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00003753}
3754
3755static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003756imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003757{
Victor Stinner95872862011-03-07 18:20:56 +01003758 PyObject *name;
3759 if (!PyArg_ParseTuple(args, "U:is_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003760 return NULL;
3761 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003762}
3763
Guido van Rossum79f25d91997-04-29 20:08:16 +00003764static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003765imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003766{
Victor Stinner53dc7352011-03-20 01:50:21 +01003767 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003768 struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01003769 if (!PyArg_ParseTuple(args, "U:is_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003770 return NULL;
3771 p = find_frozen(name);
3772 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003773}
3774
3775static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01003776get_file(PyObject *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003777{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003778 FILE *fp;
3779 if (mode[0] == 'U')
3780 mode = "r" PY_STDIOTEXTMODE;
3781 if (fob == NULL) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003782 fp = _Py_fopen(pathname, mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003783 }
3784 else {
3785 int fd = PyObject_AsFileDescriptor(fob);
3786 if (fd == -1)
3787 return NULL;
3788 if (!_PyVerify_fd(fd))
3789 goto error;
3790 /* the FILE struct gets a new fd, so that it can be closed
3791 * independently of the file descriptor given
3792 */
3793 fd = dup(fd);
3794 if (fd == -1)
3795 goto error;
3796 fp = fdopen(fd, mode);
3797 }
3798 if (fp)
3799 return fp;
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003800error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003801 PyErr_SetFromErrno(PyExc_IOError);
3802 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003803}
3804
Guido van Rossum79f25d91997-04-29 20:08:16 +00003805static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003806imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003807{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003808 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003809 PyObject *fob = NULL;
3810 PyObject *m;
3811 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003812 if (!PyArg_ParseTuple(args, "UO&|O:load_compiled",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003813 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003814 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003815 &fob))
3816 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003817 fp = get_file(pathname, fob, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003818 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003819 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003820 return NULL;
3821 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003822 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003823 fclose(fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003824 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003825 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003826}
3827
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003828#ifdef HAVE_DYNAMIC_LOADING
3829
Guido van Rossum79f25d91997-04-29 20:08:16 +00003830static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003831imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003832{
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003833 PyObject *name, *pathname, *fob = NULL, *mod;
3834 FILE *fp;
3835
3836 if (!PyArg_ParseTuple(args, "UO&|O:load_dynamic",
3837 &name, PyUnicode_FSDecoder, &pathname, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003838 return NULL;
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003839 if (fob != NULL) {
3840 fp = get_file(NULL, fob, "r");
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003841 if (fp == NULL) {
3842 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003843 return NULL;
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003844 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003845 }
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003846 else
3847 fp = NULL;
3848 mod = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003849 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003850 if (fp)
3851 fclose(fp);
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003852 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003853}
3854
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003855#endif /* HAVE_DYNAMIC_LOADING */
3856
Guido van Rossum79f25d91997-04-29 20:08:16 +00003857static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003858imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003859{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003860 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003861 PyObject *fob = NULL;
3862 PyObject *m;
3863 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003864 if (!PyArg_ParseTuple(args, "UO&|O:load_source",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003865 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003866 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003867 &fob))
3868 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003869 fp = get_file(pathname, fob, "r");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003870 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003871 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003872 return NULL;
3873 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003874 m = load_source_module(name, pathname, fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003875 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003876 fclose(fp);
3877 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003878}
3879
Guido van Rossum79f25d91997-04-29 20:08:16 +00003880static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003881imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003882{
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003883 PyObject *name, *fob, *pathname, *pathname_obj, *ret;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003884 char *suffix; /* Unused */
3885 char *mode;
3886 int type;
3887 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003888
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003889 if (!PyArg_ParseTuple(args, "UOO(ssi):load_module",
3890 &name, &fob, &pathname_obj, &suffix, &mode, &type))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003891 return NULL;
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003892 if (pathname_obj != Py_None) {
3893 if (!PyUnicode_FSDecoder(pathname_obj, &pathname))
3894 return NULL;
3895 }
3896 else
3897 pathname = NULL;
3898
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003899 if (*mode) {
3900 /* Mode must start with 'r' or 'U' and must not contain '+'.
3901 Implicit in this test is the assumption that the mode
3902 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003903
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003904 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3905 PyErr_Format(PyExc_ValueError,
3906 "invalid file open mode %.200s", mode);
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003907 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003908 return NULL;
3909 }
3910 }
3911 if (fob == Py_None)
3912 fp = NULL;
3913 else {
3914 fp = get_file(NULL, fob, mode);
3915 if (fp == NULL) {
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003916 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003917 return NULL;
3918 }
3919 }
Victor Stinner41c5fec2011-03-13 21:46:30 -04003920 ret = load_module(name, fp, pathname, type, NULL);
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003921 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003922 if (fp)
3923 fclose(fp);
3924 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003925}
3926
3927static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003928imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003929{
Victor Stinnerc9abda02011-03-14 13:33:46 -04003930 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003931 PyObject * ret;
Victor Stinnerc9abda02011-03-14 13:33:46 -04003932 if (!PyArg_ParseTuple(args, "UO&:load_package",
3933 &name, PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003934 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04003935 ret = load_package(name, pathname);
Victor Stinnerebc00522010-12-03 17:06:43 +00003936 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003937 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003938}
3939
3940static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003941imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003942{
Victor Stinnerfe19d212011-03-14 14:53:28 -04003943 PyObject *name;
3944 if (!PyArg_ParseTuple(args, "U:new_module", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003945 return NULL;
Victor Stinnerfe19d212011-03-14 14:53:28 -04003946 return PyModule_NewObject(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003947}
3948
Christian Heimes13a7a212008-01-07 17:13:09 +00003949static PyObject *
3950imp_reload(PyObject *self, PyObject *v)
3951{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003952 return PyImport_ReloadModule(v);
Christian Heimes13a7a212008-01-07 17:13:09 +00003953}
3954
3955PyDoc_STRVAR(doc_reload,
3956"reload(module) -> module\n\
3957\n\
3958Reload the module. The module must have been successfully imported before.");
3959
Barry Warsaw28a691b2010-04-17 00:19:56 +00003960static PyObject *
3961imp_cache_from_source(PyObject *self, PyObject *args, PyObject *kws)
3962{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003963 static char *kwlist[] = {"path", "debug_override", NULL};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003964
Victor Stinner2f42ae52011-03-20 00:41:24 +01003965 PyObject *pathname, *cpathname;
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003966 PyObject *debug_override = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003967 int debug = !Py_OptimizeFlag;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003968
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003969 if (!PyArg_ParseTupleAndKeywords(
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003970 args, kws, "O&|O", kwlist,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003971 PyUnicode_FSDecoder, &pathname, &debug_override))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003972 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003973
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003974 if (debug_override != NULL &&
3975 (debug = PyObject_IsTrue(debug_override)) < 0) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003976 Py_DECREF(pathname);
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003977 return NULL;
3978 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00003979
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003980 cpathname = make_compiled_pathname(pathname, debug);
Victor Stinner2f42ae52011-03-20 00:41:24 +01003981 Py_DECREF(pathname);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003982
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003983 if (cpathname == NULL) {
3984 PyErr_Format(PyExc_SystemError, "path buffer too short");
3985 return NULL;
3986 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003987 return cpathname;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003988}
3989
3990PyDoc_STRVAR(doc_cache_from_source,
3991"Given the path to a .py file, return the path to its .pyc/.pyo file.\n\
3992\n\
3993The .py file does not need to exist; this simply returns the path to the\n\
3994.pyc/.pyo file calculated as if the .py file were imported. The extension\n\
3995will be .pyc unless __debug__ is not defined, then it will be .pyo.\n\
3996\n\
3997If debug_override is not None, then it must be a boolean and is taken as\n\
3998the value of __debug__ instead.");
3999
4000static PyObject *
4001imp_source_from_cache(PyObject *self, PyObject *args, PyObject *kws)
4002{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004003 static char *kwlist[] = {"path", NULL};
Victor Stinnerc9abda02011-03-14 13:33:46 -04004004 PyObject *pathname, *source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00004005
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004006 if (!PyArg_ParseTupleAndKeywords(
Victor Stinnerebc00522010-12-03 17:06:43 +00004007 args, kws, "O&", kwlist,
Victor Stinnerc9abda02011-03-14 13:33:46 -04004008 PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004009 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00004010
Victor Stinnerc9abda02011-03-14 13:33:46 -04004011 source = make_source_pathname(pathname);
4012 if (source == NULL) {
4013 PyErr_Format(PyExc_ValueError, "Not a PEP 3147 pyc path: %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004014 pathname);
Victor Stinnerc9abda02011-03-14 13:33:46 -04004015 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004016 return NULL;
4017 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04004018 Py_DECREF(pathname);
4019 return source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00004020}
4021
4022PyDoc_STRVAR(doc_source_from_cache,
4023"Given the path to a .pyc./.pyo file, return the path to its .py file.\n\
4024\n\
4025The .pyc/.pyo file does not need to exist; this simply returns the path to\n\
4026the .py file calculated to correspond to the .pyc/.pyo file. If path\n\
4027does not conform to PEP 3147 format, ValueError will be raised.");
4028
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004029/* Doc strings */
4030
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004031PyDoc_STRVAR(doc_imp,
4032"This module provides the components needed to build your own\n\
4033__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004034
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004035PyDoc_STRVAR(doc_find_module,
4036"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004037Search for a module. If path is omitted or None, search for a\n\
4038built-in, frozen or special module and continue search in sys.path.\n\
4039The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004040package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004041
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004042PyDoc_STRVAR(doc_load_module,
4043"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004044Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004045The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004046
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004047PyDoc_STRVAR(doc_get_magic,
4048"get_magic() -> string\n\
4049Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004050
Barry Warsaw28a691b2010-04-17 00:19:56 +00004051PyDoc_STRVAR(doc_get_tag,
4052"get_tag() -> string\n\
4053Return the magic tag for .pyc or .pyo files.");
4054
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004055PyDoc_STRVAR(doc_get_suffixes,
4056"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004057Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004058that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004059
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004060PyDoc_STRVAR(doc_new_module,
4061"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004062Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004063The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004064
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004065PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00004066"lock_held() -> boolean\n\
4067Return True if the import lock is currently held, else False.\n\
4068On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00004069
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00004070PyDoc_STRVAR(doc_acquire_lock,
4071"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00004072Acquires the interpreter's import lock for the current thread.\n\
4073This lock should be used by import hooks to ensure thread-safety\n\
4074when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00004075On platforms without threads, this function does nothing.");
4076
4077PyDoc_STRVAR(doc_release_lock,
4078"release_lock() -> None\n\
4079Release the interpreter's import lock.\n\
4080On platforms without threads, this function does nothing.");
4081
Guido van Rossum79f25d91997-04-29 20:08:16 +00004082static PyMethodDef imp_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004083 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
4084 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
4085 {"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag},
4086 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
4087 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
4088 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
4089 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
4090 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
4091 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
4092 {"reload", imp_reload, METH_O, doc_reload},
4093 {"cache_from_source", (PyCFunction)imp_cache_from_source,
4094 METH_VARARGS | METH_KEYWORDS, doc_cache_from_source},
4095 {"source_from_cache", (PyCFunction)imp_source_from_cache,
4096 METH_VARARGS | METH_KEYWORDS, doc_source_from_cache},
4097 /* The rest are obsolete */
4098 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
4099 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
4100 {"init_builtin", imp_init_builtin, METH_VARARGS},
4101 {"init_frozen", imp_init_frozen, METH_VARARGS},
4102 {"is_builtin", imp_is_builtin, METH_VARARGS},
4103 {"is_frozen", imp_is_frozen, METH_VARARGS},
4104 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00004105#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004106 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00004107#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004108 {"load_package", imp_load_package, METH_VARARGS},
4109 {"load_source", imp_load_source, METH_VARARGS},
Brett Cannon442c9b92011-03-23 16:14:42 -07004110 {"_fix_co_filename", imp_fix_co_filename, METH_VARARGS},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004111 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004112};
4113
Guido van Rossum1a8791e1998-08-04 22:46:29 +00004114static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004115setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004116{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004117 PyObject *v;
4118 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004120 v = PyLong_FromLong((long)value);
4121 err = PyDict_SetItemString(d, name, v);
4122 Py_XDECREF(v);
4123 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004124}
4125
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004126typedef struct {
4127 PyObject_HEAD
4128} NullImporter;
4129
4130static int
4131NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
4132{
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004133#ifndef MS_WINDOWS
4134 PyObject *path;
4135 struct stat statbuf;
4136 int rv;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004137
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004138 if (!_PyArg_NoKeywords("NullImporter()", kwds))
4139 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004140
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004141 if (!PyArg_ParseTuple(args, "O&:NullImporter",
4142 PyUnicode_FSConverter, &path))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004143 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004144
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004145 if (PyBytes_GET_SIZE(path) == 0) {
4146 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004147 PyErr_SetString(PyExc_ImportError, "empty pathname");
4148 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004149 }
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004150
4151 rv = stat(PyBytes_AS_STRING(path), &statbuf);
4152 Py_DECREF(path);
4153 if (rv == 0) {
4154 /* it exists */
4155 if (S_ISDIR(statbuf.st_mode)) {
4156 /* it's a directory */
4157 PyErr_SetString(PyExc_ImportError, "existing directory");
4158 return -1;
4159 }
4160 }
4161#else /* MS_WINDOWS */
4162 PyObject *pathobj;
4163 DWORD rv;
Victor Stinner255dfdb2010-09-29 10:28:51 +00004164 wchar_t *path;
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004165
4166 if (!_PyArg_NoKeywords("NullImporter()", kwds))
4167 return -1;
4168
4169 if (!PyArg_ParseTuple(args, "U:NullImporter",
4170 &pathobj))
4171 return -1;
4172
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02004173 if (PyUnicode_GET_LENGTH(pathobj) == 0) {
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004174 PyErr_SetString(PyExc_ImportError, "empty pathname");
4175 return -1;
4176 }
4177
Victor Stinnerbeb4135b2010-10-07 01:02:42 +00004178 path = PyUnicode_AsWideCharString(pathobj, NULL);
Victor Stinner255dfdb2010-09-29 10:28:51 +00004179 if (path == NULL)
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004180 return -1;
4181 /* see issue1293 and issue3677:
4182 * stat() on Windows doesn't recognise paths like
4183 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
4184 */
4185 rv = GetFileAttributesW(path);
Victor Stinner255dfdb2010-09-29 10:28:51 +00004186 PyMem_Free(path);
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004187 if (rv != INVALID_FILE_ATTRIBUTES) {
4188 /* it exists */
4189 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
4190 /* it's a directory */
4191 PyErr_SetString(PyExc_ImportError, "existing directory");
4192 return -1;
4193 }
4194 }
4195#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004196 return 0;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004197}
4198
4199static PyObject *
4200NullImporter_find_module(NullImporter *self, PyObject *args)
4201{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004202 Py_RETURN_NONE;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004203}
4204
4205static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004206 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
4207 "Always return None"
4208 },
4209 {NULL} /* Sentinel */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004210};
4211
4212
Christian Heimes9cd17752007-11-18 19:35:23 +00004213PyTypeObject PyNullImporter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004214 PyVarObject_HEAD_INIT(NULL, 0)
4215 "imp.NullImporter", /*tp_name*/
4216 sizeof(NullImporter), /*tp_basicsize*/
4217 0, /*tp_itemsize*/
4218 0, /*tp_dealloc*/
4219 0, /*tp_print*/
4220 0, /*tp_getattr*/
4221 0, /*tp_setattr*/
4222 0, /*tp_reserved*/
4223 0, /*tp_repr*/
4224 0, /*tp_as_number*/
4225 0, /*tp_as_sequence*/
4226 0, /*tp_as_mapping*/
4227 0, /*tp_hash */
4228 0, /*tp_call*/
4229 0, /*tp_str*/
4230 0, /*tp_getattro*/
4231 0, /*tp_setattro*/
4232 0, /*tp_as_buffer*/
4233 Py_TPFLAGS_DEFAULT, /*tp_flags*/
4234 "Null importer object", /* tp_doc */
4235 0, /* tp_traverse */
4236 0, /* tp_clear */
4237 0, /* tp_richcompare */
4238 0, /* tp_weaklistoffset */
4239 0, /* tp_iter */
4240 0, /* tp_iternext */
4241 NullImporter_methods, /* tp_methods */
4242 0, /* tp_members */
4243 0, /* tp_getset */
4244 0, /* tp_base */
4245 0, /* tp_dict */
4246 0, /* tp_descr_get */
4247 0, /* tp_descr_set */
4248 0, /* tp_dictoffset */
4249 (initproc)NullImporter_init, /* tp_init */
4250 0, /* tp_alloc */
4251 PyType_GenericNew /* tp_new */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004252};
4253
Martin v. Löwis1a214512008-06-11 05:26:20 +00004254static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004255 PyModuleDef_HEAD_INIT,
4256 "imp",
4257 doc_imp,
4258 0,
4259 imp_methods,
4260 NULL,
4261 NULL,
4262 NULL,
4263 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00004264};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004265
Jason Tishler6bc06ec2003-09-04 11:59:50 +00004266PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00004267PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004268{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004269 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004270
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004271 if (PyType_Ready(&PyNullImporter_Type) < 0)
4272 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004273
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004274 m = PyModule_Create(&impmodule);
4275 if (m == NULL)
4276 goto failure;
4277 d = PyModule_GetDict(m);
4278 if (d == NULL)
4279 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004280
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004281 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
4282 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
4283 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
4284 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
4285 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
4286 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
4287 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
4288 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
4289 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
4290 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004291
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004292 Py_INCREF(&PyNullImporter_Type);
4293 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
4294 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004295 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004296 Py_XDECREF(m);
4297 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004298}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004299
4300
Guido van Rossumb18618d2000-05-03 23:44:39 +00004301/* API for embedding applications that want to add their own entries
4302 to the table of built-in modules. This should normally be called
4303 *before* Py_Initialize(). When the table resize fails, -1 is
4304 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004305
4306 After a similar function by Just van Rossum. */
4307
4308int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004309PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004310{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004311 static struct _inittab *our_copy = NULL;
4312 struct _inittab *p;
4313 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004314
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004315 /* Count the number of entries in both tables */
4316 for (n = 0; newtab[n].name != NULL; n++)
4317 ;
4318 if (n == 0)
4319 return 0; /* Nothing to do */
4320 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
4321 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004322
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004323 /* Allocate new memory for the combined table */
4324 p = our_copy;
4325 PyMem_RESIZE(p, struct _inittab, i+n+1);
4326 if (p == NULL)
4327 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004328
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004329 /* Copy the tables into the new memory */
4330 if (our_copy != PyImport_Inittab)
4331 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
4332 PyImport_Inittab = our_copy = p;
4333 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004334
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004335 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004336}
4337
4338/* Shorthand to add a single entry given a name and a function */
4339
4340int
Brett Cannona826f322009-04-02 03:41:46 +00004341PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004342{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004343 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004344
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004345 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004346
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004347 newtab[0].name = (char *)name;
4348 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004349
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004350 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004351}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004352
4353#ifdef __cplusplus
4354}
4355#endif