blob: e21ae39359b8c58c87f25ccb02e186720fd10dd4 [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)
Martin v. Löwisfadcd312011-10-23 18:08:20 +0200111 TAG must change for each major Python release. The magic number will take
112 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__"
121/* Current magic word and string tag as globals. */
Guido van Rossum96774c12000-05-01 20:19:08 +0000122static long pyc_magic = MAGIC;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000123static const char *pyc_tag = TAG;
Benjamin Peterson48deae12011-06-03 17:50:16 -0500124#undef QUOTE
125#undef STRIFY
126#undef MAJOR
127#undef MINOR
Guido van Rossum96774c12000-05-01 20:19:08 +0000128
Victor Stinner95872862011-03-07 18:20:56 +0100129/* See _PyImport_FixupExtensionObject() below */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000130static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000131
Victor Stinnerfe7c5b52011-04-05 01:48:03 +0200132/* Function from Parser/tokenizer.c */
133extern char * PyTokenizer_FindEncodingFilename(int, PyObject *);
134
Guido van Rossum771c6c81997-10-31 18:37:24 +0000135/* This table is defined in config.c: */
136extern struct _inittab _PyImport_Inittab[];
137
138struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +0000139
Guido van Rossumed1170e1999-12-20 21:23:41 +0000140/* these tables define the module suffixes that Python recognizes */
141struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +0000142
Guido van Rossumed1170e1999-12-20 21:23:41 +0000143static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000144 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000145#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000146 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000147#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000148 {".pyc", "rb", PY_COMPILED},
149 {0, 0}
Guido van Rossumed1170e1999-12-20 21:23:41 +0000150};
151
Victor Stinnerd0296212011-03-14 14:04:10 -0400152static PyObject *initstr = NULL;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200153_Py_IDENTIFIER(__path__);
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000154
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000155/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000156
157void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000158_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000159{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000160 const struct filedescr *scan;
161 struct filedescr *filetab;
162 int countD = 0;
163 int countS = 0;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000164
Victor Stinnerd0296212011-03-14 14:04:10 -0400165 initstr = PyUnicode_InternFromString("__init__");
166 if (initstr == NULL)
167 Py_FatalError("Can't initialize import variables");
168
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000169 /* prepare _PyImport_Filetab: copy entries from
170 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
171 */
Guido van Rossum04110fb2007-08-24 16:32:05 +0000172#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000173 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
174 ++countD;
Guido van Rossum04110fb2007-08-24 16:32:05 +0000175#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000176 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
177 ++countS;
178 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
179 if (filetab == NULL)
180 Py_FatalError("Can't initialize import file table.");
Guido van Rossum04110fb2007-08-24 16:32:05 +0000181#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000182 memcpy(filetab, _PyImport_DynLoadFiletab,
183 countD * sizeof(struct filedescr));
Guido van Rossum04110fb2007-08-24 16:32:05 +0000184#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000185 memcpy(filetab + countD, _PyImport_StandardFiletab,
186 countS * sizeof(struct filedescr));
187 filetab[countD + countS].suffix = NULL;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000188
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000189 _PyImport_Filetab = filetab;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000190
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000191 if (Py_OptimizeFlag) {
192 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
193 for (; filetab->suffix != NULL; filetab++) {
194 if (strcmp(filetab->suffix, ".pyc") == 0)
195 filetab->suffix = ".pyo";
196 }
197 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000198}
199
Guido van Rossum25ce5661997-08-02 03:10:38 +0000200void
Just van Rossum52e14d62002-12-30 22:08:05 +0000201_PyImportHooks_Init(void)
202{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000203 PyObject *v, *path_hooks = NULL, *zimpimport;
204 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000205
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000206 /* adding sys.path_hooks and sys.path_importer_cache, setting up
207 zipimport */
208 if (PyType_Ready(&PyNullImporter_Type) < 0)
209 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000210
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000211 if (Py_VerboseFlag)
212 PySys_WriteStderr("# installing zipimport hook\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000213
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000214 v = PyList_New(0);
215 if (v == NULL)
216 goto error;
217 err = PySys_SetObject("meta_path", v);
218 Py_DECREF(v);
219 if (err)
220 goto error;
221 v = PyDict_New();
222 if (v == NULL)
223 goto error;
224 err = PySys_SetObject("path_importer_cache", v);
225 Py_DECREF(v);
226 if (err)
227 goto error;
228 path_hooks = PyList_New(0);
229 if (path_hooks == NULL)
230 goto error;
231 err = PySys_SetObject("path_hooks", path_hooks);
232 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000233 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000234 PyErr_Print();
235 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
236 "path_importer_cache, or NullImporter failed"
237 );
238 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000239
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000240 zimpimport = PyImport_ImportModule("zipimport");
241 if (zimpimport == NULL) {
242 PyErr_Clear(); /* No zip import module -- okay */
243 if (Py_VerboseFlag)
244 PySys_WriteStderr("# can't import zipimport\n");
245 }
246 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200247 _Py_IDENTIFIER(zipimporter);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200248 PyObject *zipimporter = _PyObject_GetAttrId(zimpimport,
249 &PyId_zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000250 Py_DECREF(zimpimport);
251 if (zipimporter == NULL) {
252 PyErr_Clear(); /* No zipimporter object -- okay */
253 if (Py_VerboseFlag)
254 PySys_WriteStderr(
255 "# can't import zipimport.zipimporter\n");
256 }
257 else {
258 /* sys.path_hooks.append(zipimporter) */
259 err = PyList_Append(path_hooks, zipimporter);
260 Py_DECREF(zipimporter);
261 if (err)
262 goto error;
263 if (Py_VerboseFlag)
264 PySys_WriteStderr(
265 "# installed zipimport hook\n");
266 }
267 }
268 Py_DECREF(path_hooks);
Just van Rossum52e14d62002-12-30 22:08:05 +0000269}
270
271void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000272_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000273{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000274 Py_XDECREF(extensions);
275 extensions = NULL;
276 PyMem_DEL(_PyImport_Filetab);
277 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000278}
279
280
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000281/* Locking primitives to prevent parallel imports of the same module
282 in different threads to return with a partially loaded module.
283 These calls are serialized by the global interpreter lock. */
284
285#ifdef WITH_THREAD
286
Guido van Rossum49b56061998-10-01 20:42:43 +0000287#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000288
Guido van Rossum65d5b571998-12-21 19:32:43 +0000289static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000290static long import_lock_thread = -1;
291static int import_lock_level = 0;
292
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000293void
294_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000295{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000296 long me = PyThread_get_thread_ident();
297 if (me == -1)
298 return; /* Too bad */
299 if (import_lock == NULL) {
300 import_lock = PyThread_allocate_lock();
301 if (import_lock == NULL)
302 return; /* Nothing much we can do. */
303 }
304 if (import_lock_thread == me) {
305 import_lock_level++;
306 return;
307 }
308 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
309 {
310 PyThreadState *tstate = PyEval_SaveThread();
311 PyThread_acquire_lock(import_lock, 1);
312 PyEval_RestoreThread(tstate);
313 }
314 import_lock_thread = me;
315 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000316}
317
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000318int
319_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000320{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000321 long me = PyThread_get_thread_ident();
322 if (me == -1 || import_lock == NULL)
323 return 0; /* Too bad */
324 if (import_lock_thread != me)
325 return -1;
326 import_lock_level--;
327 if (import_lock_level == 0) {
328 import_lock_thread = -1;
329 PyThread_release_lock(import_lock);
330 }
331 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000332}
333
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000334/* This function is called from PyOS_AfterFork to ensure that newly
335 created child processes do not share locks with the parent.
336 We now acquire the import lock around fork() calls but on some platforms
337 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000338
339void
340_PyImport_ReInitLock(void)
341{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000342 if (import_lock != NULL)
343 import_lock = PyThread_allocate_lock();
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000344 if (import_lock_level > 1) {
345 /* Forked as a side effect of import */
346 long me = PyThread_get_thread_ident();
347 PyThread_acquire_lock(import_lock, 0);
Victor Stinner942003c2011-03-07 16:57:48 +0100348 /* XXX: can the previous line fail? */
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000349 import_lock_thread = me;
350 import_lock_level--;
351 } else {
352 import_lock_thread = -1;
353 import_lock_level = 0;
354 }
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000355}
356
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000357#endif
358
Tim Peters69232342001-08-30 05:16:13 +0000359static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000360imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000361{
Tim Peters69232342001-08-30 05:16:13 +0000362#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000363 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000364#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000365 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000366#endif
367}
368
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000369static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000370imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000371{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000372#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000373 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000374#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000375 Py_INCREF(Py_None);
376 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000377}
378
379static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000380imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000381{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000382#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000383 if (_PyImport_ReleaseLock() < 0) {
384 PyErr_SetString(PyExc_RuntimeError,
385 "not holding the import lock");
386 return NULL;
387 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000388#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000389 Py_INCREF(Py_None);
390 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000391}
392
Guido van Rossumd8faa362007-04-27 19:54:29 +0000393static void
394imp_modules_reloading_clear(void)
395{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000396 PyInterpreterState *interp = PyThreadState_Get()->interp;
397 if (interp->modules_reloading != NULL)
398 PyDict_Clear(interp->modules_reloading);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000399}
400
Guido van Rossum25ce5661997-08-02 03:10:38 +0000401/* Helper for sys */
402
403PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000404PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000405{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000406 PyInterpreterState *interp = PyThreadState_GET()->interp;
407 if (interp->modules == NULL)
408 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
409 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000410}
411
Guido van Rossum3f5da241990-12-20 15:06:42 +0000412
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000413/* List of names to clear in sys */
414static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000415 "path", "argv", "ps1", "ps2",
416 "last_type", "last_value", "last_traceback",
417 "path_hooks", "path_importer_cache", "meta_path",
418 /* misc stuff */
419 "flags", "float_info",
420 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000421};
422
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000423static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000424 "stdin", "__stdin__",
425 "stdout", "__stdout__",
426 "stderr", "__stderr__",
427 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000428};
429
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000430
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000431/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000432
Guido van Rossum3f5da241990-12-20 15:06:42 +0000433void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000434PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000435{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000436 Py_ssize_t pos, ndone;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000437 PyObject *key, *value, *dict;
438 PyInterpreterState *interp = PyThreadState_GET()->interp;
439 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000440
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000441 if (modules == NULL)
442 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000443
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000444 /* Delete some special variables first. These are common
445 places where user values hide and people complain when their
446 destructors fail. Since the modules containing them are
447 deleted *last* of all, they would come too late in the normal
448 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000449
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000450 value = PyDict_GetItemString(modules, "builtins");
451 if (value != NULL && PyModule_Check(value)) {
452 dict = PyModule_GetDict(value);
453 if (Py_VerboseFlag)
454 PySys_WriteStderr("# clear builtins._\n");
455 PyDict_SetItemString(dict, "_", Py_None);
456 }
457 value = PyDict_GetItemString(modules, "sys");
458 if (value != NULL && PyModule_Check(value)) {
459 char **p;
460 PyObject *v;
461 dict = PyModule_GetDict(value);
462 for (p = sys_deletes; *p != NULL; p++) {
463 if (Py_VerboseFlag)
464 PySys_WriteStderr("# clear sys.%s\n", *p);
465 PyDict_SetItemString(dict, *p, Py_None);
466 }
467 for (p = sys_files; *p != NULL; p+=2) {
468 if (Py_VerboseFlag)
469 PySys_WriteStderr("# restore sys.%s\n", *p);
470 v = PyDict_GetItemString(dict, *(p+1));
471 if (v == NULL)
472 v = Py_None;
473 PyDict_SetItemString(dict, *p, v);
474 }
475 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000476
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000477 /* First, delete __main__ */
478 value = PyDict_GetItemString(modules, "__main__");
479 if (value != NULL && PyModule_Check(value)) {
480 if (Py_VerboseFlag)
481 PySys_WriteStderr("# cleanup __main__\n");
482 _PyModule_Clear(value);
483 PyDict_SetItemString(modules, "__main__", Py_None);
484 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000485
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000486 /* The special treatment of "builtins" here is because even
487 when it's not referenced as a module, its dictionary is
488 referenced by almost every module's __builtins__. Since
489 deleting a module clears its dictionary (even if there are
490 references left to it), we need to delete the "builtins"
491 module last. Likewise, we don't delete sys until the very
492 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000493
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000494 Also note that we 'delete' modules by replacing their entry
495 in the modules dict with None, rather than really deleting
496 them; this avoids a rehash of the modules dictionary and
497 also marks them as "non existent" so they won't be
498 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000499
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000500 /* Next, repeatedly delete modules with a reference count of
501 one (skipping builtins and sys) and delete them */
502 do {
503 ndone = 0;
504 pos = 0;
505 while (PyDict_Next(modules, &pos, &key, &value)) {
506 if (value->ob_refcnt != 1)
507 continue;
508 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100509 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000510 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100511 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000512 continue;
513 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100514 PySys_FormatStderr(
515 "# cleanup[1] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000516 _PyModule_Clear(value);
517 PyDict_SetItem(modules, key, Py_None);
518 ndone++;
519 }
520 }
521 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000522
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000523 /* Next, delete all modules (still skipping builtins and sys) */
524 pos = 0;
525 while (PyDict_Next(modules, &pos, &key, &value)) {
526 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100527 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000528 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100529 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000530 continue;
531 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100532 PySys_FormatStderr("# cleanup[2] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000533 _PyModule_Clear(value);
534 PyDict_SetItem(modules, key, Py_None);
535 }
536 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000537
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000538 /* Next, delete sys and builtins (in that order) */
539 value = PyDict_GetItemString(modules, "sys");
540 if (value != NULL && PyModule_Check(value)) {
541 if (Py_VerboseFlag)
542 PySys_WriteStderr("# cleanup sys\n");
543 _PyModule_Clear(value);
544 PyDict_SetItemString(modules, "sys", Py_None);
545 }
546 value = PyDict_GetItemString(modules, "builtins");
547 if (value != NULL && PyModule_Check(value)) {
548 if (Py_VerboseFlag)
549 PySys_WriteStderr("# cleanup builtins\n");
550 _PyModule_Clear(value);
551 PyDict_SetItemString(modules, "builtins", Py_None);
552 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000553
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000554 /* Finally, clear and delete the modules directory */
555 PyDict_Clear(modules);
556 interp->modules = NULL;
557 Py_DECREF(modules);
558 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000559}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000560
561
Barry Warsaw28a691b2010-04-17 00:19:56 +0000562/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000563
564long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000565PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000566{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000568}
569
570
Barry Warsaw28a691b2010-04-17 00:19:56 +0000571const char *
572PyImport_GetMagicTag(void)
573{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000574 return pyc_tag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000575}
576
Guido van Rossum25ce5661997-08-02 03:10:38 +0000577/* Magic for extension modules (built-in as well as dynamically
578 loaded). To prevent initializing an extension module more than
579 once, we keep a static dictionary 'extensions' keyed by module name
580 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000581 modules), containing these modules. A copy of the module's
Victor Stinner95872862011-03-07 18:20:56 +0100582 dictionary is stored by calling _PyImport_FixupExtensionObject()
Guido van Rossum25ce5661997-08-02 03:10:38 +0000583 immediately after the module initialization function succeeds. A
584 copy can be retrieved from there by calling
Victor Stinner95872862011-03-07 18:20:56 +0100585 _PyImport_FindExtensionObject().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000586
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000587 Modules which do support multiple initialization set their m_size
588 field to a non-negative number (indicating the size of the
589 module-specific state). They are still recorded in the extensions
590 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000591*/
592
593int
Victor Stinner95872862011-03-07 18:20:56 +0100594_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
595 PyObject *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000596{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000597 PyObject *modules, *dict;
598 struct PyModuleDef *def;
599 if (extensions == NULL) {
600 extensions = PyDict_New();
601 if (extensions == NULL)
602 return -1;
603 }
604 if (mod == NULL || !PyModule_Check(mod)) {
605 PyErr_BadInternalCall();
606 return -1;
607 }
608 def = PyModule_GetDef(mod);
609 if (!def) {
610 PyErr_BadInternalCall();
611 return -1;
612 }
613 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +0100614 if (PyDict_SetItem(modules, name, mod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000615 return -1;
616 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100617 PyDict_DelItem(modules, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000618 return -1;
619 }
620 if (def->m_size == -1) {
621 if (def->m_base.m_copy) {
622 /* Somebody already imported the module,
623 likely under a different name.
624 XXX this should really not happen. */
625 Py_DECREF(def->m_base.m_copy);
626 def->m_base.m_copy = NULL;
627 }
628 dict = PyModule_GetDict(mod);
629 if (dict == NULL)
630 return -1;
631 def->m_base.m_copy = PyDict_Copy(dict);
632 if (def->m_base.m_copy == NULL)
633 return -1;
634 }
Victor Stinner49d3f252010-10-17 01:24:53 +0000635 PyDict_SetItem(extensions, filename, (PyObject*)def);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000636 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000637}
638
Victor Stinner49d3f252010-10-17 01:24:53 +0000639int
640_PyImport_FixupBuiltin(PyObject *mod, char *name)
641{
642 int res;
Victor Stinner95872862011-03-07 18:20:56 +0100643 PyObject *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100644 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100645 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000646 return -1;
Victor Stinner95872862011-03-07 18:20:56 +0100647 res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj);
648 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000649 return res;
650}
651
Guido van Rossum25ce5661997-08-02 03:10:38 +0000652PyObject *
Victor Stinner95872862011-03-07 18:20:56 +0100653_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000654{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000655 PyObject *mod, *mdict;
656 PyModuleDef* def;
657 if (extensions == NULL)
658 return NULL;
Victor Stinner49d3f252010-10-17 01:24:53 +0000659 def = (PyModuleDef*)PyDict_GetItem(extensions, filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000660 if (def == NULL)
661 return NULL;
662 if (def->m_size == -1) {
663 /* Module does not support repeated initialization */
664 if (def->m_base.m_copy == NULL)
665 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100666 mod = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000667 if (mod == NULL)
668 return NULL;
669 mdict = PyModule_GetDict(mod);
670 if (mdict == NULL)
671 return NULL;
672 if (PyDict_Update(mdict, def->m_base.m_copy))
673 return NULL;
674 }
675 else {
676 if (def->m_base.m_init == NULL)
677 return NULL;
678 mod = def->m_base.m_init();
679 if (mod == NULL)
680 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100681 PyDict_SetItem(PyImport_GetModuleDict(), name, mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000682 Py_DECREF(mod);
683 }
684 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100685 PyDict_DelItem(PyImport_GetModuleDict(), name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000686 Py_DECREF(mod);
687 return NULL;
688 }
689 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +0100690 PySys_FormatStderr("import %U # previously loaded (%R)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000691 name, filename);
692 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000693
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000694}
695
Victor Stinner49d3f252010-10-17 01:24:53 +0000696PyObject *
Victor Stinner501c09a2011-02-23 00:02:00 +0000697_PyImport_FindBuiltin(const char *name)
Victor Stinner49d3f252010-10-17 01:24:53 +0000698{
Victor Stinner95872862011-03-07 18:20:56 +0100699 PyObject *res, *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100700 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100701 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000702 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100703 res = _PyImport_FindExtensionObject(nameobj, nameobj);
704 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000705 return res;
706}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000707
708/* Get the module object corresponding to a module name.
709 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000710 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000711 Because the former action is most common, THIS DOES NOT RETURN A
712 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000713
Guido van Rossum79f25d91997-04-29 20:08:16 +0000714PyObject *
Victor Stinner27ee0892011-03-04 12:57:09 +0000715PyImport_AddModuleObject(PyObject *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000716{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000717 PyObject *modules = PyImport_GetModuleDict();
718 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000719
Victor Stinner27ee0892011-03-04 12:57:09 +0000720 if ((m = PyDict_GetItem(modules, name)) != NULL &&
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000721 PyModule_Check(m))
722 return m;
Victor Stinner27ee0892011-03-04 12:57:09 +0000723 m = PyModule_NewObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000724 if (m == NULL)
725 return NULL;
Victor Stinner27ee0892011-03-04 12:57:09 +0000726 if (PyDict_SetItem(modules, name, m) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000727 Py_DECREF(m);
728 return NULL;
729 }
730 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000731
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000732 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000733}
734
Victor Stinner27ee0892011-03-04 12:57:09 +0000735PyObject *
736PyImport_AddModule(const char *name)
737{
738 PyObject *nameobj, *module;
739 nameobj = PyUnicode_FromString(name);
740 if (nameobj == NULL)
741 return NULL;
742 module = PyImport_AddModuleObject(nameobj);
743 Py_DECREF(nameobj);
744 return module;
745}
746
747
Tim Peters1cd70172004-08-02 03:52:12 +0000748/* Remove name from sys.modules, if it's there. */
749static void
Victor Stinner27ee0892011-03-04 12:57:09 +0000750remove_module(PyObject *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000751{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000752 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner27ee0892011-03-04 12:57:09 +0000753 if (PyDict_GetItem(modules, name) == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000754 return;
Victor Stinner27ee0892011-03-04 12:57:09 +0000755 if (PyDict_DelItem(modules, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000756 Py_FatalError("import: deleting existing key in"
757 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000758}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000759
Victor Stinnerc9abda02011-03-14 13:33:46 -0400760static PyObject * get_sourcefile(PyObject *filename);
761static PyObject *make_source_pathname(PyObject *pathname);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200762static PyObject* make_compiled_pathname(PyObject *pathname, int debug);
Christian Heimes3b06e532008-01-07 20:12:44 +0000763
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000764/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000765 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
766 * removed from sys.modules, to avoid leaving damaged module objects
767 * in sys.modules. The caller may wish to restore the original
768 * module object (if any) in this case; PyImport_ReloadModule is an
769 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000770 *
771 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
772 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000773 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000774PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000775PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000776{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000777 return PyImport_ExecCodeModuleWithPathnames(
778 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000779}
780
781PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000782PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000783{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000784 return PyImport_ExecCodeModuleWithPathnames(
785 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000786}
787
788PyObject *
789PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000791{
Victor Stinner27ee0892011-03-04 12:57:09 +0000792 PyObject *m = NULL;
793 PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL;
794
795 nameobj = PyUnicode_FromString(name);
796 if (nameobj == NULL)
797 return NULL;
798
799 if (pathname != NULL) {
800 pathobj = PyUnicode_DecodeFSDefault(pathname);
801 if (pathobj == NULL)
802 goto error;
803 } else
804 pathobj = NULL;
805 if (cpathname != NULL) {
806 cpathobj = PyUnicode_DecodeFSDefault(cpathname);
807 if (cpathobj == NULL)
808 goto error;
809 } else
810 cpathobj = NULL;
811 m = PyImport_ExecCodeModuleObject(nameobj, co, pathobj, cpathobj);
812error:
813 Py_DECREF(nameobj);
814 Py_XDECREF(pathobj);
815 Py_XDECREF(cpathobj);
816 return m;
817}
818
819PyObject*
820PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
821 PyObject *cpathname)
822{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000823 PyObject *modules = PyImport_GetModuleDict();
824 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000825
Victor Stinner27ee0892011-03-04 12:57:09 +0000826 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000827 if (m == NULL)
828 return NULL;
829 /* If the module is being reloaded, we get the old module back
830 and re-use its dict to exec the new code. */
831 d = PyModule_GetDict(m);
832 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
833 if (PyDict_SetItemString(d, "__builtins__",
834 PyEval_GetBuiltins()) != 0)
835 goto error;
836 }
837 /* Remember the filename as the __file__ attribute */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000838 if (pathname != NULL) {
Victor Stinnerc9abda02011-03-14 13:33:46 -0400839 v = get_sourcefile(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000840 if (v == NULL)
841 PyErr_Clear();
842 }
Victor Stinner27ee0892011-03-04 12:57:09 +0000843 else
844 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000845 if (v == NULL) {
846 v = ((PyCodeObject *)co)->co_filename;
847 Py_INCREF(v);
848 }
849 if (PyDict_SetItemString(d, "__file__", v) != 0)
850 PyErr_Clear(); /* Not important enough to report */
851 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000852
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000853 /* Remember the pyc path name as the __cached__ attribute. */
Victor Stinner27ee0892011-03-04 12:57:09 +0000854 if (cpathname != NULL)
855 v = cpathname;
856 else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000857 v = Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000858 if (PyDict_SetItemString(d, "__cached__", v) != 0)
859 PyErr_Clear(); /* Not important enough to report */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000860
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000861 v = PyEval_EvalCode(co, d, d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000862 if (v == NULL)
863 goto error;
864 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000865
Victor Stinner27ee0892011-03-04 12:57:09 +0000866 if ((m = PyDict_GetItem(modules, name)) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000867 PyErr_Format(PyExc_ImportError,
Victor Stinner27ee0892011-03-04 12:57:09 +0000868 "Loaded module %R not found in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000869 name);
870 return NULL;
871 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000872
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000873 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000874
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000875 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000876
877 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000878 remove_module(name);
879 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000880}
881
882
Barry Warsaw28a691b2010-04-17 00:19:56 +0000883/* Like strrchr(string, '/') but searches for the rightmost of either SEP
884 or ALTSEP, if the latter is defined.
885*/
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200886static Py_UCS4*
887rightmost_sep(Py_UCS4 *s)
Victor Stinnerc9abda02011-03-14 13:33:46 -0400888{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200889 Py_UCS4 *found, c;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400890 for (found = NULL; (c = *s); s++) {
891 if (c == SEP
892#ifdef ALTSEP
893 || c == ALTSEP
894#endif
895 )
896 {
897 found = s;
898 }
899 }
900 return found;
901}
902
Martin v. Löwis2db72862011-10-23 17:29:08 +0200903/* Like rightmost_sep, but operate on unicode objects. */
904static Py_ssize_t
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200905rightmost_sep_obj(PyObject* o, Py_ssize_t start, Py_ssize_t end)
Martin v. Löwis2db72862011-10-23 17:29:08 +0200906{
907 Py_ssize_t found, i;
908 Py_UCS4 c;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200909 for (found = -1, i = start; i < end; i++) {
Martin v. Löwis2db72862011-10-23 17:29:08 +0200910 c = PyUnicode_READ_CHAR(o, i);
911 if (c == SEP
912#ifdef ALTSEP
913 || c == ALTSEP
914#endif
915 )
916 {
917 found = i;
918 }
919 }
920 return found;
921}
Victor Stinnerc9abda02011-03-14 13:33:46 -0400922
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000923/* Given a pathname for a Python source file, fill a buffer with the
924 pathname for the corresponding compiled file. Return the pathname
925 for the compiled file, or NULL if there's no space in the buffer.
Victor Stinner2f42ae52011-03-20 00:41:24 +0100926 Doesn't set an exception.
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000927
Martin v. Löwis30260a72011-10-23 17:35:46 +0200928 foo.py -> __pycache__/foo.<tag>.pyc
929
930 pathstr is assumed to be "ready".
931*/
Victor Stinner2f42ae52011-03-20 00:41:24 +0100932
933static PyObject*
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200934make_compiled_pathname(PyObject *pathstr, int debug)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000935{
Martin v. Löwis2db72862011-10-23 17:29:08 +0200936 PyObject *result;
937 Py_ssize_t fname, ext, len, i, pos, taglen;
Martin v. Löwisfadcd312011-10-23 18:08:20 +0200938 Py_ssize_t pycache_len = sizeof(CACHEDIR) - 1;
Martin v. Löwis2db72862011-10-23 17:29:08 +0200939 int kind;
940 void *data;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000941
Martin v. Löwis2db72862011-10-23 17:29:08 +0200942 /* Compute the output string size. */
943 len = PyUnicode_GET_LENGTH(pathstr);
944 /* If there is no separator, this returns -1, so
945 lastsep will be 0. */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200946 fname = rightmost_sep_obj(pathstr, 0, len) + 1;
Martin v. Löwis2db72862011-10-23 17:29:08 +0200947 ext = fname - 1;
948 for(i = fname; i < len; i++)
949 if (PyUnicode_READ_CHAR(pathstr, i) == '.')
950 ext = i + 1;
951 if (ext < fname)
952 /* No dot in filename; use entire filename */
953 ext = len;
954
955 /* result = pathstr[:fname] + "__pycache__" + SEP +
956 pathstr[fname:ext] + tag + ".py[co]" */
957 taglen = strlen(pyc_tag);
Martin v. Löwis2cc0cc52011-10-23 18:41:56 +0200958 result = PyUnicode_New(ext + pycache_len + 1 + taglen + 4,
Martin v. Löwis2db72862011-10-23 17:29:08 +0200959 PyUnicode_MAX_CHAR_VALUE(pathstr));
960 if (!result)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200961 return NULL;
Martin v. Löwis2db72862011-10-23 17:29:08 +0200962 kind = PyUnicode_KIND(result);
963 data = PyUnicode_DATA(result);
964 PyUnicode_CopyCharacters(result, 0, pathstr, 0, fname);
965 pos = fname;
Martin v. Löwis2cc0cc52011-10-23 18:41:56 +0200966 for (i = 0; i < pycache_len; i++)
Martin v. Löwisfadcd312011-10-23 18:08:20 +0200967 PyUnicode_WRITE(kind, data, pos++, CACHEDIR[i]);
Martin v. Löwis2db72862011-10-23 17:29:08 +0200968 PyUnicode_WRITE(kind, data, pos++, SEP);
969 PyUnicode_CopyCharacters(result, pos, pathstr,
970 fname, ext - fname);
971 pos += ext - fname;
972 for (i = 0; pyc_tag[i]; i++)
973 PyUnicode_WRITE(kind, data, pos++, pyc_tag[i]);
974 PyUnicode_WRITE(kind, data, pos++, '.');
975 PyUnicode_WRITE(kind, data, pos++, 'p');
976 PyUnicode_WRITE(kind, data, pos++, 'y');
977 PyUnicode_WRITE(kind, data, pos++, debug ? 'c' : 'o');
978 return result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000979}
980
981
Barry Warsaw28a691b2010-04-17 00:19:56 +0000982/* Given a pathname to a Python byte compiled file, return the path to the
983 source file, if the path matches the PEP 3147 format. This does not check
984 for any file existence, however, if the pyc file name does not match PEP
985 3147 style, NULL is returned. buf must be at least as big as pathname;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400986 the resulting path will always be shorter.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000987
Victor Stinnerc9abda02011-03-14 13:33:46 -0400988 (...)/__pycache__/foo.<tag>.pyc -> (...)/foo.py */
989
990static PyObject*
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200991make_source_pathname(PyObject *path)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000992{
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200993 Py_ssize_t left, right, dot0, dot1, len;
994 Py_ssize_t i, j;
995 PyObject *result;
996 int kind;
997 void *data;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400998
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200999 len = PyUnicode_GET_LENGTH(path);
1000 if (len > MAXPATHLEN)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001001 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001002
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001003 /* Look back two slashes from the end. In between these two slashes
1004 must be the string __pycache__ or this is not a PEP 3147 style
1005 path. It's possible for there to be only one slash.
1006 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001007 right = rightmost_sep_obj(path, 0, len);
1008 if (right == -1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001009 return NULL;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001010 left = rightmost_sep_obj(path, 0, right);
1011 if (left == -1)
1012 left = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001013 else
1014 left++;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001015 if (right-left != sizeof(CACHEDIR)-1)
1016 return NULL;
1017 for (i = 0; i < sizeof(CACHEDIR)-1; i++)
1018 if (PyUnicode_READ_CHAR(path, left+i) != CACHEDIR[i])
1019 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001020
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001021 /* Now verify that the path component to the right of the last slash
1022 has two dots in it.
1023 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001024 dot0 = PyUnicode_FindChar(path, '.', right+1, len, 1);
1025 if (dot0 < 0)
1026 return NULL;
1027 dot1 = PyUnicode_FindChar(path, '.', dot0+1, len, 1);
1028 if (dot1 < 0)
1029 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001030 /* Too many dots? */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001031 if (PyUnicode_FindChar(path, '.', dot1+1, len, 1) != -1)
1032 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001033
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001034 /* This is a PEP 3147 path. Start by copying everything from the
1035 start of pathname up to and including the leftmost slash. Then
1036 copy the file's basename, removing the magic tag and adding a .py
1037 suffix.
1038 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001039 result = PyUnicode_New(left + (dot0-right) + 2,
1040 PyUnicode_MAX_CHAR_VALUE(path));
1041 if (!result)
1042 return NULL;
1043 kind = PyUnicode_KIND(result);
1044 data = PyUnicode_DATA(result);
1045 PyUnicode_CopyCharacters(result, 0, path, 0, (i = left));
1046 PyUnicode_CopyCharacters(result, left, path, right+1,
1047 (j = dot0-right));
1048 PyUnicode_WRITE(kind, data, i+j, 'p');
1049 PyUnicode_WRITE(kind, data, i+j+1, 'y');
1050 return result;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001051}
1052
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001053/* Given a pathname for a Python source file, its time of last
1054 modification, and a pathname for a compiled file, check whether the
1055 compiled file represents the same version of the source. If so,
1056 return a FILE pointer for the compiled file, positioned just after
1057 the header; if not, return NULL.
1058 Doesn't set an exception. */
1059
1060static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001061check_compiled_module(PyObject *pathname, time_t mtime, PyObject *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001062{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001063 FILE *fp;
1064 long magic;
1065 long pyc_mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001066
Victor Stinner2f42ae52011-03-20 00:41:24 +01001067 fp = _Py_fopen(cpathname, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001068 if (fp == NULL)
1069 return NULL;
1070 magic = PyMarshal_ReadLongFromFile(fp);
1071 if (magic != pyc_magic) {
1072 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001073 PySys_FormatStderr("# %R has bad magic\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001074 fclose(fp);
1075 return NULL;
1076 }
1077 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
1078 if (pyc_mtime != mtime) {
1079 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001080 PySys_FormatStderr("# %R has bad mtime\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001081 fclose(fp);
1082 return NULL;
1083 }
1084 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001085 PySys_FormatStderr("# %R matches %R\n", cpathname, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001086 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001087}
1088
1089
1090/* Read a code object from a file and check it for validity */
1091
Guido van Rossum79f25d91997-04-29 20:08:16 +00001092static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001093read_compiled_module(PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001094{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001095 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001096
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001097 co = PyMarshal_ReadLastObjectFromFile(fp);
1098 if (co == NULL)
1099 return NULL;
1100 if (!PyCode_Check(co)) {
1101 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001102 "Non-code object in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001103 Py_DECREF(co);
1104 return NULL;
1105 }
1106 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001107}
1108
1109
1110/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001111 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001112
Guido van Rossum79f25d91997-04-29 20:08:16 +00001113static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001114load_compiled_module(PyObject *name, PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001115{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001116 long magic;
1117 PyCodeObject *co;
1118 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001120 magic = PyMarshal_ReadLongFromFile(fp);
1121 if (magic != pyc_magic) {
1122 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001123 "Bad magic number in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001124 return NULL;
1125 }
1126 (void) PyMarshal_ReadLongFromFile(fp);
1127 co = read_compiled_module(cpathname, fp);
1128 if (co == NULL)
1129 return NULL;
1130 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001131 PySys_FormatStderr("import %U # precompiled from %R\n",
1132 name, cpathname);
1133 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1134 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001135 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001136
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001137 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001138}
1139
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001140/* Parse a source file and return the corresponding code object */
1141
Guido van Rossum79f25d91997-04-29 20:08:16 +00001142static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001143parse_source_module(PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001144{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001145 PyCodeObject *co;
1146 PyObject *pathbytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001147 mod_ty mod;
1148 PyCompilerFlags flags;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001149 PyArena *arena;
1150
1151 pathbytes = PyUnicode_EncodeFSDefault(pathname);
1152 if (pathbytes == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001153 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001154
Victor Stinner2f42ae52011-03-20 00:41:24 +01001155 arena = PyArena_New();
1156 if (arena == NULL) {
1157 Py_DECREF(pathbytes);
1158 return NULL;
1159 }
1160
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001161 flags.cf_flags = 0;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001162 mod = PyParser_ASTFromFile(fp, PyBytes_AS_STRING(pathbytes), NULL,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001163 Py_file_input, 0, 0, &flags,
1164 NULL, arena);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001165 if (mod != NULL)
1166 co = PyAST_Compile(mod, PyBytes_AS_STRING(pathbytes), NULL, arena);
1167 else
1168 co = NULL;
1169 Py_DECREF(pathbytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001170 PyArena_Free(arena);
1171 return co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001172}
1173
Guido van Rossum55a83382000-09-20 20:31:38 +00001174/* Helper to open a bytecode file for writing in exclusive mode */
1175
Victor Stinner783c82c2011-04-20 03:27:51 +02001176#ifndef MS_WINDOWS
Guido van Rossum55a83382000-09-20 20:31:38 +00001177static FILE *
Christian Heimes05e8be12008-02-23 18:30:17 +00001178open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +00001179{
1180#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001181 /* Use O_EXCL to avoid a race condition when another process tries to
1182 write the same file. When that happens, our open() call fails,
1183 which is just fine (since it's only a cache).
1184 XXX If the file exists and is writable but the directory is not
1185 writable, the file will never be written. Oh well.
1186 */
1187 int fd;
1188 (void) unlink(filename);
1189 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
Tim Peters42c83af2000-09-29 04:03:10 +00001190#ifdef O_BINARY
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001191 |O_BINARY /* necessary for Windows */
Tim Peters42c83af2000-09-29 04:03:10 +00001192#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001193#ifdef __VMS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001194 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001195#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001196 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001197#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001198 );
1199 if (fd < 0)
1200 return NULL;
1201 return fdopen(fd, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001202#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001203 /* Best we can do -- on Windows this can't happen anyway */
1204 return fopen(filename, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001205#endif
1206}
Victor Stinner783c82c2011-04-20 03:27:51 +02001207#endif
Guido van Rossum55a83382000-09-20 20:31:38 +00001208
1209
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001210/* Write a compiled module to a file, placing the time of last
1211 modification of its source into the header.
1212 Errors are ignored, if a write error occurs an attempt is made to
1213 remove the file. */
1214
1215static void
Victor Stinner2f42ae52011-03-20 00:41:24 +01001216write_compiled_module(PyCodeObject *co, PyObject *cpathname,
1217 struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001218{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001219 Py_UCS4 *cpathname_ucs4;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001220 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001221 time_t mtime = srcstat->st_mtime;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001222#ifdef MS_WINDOWS /* since Windows uses different permissions */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001223 mode_t mode = srcstat->st_mode & ~S_IEXEC;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001224#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001225 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
1226 mode_t dirmode = (srcstat->st_mode |
1227 S_IXUSR | S_IXGRP | S_IXOTH |
1228 S_IWUSR | S_IWGRP | S_IWOTH);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001229 PyObject *dirbytes;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001230#endif
Victor Stinner783c82c2011-04-20 03:27:51 +02001231#ifdef MS_WINDOWS
1232 int fd;
1233#else
Antoine Pitrou707033a2011-10-17 19:28:44 +02001234 PyObject *cpathbytes, *cpathbytes_tmp;
1235 Py_ssize_t cpathbytes_len;
Victor Stinner783c82c2011-04-20 03:27:51 +02001236#endif
1237 PyObject *dirname;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001238 Py_UCS4 *dirsep;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001239 int res, ok;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001241 /* Ensure that the __pycache__ directory exists. */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001242 cpathname_ucs4 = PyUnicode_AsUCS4Copy(cpathname);
1243 if (!cpathname_ucs4)
1244 return;
1245 dirsep = rightmost_sep(cpathname_ucs4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001246 if (dirsep == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001247 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001248 PySys_FormatStderr("# no %s path found %R\n", CACHEDIR, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001249 return;
1250 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001251 dirname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
1252 cpathname_ucs4,
1253 dirsep - cpathname_ucs4);
1254 PyMem_Free(cpathname_ucs4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001255 if (dirname == NULL) {
1256 PyErr_Clear();
1257 return;
1258 }
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001259
1260#ifdef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001261 res = CreateDirectoryW(PyUnicode_AS_UNICODE(dirname), NULL);
1262 ok = (res != 0);
1263 if (!ok && GetLastError() == ERROR_ALREADY_EXISTS)
1264 ok = 1;
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001265#else
Victor Stinner2f42ae52011-03-20 00:41:24 +01001266 dirbytes = PyUnicode_EncodeFSDefault(dirname);
1267 if (dirbytes == NULL) {
1268 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001269 return;
1270 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001271 res = mkdir(PyBytes_AS_STRING(dirbytes), dirmode);
1272 Py_DECREF(dirbytes);
1273 if (0 <= res)
1274 ok = 1;
1275 else
1276 ok = (errno == EEXIST);
1277#endif
1278 if (!ok) {
1279 if (Py_VerboseFlag)
1280 PySys_FormatStderr("# cannot create cache dir %R\n", dirname);
1281 Py_DECREF(dirname);
1282 return;
1283 }
1284 Py_DECREF(dirname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001285
Victor Stinner783c82c2011-04-20 03:27:51 +02001286#ifdef MS_WINDOWS
1287 (void)DeleteFileW(PyUnicode_AS_UNICODE(cpathname));
1288 fd = _wopen(PyUnicode_AS_UNICODE(cpathname),
1289 O_EXCL | O_CREAT | O_WRONLY | O_TRUNC | O_BINARY,
1290 mode);
1291 if (0 <= fd)
1292 fp = fdopen(fd, "wb");
1293 else
1294 fp = NULL;
1295#else
Antoine Pitrou707033a2011-10-17 19:28:44 +02001296 /* Under POSIX, we first write to a tmp file and then take advantage
1297 of atomic renaming. */
Victor Stinner2f42ae52011-03-20 00:41:24 +01001298 cpathbytes = PyUnicode_EncodeFSDefault(cpathname);
1299 if (cpathbytes == NULL) {
1300 PyErr_Clear();
1301 return;
1302 }
Antoine Pitrou707033a2011-10-17 19:28:44 +02001303 cpathbytes_len = PyBytes_GET_SIZE(cpathbytes);
1304 cpathbytes_tmp = PyBytes_FromStringAndSize(NULL, cpathbytes_len + 4);
1305 if (cpathbytes_tmp == NULL) {
1306 Py_DECREF(cpathbytes);
1307 PyErr_Clear();
1308 return;
1309 }
1310 memcpy(PyBytes_AS_STRING(cpathbytes_tmp), PyBytes_AS_STRING(cpathbytes),
1311 cpathbytes_len);
1312 memcpy(PyBytes_AS_STRING(cpathbytes_tmp) + cpathbytes_len, ".tmp", 4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001313
Antoine Pitrou707033a2011-10-17 19:28:44 +02001314 fp = open_exclusive(PyBytes_AS_STRING(cpathbytes_tmp), mode);
Victor Stinner783c82c2011-04-20 03:27:51 +02001315#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001316 if (fp == NULL) {
1317 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001318 PySys_FormatStderr(
1319 "# can't create %R\n", cpathname);
Victor Stinner783c82c2011-04-20 03:27:51 +02001320#ifndef MS_WINDOWS
Victor Stinner2f42ae52011-03-20 00:41:24 +01001321 Py_DECREF(cpathbytes);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001322 Py_DECREF(cpathbytes_tmp);
Victor Stinner783c82c2011-04-20 03:27:51 +02001323#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001324 return;
1325 }
1326 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
1327 /* First write a 0 for mtime */
1328 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
1329 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001330 fflush(fp);
1331 /* Now write the true mtime */
1332 fseek(fp, 4L, 0);
1333 assert(mtime < LONG_MAX);
1334 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001335 if (fflush(fp) != 0 || ferror(fp)) {
1336 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001337 PySys_FormatStderr("# can't write %R\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001338 /* Don't keep partial file */
1339 fclose(fp);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001340#ifdef MS_WINDOWS
1341 (void)DeleteFileW(PyUnicode_AS_UNICODE(cpathname));
1342#else
Antoine Pitrou707033a2011-10-17 19:28:44 +02001343 (void) unlink(PyBytes_AS_STRING(cpathbytes_tmp));
Victor Stinner2f42ae52011-03-20 00:41:24 +01001344 Py_DECREF(cpathbytes);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001345 Py_DECREF(cpathbytes_tmp);
Victor Stinner783c82c2011-04-20 03:27:51 +02001346#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001347 return;
1348 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001349 fclose(fp);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001350 /* Under POSIX, do an atomic rename */
1351#ifndef MS_WINDOWS
1352 if (rename(PyBytes_AS_STRING(cpathbytes_tmp),
1353 PyBytes_AS_STRING(cpathbytes))) {
1354 if (Py_VerboseFlag)
1355 PySys_FormatStderr("# can't write %R\n", cpathname);
1356 /* Don't keep tmp file */
1357 unlink(PyBytes_AS_STRING(cpathbytes_tmp));
1358 Py_DECREF(cpathbytes);
1359 Py_DECREF(cpathbytes_tmp);
1360 return;
1361 }
1362 Py_DECREF(cpathbytes);
1363 Py_DECREF(cpathbytes_tmp);
1364#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001365 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001366 PySys_FormatStderr("# wrote %R\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001367}
1368
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001369static void
1370update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
1371{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001372 PyObject *constants, *tmp;
1373 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001374
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001375 if (PyUnicode_Compare(co->co_filename, oldname))
1376 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001377
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001378 tmp = co->co_filename;
1379 co->co_filename = newname;
1380 Py_INCREF(co->co_filename);
1381 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001382
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001383 constants = co->co_consts;
1384 n = PyTuple_GET_SIZE(constants);
1385 for (i = 0; i < n; i++) {
1386 tmp = PyTuple_GET_ITEM(constants, i);
1387 if (PyCode_Check(tmp))
1388 update_code_filenames((PyCodeObject *)tmp,
1389 oldname, newname);
1390 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001391}
1392
Victor Stinner2f42ae52011-03-20 00:41:24 +01001393static void
1394update_compiled_module(PyCodeObject *co, PyObject *newname)
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001395{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001396 PyObject *oldname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001397
Victor Stinner2f42ae52011-03-20 00:41:24 +01001398 if (PyUnicode_Compare(co->co_filename, newname) == 0)
1399 return;
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +00001400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001401 oldname = co->co_filename;
1402 Py_INCREF(oldname);
1403 update_code_filenames(co, oldname, newname);
1404 Py_DECREF(oldname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001405}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001406
Brett Cannon442c9b92011-03-23 16:14:42 -07001407static PyObject *
1408imp_fix_co_filename(PyObject *self, PyObject *args)
1409{
1410 PyObject *co;
1411 PyObject *file_path;
1412
1413 if (!PyArg_ParseTuple(args, "OO:_fix_co_filename", &co, &file_path))
1414 return NULL;
1415
1416 if (!PyCode_Check(co)) {
1417 PyErr_SetString(PyExc_TypeError,
1418 "first argument must be a code object");
1419 return NULL;
1420 }
1421
1422 if (!PyUnicode_Check(file_path)) {
1423 PyErr_SetString(PyExc_TypeError,
1424 "second argument must be a string");
1425 return NULL;
1426 }
1427
1428 update_compiled_module((PyCodeObject*)co, file_path);
1429
1430 Py_RETURN_NONE;
1431}
1432
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001433/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001434 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
1435 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001436
Guido van Rossum79f25d91997-04-29 20:08:16 +00001437static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001438load_source_module(PyObject *name, PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001439{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001440 struct stat st;
1441 FILE *fpc;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001442 PyObject *cpathname = NULL, *cpathbytes = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001443 PyCodeObject *co;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001444 PyObject *m = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001445
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001446 if (fstat(fileno(fp), &st) != 0) {
1447 PyErr_Format(PyExc_RuntimeError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001448 "unable to get file status from %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001449 pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001450 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001451 }
Fred Drake4c82b232000-06-30 16:18:57 +00001452#if SIZEOF_TIME_T > 4
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001453 /* Python's .pyc timestamp handling presumes that the timestamp fits
1454 in 4 bytes. This will be fine until sometime in the year 2038,
1455 when a 4-byte signed time_t will overflow.
1456 */
1457 if (st.st_mtime >> 32) {
1458 PyErr_SetString(PyExc_OverflowError,
1459 "modification time overflows a 4 byte field");
Victor Stinner2f42ae52011-03-20 00:41:24 +01001460 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001461 }
Fred Drake4c82b232000-06-30 16:18:57 +00001462#endif
Martin v. Löwis30260a72011-10-23 17:35:46 +02001463 if (PyUnicode_READY(pathname) < 0)
1464 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001465 cpathname = make_compiled_pathname(pathname, !Py_OptimizeFlag);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001466
1467 if (cpathname != NULL)
1468 fpc = check_compiled_module(pathname, st.st_mtime, cpathname);
1469 else
1470 fpc = NULL;
1471
1472 if (fpc) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001473 co = read_compiled_module(cpathname, fpc);
1474 fclose(fpc);
1475 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001476 goto error;
1477 update_compiled_module(co, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001478 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001479 PySys_FormatStderr("import %U # precompiled from %R\n",
1480 name, cpathname);
1481 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1482 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001483 }
1484 else {
1485 co = parse_source_module(pathname, fp);
1486 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001487 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001488 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001489 PySys_FormatStderr("import %U # from %R\n",
Victor Stinner98dbba52011-03-14 15:15:47 -04001490 name, pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001491 if (cpathname != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001492 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1493 if (ro == NULL || !PyObject_IsTrue(ro))
1494 write_compiled_module(co, cpathname, &st);
1495 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001496 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1497 pathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001498 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001499 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001500
Victor Stinner2f42ae52011-03-20 00:41:24 +01001501error:
1502 Py_XDECREF(cpathbytes);
1503 Py_XDECREF(cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001504 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001505}
1506
Christian Heimes3b06e532008-01-07 20:12:44 +00001507/* Get source file -> unicode or None
1508 * Returns the path to the py file if available, else the given path
1509 */
1510static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001511get_sourcefile(PyObject *filename)
Christian Heimes3b06e532008-01-07 20:12:44 +00001512{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001513 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001514 Py_UCS4 *fileuni;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001515 PyObject *py;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001516 struct stat statbuf;
Christian Heimes3b06e532008-01-07 20:12:44 +00001517
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001518 len = PyUnicode_GET_LENGTH(filename);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001519 if (len == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001520 Py_RETURN_NONE;
Christian Heimes3b06e532008-01-07 20:12:44 +00001521
Victor Stinnerc9abda02011-03-14 13:33:46 -04001522 /* don't match *.pyc or *.pyo? */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001523 fileuni = PyUnicode_AsUCS4Copy(filename);
1524 if (!fileuni)
1525 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001526 if (len < 5
1527 || fileuni[len-4] != '.'
1528 || (fileuni[len-3] != 'p' && fileuni[len-3] != 'P')
1529 || (fileuni[len-2] != 'y' && fileuni[len-2] != 'Y'))
1530 goto unchanged;
Christian Heimes3b06e532008-01-07 20:12:44 +00001531
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001532 /* Start by trying to turn PEP 3147 path into source path. If that
1533 * fails, just chop off the trailing character, i.e. legacy pyc path
1534 * to py.
1535 */
Victor Stinnerc9abda02011-03-14 13:33:46 -04001536 py = make_source_pathname(filename);
1537 if (py == NULL) {
1538 PyErr_Clear();
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001539 py = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, fileuni, len - 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001540 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001541 if (py == NULL)
1542 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001543
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001544 if (_Py_stat(py, &statbuf) == 0 && S_ISREG(statbuf.st_mode)) {
1545 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001546 return py;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001547 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001548 Py_DECREF(py);
1549 goto unchanged;
1550
1551error:
1552 PyErr_Clear();
1553unchanged:
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001554 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001555 Py_INCREF(filename);
1556 return filename;
Christian Heimes3b06e532008-01-07 20:12:44 +00001557}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001558
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001559/* Forward */
Victor Stinner41c5fec2011-03-13 21:46:30 -04001560static PyObject *load_module(PyObject *, FILE *, PyObject *, int, PyObject *);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001561static struct filedescr *find_module(PyObject *, PyObject *, PyObject *,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001562 PyObject **, FILE **, PyObject **);
Victor Stinner53dc7352011-03-20 01:50:21 +01001563static struct _frozen * find_frozen(PyObject *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001564
1565/* Load a package and return its module object WITH INCREMENTED
1566 REFERENCE COUNT */
1567
1568static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001569load_package(PyObject *name, PyObject *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001570{
Victor Stinner41c5fec2011-03-13 21:46:30 -04001571 PyObject *m, *d, *bufobj;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001572 PyObject *file = NULL, *path_list = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001573 int err;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001574 FILE *fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001575 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001576
Victor Stinnerc9abda02011-03-14 13:33:46 -04001577 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001578 if (m == NULL)
1579 return NULL;
1580 if (Py_VerboseFlag)
Victor Stinner98dbba52011-03-14 15:15:47 -04001581 PySys_FormatStderr("import %U # directory %R\n",
1582 name, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001583 file = get_sourcefile(pathname);
1584 if (file == NULL)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001585 return NULL;
1586 path_list = Py_BuildValue("[O]", file);
1587 if (path_list == NULL) {
1588 Py_DECREF(file);
1589 return NULL;
1590 }
1591 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001592 err = PyDict_SetItemString(d, "__file__", file);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001593 Py_DECREF(file);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001594 if (err == 0)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001595 err = PyDict_SetItemString(d, "__path__", path_list);
1596 if (err != 0) {
1597 Py_DECREF(path_list);
1598 return NULL;
1599 }
Victor Stinner533d7832011-03-14 13:22:54 -04001600 fdp = find_module(name, initstr, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001601 &bufobj, &fp, NULL);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001602 Py_DECREF(path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001603 if (fdp == NULL) {
1604 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1605 PyErr_Clear();
1606 Py_INCREF(m);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001607 return m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001608 }
1609 else
Victor Stinnerc9abda02011-03-14 13:33:46 -04001610 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001611 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001612 m = load_module(name, fp, bufobj, fdp->type, NULL);
1613 Py_XDECREF(bufobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001614 if (fp != NULL)
1615 fclose(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001616 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001617}
1618
1619
1620/* Helper to test for built-in module */
1621
1622static int
Victor Stinner95872862011-03-07 18:20:56 +01001623is_builtin(PyObject *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001624{
Victor Stinner95872862011-03-07 18:20:56 +01001625 int i, cmp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001626 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
Victor Stinner95872862011-03-07 18:20:56 +01001627 cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name);
1628 if (cmp == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001629 if (PyImport_Inittab[i].initfunc == NULL)
1630 return -1;
1631 else
1632 return 1;
1633 }
1634 }
1635 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001636}
1637
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001638
Just van Rossum52e14d62002-12-30 22:08:05 +00001639/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1640 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001641 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001642 that can handle the path item. Return None if no hook could;
1643 this tells our caller it should fall back to the builtin
1644 import mechanism. Cache the result in path_importer_cache.
1645 Returns a borrowed reference. */
1646
1647static PyObject *
1648get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001649 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001650{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001651 PyObject *importer;
1652 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001653
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001654 /* These conditions are the caller's responsibility: */
1655 assert(PyList_Check(path_hooks));
1656 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001657
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001658 nhooks = PyList_Size(path_hooks);
1659 if (nhooks < 0)
1660 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001661
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001662 importer = PyDict_GetItem(path_importer_cache, p);
1663 if (importer != NULL)
1664 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001665
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001666 /* set path_importer_cache[p] to None to avoid recursion */
1667 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1668 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001669
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001670 for (j = 0; j < nhooks; j++) {
1671 PyObject *hook = PyList_GetItem(path_hooks, j);
1672 if (hook == NULL)
1673 return NULL;
1674 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1675 if (importer != NULL)
1676 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001677
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001678 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1679 return NULL;
1680 }
1681 PyErr_Clear();
1682 }
1683 if (importer == NULL) {
1684 importer = PyObject_CallFunctionObjArgs(
1685 (PyObject *)&PyNullImporter_Type, p, NULL
1686 );
1687 if (importer == NULL) {
1688 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1689 PyErr_Clear();
1690 return Py_None;
1691 }
1692 }
1693 }
1694 if (importer != NULL) {
1695 int err = PyDict_SetItem(path_importer_cache, p, importer);
1696 Py_DECREF(importer);
1697 if (err != 0)
1698 return NULL;
1699 }
1700 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001701}
1702
Christian Heimes9cd17752007-11-18 19:35:23 +00001703PyAPI_FUNC(PyObject *)
1704PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001705 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001706
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001707 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1708 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1709 importer = get_path_importer(path_importer_cache,
1710 path_hooks, path);
1711 }
1712 }
1713 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1714 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001715}
1716
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001717/* Search the path (default sys.path) for a module. Return the
1718 corresponding filedescr struct, and (via return arguments) the
1719 pathname and an open file. Return NULL if the module is not found. */
1720
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001721#ifdef MS_COREDLL
Victor Stinner4d6c1c42011-03-08 23:49:04 +01001722extern FILE *_PyWin_FindRegisteredModule(PyObject *, struct filedescr **,
1723 PyObject **p_path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001724#endif
1725
Victor Stinner547a2a62011-03-20 03:07:28 +01001726/* Forward */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001727static int case_ok(PyObject *, Py_ssize_t, PyObject *);
Victor Stinner547a2a62011-03-20 03:07:28 +01001728static int find_init_module(PyObject *);
Just van Rossum52e14d62002-12-30 22:08:05 +00001729static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001730
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001731/* Get the path of a module: get its importer and call importer.find_module()
1732 hook, or check if the module if a package (if path/__init__.py exists).
1733
1734 -1: error: a Python error occurred
1735 0: ignore: an error occurred because of invalid data, but the error is not
1736 important enough to be reported.
1737 1: get path: module not found, but *buf contains its path
1738 2: found: *p_fd is the file descriptor (IMP_HOOK or PKG_DIRECTORY)
1739 and *buf is the path */
1740
1741static int
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001742find_module_path(PyObject *fullname, PyObject *name, PyObject *path,
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001743 PyObject *path_hooks, PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001744 PyObject **p_path, PyObject **p_loader, struct filedescr **p_fd)
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001745{
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001746 PyObject *path_unicode, *filename = NULL;
1747 Py_ssize_t len, pos;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001748 struct stat statbuf;
1749 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001750 int result, addsep;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001751
1752 if (PyUnicode_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001753 Py_INCREF(path);
1754 path_unicode = path;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001755 }
1756 else if (PyBytes_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001757 path_unicode = PyUnicode_DecodeFSDefaultAndSize(
1758 PyBytes_AS_STRING(path), PyBytes_GET_SIZE(path));
1759 if (path_unicode == NULL)
1760 return -1;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001761 }
1762 else
1763 return 0;
1764
Victor Stinner46084ba2011-10-06 02:39:42 +02001765 if (PyUnicode_READY(path_unicode))
1766 return -1;
1767
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001768 len = PyUnicode_GET_LENGTH(path_unicode);
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001769 if (PyUnicode_FindChar(path_unicode, 0, 0, len, 1) != -1) {
1770 result = 0;
1771 goto out; /* path contains '\0' */
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001772 }
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001773
1774 /* sys.path_hooks import hook */
1775 if (p_loader != NULL) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001776 _Py_IDENTIFIER(find_module);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001777 PyObject *importer;
1778
1779 importer = get_path_importer(path_importer_cache,
1780 path_hooks, path);
1781 if (importer == NULL) {
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001782 result = -1;
1783 goto out;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001784 }
1785 /* Note: importer is a borrowed reference */
1786 if (importer != Py_None) {
1787 PyObject *loader;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001788 loader = _PyObject_CallMethodId(importer,
1789 &PyId_find_module, "O", fullname);
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001790 if (loader == NULL) {
1791 result = -1; /* error */
1792 goto out;
1793 }
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001794 if (loader != Py_None) {
1795 /* a loader was found */
1796 *p_loader = loader;
1797 *p_fd = &importhookdescr;
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001798 result = 2;
1799 goto out;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001800 }
1801 Py_DECREF(loader);
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001802 result = 0;
1803 goto out;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001804 }
1805 }
1806 /* no hook was found, use builtin import */
1807
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001808 addsep = 0;
1809 if (len > 0 && PyUnicode_READ_CHAR(path_unicode, len-1) != SEP
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001810#ifdef ALTSEP
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001811 && PyUnicode_READ_CHAR(path_unicode, len-1) != ALTSEP
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001812#endif
1813 )
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001814 addsep = 1;
1815 filename = PyUnicode_New(len + PyUnicode_GET_LENGTH(name) + addsep,
1816 Py_MAX(PyUnicode_MAX_CHAR_VALUE(path_unicode),
1817 PyUnicode_MAX_CHAR_VALUE(name)));
1818 if (filename == NULL) {
1819 result = -1;
1820 goto out;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001821 }
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001822 PyUnicode_CopyCharacters(filename, 0, path_unicode, 0, len);
1823 pos = len;
1824 if (addsep)
1825 PyUnicode_WRITE(PyUnicode_KIND(filename),
1826 PyUnicode_DATA(filename),
1827 pos++, SEP);
1828 PyUnicode_CopyCharacters(filename, pos, name, 0,
1829 PyUnicode_GET_LENGTH(name));
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001830
1831 /* Check for package import (buf holds a directory name,
1832 and there's an __init__ module in that directory */
1833#ifdef HAVE_STAT
Victor Stinner2fd76e42011-03-14 15:19:39 -04001834 if (_Py_stat(filename, &statbuf) == 0 && /* it exists */
Victor Stinnerd0296212011-03-14 14:04:10 -04001835 S_ISDIR(statbuf.st_mode)) /* it's a directory */
1836 {
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001837 int match;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001838
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001839 match = case_ok(filename, 0, name);
1840 if (match < 0) {
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001841 result = -1;
1842 goto out;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001843 }
1844 if (match) { /* case matches */
1845 if (find_init_module(filename)) { /* and has __init__.py */
Victor Stinner2fd76e42011-03-14 15:19:39 -04001846 *p_path = filename;
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001847 filename = NULL;
Victor Stinnerd0296212011-03-14 14:04:10 -04001848 *p_fd = &fd_package;
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001849 result = 2;
1850 goto out;
Victor Stinnerd0296212011-03-14 14:04:10 -04001851 }
1852 else {
1853 int err;
Victor Stinnerd0296212011-03-14 14:04:10 -04001854 err = PyErr_WarnFormat(PyExc_ImportWarning, 1,
Victor Stinner547a2a62011-03-20 03:07:28 +01001855 "Not importing directory %R: missing __init__.py",
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001856 filename);
Victor Stinner547a2a62011-03-20 03:07:28 +01001857 if (err) {
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001858 result = -1;
1859 goto out;
Victor Stinner547a2a62011-03-20 03:07:28 +01001860 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001861 }
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001862 }
1863 }
1864#endif
Victor Stinner2fd76e42011-03-14 15:19:39 -04001865 *p_path = filename;
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001866 filename = NULL;
1867 result = 1;
1868 out:
1869 Py_DECREF(path_unicode);
1870 Py_XDECREF(filename);
1871 return result;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001872}
1873
1874/* Find a module in search_path_list. For each path, try
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001875 find_module_path() or try each _PyImport_Filetab suffix.
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001876
1877 If the module is found, return a file descriptor, write the path in
1878 *p_filename, write the pointer to the file object into *p_fp, and (if
1879 p_loader is not NULL) the loader into *p_loader.
1880
1881 Otherwise, raise an exception and return NULL. */
1882
Victor Stinner37580282011-03-20 01:34:43 +01001883static struct filedescr*
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001884find_module_path_list(PyObject *fullname, PyObject *name,
Victor Stinner37580282011-03-20 01:34:43 +01001885 PyObject *search_path_list, PyObject *path_hooks,
1886 PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001887 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001888{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001889 Py_ssize_t i, npath;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001890 struct filedescr *fdp = NULL;
1891 char *filemode;
1892 FILE *fp = NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001893 PyObject *prefix, *filename;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001894 int match;
Victor Stinner53dc7352011-03-20 01:50:21 +01001895
Victor Stinner37580282011-03-20 01:34:43 +01001896 npath = PyList_Size(search_path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001897 for (i = 0; i < npath; i++) {
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001898 PyObject *path;
1899 int ok;
1900
1901 path = PyList_GetItem(search_path_list, i);
1902 if (path == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001903 return NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001904
Victor Stinner2fd76e42011-03-14 15:19:39 -04001905 prefix = NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001906 ok = find_module_path(fullname, name, path,
1907 path_hooks, path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001908 &prefix, p_loader, &fdp);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001909 if (ok < 0)
1910 return NULL;
1911 if (ok == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001912 continue;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001913 if (ok == 2) {
1914 *p_path = prefix;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001915 return fdp;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001916 }
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001917
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001918 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001919 struct stat statbuf;
1920
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001921 filemode = fdp->mode;
1922 if (filemode[0] == 'U')
1923 filemode = "r" PY_STDIOTEXTMODE;
Victor Stinnerd0296212011-03-14 14:04:10 -04001924
Victor Stinner2fd76e42011-03-14 15:19:39 -04001925 filename = PyUnicode_FromFormat("%U%s", prefix, fdp->suffix);
1926 if (filename == NULL) {
1927 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001928 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001929 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001930
1931 if (Py_VerboseFlag > 1)
1932 PySys_FormatStderr("# trying %R\n", filename);
1933
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001934 if (_Py_stat(filename, &statbuf) == 0 && /* it exists */
1935 S_ISDIR(statbuf.st_mode)) /* it's a directory */
1936 {
1937 Py_DECREF(filename);
1938 continue;
1939 }
1940
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001941 fp = _Py_fopen(filename, filemode);
1942 if (fp == NULL) {
1943 Py_DECREF(filename);
Victor Stinner925ef392011-06-20 15:01:10 +02001944 if (PyErr_Occurred()) {
1945 Py_DECREF(prefix);
1946 return NULL;
1947 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001948 continue;
1949 }
1950 match = case_ok(filename, -(Py_ssize_t)strlen(fdp->suffix), name);
1951 if (match < 0) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001952 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001953 Py_DECREF(filename);
1954 return NULL;
1955 }
1956 if (match) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001957 Py_DECREF(prefix);
1958 *p_path = filename;
Victor Stinnerd0296212011-03-14 14:04:10 -04001959 *p_fp = fp;
1960 return fdp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001961 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001962 Py_DECREF(filename);
Victor Stinnerd0296212011-03-14 14:04:10 -04001963
1964 fclose(fp);
1965 fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001966 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001967 Py_DECREF(prefix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001968 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001969 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04001970 "No module named %R", name);
Victor Stinnerd0296212011-03-14 14:04:10 -04001971 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001972}
1973
Victor Stinner37580282011-03-20 01:34:43 +01001974/* Find a module:
1975
1976 - try find_module() of each sys.meta_path hook
1977 - try find_frozen()
1978 - try is_builtin()
1979 - try _PyWin_FindRegisteredModule() (Windows only)
1980 - otherwise, call find_module_path_list() with search_path_list (if not
1981 NULL) or sys.path
1982
Victor Stinner2fd76e42011-03-14 15:19:39 -04001983 fullname can be NULL, but only if p_loader is NULL.
1984
Victor Stinner37580282011-03-20 01:34:43 +01001985 Return:
1986
1987 - &fd_builtin (C_BUILTIN) if it is a builtin
1988 - &fd_frozen (PY_FROZEN) if it is frozen
Victor Stinner2fd76e42011-03-14 15:19:39 -04001989 - &fd_package (PKG_DIRECTORY) and write the filename into *p_path
Victor Stinner37580282011-03-20 01:34:43 +01001990 if it is a package
1991 - &importhookdescr (IMP_HOOK) and write the loader into *p_loader if a
1992 importer loader was found
1993 - a file descriptor (PY_SOURCE, PY_COMPILED, C_EXTENSION, PY_RESOURCE or
1994 PY_CODERESOURCE: see _PyImport_Filetab), write the filename into
Victor Stinner2fd76e42011-03-14 15:19:39 -04001995 *p_path and the pointer to the open file into *p_fp
Victor Stinner37580282011-03-20 01:34:43 +01001996 - NULL on error
1997
Victor Stinner2fd76e42011-03-14 15:19:39 -04001998 By default, *p_path, *p_fp and *p_loader (if set) are set to NULL.
1999 Eg. *p_path is set to NULL for a builtin package.
2000*/
Victor Stinner37580282011-03-20 01:34:43 +01002001
2002static struct filedescr *
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002003find_module(PyObject *fullname, PyObject *name, PyObject *search_path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04002004 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Victor Stinner37580282011-03-20 01:34:43 +01002005{
2006 Py_ssize_t i, npath;
2007 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
2008 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
2009 PyObject *path_hooks, *path_importer_cache;
Victor Stinner37580282011-03-20 01:34:43 +01002010
Victor Stinner2fd76e42011-03-14 15:19:39 -04002011 *p_path = NULL;
Victor Stinner37580282011-03-20 01:34:43 +01002012 *p_fp = NULL;
2013 if (p_loader != NULL)
2014 *p_loader = NULL;
2015
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002016 if (PyUnicode_GET_LENGTH(name) > MAXPATHLEN) {
2017 PyErr_SetString(PyExc_OverflowError,
2018 "module name is too long");
2019 return NULL;
2020 }
2021
Victor Stinner37580282011-03-20 01:34:43 +01002022 /* sys.meta_path import hook */
2023 if (p_loader != NULL) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002024 _Py_IDENTIFIER(find_module);
Victor Stinner37580282011-03-20 01:34:43 +01002025 PyObject *meta_path;
2026
2027 meta_path = PySys_GetObject("meta_path");
2028 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinner16191322011-09-15 19:28:05 +02002029 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002030 "sys.meta_path must be a list of "
2031 "import hooks");
2032 return NULL;
2033 }
2034 Py_INCREF(meta_path); /* zap guard */
2035 npath = PyList_Size(meta_path);
2036 for (i = 0; i < npath; i++) {
2037 PyObject *loader;
2038 PyObject *hook = PyList_GetItem(meta_path, i);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002039 loader = _PyObject_CallMethodId(hook, &PyId_find_module,
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002040 "OO", fullname,
Victor Stinner37580282011-03-20 01:34:43 +01002041 search_path_list != NULL ?
2042 search_path_list : Py_None);
2043 if (loader == NULL) {
2044 Py_DECREF(meta_path);
2045 return NULL; /* true error */
2046 }
2047 if (loader != Py_None) {
2048 /* a loader was found */
2049 *p_loader = loader;
2050 Py_DECREF(meta_path);
2051 return &importhookdescr;
2052 }
2053 Py_DECREF(loader);
2054 }
2055 Py_DECREF(meta_path);
2056 }
2057
Victor Stinnerdf75a022011-03-14 13:40:04 -04002058 if (find_frozen(fullname) != NULL)
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002059 return &fd_frozen;
Victor Stinner37580282011-03-20 01:34:43 +01002060
2061 if (search_path_list == NULL) {
2062#ifdef MS_COREDLL
2063 FILE *fp;
2064 struct filedescr *fdp;
Victor Stinner37580282011-03-20 01:34:43 +01002065#endif
Victor Stinnerdf75a022011-03-14 13:40:04 -04002066 if (is_builtin(name))
Victor Stinner37580282011-03-20 01:34:43 +01002067 return &fd_builtin;
Victor Stinner37580282011-03-20 01:34:43 +01002068#ifdef MS_COREDLL
Victor Stinner2fd76e42011-03-14 15:19:39 -04002069 fp = _PyWin_FindRegisteredModule(name, &fdp, p_path);
Victor Stinner37580282011-03-20 01:34:43 +01002070 if (fp != NULL) {
Victor Stinner37580282011-03-20 01:34:43 +01002071 *p_fp = fp;
2072 return fdp;
2073 }
2074 else if (PyErr_Occurred())
2075 return NULL;
2076#endif
Victor Stinner37580282011-03-20 01:34:43 +01002077 search_path_list = PySys_GetObject("path");
2078 }
2079
2080 if (search_path_list == NULL || !PyList_Check(search_path_list)) {
Victor Stinner16191322011-09-15 19:28:05 +02002081 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002082 "sys.path must be a list of directory names");
2083 return NULL;
2084 }
2085
2086 path_hooks = PySys_GetObject("path_hooks");
2087 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinner16191322011-09-15 19:28:05 +02002088 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002089 "sys.path_hooks must be a list of "
2090 "import hooks");
2091 return NULL;
2092 }
2093 path_importer_cache = PySys_GetObject("path_importer_cache");
2094 if (path_importer_cache == NULL ||
2095 !PyDict_Check(path_importer_cache)) {
Victor Stinner16191322011-09-15 19:28:05 +02002096 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002097 "sys.path_importer_cache must be a dict");
2098 return NULL;
2099 }
2100
2101 return find_module_path_list(fullname, name,
2102 search_path_list, path_hooks,
2103 path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04002104 p_path, p_fp, p_loader);
Victor Stinner37580282011-03-20 01:34:43 +01002105}
2106
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002107/* case_bytes(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00002108 * The arguments here are tricky, best shown by example:
2109 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
2110 * ^ ^ ^ ^
2111 * |--------------------- buf ---------------------|
2112 * |------------------- len ------------------|
2113 * |------ name -------|
2114 * |----- namelen -----|
2115 * buf is the full path, but len only counts up to (& exclusive of) the
2116 * extension. name is the module name, also exclusive of extension.
2117 *
2118 * We've already done a successful stat() or fopen() on buf, so know that
2119 * there's some match, possibly case-insensitive.
2120 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002121 * case_bytes() is to return 1 if there's a case-sensitive match for
2122 * name, else 0. case_bytes() is also to return 1 if envar PYTHONCASEOK
Tim Peters50d8d372001-02-28 05:34:27 +00002123 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00002124 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002125 * case_bytes() is used to implement case-sensitive import semantics even
Tim Peters50d8d372001-02-28 05:34:27 +00002126 * on platforms with case-insensitive filesystems. It's trivial to implement
2127 * for case-sensitive filesystems. It's pretty much a cross-platform
2128 * nightmare for systems with case-insensitive filesystems.
2129 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00002130
Tim Peters50d8d372001-02-28 05:34:27 +00002131/* First we may need a pile of platform-specific header files; the sequence
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002132 * of #if's here should match the sequence in the body of case_bytes().
Tim Peters50d8d372001-02-28 05:34:27 +00002133 */
Jason Tishler7961aa62005-05-20 00:56:54 +00002134#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002135#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00002136
Tim Peters50d8d372001-02-28 05:34:27 +00002137#elif defined(DJGPP)
2138#include <dir.h>
2139
Jason Tishler7961aa62005-05-20 00:56:54 +00002140#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00002141#include <sys/types.h>
2142#include <dirent.h>
2143
Andrew MacIntyred9400542002-02-26 11:41:34 +00002144#elif defined(PYOS_OS2)
2145#define INCL_DOS
2146#define INCL_DOSERRORS
2147#define INCL_NOPMAPI
2148#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00002149#endif
2150
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002151#if defined(DJGPP) \
2152 || ((defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) \
2153 && defined(HAVE_DIRENT_H)) \
2154 || defined(PYOS_OS2)
2155# define USE_CASE_OK_BYTES
2156#endif
2157
2158
2159#ifdef USE_CASE_OK_BYTES
Guido van Rossum0980bd91998-02-13 17:18:36 +00002160static int
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002161case_bytes(char *buf, Py_ssize_t len, Py_ssize_t namelen, const char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002162{
Tim Peters50d8d372001-02-28 05:34:27 +00002163/* Pick a platform-specific implementation; the sequence of #if's here should
2164 * match the sequence just above.
2165 */
2166
Tim Peters50d8d372001-02-28 05:34:27 +00002167/* DJGPP */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002168#if defined(DJGPP)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002169 struct ffblk ffblk;
2170 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00002171
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002172 if (Py_GETENV("PYTHONCASEOK") != NULL)
2173 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00002174
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002175 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
2176 if (done) {
2177 PyErr_Format(PyExc_NameError,
2178 "Can't find file for module %.100s\n(filename %.300s)",
2179 name, buf);
Victor Stinner9c61e242011-03-22 01:22:27 +01002180 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002181 }
2182 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002183
Jason Tishler7961aa62005-05-20 00:56:54 +00002184/* new-fangled macintosh (macosx) or Cygwin */
2185#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002186 DIR *dirp;
2187 struct dirent *dp;
2188 char dirname[MAXPATHLEN + 1];
2189 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00002190
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002191 if (Py_GETENV("PYTHONCASEOK") != NULL)
2192 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00002193
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002194 /* Copy the dir component into dirname; substitute "." if empty */
2195 if (dirlen <= 0) {
2196 dirname[0] = '.';
2197 dirname[1] = '\0';
2198 }
2199 else {
2200 assert(dirlen <= MAXPATHLEN);
2201 memcpy(dirname, buf, dirlen);
2202 dirname[dirlen] = '\0';
2203 }
2204 /* Open the directory and search the entries for an exact match. */
2205 dirp = opendir(dirname);
2206 if (dirp) {
2207 char *nameWithExt = buf + len - namelen;
2208 while ((dp = readdir(dirp)) != NULL) {
2209 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00002210#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002211 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00002212#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002213 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00002214#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002215 if (thislen >= namelen &&
2216 strcmp(dp->d_name, nameWithExt) == 0) {
2217 (void)closedir(dirp);
2218 return 1; /* Found */
2219 }
2220 }
2221 (void)closedir(dirp);
2222 }
2223 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00002224
Andrew MacIntyred9400542002-02-26 11:41:34 +00002225/* OS/2 */
2226#elif defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002227 HDIR hdir = 1;
2228 ULONG srchcnt = 1;
2229 FILEFINDBUF3 ffbuf;
2230 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002231
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002232 if (Py_GETENV("PYTHONCASEOK") != NULL)
2233 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002234
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002235 rc = DosFindFirst(buf,
2236 &hdir,
2237 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
2238 &ffbuf, sizeof(ffbuf),
2239 &srchcnt,
2240 FIL_STANDARD);
2241 if (rc != NO_ERROR)
2242 return 0;
2243 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002244
Tim Peters50d8d372001-02-28 05:34:27 +00002245/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
2246#else
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002247# error "USE_CASE_OK_BYTES is not correctly defined"
2248#endif
2249}
2250#endif
2251
2252/*
2253 * Check if a filename case matchs the name case. We've already done a
2254 * successful stat() or fopen() on buf, so know that there's some match,
2255 * possibly case-insensitive.
2256 *
2257 * case_ok() is to return 1 if there's a case-sensitive match for name, 0 if it
2258 * the filename doesn't match, or -1 on error. case_ok() is also to return 1
2259 * if envar PYTHONCASEOK exists.
2260 *
2261 * case_ok() is used to implement case-sensitive import semantics even
2262 * on platforms with case-insensitive filesystems. It's trivial to implement
2263 * for case-sensitive filesystems. It's pretty much a cross-platform
2264 * nightmare for systems with case-insensitive filesystems.
2265 */
2266
2267static int
2268case_ok(PyObject *filename, Py_ssize_t prefix_delta, PyObject *name)
2269{
2270#ifdef MS_WINDOWS
2271 WIN32_FIND_DATAW data;
2272 HANDLE h;
2273 int cmp;
Victor Stinnerbeac78b2011-10-11 21:55:01 +02002274 wchar_t *wname;
Victor Stinner8c981892011-10-11 22:27:13 +02002275 Py_ssize_t wname_len;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002276
2277 if (Py_GETENV("PYTHONCASEOK") != NULL)
2278 return 1;
2279
2280 h = FindFirstFileW(PyUnicode_AS_UNICODE(filename), &data);
2281 if (h == INVALID_HANDLE_VALUE) {
2282 PyErr_Format(PyExc_NameError,
2283 "Can't find file for module %R\n(filename %R)",
2284 name, filename);
2285 return 0;
2286 }
2287 FindClose(h);
Victor Stinnerbeac78b2011-10-11 21:55:01 +02002288
2289 wname = PyUnicode_AsUnicodeAndSize(name, &wname_len);
2290 if (wname == NULL)
2291 return -1;
2292
2293 cmp = wcsncmp(data.cFileName, wname, wname_len);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002294 return cmp == 0;
2295#elif defined(USE_CASE_OK_BYTES)
2296 int match;
2297 PyObject *filebytes, *namebytes;
2298 filebytes = PyUnicode_EncodeFSDefault(filename);
2299 if (filebytes == NULL)
2300 return -1;
2301 namebytes = PyUnicode_EncodeFSDefault(name);
2302 if (namebytes == NULL) {
2303 Py_DECREF(filebytes);
2304 return -1;
2305 }
2306 match = case_bytes(
2307 PyBytes_AS_STRING(filebytes),
2308 PyBytes_GET_SIZE(filebytes) + prefix_delta,
Victor Stinner1304f2d2011-03-20 04:28:55 +01002309 PyBytes_GET_SIZE(namebytes),
2310 PyBytes_AS_STRING(namebytes));
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002311 Py_DECREF(filebytes);
2312 Py_DECREF(namebytes);
2313 return match;
2314#else
2315 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002316 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002317
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002318#endif
Tim Peters50d8d372001-02-28 05:34:27 +00002319}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002320
Guido van Rossum197346f1997-10-31 18:38:52 +00002321#ifdef HAVE_STAT
Victor Stinner4f4402c2010-08-14 14:50:26 +00002322
Victor Stinner547a2a62011-03-20 03:07:28 +01002323/* Helper to look for __init__.py or __init__.py[co] in potential package.
2324 Return 1 if __init__ was found, 0 if not, or -1 on error. */
Guido van Rossum197346f1997-10-31 18:38:52 +00002325static int
Victor Stinner547a2a62011-03-20 03:07:28 +01002326find_init_module(PyObject *directory)
Guido van Rossum197346f1997-10-31 18:38:52 +00002327{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002328 struct stat statbuf;
Victor Stinner547a2a62011-03-20 03:07:28 +01002329 PyObject *filename;
2330 int match;
Guido van Rossum197346f1997-10-31 18:38:52 +00002331
Victor Stinner547a2a62011-03-20 03:07:28 +01002332 filename = PyUnicode_FromFormat("%U%c__init__.py", directory, SEP);
2333 if (filename == NULL)
2334 return -1;
2335 if (_Py_stat(filename, &statbuf) == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002336 /* 3=len(".py") */
2337 match = case_ok(filename, -3, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002338 if (match < 0) {
2339 Py_DECREF(filename);
2340 return -1;
2341 }
2342 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002343 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002344 return 1;
2345 }
2346 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002347 Py_DECREF(filename);
2348
2349 filename = PyUnicode_FromFormat("%U%c__init__.py%c",
2350 directory, SEP, Py_OptimizeFlag ? 'o' : 'c');
2351 if (filename == NULL)
2352 return -1;
2353 if (_Py_stat(filename, &statbuf) == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002354 /* 4=len(".pyc") */
2355 match = case_ok(filename, -4, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002356 if (match < 0) {
2357 Py_DECREF(filename);
2358 return -1;
2359 }
2360 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002361 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002362 return 1;
2363 }
2364 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002365 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002366 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00002367}
Guido van Rossum48a680c2001-03-02 06:34:14 +00002368
Guido van Rossum197346f1997-10-31 18:38:52 +00002369#endif /* HAVE_STAT */
2370
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002371
Victor Stinner95872862011-03-07 18:20:56 +01002372static int init_builtin(PyObject *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002373
Victor Stinner44c6c152010-08-09 00:59:10 +00002374static PyObject*
Victor Stinner95872862011-03-07 18:20:56 +01002375load_builtin(PyObject *name, int type)
Victor Stinner44c6c152010-08-09 00:59:10 +00002376{
2377 PyObject *m, *modules;
2378 int err;
2379
Victor Stinner44c6c152010-08-09 00:59:10 +00002380 if (type == C_BUILTIN)
2381 err = init_builtin(name);
2382 else
Victor Stinner95872862011-03-07 18:20:56 +01002383 err = PyImport_ImportFrozenModuleObject(name);
Victor Stinner44c6c152010-08-09 00:59:10 +00002384 if (err < 0)
2385 return NULL;
2386 if (err == 0) {
2387 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002388 "Purported %s module %R not found",
2389 type == C_BUILTIN ? "builtin" : "frozen",
Victor Stinner44c6c152010-08-09 00:59:10 +00002390 name);
2391 return NULL;
2392 }
2393
2394 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +01002395 m = PyDict_GetItem(modules, name);
Victor Stinner44c6c152010-08-09 00:59:10 +00002396 if (m == NULL) {
2397 PyErr_Format(
2398 PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002399 "%s module %R not properly initialized",
2400 type == C_BUILTIN ? "builtin" : "frozen",
Victor Stinner44c6c152010-08-09 00:59:10 +00002401 name);
2402 return NULL;
2403 }
2404 Py_INCREF(m);
2405 return m;
2406}
2407
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002408/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002409 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002410
Guido van Rossum79f25d91997-04-29 20:08:16 +00002411static PyObject *
Victor Stinner41c5fec2011-03-13 21:46:30 -04002412load_module(PyObject *name, FILE *fp, PyObject *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002413{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002414 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002415
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002416 /* First check that there's an open file (if we need one) */
2417 switch (type) {
2418 case PY_SOURCE:
2419 case PY_COMPILED:
2420 if (fp == NULL) {
2421 PyErr_Format(PyExc_ValueError,
Victor Stinner41c5fec2011-03-13 21:46:30 -04002422 "file object required for import (type code %d)",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002423 type);
2424 return NULL;
2425 }
2426 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002427
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002428 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002429
Victor Stinner41c5fec2011-03-13 21:46:30 -04002430 case PY_SOURCE:
2431 m = load_source_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002432 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002433
Victor Stinner41c5fec2011-03-13 21:46:30 -04002434 case PY_COMPILED:
2435 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002436 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002437
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002438#ifdef HAVE_DYNAMIC_LOADING
Victor Stinner41c5fec2011-03-13 21:46:30 -04002439 case C_EXTENSION:
2440 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002441 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002442#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002443
Victor Stinner41c5fec2011-03-13 21:46:30 -04002444 case PKG_DIRECTORY:
2445 m = load_package(name, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002446 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002447
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002448 case C_BUILTIN:
Victor Stinner41c5fec2011-03-13 21:46:30 -04002449 case PY_FROZEN:
2450 m = load_builtin(name, type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002451 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002452
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002453 case IMP_HOOK: {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002454 _Py_IDENTIFIER(load_module);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002455 if (loader == NULL) {
2456 PyErr_SetString(PyExc_ImportError,
2457 "import hook without loader");
2458 return NULL;
2459 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002460 m = _PyObject_CallMethodId(loader, &PyId_load_module, "O", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002461 break;
2462 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002463
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002464 default:
2465 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04002466 "Don't know how to import %R (type code %d)",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002467 name, type);
2468 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002469
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002470 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002471
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002472 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002473}
2474
2475
2476/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00002477 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002478 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002479
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002480static int
Victor Stinner95872862011-03-07 18:20:56 +01002481init_builtin(PyObject *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002482{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002483 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002484
Victor Stinner95872862011-03-07 18:20:56 +01002485 if (_PyImport_FindExtensionObject(name, name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002486 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002487
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002488 for (p = PyImport_Inittab; p->name != NULL; p++) {
2489 PyObject *mod;
Victor Stinner95872862011-03-07 18:20:56 +01002490 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002491 if (p->initfunc == NULL) {
2492 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002493 "Cannot re-init internal module %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002494 name);
2495 return -1;
2496 }
2497 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +01002498 PySys_FormatStderr("import %U # builtin\n", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002499 mod = (*p->initfunc)();
2500 if (mod == 0)
2501 return -1;
Victor Stinner95872862011-03-07 18:20:56 +01002502 if (_PyImport_FixupExtensionObject(mod, name, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002503 return -1;
2504 /* FixupExtension has put the module into sys.modules,
2505 so we can release our own reference. */
2506 Py_DECREF(mod);
2507 return 1;
2508 }
2509 }
2510 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002511}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002512
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002513
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002514/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002515
Guido van Rossumcfd0a221996-06-17 17:06:34 +00002516static struct _frozen *
Victor Stinner53dc7352011-03-20 01:50:21 +01002517find_frozen(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002518{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002519 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002520
Victor Stinner53dc7352011-03-20 01:50:21 +01002521 if (name == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002522 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00002523
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002524 for (p = PyImport_FrozenModules; ; p++) {
2525 if (p->name == NULL)
2526 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01002527 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002528 break;
2529 }
2530 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002531}
2532
Guido van Rossum79f25d91997-04-29 20:08:16 +00002533static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002534get_frozen_object(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002535{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002536 struct _frozen *p = find_frozen(name);
2537 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002538
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002539 if (p == NULL) {
2540 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002541 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002542 name);
2543 return NULL;
2544 }
2545 if (p->code == NULL) {
2546 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002547 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002548 name);
2549 return NULL;
2550 }
2551 size = p->size;
2552 if (size < 0)
2553 size = -size;
2554 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002555}
2556
Brett Cannon8d110132009-03-15 02:20:16 +00002557static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002558is_frozen_package(PyObject *name)
Brett Cannon8d110132009-03-15 02:20:16 +00002559{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002560 struct _frozen *p = find_frozen(name);
2561 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00002562
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002563 if (p == NULL) {
2564 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002565 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002566 name);
2567 return NULL;
2568 }
Brett Cannon8d110132009-03-15 02:20:16 +00002569
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002570 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00002571
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002572 if (size < 0)
2573 Py_RETURN_TRUE;
2574 else
2575 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00002576}
2577
2578
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002579/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00002580 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002581 an exception set if the initialization failed.
2582 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002583
2584int
Victor Stinner53dc7352011-03-20 01:50:21 +01002585PyImport_ImportFrozenModuleObject(PyObject *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002586{
Victor Stinner53dc7352011-03-20 01:50:21 +01002587 struct _frozen *p;
2588 PyObject *co, *m, *path;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002589 int ispackage;
2590 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002591
Victor Stinner53dc7352011-03-20 01:50:21 +01002592 p = find_frozen(name);
2593
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002594 if (p == NULL)
2595 return 0;
2596 if (p->code == NULL) {
2597 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002598 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002599 name);
2600 return -1;
2601 }
2602 size = p->size;
2603 ispackage = (size < 0);
2604 if (ispackage)
2605 size = -size;
2606 if (Py_VerboseFlag)
Victor Stinner53dc7352011-03-20 01:50:21 +01002607 PySys_FormatStderr("import %U # frozen%s\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002608 name, ispackage ? " package" : "");
2609 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2610 if (co == NULL)
2611 return -1;
2612 if (!PyCode_Check(co)) {
2613 PyErr_Format(PyExc_TypeError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002614 "frozen object %R is not a code object",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002615 name);
2616 goto err_return;
2617 }
2618 if (ispackage) {
2619 /* Set __path__ to the package name */
Victor Stinner53dc7352011-03-20 01:50:21 +01002620 PyObject *d, *l;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002621 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01002622 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002623 if (m == NULL)
2624 goto err_return;
2625 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002626 l = PyList_New(1);
2627 if (l == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002628 goto err_return;
2629 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002630 Py_INCREF(name);
2631 PyList_SET_ITEM(l, 0, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002632 err = PyDict_SetItemString(d, "__path__", l);
2633 Py_DECREF(l);
2634 if (err != 0)
2635 goto err_return;
2636 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002637 path = PyUnicode_FromString("<frozen>");
2638 if (path == NULL)
2639 goto err_return;
2640 m = PyImport_ExecCodeModuleObject(name, co, path, NULL);
2641 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002642 if (m == NULL)
2643 goto err_return;
2644 Py_DECREF(co);
2645 Py_DECREF(m);
2646 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002647err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002648 Py_DECREF(co);
2649 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002650}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002651
Victor Stinner53dc7352011-03-20 01:50:21 +01002652int
2653PyImport_ImportFrozenModule(char *name)
2654{
2655 PyObject *nameobj;
2656 int ret;
2657 nameobj = PyUnicode_InternFromString(name);
2658 if (nameobj == NULL)
2659 return -1;
2660 ret = PyImport_ImportFrozenModuleObject(nameobj);
2661 Py_DECREF(nameobj);
2662 return ret;
2663}
2664
Guido van Rossum74e6a111994-08-29 12:54:38 +00002665
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002666/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002667 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002668
Guido van Rossum79f25d91997-04-29 20:08:16 +00002669PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002670PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002671{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002672 PyObject *pname;
2673 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002674
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002675 pname = PyUnicode_FromString(name);
2676 if (pname == NULL)
2677 return NULL;
2678 result = PyImport_Import(pname);
2679 Py_DECREF(pname);
2680 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002681}
2682
Christian Heimes072c0f12008-01-03 23:01:04 +00002683/* Import a module without blocking
2684 *
2685 * At first it tries to fetch the module from sys.modules. If the module was
2686 * never loaded before it loads it with PyImport_ImportModule() unless another
2687 * thread holds the import lock. In the latter case the function raises an
2688 * ImportError instead of blocking.
2689 *
2690 * Returns the module object with incremented ref count.
2691 */
2692PyObject *
2693PyImport_ImportModuleNoBlock(const char *name)
2694{
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002695 PyObject *nameobj, *modules, *result;
Victor Stinner0af03062011-09-02 00:11:43 +02002696#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002697 long me;
Victor Stinner0af03062011-09-02 00:11:43 +02002698#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002699
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002700 /* Try to get the module from sys.modules[name] */
2701 modules = PyImport_GetModuleDict();
2702 if (modules == NULL)
2703 return NULL;
Christian Heimes072c0f12008-01-03 23:01:04 +00002704
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002705 nameobj = PyUnicode_FromString(name);
2706 if (nameobj == NULL)
2707 return NULL;
2708 result = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002709 if (result != NULL) {
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002710 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002711 Py_INCREF(result);
2712 return result;
2713 }
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002714 PyErr_Clear();
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002715#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002716 /* check the import lock
2717 * me might be -1 but I ignore the error here, the lock function
2718 * takes care of the problem */
2719 me = PyThread_get_thread_ident();
2720 if (import_lock_thread == -1 || import_lock_thread == me) {
2721 /* no thread or me is holding the lock */
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002722 result = PyImport_Import(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002723 }
2724 else {
2725 PyErr_Format(PyExc_ImportError,
Victor Stinnerc24c8102011-03-13 22:38:06 -04002726 "Failed to import %R because the import lock"
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002727 "is held by another thread.",
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002728 nameobj);
2729 result = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002730 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002731#else
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002732 result = PyImport_Import(nameobj);
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002733#endif
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002734 Py_DECREF(nameobj);
2735 return result;
Christian Heimes072c0f12008-01-03 23:01:04 +00002736}
2737
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002738/* Forward declarations for helper routines */
Victor Stinner974389d2011-03-15 09:33:57 +01002739static PyObject *get_parent(PyObject *globals,
2740 PyObject **p_name,
2741 int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002742static PyObject *load_next(PyObject *mod, PyObject *altmod,
Victor Stinner974389d2011-03-15 09:33:57 +01002743 PyObject *inputname, PyObject **p_outputname,
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002744 Py_UCS4 *buf, Py_ssize_t *p_buflen,
Victor Stinner974389d2011-03-15 09:33:57 +01002745 Py_ssize_t bufsize);
2746static int mark_miss(PyObject *name);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002747static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Victor Stinner974389d2011-03-15 09:33:57 +01002748 PyObject *buf, int recursive);
2749static PyObject * import_submodule(PyObject *mod, PyObject *name,
2750 PyObject *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002751
2752/* The Magnum Opus of dotted-name import :-) */
2753
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002754static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01002755import_module_level(PyObject *name, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002756 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002757{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002758 Py_UCS4 buf[MAXPATHLEN+1];
Victor Stinner974389d2011-03-15 09:33:57 +01002759 Py_ssize_t buflen;
2760 Py_ssize_t bufsize = MAXPATHLEN+1;
2761 PyObject *parent, *head, *next, *tail, *inputname, *outputname;
2762 PyObject *parent_name, *ensure_name;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002763 Py_ssize_t sep, altsep;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002764
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002765 if (PyUnicode_READY(name))
2766 return NULL;
Victor Stinner974389d2011-03-15 09:33:57 +01002767
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002768 sep = PyUnicode_FindChar(name, SEP, 0, PyUnicode_GET_LENGTH(name), 1);
2769 if (sep == -2)
2770 return NULL;
Victor Stinner974389d2011-03-15 09:33:57 +01002771#ifdef ALTSEP
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002772 altsep = PyUnicode_FindChar(name, ALTSEP, 0, PyUnicode_GET_LENGTH(name), 1);
2773 if (altsep == -2)
2774 return NULL;
2775#else
2776 altsep = -1;
Christian Heimes454f37b2008-01-10 00:10:02 +00002777#endif
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002778 if (sep != -1 || altsep != -1)
2779 {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002780 PyErr_SetString(PyExc_ImportError,
2781 "Import by filename is not supported.");
2782 return NULL;
2783 }
Christian Heimes454f37b2008-01-10 00:10:02 +00002784
Victor Stinner974389d2011-03-15 09:33:57 +01002785 parent = get_parent(globals, &parent_name, level);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002786 if (parent == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002787 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002788 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002789
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002790 if (PyUnicode_READY(parent_name))
2791 return NULL;
2792 buflen = PyUnicode_GET_LENGTH(parent_name);
Georg Brandl4cb0de22011-09-28 21:49:49 +02002793 if (!PyUnicode_AsUCS4(parent_name, buf, Py_ARRAY_LENGTH(buf), 1)) {
Victor Stinner974389d2011-03-15 09:33:57 +01002794 Py_DECREF(parent_name);
2795 PyErr_SetString(PyExc_ValueError,
2796 "Module name too long");
2797 return NULL;
2798 }
Victor Stinner974389d2011-03-15 09:33:57 +01002799 Py_DECREF(parent_name);
2800
2801 head = load_next(parent, level < 0 ? Py_None : parent, name, &outputname,
2802 buf, &buflen, bufsize);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002803 if (head == NULL)
2804 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002805
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002806 tail = head;
2807 Py_INCREF(tail);
Victor Stinner974389d2011-03-15 09:33:57 +01002808
2809 if (outputname != NULL) {
2810 while (1) {
2811 inputname = outputname;
2812 next = load_next(tail, tail, inputname, &outputname,
2813 buf, &buflen, bufsize);
2814 Py_DECREF(tail);
2815 Py_DECREF(inputname);
2816 if (next == NULL) {
2817 Py_DECREF(head);
2818 return NULL;
2819 }
2820 tail = next;
2821
2822 if (outputname == NULL) {
2823 break;
2824 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002825 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002826 }
2827 if (tail == Py_None) {
2828 /* If tail is Py_None, both get_parent and load_next found
2829 an empty module name: someone called __import__("") or
2830 doctored faulty bytecode */
2831 Py_DECREF(tail);
2832 Py_DECREF(head);
Victor Stinner974389d2011-03-15 09:33:57 +01002833 PyErr_SetString(PyExc_ValueError, "Empty module name");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002834 return NULL;
2835 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002836
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002837 if (fromlist != NULL) {
2838 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2839 fromlist = NULL;
2840 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002841
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002842 if (fromlist == NULL) {
2843 Py_DECREF(tail);
2844 return head;
2845 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002846
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002847 Py_DECREF(head);
Victor Stinner974389d2011-03-15 09:33:57 +01002848
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002849 ensure_name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
2850 buf, Py_UCS4_strlen(buf));
Victor Stinner974389d2011-03-15 09:33:57 +01002851 if (ensure_name == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002852 Py_DECREF(tail);
2853 return NULL;
2854 }
Victor Stinner974389d2011-03-15 09:33:57 +01002855 if (!ensure_fromlist(tail, fromlist, ensure_name, 0)) {
2856 Py_DECREF(tail);
2857 Py_DECREF(ensure_name);
2858 return NULL;
2859 }
2860 Py_DECREF(ensure_name);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002861
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002862 return tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002863}
2864
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002865PyObject *
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002866PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
2867 PyObject *locals, PyObject *fromlist,
2868 int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002869{
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002870 PyObject *mod;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002871 _PyImport_AcquireLock();
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002872 mod = import_module_level(name, globals, locals, fromlist, level);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002873 if (_PyImport_ReleaseLock() < 0) {
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002874 Py_XDECREF(mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002875 PyErr_SetString(PyExc_RuntimeError,
2876 "not holding the import lock");
2877 return NULL;
2878 }
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002879 return mod;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002880}
2881
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002882PyObject *
Benjamin Peterson04778a82011-05-25 09:29:00 -05002883PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002884 PyObject *fromlist, int level)
2885{
2886 PyObject *nameobj, *mod;
2887 nameobj = PyUnicode_FromString(name);
2888 if (nameobj == NULL)
2889 return NULL;
2890 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
2891 fromlist, level);
2892 Py_DECREF(nameobj);
2893 return mod;
2894}
2895
2896
Fred Drake87590902004-05-28 20:21:36 +00002897/* Return the package that an import is being performed in. If globals comes
2898 from the module foo.bar.bat (not itself a package), this returns the
2899 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002900 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002901
Victor Stinner974389d2011-03-15 09:33:57 +01002902 The name of the returned package is returned in *p_name.
Fred Drake87590902004-05-28 20:21:36 +00002903
2904 If globals doesn't come from a package or a module in a package, or a
2905 corresponding entry is not found in sys.modules, Py_None is returned.
2906*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002907static PyObject *
Victor Stinner9599de52011-03-13 22:38:38 -04002908get_parent(PyObject *globals, PyObject **p_name, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002909{
Victor Stinner974389d2011-03-15 09:33:57 +01002910 PyObject *nameobj;
2911
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002912 static PyObject *namestr = NULL;
2913 static PyObject *pathstr = NULL;
2914 static PyObject *pkgstr = NULL;
2915 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2916 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002917
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002918 if (globals == NULL || !PyDict_Check(globals) || !level)
Victor Stinner974389d2011-03-15 09:33:57 +01002919 goto return_none;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002920
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002921 if (namestr == NULL) {
2922 namestr = PyUnicode_InternFromString("__name__");
2923 if (namestr == NULL)
2924 return NULL;
2925 }
2926 if (pathstr == NULL) {
2927 pathstr = PyUnicode_InternFromString("__path__");
2928 if (pathstr == NULL)
2929 return NULL;
2930 }
2931 if (pkgstr == NULL) {
2932 pkgstr = PyUnicode_InternFromString("__package__");
2933 if (pkgstr == NULL)
2934 return NULL;
2935 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002936
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002937 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002938
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002939 if ((pkgname != NULL) && (pkgname != Py_None)) {
2940 /* __package__ is set, so use it */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002941 if (!PyUnicode_Check(pkgname)) {
2942 PyErr_SetString(PyExc_ValueError,
2943 "__package__ set to non-string");
2944 return NULL;
2945 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002946 if (PyUnicode_GET_LENGTH(pkgname) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002947 if (level > 0) {
2948 PyErr_SetString(PyExc_ValueError,
2949 "Attempted relative import in non-package");
2950 return NULL;
2951 }
Victor Stinner974389d2011-03-15 09:33:57 +01002952 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002953 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002954 Py_INCREF(pkgname);
2955 nameobj = pkgname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002956 } else {
2957 /* __package__ not set, so figure it out and set it */
2958 modname = PyDict_GetItem(globals, namestr);
2959 if (modname == NULL || !PyUnicode_Check(modname))
Victor Stinner974389d2011-03-15 09:33:57 +01002960 goto return_none;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00002961
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002962 modpath = PyDict_GetItem(globals, pathstr);
2963 if (modpath != NULL) {
2964 /* __path__ is set, so modname is already the package name */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002965 int error;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002966
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002967 error = PyDict_SetItem(globals, pkgstr, modname);
2968 if (error) {
2969 PyErr_SetString(PyExc_ValueError,
2970 "Could not set __package__");
2971 return NULL;
2972 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002973 Py_INCREF(modname);
2974 nameobj = modname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002975 } else {
2976 /* Normal module, so work out the package name if any */
Victor Stinner974389d2011-03-15 09:33:57 +01002977 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002978 len = PyUnicode_FindChar(modname, '.',
2979 0, PyUnicode_GET_LENGTH(modname), -1);
2980 if (len == -2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002981 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002982 if (len < 0) {
2983 if (level > 0) {
2984 PyErr_SetString(PyExc_ValueError,
2985 "Attempted relative import in non-package");
2986 return NULL;
2987 }
2988 if (PyDict_SetItem(globals, pkgstr, Py_None)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002989 PyErr_SetString(PyExc_ValueError,
2990 "Could not set __package__");
2991 return NULL;
2992 }
Victor Stinner974389d2011-03-15 09:33:57 +01002993 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002994 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002995 pkgname = PyUnicode_Substring(modname, 0, len);
2996 if (pkgname == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002997 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002998 if (PyDict_SetItem(globals, pkgstr, pkgname)) {
2999 Py_DECREF(pkgname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003000 PyErr_SetString(PyExc_ValueError,
3001 "Could not set __package__");
3002 return NULL;
3003 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003004 nameobj = pkgname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003005 }
3006 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003007 if (level > 1) {
3008 Py_ssize_t dot, end = PyUnicode_GET_LENGTH(nameobj);
3009 PyObject *newname;
3010 while (--level > 0) {
3011 dot = PyUnicode_FindChar(nameobj, '.', 0, end, -1);
3012 if (dot == -2) {
3013 Py_DECREF(nameobj);
3014 return NULL;
3015 }
3016 if (dot < 0) {
3017 Py_DECREF(nameobj);
3018 PyErr_SetString(PyExc_ValueError,
3019 "Attempted relative import beyond "
3020 "toplevel package");
3021 return NULL;
3022 }
3023 end = dot;
3024 }
3025 newname = PyUnicode_Substring(nameobj, 0, end);
3026 Py_DECREF(nameobj);
3027 if (newname == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003028 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003029 nameobj = newname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003030 }
Victor Stinner974389d2011-03-15 09:33:57 +01003031
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003032 modules = PyImport_GetModuleDict();
Victor Stinner974389d2011-03-15 09:33:57 +01003033 parent = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003034 if (parent == NULL) {
Victor Stinner974389d2011-03-15 09:33:57 +01003035 int err;
3036
3037 if (orig_level >= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003038 PyErr_Format(PyExc_SystemError,
Victor Stinner974389d2011-03-15 09:33:57 +01003039 "Parent module %R not loaded, "
3040 "cannot perform relative import", nameobj);
3041 Py_DECREF(nameobj);
3042 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003043 }
Victor Stinner974389d2011-03-15 09:33:57 +01003044
3045 err = PyErr_WarnFormat(
3046 PyExc_RuntimeWarning, 1,
3047 "Parent module %R not found while handling absolute import",
3048 nameobj);
3049 Py_DECREF(nameobj);
3050 if (err)
3051 return NULL;
3052
3053 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003054 }
Victor Stinner974389d2011-03-15 09:33:57 +01003055 *p_name = nameobj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003056 return parent;
3057 /* We expect, but can't guarantee, if parent != None, that:
Victor Stinner974389d2011-03-15 09:33:57 +01003058 - parent.__name__ == name
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003059 - parent.__dict__ is globals
3060 If this is violated... Who cares? */
Victor Stinner974389d2011-03-15 09:33:57 +01003061
3062return_none:
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003063 nameobj = PyUnicode_New(0, 0);
Victor Stinner974389d2011-03-15 09:33:57 +01003064 if (nameobj == NULL)
3065 return NULL;
3066 *p_name = nameobj;
3067 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003068}
3069
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003070/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003071static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01003072load_next(PyObject *mod, PyObject *altmod,
3073 PyObject *inputname, PyObject **p_outputname,
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003074 Py_UCS4 *buf, Py_ssize_t *p_buflen, Py_ssize_t bufsize)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003075{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003076 Py_UCS4 *dot;
Victor Stinner974389d2011-03-15 09:33:57 +01003077 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003078 Py_UCS4 *p;
Victor Stinner974389d2011-03-15 09:33:57 +01003079 PyObject *fullname, *name, *result, *mark_name;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003080 Py_UCS4 *nameuni;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003081
Victor Stinner974389d2011-03-15 09:33:57 +01003082 *p_outputname = NULL;
3083
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003084 if (PyUnicode_GET_LENGTH(inputname) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003085 /* completely empty module name should only happen in
3086 'from . import' (or '__import__("")')*/
3087 Py_INCREF(mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003088 return mod;
3089 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00003090
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003091 nameuni = PyUnicode_AsUCS4Copy(inputname);
Victor Stinner974389d2011-03-15 09:33:57 +01003092 if (nameuni == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003093 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003094
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003095 dot = Py_UCS4_strchr(nameuni, '.');
Victor Stinner974389d2011-03-15 09:33:57 +01003096 if (dot != NULL) {
3097 len = dot - nameuni;
3098 if (len == 0) {
3099 PyErr_SetString(PyExc_ValueError,
3100 "Empty module name");
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003101 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003102 }
3103 }
3104 else
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003105 len = PyUnicode_GET_LENGTH(inputname);
Victor Stinner974389d2011-03-15 09:33:57 +01003106
3107 if (*p_buflen+len+1 >= bufsize) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003108 PyErr_SetString(PyExc_ValueError,
3109 "Module name too long");
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003110 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003111 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003112
Victor Stinner974389d2011-03-15 09:33:57 +01003113 p = buf + *p_buflen;
3114 if (p != buf) {
3115 *p++ = '.';
3116 *p_buflen += 1;
3117 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003118 Py_UCS4_strncpy(p, nameuni, len);
Victor Stinner974389d2011-03-15 09:33:57 +01003119 p[len] = '\0';
3120 *p_buflen += len;
3121
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003122 fullname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3123 buf, *p_buflen);
Victor Stinner974389d2011-03-15 09:33:57 +01003124 if (fullname == NULL)
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003125 goto error;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003126 name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3127 p, len);
Victor Stinner974389d2011-03-15 09:33:57 +01003128 if (name == NULL) {
3129 Py_DECREF(fullname);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003130 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003131 }
3132 result = import_submodule(mod, name, fullname);
3133 Py_DECREF(fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003134 if (result == Py_None && altmod != mod) {
3135 Py_DECREF(result);
3136 /* Here, altmod must be None and mod must not be None */
Victor Stinner974389d2011-03-15 09:33:57 +01003137 result = import_submodule(altmod, name, name);
3138 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003139 if (result != NULL && result != Py_None) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003140 mark_name = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3141 buf, *p_buflen);
Victor Stinner974389d2011-03-15 09:33:57 +01003142 if (mark_name == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003143 Py_DECREF(result);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003144 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003145 }
Victor Stinner974389d2011-03-15 09:33:57 +01003146 if (mark_miss(mark_name) != 0) {
3147 Py_DECREF(result);
3148 Py_DECREF(mark_name);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003149 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003150 }
3151 Py_DECREF(mark_name);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003152 Py_UCS4_strncpy(buf, nameuni, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003153 buf[len] = '\0';
3154 *p_buflen = len;
3155 }
3156 }
Victor Stinner974389d2011-03-15 09:33:57 +01003157 else
3158 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003159 if (result == NULL)
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003160 goto error;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003161
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003162 if (result == Py_None) {
3163 Py_DECREF(result);
3164 PyErr_Format(PyExc_ImportError,
Victor Stinner974389d2011-03-15 09:33:57 +01003165 "No module named %R", inputname);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003166 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003167 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003168
Victor Stinner974389d2011-03-15 09:33:57 +01003169 if (dot != NULL) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003170 *p_outputname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3171 dot+1, Py_UCS4_strlen(dot+1));
Victor Stinner974389d2011-03-15 09:33:57 +01003172 if (*p_outputname == NULL) {
3173 Py_DECREF(result);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003174 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003175 }
3176 }
3177
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003178 PyMem_Free(nameuni);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003179 return result;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003180
3181error:
3182 PyMem_Free(nameuni);
3183 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003184}
3185
3186static int
Victor Stinner974389d2011-03-15 09:33:57 +01003187mark_miss(PyObject *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00003188{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003189 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner974389d2011-03-15 09:33:57 +01003190 return PyDict_SetItem(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00003191}
3192
3193static int
Victor Stinner974389d2011-03-15 09:33:57 +01003194ensure_fromlist(PyObject *mod, PyObject *fromlist, PyObject *name,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003195 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003196{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003197 int i;
Victor Stinner974389d2011-03-15 09:33:57 +01003198 PyObject *fullname;
3199 Py_ssize_t fromlist_len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003200
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003201 if (!_PyObject_HasAttrId(mod, &PyId___path__))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003202 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003203
Victor Stinner974389d2011-03-15 09:33:57 +01003204 fromlist_len = PySequence_Size(fromlist);
3205
3206 for (i = 0; i < fromlist_len; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003207 PyObject *item = PySequence_GetItem(fromlist, i);
3208 int hasit;
Victor Stinner974389d2011-03-15 09:33:57 +01003209 if (item == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003210 return 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003211 if (!PyUnicode_Check(item)) {
3212 PyErr_SetString(PyExc_TypeError,
3213 "Item in ``from list'' not a string");
3214 Py_DECREF(item);
3215 return 0;
3216 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003217 if (PyUnicode_READ_CHAR(item, 0) == '*') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003218 PyObject *all;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02003219 _Py_IDENTIFIER(__all__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003220 Py_DECREF(item);
3221 /* See if the package defines __all__ */
3222 if (recursive)
3223 continue; /* Avoid endless recursion */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003224 all = _PyObject_GetAttrId(mod, &PyId___all__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003225 if (all == NULL)
3226 PyErr_Clear();
3227 else {
Victor Stinner974389d2011-03-15 09:33:57 +01003228 int ret = ensure_fromlist(mod, all, name, 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003229 Py_DECREF(all);
3230 if (!ret)
3231 return 0;
3232 }
3233 continue;
3234 }
3235 hasit = PyObject_HasAttr(mod, item);
3236 if (!hasit) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003237 PyObject *submod;
Victor Stinner974389d2011-03-15 09:33:57 +01003238 fullname = PyUnicode_FromFormat("%U.%U", name, item);
3239 if (fullname != NULL) {
3240 submod = import_submodule(mod, item, fullname);
3241 Py_DECREF(fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003242 }
Victor Stinner974389d2011-03-15 09:33:57 +01003243 else
3244 submod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003245 Py_XDECREF(submod);
3246 if (submod == NULL) {
3247 Py_DECREF(item);
3248 return 0;
3249 }
3250 }
3251 Py_DECREF(item);
3252 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003253
Victor Stinner974389d2011-03-15 09:33:57 +01003254 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003255}
3256
Neil Schemenauer00b09662003-06-16 21:03:07 +00003257static int
Victor Stinner974389d2011-03-15 09:33:57 +01003258add_submodule(PyObject *mod, PyObject *submod, PyObject *fullname,
3259 PyObject *subname, PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00003260{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003261 if (mod == Py_None)
3262 return 1;
3263 /* Irrespective of the success of this load, make a
3264 reference to it in the parent package module. A copy gets
3265 saved in the modules dictionary under the full name, so get a
3266 reference from there, if need be. (The exception is when the
3267 load failed with a SyntaxError -- then there's no trace in
3268 sys.modules. In that case, of course, do nothing extra.) */
3269 if (submod == NULL) {
Victor Stinner974389d2011-03-15 09:33:57 +01003270 submod = PyDict_GetItem(modules, fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003271 if (submod == NULL)
3272 return 1;
3273 }
3274 if (PyModule_Check(mod)) {
3275 /* We can't use setattr here since it can give a
3276 * spurious warning if the submodule name shadows a
3277 * builtin name */
3278 PyObject *dict = PyModule_GetDict(mod);
3279 if (!dict)
3280 return 0;
Victor Stinner974389d2011-03-15 09:33:57 +01003281 if (PyDict_SetItem(dict, subname, submod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003282 return 0;
3283 }
3284 else {
Victor Stinner974389d2011-03-15 09:33:57 +01003285 if (PyObject_SetAttr(mod, subname, submod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003286 return 0;
3287 }
3288 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00003289}
3290
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003291static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01003292import_submodule(PyObject *mod, PyObject *subname, PyObject *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003293{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003294 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner533d7832011-03-14 13:22:54 -04003295 PyObject *m = NULL, *bufobj, *path_list, *loader;
Victor Stinner9599de52011-03-13 22:38:38 -04003296 struct filedescr *fdp;
3297 FILE *fp;
Guido van Rossum74e6a111994-08-29 12:54:38 +00003298
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003299 /* Require:
3300 if mod == None: subname == fullname
3301 else: mod.__name__ + "." + subname == fullname
3302 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003303
Victor Stinner974389d2011-03-15 09:33:57 +01003304 if ((m = PyDict_GetItem(modules, fullname)) != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003305 Py_INCREF(m);
Victor Stinner9599de52011-03-13 22:38:38 -04003306 return m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003307 }
Victor Stinner9599de52011-03-13 22:38:38 -04003308
3309 if (mod == Py_None)
Victor Stinner533d7832011-03-14 13:22:54 -04003310 path_list = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003311 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003312 path_list = _PyObject_GetAttrId(mod, &PyId___path__);
Victor Stinner533d7832011-03-14 13:22:54 -04003313 if (path_list == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003314 PyErr_Clear();
3315 Py_INCREF(Py_None);
3316 return Py_None;
3317 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003318 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003319
Victor Stinner533d7832011-03-14 13:22:54 -04003320 fdp = find_module(fullname, subname, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003321 &bufobj, &fp, &loader);
Victor Stinner533d7832011-03-14 13:22:54 -04003322 Py_XDECREF(path_list);
Victor Stinner9599de52011-03-13 22:38:38 -04003323 if (fdp == NULL) {
3324 if (!PyErr_ExceptionMatches(PyExc_ImportError))
3325 return NULL;
3326 PyErr_Clear();
3327 Py_INCREF(Py_None);
3328 return Py_None;
3329 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003330 m = load_module(fullname, fp, bufobj, fdp->type, loader);
3331 Py_XDECREF(bufobj);
Victor Stinner9599de52011-03-13 22:38:38 -04003332 Py_XDECREF(loader);
3333 if (fp)
3334 fclose(fp);
3335 if (m == NULL)
3336 return NULL;
3337 if (!add_submodule(mod, m, fullname, subname, modules)) {
3338 Py_XDECREF(m);
3339 return NULL;
3340 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003341 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00003342}
3343
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003344
3345/* Re-import a module of any kind and return its module object, WITH
3346 INCREMENTED REFERENCE COUNT */
3347
Guido van Rossum79f25d91997-04-29 20:08:16 +00003348PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003349PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003350{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003351 PyInterpreterState *interp = PyThreadState_Get()->interp;
3352 PyObject *modules_reloading = interp->modules_reloading;
3353 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner533d7832011-03-14 13:22:54 -04003354 PyObject *path_list = NULL, *loader = NULL, *existing_m = NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003355 PyObject *nameobj, *bufobj, *subnameobj;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003356 Py_UCS4 *name = NULL, *subname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003357 struct filedescr *fdp;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003358 FILE *fp = NULL;
3359 PyObject *newm = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00003360
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003361 if (modules_reloading == NULL) {
3362 Py_FatalError("PyImport_ReloadModule: "
3363 "no modules_reloading dictionary!");
3364 return NULL;
3365 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003366
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003367 if (m == NULL || !PyModule_Check(m)) {
3368 PyErr_SetString(PyExc_TypeError,
3369 "reload() argument must be module");
3370 return NULL;
3371 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003372 nameobj = PyModule_GetNameObject(m);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003373 if (nameobj == NULL || PyUnicode_READY(nameobj) == -1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003374 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003375 if (m != PyDict_GetItem(modules, nameobj)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003376 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003377 "reload(): module %R not in sys.modules",
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003378 nameobj);
3379 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003380 return NULL;
3381 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003382 existing_m = PyDict_GetItem(modules_reloading, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003383 if (existing_m != NULL) {
3384 /* Due to a recursive reload, this module is already
3385 being reloaded. */
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003386 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003387 Py_INCREF(existing_m);
3388 return existing_m;
3389 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003390 if (PyDict_SetItem(modules_reloading, nameobj, m) < 0) {
3391 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003392 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003393 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00003394
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003395 name = PyUnicode_AsUCS4Copy(nameobj);
3396 if (!name) {
3397 Py_DECREF(nameobj);
3398 return NULL;
3399 }
3400 subname = Py_UCS4_strrchr(name, '.');
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003401 if (subname == NULL) {
3402 Py_INCREF(nameobj);
3403 subnameobj = nameobj;
3404 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003405 else {
3406 PyObject *parentname, *parent;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003407 Py_ssize_t len;
3408 len = subname - name;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003409 parentname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3410 name, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003411 if (parentname == NULL) {
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003412 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003413 }
3414 parent = PyDict_GetItem(modules, parentname);
3415 if (parent == NULL) {
3416 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003417 "reload(): parent %R not in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003418 parentname);
3419 Py_DECREF(parentname);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003420 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003421 }
3422 Py_DECREF(parentname);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003423 path_list = _PyObject_GetAttrId(parent, &PyId___path__);
Victor Stinner533d7832011-03-14 13:22:54 -04003424 if (path_list == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003425 PyErr_Clear();
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003426 subname++;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003427 len = PyUnicode_GET_LENGTH(nameobj) - (len + 1);
3428 subnameobj = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
3429 subname, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003430 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003431 if (subnameobj == NULL)
3432 goto error;
Victor Stinner533d7832011-03-14 13:22:54 -04003433 fdp = find_module(nameobj, subnameobj, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003434 &bufobj, &fp, &loader);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003435 Py_DECREF(subnameobj);
Victor Stinner533d7832011-03-14 13:22:54 -04003436 Py_XDECREF(path_list);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003437
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003438 if (fdp == NULL) {
3439 Py_XDECREF(loader);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003440 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003441 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003442
Victor Stinner2fd76e42011-03-14 15:19:39 -04003443 newm = load_module(nameobj, fp, bufobj, fdp->type, loader);
3444 Py_XDECREF(bufobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003445 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003447 if (fp)
3448 fclose(fp);
3449 if (newm == NULL) {
3450 /* load_module probably removed name from modules because of
3451 * the error. Put back the original module object. We're
3452 * going to return NULL in this case regardless of whether
3453 * replacing name succeeds, so the return value is ignored.
3454 */
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003455 PyDict_SetItem(modules, nameobj, m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003456 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003457
3458error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003459 imp_modules_reloading_clear();
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003460 Py_DECREF(nameobj);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003461 PyMem_Free(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003462 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003463}
3464
3465
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003466/* Higher-level import emulator which emulates the "import" statement
3467 more accurately -- it invokes the __import__() function from the
3468 builtins of the current globals. This means that the import is
3469 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00003470 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00003471 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00003472 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00003473 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003474
3475PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003476PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003477{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003478 static PyObject *silly_list = NULL;
3479 static PyObject *builtins_str = NULL;
3480 static PyObject *import_str = NULL;
3481 PyObject *globals = NULL;
3482 PyObject *import = NULL;
3483 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003484 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003485 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003486
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003487 /* Initialize constant string objects */
3488 if (silly_list == NULL) {
3489 import_str = PyUnicode_InternFromString("__import__");
3490 if (import_str == NULL)
3491 return NULL;
3492 builtins_str = PyUnicode_InternFromString("__builtins__");
3493 if (builtins_str == NULL)
3494 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003495 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003496 if (silly_list == NULL)
3497 return NULL;
3498 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003499
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003500 /* Get the builtins from current globals */
3501 globals = PyEval_GetGlobals();
3502 if (globals != NULL) {
3503 Py_INCREF(globals);
3504 builtins = PyObject_GetItem(globals, builtins_str);
3505 if (builtins == NULL)
3506 goto err;
3507 }
3508 else {
3509 /* No globals -- use standard builtins, and fake globals */
3510 builtins = PyImport_ImportModuleLevel("builtins",
3511 NULL, NULL, NULL, 0);
3512 if (builtins == NULL)
3513 return NULL;
3514 globals = Py_BuildValue("{OO}", builtins_str, builtins);
3515 if (globals == NULL)
3516 goto err;
3517 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003518
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003519 /* Get the __import__ function from the builtins */
3520 if (PyDict_Check(builtins)) {
3521 import = PyObject_GetItem(builtins, import_str);
3522 if (import == NULL)
3523 PyErr_SetObject(PyExc_KeyError, import_str);
3524 }
3525 else
3526 import = PyObject_GetAttr(builtins, import_str);
3527 if (import == NULL)
3528 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003529
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003530 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00003531 Always use absolute import here.
3532 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003533 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
3534 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00003535 if (r == NULL)
3536 goto err;
3537 Py_DECREF(r);
3538
3539 modules = PyImport_GetModuleDict();
3540 r = PyDict_GetItem(modules, module_name);
3541 if (r != NULL)
3542 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003543
3544 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003545 Py_XDECREF(globals);
3546 Py_XDECREF(builtins);
3547 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00003548
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003549 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003550}
3551
3552
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003553/* Module 'imp' provides Python access to the primitives used for
3554 importing modules.
3555*/
3556
Guido van Rossum79f25d91997-04-29 20:08:16 +00003557static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00003558imp_make_magic(long magic)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003559{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003560 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003561
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003562 buf[0] = (char) ((magic >> 0) & 0xff);
3563 buf[1] = (char) ((magic >> 8) & 0xff);
3564 buf[2] = (char) ((magic >> 16) & 0xff);
3565 buf[3] = (char) ((magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003566
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003567 return PyBytes_FromStringAndSize(buf, 4);
Victor Stinner3e2b7172010-11-09 09:32:19 +00003568}
Barry Warsaw28a691b2010-04-17 00:19:56 +00003569
3570static PyObject *
3571imp_get_magic(PyObject *self, PyObject *noargs)
3572{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003573 return imp_make_magic(pyc_magic);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003574}
3575
3576static PyObject *
3577imp_get_tag(PyObject *self, PyObject *noargs)
3578{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003579 return PyUnicode_FromString(pyc_tag);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003580}
3581
Guido van Rossum79f25d91997-04-29 20:08:16 +00003582static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003583imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003584{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003585 PyObject *list;
3586 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003587
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003588 list = PyList_New(0);
3589 if (list == NULL)
3590 return NULL;
3591 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
3592 PyObject *item = Py_BuildValue("ssi",
3593 fdp->suffix, fdp->mode, fdp->type);
3594 if (item == NULL) {
3595 Py_DECREF(list);
3596 return NULL;
3597 }
3598 if (PyList_Append(list, item) < 0) {
3599 Py_DECREF(list);
3600 Py_DECREF(item);
3601 return NULL;
3602 }
3603 Py_DECREF(item);
3604 }
3605 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003606}
3607
Guido van Rossum79f25d91997-04-29 20:08:16 +00003608static PyObject *
Victor Stinner533d7832011-03-14 13:22:54 -04003609call_find_module(PyObject *name, PyObject *path_list)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003610{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003611 extern int fclose(FILE *);
3612 PyObject *fob, *ret;
3613 PyObject *pathobj;
3614 struct filedescr *fdp;
Victor Stinner7d8b77c2011-03-12 08:45:02 -05003615 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003616 int fd = -1;
3617 char *found_encoding = NULL;
3618 char *encoding = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003619
Victor Stinner533d7832011-03-14 13:22:54 -04003620 if (path_list == Py_None)
3621 path_list = NULL;
3622 fdp = find_module(NULL, name, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003623 &pathobj, &fp, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003624 if (fdp == NULL)
3625 return NULL;
3626 if (fp != NULL) {
3627 fd = fileno(fp);
3628 if (fd != -1)
3629 fd = dup(fd);
3630 fclose(fp);
Victor Stinnerd417d012011-06-20 15:16:55 +02003631 if (fd == -1) {
3632 PyErr_SetFromErrno(PyExc_OSError);
3633 return NULL;
3634 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003635 fp = NULL;
3636 }
3637 if (fd != -1) {
3638 if (strchr(fdp->mode, 'b') == NULL) {
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003639 /* PyTokenizer_FindEncodingFilename() returns PyMem_MALLOC'ed
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003640 memory. */
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003641 found_encoding = PyTokenizer_FindEncodingFilename(fd, pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003642 lseek(fd, 0, 0); /* Reset position */
Victor Stinner2fd76e42011-03-14 15:19:39 -04003643 if (found_encoding == NULL && PyErr_Occurred()) {
3644 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003645 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04003646 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003647 encoding = (found_encoding != NULL) ? found_encoding :
3648 (char*)PyUnicode_GetDefaultEncoding();
3649 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003650 fob = PyFile_FromFd(fd, NULL, fdp->mode, -1,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003651 (char*)encoding, NULL, NULL, 1);
3652 if (fob == NULL) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04003653 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003654 close(fd);
3655 PyMem_FREE(found_encoding);
3656 return NULL;
3657 }
3658 }
3659 else {
3660 fob = Py_None;
3661 Py_INCREF(fob);
3662 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003663 if (pathobj == NULL) {
3664 Py_INCREF(Py_None);
3665 pathobj = Py_None;
3666 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003667 ret = Py_BuildValue("NN(ssi)",
3668 fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
3669 PyMem_FREE(found_encoding);
Brett Cannon3bb42d92007-10-20 03:43:15 +00003670
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003671 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003672}
3673
Guido van Rossum79f25d91997-04-29 20:08:16 +00003674static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003675imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003676{
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003677 PyObject *name, *path_list = NULL;
3678 if (!PyArg_ParseTuple(args, "U|O:find_module",
3679 &name, &path_list))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003680 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003681 return call_find_module(name, path_list);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003682}
3683
3684static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003685imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003686{
Victor Stinner95872862011-03-07 18:20:56 +01003687 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003688 int ret;
3689 PyObject *m;
Victor Stinner95872862011-03-07 18:20:56 +01003690 if (!PyArg_ParseTuple(args, "U:init_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003691 return NULL;
3692 ret = init_builtin(name);
3693 if (ret < 0)
3694 return NULL;
3695 if (ret == 0) {
3696 Py_INCREF(Py_None);
3697 return Py_None;
3698 }
Victor Stinner95872862011-03-07 18:20:56 +01003699 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003700 Py_XINCREF(m);
3701 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003702}
3703
Guido van Rossum79f25d91997-04-29 20:08:16 +00003704static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003705imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003706{
Victor Stinner53dc7352011-03-20 01:50:21 +01003707 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003708 int ret;
3709 PyObject *m;
Victor Stinner53dc7352011-03-20 01:50:21 +01003710 if (!PyArg_ParseTuple(args, "U:init_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003711 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01003712 ret = PyImport_ImportFrozenModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003713 if (ret < 0)
3714 return NULL;
3715 if (ret == 0) {
3716 Py_INCREF(Py_None);
3717 return Py_None;
3718 }
Victor Stinner53dc7352011-03-20 01:50:21 +01003719 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003720 Py_XINCREF(m);
3721 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003722}
3723
Guido van Rossum79f25d91997-04-29 20:08:16 +00003724static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003725imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003726{
Victor Stinner53dc7352011-03-20 01:50:21 +01003727 PyObject *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00003728
Victor Stinner53dc7352011-03-20 01:50:21 +01003729 if (!PyArg_ParseTuple(args, "U:get_frozen_object", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003730 return NULL;
3731 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003732}
3733
Guido van Rossum79f25d91997-04-29 20:08:16 +00003734static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00003735imp_is_frozen_package(PyObject *self, PyObject *args)
3736{
Victor Stinner53dc7352011-03-20 01:50:21 +01003737 PyObject *name;
Brett Cannon8d110132009-03-15 02:20:16 +00003738
Victor Stinner53dc7352011-03-20 01:50:21 +01003739 if (!PyArg_ParseTuple(args, "U:is_frozen_package", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003740 return NULL;
3741 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00003742}
3743
3744static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003745imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003746{
Victor Stinner95872862011-03-07 18:20:56 +01003747 PyObject *name;
3748 if (!PyArg_ParseTuple(args, "U:is_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003749 return NULL;
3750 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003751}
3752
Guido van Rossum79f25d91997-04-29 20:08:16 +00003753static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003754imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003755{
Victor Stinner53dc7352011-03-20 01:50:21 +01003756 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003757 struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01003758 if (!PyArg_ParseTuple(args, "U:is_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003759 return NULL;
3760 p = find_frozen(name);
3761 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003762}
3763
3764static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01003765get_file(PyObject *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003766{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003767 FILE *fp;
3768 if (mode[0] == 'U')
3769 mode = "r" PY_STDIOTEXTMODE;
3770 if (fob == NULL) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003771 fp = _Py_fopen(pathname, mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003772 }
3773 else {
3774 int fd = PyObject_AsFileDescriptor(fob);
3775 if (fd == -1)
3776 return NULL;
3777 if (!_PyVerify_fd(fd))
3778 goto error;
3779 /* the FILE struct gets a new fd, so that it can be closed
3780 * independently of the file descriptor given
3781 */
3782 fd = dup(fd);
3783 if (fd == -1)
3784 goto error;
3785 fp = fdopen(fd, mode);
3786 }
3787 if (fp)
3788 return fp;
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003789error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003790 PyErr_SetFromErrno(PyExc_IOError);
3791 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003792}
3793
Guido van Rossum79f25d91997-04-29 20:08:16 +00003794static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003795imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003796{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003797 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003798 PyObject *fob = NULL;
3799 PyObject *m;
3800 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003801 if (!PyArg_ParseTuple(args, "UO&|O:load_compiled",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003802 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003803 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003804 &fob))
3805 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003806 fp = get_file(pathname, fob, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003807 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003808 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003809 return NULL;
3810 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003811 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003812 fclose(fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003813 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003814 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003815}
3816
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003817#ifdef HAVE_DYNAMIC_LOADING
3818
Guido van Rossum79f25d91997-04-29 20:08:16 +00003819static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003820imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003821{
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003822 PyObject *name, *pathname, *fob = NULL, *mod;
3823 FILE *fp;
3824
3825 if (!PyArg_ParseTuple(args, "UO&|O:load_dynamic",
3826 &name, PyUnicode_FSDecoder, &pathname, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003827 return NULL;
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003828 if (fob != NULL) {
3829 fp = get_file(NULL, fob, "r");
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003830 if (fp == NULL) {
3831 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003832 return NULL;
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003833 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003834 }
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003835 else
3836 fp = NULL;
3837 mod = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003838 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003839 if (fp)
3840 fclose(fp);
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003841 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003842}
3843
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003844#endif /* HAVE_DYNAMIC_LOADING */
3845
Guido van Rossum79f25d91997-04-29 20:08:16 +00003846static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003847imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003848{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003849 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003850 PyObject *fob = NULL;
3851 PyObject *m;
3852 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003853 if (!PyArg_ParseTuple(args, "UO&|O:load_source",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003854 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003855 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003856 &fob))
3857 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003858 fp = get_file(pathname, fob, "r");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003859 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003860 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003861 return NULL;
3862 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003863 m = load_source_module(name, pathname, fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003864 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003865 fclose(fp);
3866 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003867}
3868
Guido van Rossum79f25d91997-04-29 20:08:16 +00003869static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003870imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003871{
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003872 PyObject *name, *fob, *pathname, *pathname_obj, *ret;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003873 char *suffix; /* Unused */
3874 char *mode;
3875 int type;
3876 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003877
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003878 if (!PyArg_ParseTuple(args, "UOO(ssi):load_module",
3879 &name, &fob, &pathname_obj, &suffix, &mode, &type))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003880 return NULL;
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003881 if (pathname_obj != Py_None) {
3882 if (!PyUnicode_FSDecoder(pathname_obj, &pathname))
3883 return NULL;
3884 }
3885 else
3886 pathname = NULL;
3887
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003888 if (*mode) {
3889 /* Mode must start with 'r' or 'U' and must not contain '+'.
3890 Implicit in this test is the assumption that the mode
3891 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003892
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003893 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3894 PyErr_Format(PyExc_ValueError,
3895 "invalid file open mode %.200s", mode);
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003896 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003897 return NULL;
3898 }
3899 }
3900 if (fob == Py_None)
3901 fp = NULL;
3902 else {
3903 fp = get_file(NULL, fob, mode);
3904 if (fp == NULL) {
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003905 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003906 return NULL;
3907 }
3908 }
Victor Stinner41c5fec2011-03-13 21:46:30 -04003909 ret = load_module(name, fp, pathname, type, NULL);
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003910 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003911 if (fp)
3912 fclose(fp);
3913 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003914}
3915
3916static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003917imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003918{
Victor Stinnerc9abda02011-03-14 13:33:46 -04003919 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003920 PyObject * ret;
Victor Stinnerc9abda02011-03-14 13:33:46 -04003921 if (!PyArg_ParseTuple(args, "UO&:load_package",
3922 &name, PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003923 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04003924 ret = load_package(name, pathname);
Victor Stinnerebc00522010-12-03 17:06:43 +00003925 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003926 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003927}
3928
3929static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003930imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003931{
Victor Stinnerfe19d212011-03-14 14:53:28 -04003932 PyObject *name;
3933 if (!PyArg_ParseTuple(args, "U:new_module", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003934 return NULL;
Victor Stinnerfe19d212011-03-14 14:53:28 -04003935 return PyModule_NewObject(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003936}
3937
Christian Heimes13a7a212008-01-07 17:13:09 +00003938static PyObject *
3939imp_reload(PyObject *self, PyObject *v)
3940{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003941 return PyImport_ReloadModule(v);
Christian Heimes13a7a212008-01-07 17:13:09 +00003942}
3943
3944PyDoc_STRVAR(doc_reload,
3945"reload(module) -> module\n\
3946\n\
3947Reload the module. The module must have been successfully imported before.");
3948
Barry Warsaw28a691b2010-04-17 00:19:56 +00003949static PyObject *
3950imp_cache_from_source(PyObject *self, PyObject *args, PyObject *kws)
3951{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003952 static char *kwlist[] = {"path", "debug_override", NULL};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003953
Victor Stinner2f42ae52011-03-20 00:41:24 +01003954 PyObject *pathname, *cpathname;
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003955 PyObject *debug_override = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003956 int debug = !Py_OptimizeFlag;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003957
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003958 if (!PyArg_ParseTupleAndKeywords(
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003959 args, kws, "O&|O", kwlist,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003960 PyUnicode_FSDecoder, &pathname, &debug_override))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003961 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003962
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003963 if (debug_override != NULL &&
3964 (debug = PyObject_IsTrue(debug_override)) < 0) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003965 Py_DECREF(pathname);
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003966 return NULL;
3967 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00003968
Martin v. Löwis30260a72011-10-23 17:35:46 +02003969 if (PyUnicode_READY(pathname) < 0)
3970 return NULL;
3971
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003972 cpathname = make_compiled_pathname(pathname, debug);
Victor Stinner2f42ae52011-03-20 00:41:24 +01003973 Py_DECREF(pathname);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003974
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003975 if (cpathname == NULL) {
3976 PyErr_Format(PyExc_SystemError, "path buffer too short");
3977 return NULL;
3978 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003979 return cpathname;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003980}
3981
3982PyDoc_STRVAR(doc_cache_from_source,
3983"Given the path to a .py file, return the path to its .pyc/.pyo file.\n\
3984\n\
3985The .py file does not need to exist; this simply returns the path to the\n\
3986.pyc/.pyo file calculated as if the .py file were imported. The extension\n\
3987will be .pyc unless __debug__ is not defined, then it will be .pyo.\n\
3988\n\
3989If debug_override is not None, then it must be a boolean and is taken as\n\
3990the value of __debug__ instead.");
3991
3992static PyObject *
3993imp_source_from_cache(PyObject *self, PyObject *args, PyObject *kws)
3994{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003995 static char *kwlist[] = {"path", NULL};
Victor Stinnerc9abda02011-03-14 13:33:46 -04003996 PyObject *pathname, *source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003997
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003998 if (!PyArg_ParseTupleAndKeywords(
Victor Stinnerebc00522010-12-03 17:06:43 +00003999 args, kws, "O&", kwlist,
Victor Stinnerc9abda02011-03-14 13:33:46 -04004000 PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004001 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00004002
Victor Stinnerc9abda02011-03-14 13:33:46 -04004003 source = make_source_pathname(pathname);
4004 if (source == NULL) {
4005 PyErr_Format(PyExc_ValueError, "Not a PEP 3147 pyc path: %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004006 pathname);
Victor Stinnerc9abda02011-03-14 13:33:46 -04004007 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004008 return NULL;
4009 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04004010 Py_DECREF(pathname);
4011 return source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00004012}
4013
4014PyDoc_STRVAR(doc_source_from_cache,
4015"Given the path to a .pyc./.pyo file, return the path to its .py file.\n\
4016\n\
4017The .pyc/.pyo file does not need to exist; this simply returns the path to\n\
4018the .py file calculated to correspond to the .pyc/.pyo file. If path\n\
4019does not conform to PEP 3147 format, ValueError will be raised.");
4020
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004021/* Doc strings */
4022
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004023PyDoc_STRVAR(doc_imp,
4024"This module provides the components needed to build your own\n\
4025__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004026
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004027PyDoc_STRVAR(doc_find_module,
4028"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004029Search for a module. If path is omitted or None, search for a\n\
4030built-in, frozen or special module and continue search in sys.path.\n\
4031The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004032package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004033
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004034PyDoc_STRVAR(doc_load_module,
4035"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004036Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004037The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004038
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004039PyDoc_STRVAR(doc_get_magic,
4040"get_magic() -> string\n\
4041Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004042
Barry Warsaw28a691b2010-04-17 00:19:56 +00004043PyDoc_STRVAR(doc_get_tag,
4044"get_tag() -> string\n\
4045Return the magic tag for .pyc or .pyo files.");
4046
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004047PyDoc_STRVAR(doc_get_suffixes,
4048"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004049Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004050that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004051
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004052PyDoc_STRVAR(doc_new_module,
4053"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004054Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004055The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004056
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004057PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00004058"lock_held() -> boolean\n\
4059Return True if the import lock is currently held, else False.\n\
4060On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00004061
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00004062PyDoc_STRVAR(doc_acquire_lock,
4063"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00004064Acquires the interpreter's import lock for the current thread.\n\
4065This lock should be used by import hooks to ensure thread-safety\n\
4066when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00004067On platforms without threads, this function does nothing.");
4068
4069PyDoc_STRVAR(doc_release_lock,
4070"release_lock() -> None\n\
4071Release the interpreter's import lock.\n\
4072On platforms without threads, this function does nothing.");
4073
Guido van Rossum79f25d91997-04-29 20:08:16 +00004074static PyMethodDef imp_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004075 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
4076 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
4077 {"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag},
4078 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
4079 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
4080 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
4081 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
4082 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
4083 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
4084 {"reload", imp_reload, METH_O, doc_reload},
4085 {"cache_from_source", (PyCFunction)imp_cache_from_source,
4086 METH_VARARGS | METH_KEYWORDS, doc_cache_from_source},
4087 {"source_from_cache", (PyCFunction)imp_source_from_cache,
4088 METH_VARARGS | METH_KEYWORDS, doc_source_from_cache},
4089 /* The rest are obsolete */
4090 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
4091 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
4092 {"init_builtin", imp_init_builtin, METH_VARARGS},
4093 {"init_frozen", imp_init_frozen, METH_VARARGS},
4094 {"is_builtin", imp_is_builtin, METH_VARARGS},
4095 {"is_frozen", imp_is_frozen, METH_VARARGS},
4096 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00004097#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004098 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00004099#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004100 {"load_package", imp_load_package, METH_VARARGS},
4101 {"load_source", imp_load_source, METH_VARARGS},
Brett Cannon442c9b92011-03-23 16:14:42 -07004102 {"_fix_co_filename", imp_fix_co_filename, METH_VARARGS},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004103 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004104};
4105
Guido van Rossum1a8791e1998-08-04 22:46:29 +00004106static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004107setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004108{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004109 PyObject *v;
4110 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004111
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004112 v = PyLong_FromLong((long)value);
4113 err = PyDict_SetItemString(d, name, v);
4114 Py_XDECREF(v);
4115 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004116}
4117
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004118typedef struct {
4119 PyObject_HEAD
4120} NullImporter;
4121
4122static int
4123NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
4124{
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004125#ifndef MS_WINDOWS
4126 PyObject *path;
4127 struct stat statbuf;
4128 int rv;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004129
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004130 if (!_PyArg_NoKeywords("NullImporter()", kwds))
4131 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004132
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004133 if (!PyArg_ParseTuple(args, "O&:NullImporter",
4134 PyUnicode_FSConverter, &path))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004135 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004136
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004137 if (PyBytes_GET_SIZE(path) == 0) {
4138 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004139 PyErr_SetString(PyExc_ImportError, "empty pathname");
4140 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004141 }
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004142
4143 rv = stat(PyBytes_AS_STRING(path), &statbuf);
4144 Py_DECREF(path);
4145 if (rv == 0) {
4146 /* it exists */
4147 if (S_ISDIR(statbuf.st_mode)) {
4148 /* it's a directory */
4149 PyErr_SetString(PyExc_ImportError, "existing directory");
4150 return -1;
4151 }
4152 }
4153#else /* MS_WINDOWS */
4154 PyObject *pathobj;
4155 DWORD rv;
Victor Stinner255dfdb2010-09-29 10:28:51 +00004156 wchar_t *path;
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004157
4158 if (!_PyArg_NoKeywords("NullImporter()", kwds))
4159 return -1;
4160
4161 if (!PyArg_ParseTuple(args, "U:NullImporter",
4162 &pathobj))
4163 return -1;
4164
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02004165 if (PyUnicode_GET_LENGTH(pathobj) == 0) {
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004166 PyErr_SetString(PyExc_ImportError, "empty pathname");
4167 return -1;
4168 }
4169
Victor Stinnerbeb4135b2010-10-07 01:02:42 +00004170 path = PyUnicode_AsWideCharString(pathobj, NULL);
Victor Stinner255dfdb2010-09-29 10:28:51 +00004171 if (path == NULL)
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004172 return -1;
4173 /* see issue1293 and issue3677:
4174 * stat() on Windows doesn't recognise paths like
4175 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
4176 */
4177 rv = GetFileAttributesW(path);
Victor Stinner255dfdb2010-09-29 10:28:51 +00004178 PyMem_Free(path);
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004179 if (rv != INVALID_FILE_ATTRIBUTES) {
4180 /* it exists */
4181 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
4182 /* it's a directory */
4183 PyErr_SetString(PyExc_ImportError, "existing directory");
4184 return -1;
4185 }
4186 }
4187#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004188 return 0;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004189}
4190
4191static PyObject *
4192NullImporter_find_module(NullImporter *self, PyObject *args)
4193{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004194 Py_RETURN_NONE;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004195}
4196
4197static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004198 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
4199 "Always return None"
4200 },
4201 {NULL} /* Sentinel */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004202};
4203
4204
Christian Heimes9cd17752007-11-18 19:35:23 +00004205PyTypeObject PyNullImporter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004206 PyVarObject_HEAD_INIT(NULL, 0)
4207 "imp.NullImporter", /*tp_name*/
4208 sizeof(NullImporter), /*tp_basicsize*/
4209 0, /*tp_itemsize*/
4210 0, /*tp_dealloc*/
4211 0, /*tp_print*/
4212 0, /*tp_getattr*/
4213 0, /*tp_setattr*/
4214 0, /*tp_reserved*/
4215 0, /*tp_repr*/
4216 0, /*tp_as_number*/
4217 0, /*tp_as_sequence*/
4218 0, /*tp_as_mapping*/
4219 0, /*tp_hash */
4220 0, /*tp_call*/
4221 0, /*tp_str*/
4222 0, /*tp_getattro*/
4223 0, /*tp_setattro*/
4224 0, /*tp_as_buffer*/
4225 Py_TPFLAGS_DEFAULT, /*tp_flags*/
4226 "Null importer object", /* tp_doc */
4227 0, /* tp_traverse */
4228 0, /* tp_clear */
4229 0, /* tp_richcompare */
4230 0, /* tp_weaklistoffset */
4231 0, /* tp_iter */
4232 0, /* tp_iternext */
4233 NullImporter_methods, /* tp_methods */
4234 0, /* tp_members */
4235 0, /* tp_getset */
4236 0, /* tp_base */
4237 0, /* tp_dict */
4238 0, /* tp_descr_get */
4239 0, /* tp_descr_set */
4240 0, /* tp_dictoffset */
4241 (initproc)NullImporter_init, /* tp_init */
4242 0, /* tp_alloc */
4243 PyType_GenericNew /* tp_new */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004244};
4245
Martin v. Löwis1a214512008-06-11 05:26:20 +00004246static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004247 PyModuleDef_HEAD_INIT,
4248 "imp",
4249 doc_imp,
4250 0,
4251 imp_methods,
4252 NULL,
4253 NULL,
4254 NULL,
4255 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00004256};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004257
Jason Tishler6bc06ec2003-09-04 11:59:50 +00004258PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00004259PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004260{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004261 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004262
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004263 if (PyType_Ready(&PyNullImporter_Type) < 0)
4264 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004265
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004266 m = PyModule_Create(&impmodule);
4267 if (m == NULL)
4268 goto failure;
4269 d = PyModule_GetDict(m);
4270 if (d == NULL)
4271 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004272
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004273 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
4274 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
4275 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
4276 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
4277 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
4278 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
4279 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
4280 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
4281 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
4282 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004283
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004284 Py_INCREF(&PyNullImporter_Type);
4285 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
4286 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004287 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004288 Py_XDECREF(m);
4289 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004290}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004291
4292
Guido van Rossumb18618d2000-05-03 23:44:39 +00004293/* API for embedding applications that want to add their own entries
4294 to the table of built-in modules. This should normally be called
4295 *before* Py_Initialize(). When the table resize fails, -1 is
4296 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004297
4298 After a similar function by Just van Rossum. */
4299
4300int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004301PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004302{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004303 static struct _inittab *our_copy = NULL;
4304 struct _inittab *p;
4305 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004306
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004307 /* Count the number of entries in both tables */
4308 for (n = 0; newtab[n].name != NULL; n++)
4309 ;
4310 if (n == 0)
4311 return 0; /* Nothing to do */
4312 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
4313 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004314
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004315 /* Allocate new memory for the combined table */
4316 p = our_copy;
4317 PyMem_RESIZE(p, struct _inittab, i+n+1);
4318 if (p == NULL)
4319 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004320
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004321 /* Copy the tables into the new memory */
4322 if (our_copy != PyImport_Inittab)
4323 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
4324 PyImport_Inittab = our_copy = p;
4325 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004326
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004327 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004328}
4329
4330/* Shorthand to add a single entry given a name and a function */
4331
4332int
Brett Cannona826f322009-04-02 03:41:46 +00004333PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004334{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004335 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004336
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004337 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004338
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004339 newtab[0].name = (char *)name;
4340 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004341
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004342 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004343}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004344
4345#ifdef __cplusplus
4346}
4347#endif