blob: c7541316b53e3baff99be21abbfdad0651a430b9 [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
Antoine Pitrou86a36b52011-11-25 18:56:07 +0100106 Python 3.3a0 3200 (__qualname__ added)
Tim Peters36515e22001-11-18 04:06:29 +0000107*/
Guido van Rossum3ddee711991-12-16 13:06:34 +0000108
Nick Coghlancd419ab2010-09-11 00:39:25 +0000109/* MAGIC must change whenever the bytecode emitted by the compiler may no
110 longer be understood by older implementations of the eval loop (usually
111 due to the addition of new opcodes)
Martin v. Löwisfadcd312011-10-23 18:08:20 +0200112 TAG must change for each major Python release. The magic number will take
113 care of any bytecode changes that occur during development.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000114*/
Benjamin Peterson48deae12011-06-03 17:50:16 -0500115#define QUOTE(arg) #arg
116#define STRIFY(name) QUOTE(name)
117#define MAJOR STRIFY(PY_MAJOR_VERSION)
118#define MINOR STRIFY(PY_MINOR_VERSION)
Antoine Pitrou86a36b52011-11-25 18:56:07 +0100119#define MAGIC (3200 | ((long)'\r'<<16) | ((long)'\n'<<24))
Benjamin Peterson48deae12011-06-03 17:50:16 -0500120#define TAG "cpython-" MAJOR MINOR;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000121#define CACHEDIR "__pycache__"
122/* Current magic word and string tag as globals. */
Guido van Rossum96774c12000-05-01 20:19:08 +0000123static long pyc_magic = MAGIC;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000124static const char *pyc_tag = TAG;
Benjamin Peterson48deae12011-06-03 17:50:16 -0500125#undef QUOTE
126#undef STRIFY
127#undef MAJOR
128#undef MINOR
Guido van Rossum96774c12000-05-01 20:19:08 +0000129
Victor Stinner95872862011-03-07 18:20:56 +0100130/* See _PyImport_FixupExtensionObject() below */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000131static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000132
Victor Stinnerfe7c5b52011-04-05 01:48:03 +0200133/* Function from Parser/tokenizer.c */
134extern char * PyTokenizer_FindEncodingFilename(int, PyObject *);
135
Guido van Rossum771c6c81997-10-31 18:37:24 +0000136/* This table is defined in config.c: */
137extern struct _inittab _PyImport_Inittab[];
138
139struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +0000140
Guido van Rossumed1170e1999-12-20 21:23:41 +0000141/* these tables define the module suffixes that Python recognizes */
142struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +0000143
Guido van Rossumed1170e1999-12-20 21:23:41 +0000144static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000145 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000146#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000147 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000148#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000149 {".pyc", "rb", PY_COMPILED},
150 {0, 0}
Guido van Rossumed1170e1999-12-20 21:23:41 +0000151};
152
Victor Stinnerd0296212011-03-14 14:04:10 -0400153static PyObject *initstr = NULL;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200154_Py_IDENTIFIER(__path__);
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000155
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000156/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000157
158void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000159_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000160{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000161 const struct filedescr *scan;
162 struct filedescr *filetab;
163 int countD = 0;
164 int countS = 0;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000165
Victor Stinnerd0296212011-03-14 14:04:10 -0400166 initstr = PyUnicode_InternFromString("__init__");
167 if (initstr == NULL)
168 Py_FatalError("Can't initialize import variables");
169
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000170 /* prepare _PyImport_Filetab: copy entries from
171 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
172 */
Guido van Rossum04110fb2007-08-24 16:32:05 +0000173#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000174 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
175 ++countD;
Guido van Rossum04110fb2007-08-24 16:32:05 +0000176#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000177 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
178 ++countS;
179 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
180 if (filetab == NULL)
181 Py_FatalError("Can't initialize import file table.");
Guido van Rossum04110fb2007-08-24 16:32:05 +0000182#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000183 memcpy(filetab, _PyImport_DynLoadFiletab,
184 countD * sizeof(struct filedescr));
Guido van Rossum04110fb2007-08-24 16:32:05 +0000185#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000186 memcpy(filetab + countD, _PyImport_StandardFiletab,
187 countS * sizeof(struct filedescr));
188 filetab[countD + countS].suffix = NULL;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000189
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000190 _PyImport_Filetab = filetab;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000191
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000192 if (Py_OptimizeFlag) {
193 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
194 for (; filetab->suffix != NULL; filetab++) {
195 if (strcmp(filetab->suffix, ".pyc") == 0)
196 filetab->suffix = ".pyo";
197 }
198 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000199}
200
Guido van Rossum25ce5661997-08-02 03:10:38 +0000201void
Just van Rossum52e14d62002-12-30 22:08:05 +0000202_PyImportHooks_Init(void)
203{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000204 PyObject *v, *path_hooks = NULL, *zimpimport;
205 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000206
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000207 /* adding sys.path_hooks and sys.path_importer_cache, setting up
208 zipimport */
209 if (PyType_Ready(&PyNullImporter_Type) < 0)
210 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000211
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000212 if (Py_VerboseFlag)
213 PySys_WriteStderr("# installing zipimport hook\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000214
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000215 v = PyList_New(0);
216 if (v == NULL)
217 goto error;
218 err = PySys_SetObject("meta_path", v);
219 Py_DECREF(v);
220 if (err)
221 goto error;
222 v = PyDict_New();
223 if (v == NULL)
224 goto error;
225 err = PySys_SetObject("path_importer_cache", v);
226 Py_DECREF(v);
227 if (err)
228 goto error;
229 path_hooks = PyList_New(0);
230 if (path_hooks == NULL)
231 goto error;
232 err = PySys_SetObject("path_hooks", path_hooks);
233 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000234 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000235 PyErr_Print();
236 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
237 "path_importer_cache, or NullImporter failed"
238 );
239 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000241 zimpimport = PyImport_ImportModule("zipimport");
242 if (zimpimport == NULL) {
243 PyErr_Clear(); /* No zip import module -- okay */
244 if (Py_VerboseFlag)
245 PySys_WriteStderr("# can't import zipimport\n");
246 }
247 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200248 _Py_IDENTIFIER(zipimporter);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200249 PyObject *zipimporter = _PyObject_GetAttrId(zimpimport,
250 &PyId_zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000251 Py_DECREF(zimpimport);
252 if (zipimporter == NULL) {
253 PyErr_Clear(); /* No zipimporter object -- okay */
254 if (Py_VerboseFlag)
255 PySys_WriteStderr(
256 "# can't import zipimport.zipimporter\n");
257 }
258 else {
259 /* sys.path_hooks.append(zipimporter) */
260 err = PyList_Append(path_hooks, zipimporter);
261 Py_DECREF(zipimporter);
262 if (err)
263 goto error;
264 if (Py_VerboseFlag)
265 PySys_WriteStderr(
266 "# installed zipimport hook\n");
267 }
268 }
269 Py_DECREF(path_hooks);
Just van Rossum52e14d62002-12-30 22:08:05 +0000270}
271
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000272/* Locking primitives to prevent parallel imports of the same module
273 in different threads to return with a partially loaded module.
274 These calls are serialized by the global interpreter lock. */
275
276#ifdef WITH_THREAD
277
Guido van Rossum49b56061998-10-01 20:42:43 +0000278#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000279
Guido van Rossum65d5b571998-12-21 19:32:43 +0000280static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000281static long import_lock_thread = -1;
282static int import_lock_level = 0;
283
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000284void
285_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000286{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000287 long me = PyThread_get_thread_ident();
288 if (me == -1)
289 return; /* Too bad */
290 if (import_lock == NULL) {
291 import_lock = PyThread_allocate_lock();
292 if (import_lock == NULL)
293 return; /* Nothing much we can do. */
294 }
295 if (import_lock_thread == me) {
296 import_lock_level++;
297 return;
298 }
299 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
300 {
301 PyThreadState *tstate = PyEval_SaveThread();
302 PyThread_acquire_lock(import_lock, 1);
303 PyEval_RestoreThread(tstate);
304 }
305 import_lock_thread = me;
306 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000307}
308
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000309int
310_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000311{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000312 long me = PyThread_get_thread_ident();
313 if (me == -1 || import_lock == NULL)
314 return 0; /* Too bad */
315 if (import_lock_thread != me)
316 return -1;
317 import_lock_level--;
318 if (import_lock_level == 0) {
319 import_lock_thread = -1;
320 PyThread_release_lock(import_lock);
321 }
322 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000323}
324
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000325/* This function is called from PyOS_AfterFork to ensure that newly
326 created child processes do not share locks with the parent.
327 We now acquire the import lock around fork() calls but on some platforms
328 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000329
330void
331_PyImport_ReInitLock(void)
332{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000333 if (import_lock != NULL)
334 import_lock = PyThread_allocate_lock();
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000335 if (import_lock_level > 1) {
336 /* Forked as a side effect of import */
337 long me = PyThread_get_thread_ident();
338 PyThread_acquire_lock(import_lock, 0);
Victor Stinner942003c2011-03-07 16:57:48 +0100339 /* XXX: can the previous line fail? */
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000340 import_lock_thread = me;
341 import_lock_level--;
342 } else {
343 import_lock_thread = -1;
344 import_lock_level = 0;
345 }
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000346}
347
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000348#endif
349
Tim Peters69232342001-08-30 05:16:13 +0000350static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000351imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000352{
Tim Peters69232342001-08-30 05:16:13 +0000353#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000354 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000355#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000356 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000357#endif
358}
359
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000360static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000361imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000362{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000363#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000364 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000365#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000366 Py_INCREF(Py_None);
367 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000368}
369
370static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000371imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000372{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000373#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000374 if (_PyImport_ReleaseLock() < 0) {
375 PyErr_SetString(PyExc_RuntimeError,
376 "not holding the import lock");
377 return NULL;
378 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000379#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000380 Py_INCREF(Py_None);
381 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000382}
383
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100384void
385_PyImport_Fini(void)
386{
387 Py_XDECREF(extensions);
388 extensions = NULL;
389 PyMem_DEL(_PyImport_Filetab);
390 _PyImport_Filetab = NULL;
391#ifdef WITH_THREAD
392 if (import_lock != NULL) {
393 PyThread_free_lock(import_lock);
394 import_lock = NULL;
395 }
396#endif
397}
398
Guido van Rossumd8faa362007-04-27 19:54:29 +0000399static void
400imp_modules_reloading_clear(void)
401{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000402 PyInterpreterState *interp = PyThreadState_Get()->interp;
403 if (interp->modules_reloading != NULL)
404 PyDict_Clear(interp->modules_reloading);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000405}
406
Guido van Rossum25ce5661997-08-02 03:10:38 +0000407/* Helper for sys */
408
409PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000410PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000411{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000412 PyInterpreterState *interp = PyThreadState_GET()->interp;
413 if (interp->modules == NULL)
414 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
415 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000416}
417
Guido van Rossum3f5da241990-12-20 15:06:42 +0000418
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000419/* List of names to clear in sys */
420static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000421 "path", "argv", "ps1", "ps2",
422 "last_type", "last_value", "last_traceback",
423 "path_hooks", "path_importer_cache", "meta_path",
424 /* misc stuff */
425 "flags", "float_info",
426 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000427};
428
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000429static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000430 "stdin", "__stdin__",
431 "stdout", "__stdout__",
432 "stderr", "__stderr__",
433 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000434};
435
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000436
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000437/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000438
Guido van Rossum3f5da241990-12-20 15:06:42 +0000439void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000440PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000441{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000442 Py_ssize_t pos, ndone;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000443 PyObject *key, *value, *dict;
444 PyInterpreterState *interp = PyThreadState_GET()->interp;
445 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000447 if (modules == NULL)
448 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000449
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000450 /* Delete some special variables first. These are common
451 places where user values hide and people complain when their
452 destructors fail. Since the modules containing them are
453 deleted *last* of all, they would come too late in the normal
454 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000455
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000456 value = PyDict_GetItemString(modules, "builtins");
457 if (value != NULL && PyModule_Check(value)) {
458 dict = PyModule_GetDict(value);
459 if (Py_VerboseFlag)
460 PySys_WriteStderr("# clear builtins._\n");
461 PyDict_SetItemString(dict, "_", Py_None);
462 }
463 value = PyDict_GetItemString(modules, "sys");
464 if (value != NULL && PyModule_Check(value)) {
465 char **p;
466 PyObject *v;
467 dict = PyModule_GetDict(value);
468 for (p = sys_deletes; *p != NULL; p++) {
469 if (Py_VerboseFlag)
470 PySys_WriteStderr("# clear sys.%s\n", *p);
471 PyDict_SetItemString(dict, *p, Py_None);
472 }
473 for (p = sys_files; *p != NULL; p+=2) {
474 if (Py_VerboseFlag)
475 PySys_WriteStderr("# restore sys.%s\n", *p);
476 v = PyDict_GetItemString(dict, *(p+1));
477 if (v == NULL)
478 v = Py_None;
479 PyDict_SetItemString(dict, *p, v);
480 }
481 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000482
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000483 /* First, delete __main__ */
484 value = PyDict_GetItemString(modules, "__main__");
485 if (value != NULL && PyModule_Check(value)) {
486 if (Py_VerboseFlag)
487 PySys_WriteStderr("# cleanup __main__\n");
488 _PyModule_Clear(value);
489 PyDict_SetItemString(modules, "__main__", Py_None);
490 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000491
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000492 /* The special treatment of "builtins" here is because even
493 when it's not referenced as a module, its dictionary is
494 referenced by almost every module's __builtins__. Since
495 deleting a module clears its dictionary (even if there are
496 references left to it), we need to delete the "builtins"
497 module last. Likewise, we don't delete sys until the very
498 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000499
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000500 Also note that we 'delete' modules by replacing their entry
501 in the modules dict with None, rather than really deleting
502 them; this avoids a rehash of the modules dictionary and
503 also marks them as "non existent" so they won't be
504 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000505
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000506 /* Next, repeatedly delete modules with a reference count of
507 one (skipping builtins and sys) and delete them */
508 do {
509 ndone = 0;
510 pos = 0;
511 while (PyDict_Next(modules, &pos, &key, &value)) {
512 if (value->ob_refcnt != 1)
513 continue;
514 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100515 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000516 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100517 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 continue;
519 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100520 PySys_FormatStderr(
521 "# cleanup[1] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000522 _PyModule_Clear(value);
523 PyDict_SetItem(modules, key, Py_None);
524 ndone++;
525 }
526 }
527 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000528
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000529 /* Next, delete all modules (still skipping builtins and sys) */
530 pos = 0;
531 while (PyDict_Next(modules, &pos, &key, &value)) {
532 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100533 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000534 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100535 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 continue;
537 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100538 PySys_FormatStderr("# cleanup[2] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000539 _PyModule_Clear(value);
540 PyDict_SetItem(modules, key, Py_None);
541 }
542 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000543
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000544 /* Next, delete sys and builtins (in that order) */
545 value = PyDict_GetItemString(modules, "sys");
546 if (value != NULL && PyModule_Check(value)) {
547 if (Py_VerboseFlag)
548 PySys_WriteStderr("# cleanup sys\n");
549 _PyModule_Clear(value);
550 PyDict_SetItemString(modules, "sys", Py_None);
551 }
552 value = PyDict_GetItemString(modules, "builtins");
553 if (value != NULL && PyModule_Check(value)) {
554 if (Py_VerboseFlag)
555 PySys_WriteStderr("# cleanup builtins\n");
556 _PyModule_Clear(value);
557 PyDict_SetItemString(modules, "builtins", Py_None);
558 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000559
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000560 /* Finally, clear and delete the modules directory */
561 PyDict_Clear(modules);
562 interp->modules = NULL;
563 Py_DECREF(modules);
564 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000565}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000566
567
Barry Warsaw28a691b2010-04-17 00:19:56 +0000568/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000569
570long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000571PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000572{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000573 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000574}
575
576
Barry Warsaw28a691b2010-04-17 00:19:56 +0000577const char *
578PyImport_GetMagicTag(void)
579{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000580 return pyc_tag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000581}
582
Guido van Rossum25ce5661997-08-02 03:10:38 +0000583/* Magic for extension modules (built-in as well as dynamically
584 loaded). To prevent initializing an extension module more than
585 once, we keep a static dictionary 'extensions' keyed by module name
586 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000587 modules), containing these modules. A copy of the module's
Victor Stinner95872862011-03-07 18:20:56 +0100588 dictionary is stored by calling _PyImport_FixupExtensionObject()
Guido van Rossum25ce5661997-08-02 03:10:38 +0000589 immediately after the module initialization function succeeds. A
590 copy can be retrieved from there by calling
Victor Stinner95872862011-03-07 18:20:56 +0100591 _PyImport_FindExtensionObject().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000592
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000593 Modules which do support multiple initialization set their m_size
594 field to a non-negative number (indicating the size of the
595 module-specific state). They are still recorded in the extensions
596 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000597*/
598
599int
Victor Stinner95872862011-03-07 18:20:56 +0100600_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
601 PyObject *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000602{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000603 PyObject *modules, *dict;
604 struct PyModuleDef *def;
605 if (extensions == NULL) {
606 extensions = PyDict_New();
607 if (extensions == NULL)
608 return -1;
609 }
610 if (mod == NULL || !PyModule_Check(mod)) {
611 PyErr_BadInternalCall();
612 return -1;
613 }
614 def = PyModule_GetDef(mod);
615 if (!def) {
616 PyErr_BadInternalCall();
617 return -1;
618 }
619 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +0100620 if (PyDict_SetItem(modules, name, mod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000621 return -1;
622 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100623 PyDict_DelItem(modules, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000624 return -1;
625 }
626 if (def->m_size == -1) {
627 if (def->m_base.m_copy) {
628 /* Somebody already imported the module,
629 likely under a different name.
630 XXX this should really not happen. */
631 Py_DECREF(def->m_base.m_copy);
632 def->m_base.m_copy = NULL;
633 }
634 dict = PyModule_GetDict(mod);
635 if (dict == NULL)
636 return -1;
637 def->m_base.m_copy = PyDict_Copy(dict);
638 if (def->m_base.m_copy == NULL)
639 return -1;
640 }
Victor Stinner49d3f252010-10-17 01:24:53 +0000641 PyDict_SetItem(extensions, filename, (PyObject*)def);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000642 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000643}
644
Victor Stinner49d3f252010-10-17 01:24:53 +0000645int
646_PyImport_FixupBuiltin(PyObject *mod, char *name)
647{
648 int res;
Victor Stinner95872862011-03-07 18:20:56 +0100649 PyObject *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100650 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100651 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000652 return -1;
Victor Stinner95872862011-03-07 18:20:56 +0100653 res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj);
654 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000655 return res;
656}
657
Guido van Rossum25ce5661997-08-02 03:10:38 +0000658PyObject *
Victor Stinner95872862011-03-07 18:20:56 +0100659_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000660{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000661 PyObject *mod, *mdict;
662 PyModuleDef* def;
663 if (extensions == NULL)
664 return NULL;
Victor Stinner49d3f252010-10-17 01:24:53 +0000665 def = (PyModuleDef*)PyDict_GetItem(extensions, filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000666 if (def == NULL)
667 return NULL;
668 if (def->m_size == -1) {
669 /* Module does not support repeated initialization */
670 if (def->m_base.m_copy == NULL)
671 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100672 mod = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000673 if (mod == NULL)
674 return NULL;
675 mdict = PyModule_GetDict(mod);
676 if (mdict == NULL)
677 return NULL;
678 if (PyDict_Update(mdict, def->m_base.m_copy))
679 return NULL;
680 }
681 else {
682 if (def->m_base.m_init == NULL)
683 return NULL;
684 mod = def->m_base.m_init();
685 if (mod == NULL)
686 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100687 PyDict_SetItem(PyImport_GetModuleDict(), name, mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000688 Py_DECREF(mod);
689 }
690 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100691 PyDict_DelItem(PyImport_GetModuleDict(), name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000692 Py_DECREF(mod);
693 return NULL;
694 }
695 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +0100696 PySys_FormatStderr("import %U # previously loaded (%R)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000697 name, filename);
698 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000699
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000700}
701
Victor Stinner49d3f252010-10-17 01:24:53 +0000702PyObject *
Victor Stinner501c09a2011-02-23 00:02:00 +0000703_PyImport_FindBuiltin(const char *name)
Victor Stinner49d3f252010-10-17 01:24:53 +0000704{
Victor Stinner95872862011-03-07 18:20:56 +0100705 PyObject *res, *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100706 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100707 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000708 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100709 res = _PyImport_FindExtensionObject(nameobj, nameobj);
710 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000711 return res;
712}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000713
714/* Get the module object corresponding to a module name.
715 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000716 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000717 Because the former action is most common, THIS DOES NOT RETURN A
718 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000719
Guido van Rossum79f25d91997-04-29 20:08:16 +0000720PyObject *
Victor Stinner27ee0892011-03-04 12:57:09 +0000721PyImport_AddModuleObject(PyObject *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000722{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000723 PyObject *modules = PyImport_GetModuleDict();
724 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000725
Victor Stinner27ee0892011-03-04 12:57:09 +0000726 if ((m = PyDict_GetItem(modules, name)) != NULL &&
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000727 PyModule_Check(m))
728 return m;
Victor Stinner27ee0892011-03-04 12:57:09 +0000729 m = PyModule_NewObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000730 if (m == NULL)
731 return NULL;
Victor Stinner27ee0892011-03-04 12:57:09 +0000732 if (PyDict_SetItem(modules, name, m) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000733 Py_DECREF(m);
734 return NULL;
735 }
736 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000737
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000738 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000739}
740
Victor Stinner27ee0892011-03-04 12:57:09 +0000741PyObject *
742PyImport_AddModule(const char *name)
743{
744 PyObject *nameobj, *module;
745 nameobj = PyUnicode_FromString(name);
746 if (nameobj == NULL)
747 return NULL;
748 module = PyImport_AddModuleObject(nameobj);
749 Py_DECREF(nameobj);
750 return module;
751}
752
753
Tim Peters1cd70172004-08-02 03:52:12 +0000754/* Remove name from sys.modules, if it's there. */
755static void
Victor Stinner27ee0892011-03-04 12:57:09 +0000756remove_module(PyObject *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000757{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000758 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner27ee0892011-03-04 12:57:09 +0000759 if (PyDict_GetItem(modules, name) == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000760 return;
Victor Stinner27ee0892011-03-04 12:57:09 +0000761 if (PyDict_DelItem(modules, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000762 Py_FatalError("import: deleting existing key in"
763 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000764}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000765
Victor Stinnerc9abda02011-03-14 13:33:46 -0400766static PyObject * get_sourcefile(PyObject *filename);
767static PyObject *make_source_pathname(PyObject *pathname);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200768static PyObject* make_compiled_pathname(PyObject *pathname, int debug);
Christian Heimes3b06e532008-01-07 20:12:44 +0000769
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000770/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000771 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
772 * removed from sys.modules, to avoid leaving damaged module objects
773 * in sys.modules. The caller may wish to restore the original
774 * module object (if any) in this case; PyImport_ReloadModule is an
775 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000776 *
777 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
778 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000779 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000780PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000781PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000782{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000783 return PyImport_ExecCodeModuleWithPathnames(
784 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000785}
786
787PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000788PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000789{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 return PyImport_ExecCodeModuleWithPathnames(
791 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000792}
793
794PyObject *
795PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000796 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000797{
Victor Stinner27ee0892011-03-04 12:57:09 +0000798 PyObject *m = NULL;
799 PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL;
800
801 nameobj = PyUnicode_FromString(name);
802 if (nameobj == NULL)
803 return NULL;
804
805 if (pathname != NULL) {
806 pathobj = PyUnicode_DecodeFSDefault(pathname);
807 if (pathobj == NULL)
808 goto error;
809 } else
810 pathobj = NULL;
811 if (cpathname != NULL) {
812 cpathobj = PyUnicode_DecodeFSDefault(cpathname);
813 if (cpathobj == NULL)
814 goto error;
815 } else
816 cpathobj = NULL;
817 m = PyImport_ExecCodeModuleObject(nameobj, co, pathobj, cpathobj);
818error:
819 Py_DECREF(nameobj);
820 Py_XDECREF(pathobj);
821 Py_XDECREF(cpathobj);
822 return m;
823}
824
825PyObject*
826PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
827 PyObject *cpathname)
828{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000829 PyObject *modules = PyImport_GetModuleDict();
830 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000831
Victor Stinner27ee0892011-03-04 12:57:09 +0000832 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000833 if (m == NULL)
834 return NULL;
835 /* If the module is being reloaded, we get the old module back
836 and re-use its dict to exec the new code. */
837 d = PyModule_GetDict(m);
838 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
839 if (PyDict_SetItemString(d, "__builtins__",
840 PyEval_GetBuiltins()) != 0)
841 goto error;
842 }
843 /* Remember the filename as the __file__ attribute */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000844 if (pathname != NULL) {
Victor Stinnerc9abda02011-03-14 13:33:46 -0400845 v = get_sourcefile(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000846 if (v == NULL)
847 PyErr_Clear();
848 }
Victor Stinner27ee0892011-03-04 12:57:09 +0000849 else
850 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000851 if (v == NULL) {
852 v = ((PyCodeObject *)co)->co_filename;
853 Py_INCREF(v);
854 }
855 if (PyDict_SetItemString(d, "__file__", v) != 0)
856 PyErr_Clear(); /* Not important enough to report */
857 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000858
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000859 /* Remember the pyc path name as the __cached__ attribute. */
Victor Stinner27ee0892011-03-04 12:57:09 +0000860 if (cpathname != NULL)
861 v = cpathname;
862 else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000863 v = Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000864 if (PyDict_SetItemString(d, "__cached__", v) != 0)
865 PyErr_Clear(); /* Not important enough to report */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000866
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000867 v = PyEval_EvalCode(co, d, d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000868 if (v == NULL)
869 goto error;
870 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000871
Victor Stinner27ee0892011-03-04 12:57:09 +0000872 if ((m = PyDict_GetItem(modules, name)) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000873 PyErr_Format(PyExc_ImportError,
Victor Stinner27ee0892011-03-04 12:57:09 +0000874 "Loaded module %R not found in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000875 name);
876 return NULL;
877 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000878
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000879 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000880
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000882
883 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000884 remove_module(name);
885 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000886}
887
888
Barry Warsaw28a691b2010-04-17 00:19:56 +0000889/* Like strrchr(string, '/') but searches for the rightmost of either SEP
890 or ALTSEP, if the latter is defined.
891*/
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200892static Py_UCS4*
893rightmost_sep(Py_UCS4 *s)
Victor Stinnerc9abda02011-03-14 13:33:46 -0400894{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200895 Py_UCS4 *found, c;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400896 for (found = NULL; (c = *s); s++) {
897 if (c == SEP
898#ifdef ALTSEP
899 || c == ALTSEP
900#endif
901 )
902 {
903 found = s;
904 }
905 }
906 return found;
907}
908
Martin v. Löwis2db72862011-10-23 17:29:08 +0200909/* Like rightmost_sep, but operate on unicode objects. */
910static Py_ssize_t
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200911rightmost_sep_obj(PyObject* o, Py_ssize_t start, Py_ssize_t end)
Martin v. Löwis2db72862011-10-23 17:29:08 +0200912{
913 Py_ssize_t found, i;
914 Py_UCS4 c;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200915 for (found = -1, i = start; i < end; i++) {
Martin v. Löwis2db72862011-10-23 17:29:08 +0200916 c = PyUnicode_READ_CHAR(o, i);
917 if (c == SEP
918#ifdef ALTSEP
919 || c == ALTSEP
920#endif
921 )
922 {
923 found = i;
924 }
925 }
926 return found;
927}
Victor Stinnerc9abda02011-03-14 13:33:46 -0400928
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000929/* Given a pathname for a Python source file, fill a buffer with the
930 pathname for the corresponding compiled file. Return the pathname
931 for the compiled file, or NULL if there's no space in the buffer.
Victor Stinner2f42ae52011-03-20 00:41:24 +0100932 Doesn't set an exception.
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000933
Martin v. Löwis30260a72011-10-23 17:35:46 +0200934 foo.py -> __pycache__/foo.<tag>.pyc
935
936 pathstr is assumed to be "ready".
937*/
Victor Stinner2f42ae52011-03-20 00:41:24 +0100938
939static PyObject*
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200940make_compiled_pathname(PyObject *pathstr, int debug)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000941{
Martin v. Löwis2db72862011-10-23 17:29:08 +0200942 PyObject *result;
943 Py_ssize_t fname, ext, len, i, pos, taglen;
Martin v. Löwisfadcd312011-10-23 18:08:20 +0200944 Py_ssize_t pycache_len = sizeof(CACHEDIR) - 1;
Martin v. Löwis2db72862011-10-23 17:29:08 +0200945 int kind;
946 void *data;
Antoine Pitroub528fcf2011-10-25 00:21:02 +0200947 Py_UCS4 lastsep;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000948
Martin v. Löwis2db72862011-10-23 17:29:08 +0200949 /* Compute the output string size. */
950 len = PyUnicode_GET_LENGTH(pathstr);
951 /* If there is no separator, this returns -1, so
Antoine Pitroub528fcf2011-10-25 00:21:02 +0200952 fname will be 0. */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200953 fname = rightmost_sep_obj(pathstr, 0, len) + 1;
Antoine Pitroub528fcf2011-10-25 00:21:02 +0200954 /* Windows: re-use the last separator character (/ or \\) when
955 appending the __pycache__ path. */
956 if (fname > 0)
957 lastsep = PyUnicode_READ_CHAR(pathstr, fname -1);
958 else
959 lastsep = SEP;
Martin v. Löwis2db72862011-10-23 17:29:08 +0200960 ext = fname - 1;
961 for(i = fname; i < len; i++)
962 if (PyUnicode_READ_CHAR(pathstr, i) == '.')
963 ext = i + 1;
964 if (ext < fname)
965 /* No dot in filename; use entire filename */
966 ext = len;
967
968 /* result = pathstr[:fname] + "__pycache__" + SEP +
969 pathstr[fname:ext] + tag + ".py[co]" */
970 taglen = strlen(pyc_tag);
Martin v. Löwis2cc0cc52011-10-23 18:41:56 +0200971 result = PyUnicode_New(ext + pycache_len + 1 + taglen + 4,
Martin v. Löwis2db72862011-10-23 17:29:08 +0200972 PyUnicode_MAX_CHAR_VALUE(pathstr));
973 if (!result)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200974 return NULL;
Martin v. Löwis2db72862011-10-23 17:29:08 +0200975 kind = PyUnicode_KIND(result);
976 data = PyUnicode_DATA(result);
977 PyUnicode_CopyCharacters(result, 0, pathstr, 0, fname);
978 pos = fname;
Martin v. Löwis2cc0cc52011-10-23 18:41:56 +0200979 for (i = 0; i < pycache_len; i++)
Martin v. Löwisfadcd312011-10-23 18:08:20 +0200980 PyUnicode_WRITE(kind, data, pos++, CACHEDIR[i]);
Antoine Pitroub528fcf2011-10-25 00:21:02 +0200981 PyUnicode_WRITE(kind, data, pos++, lastsep);
Martin v. Löwis2db72862011-10-23 17:29:08 +0200982 PyUnicode_CopyCharacters(result, pos, pathstr,
983 fname, ext - fname);
984 pos += ext - fname;
985 for (i = 0; pyc_tag[i]; i++)
986 PyUnicode_WRITE(kind, data, pos++, pyc_tag[i]);
987 PyUnicode_WRITE(kind, data, pos++, '.');
988 PyUnicode_WRITE(kind, data, pos++, 'p');
989 PyUnicode_WRITE(kind, data, pos++, 'y');
990 PyUnicode_WRITE(kind, data, pos++, debug ? 'c' : 'o');
991 return result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000992}
993
994
Barry Warsaw28a691b2010-04-17 00:19:56 +0000995/* Given a pathname to a Python byte compiled file, return the path to the
996 source file, if the path matches the PEP 3147 format. This does not check
997 for any file existence, however, if the pyc file name does not match PEP
998 3147 style, NULL is returned. buf must be at least as big as pathname;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400999 the resulting path will always be shorter.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001000
Victor Stinnerc9abda02011-03-14 13:33:46 -04001001 (...)/__pycache__/foo.<tag>.pyc -> (...)/foo.py */
1002
1003static PyObject*
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001004make_source_pathname(PyObject *path)
Barry Warsaw28a691b2010-04-17 00:19:56 +00001005{
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001006 Py_ssize_t left, right, dot0, dot1, len;
1007 Py_ssize_t i, j;
1008 PyObject *result;
1009 int kind;
1010 void *data;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001011
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001012 len = PyUnicode_GET_LENGTH(path);
1013 if (len > MAXPATHLEN)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001014 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001015
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001016 /* Look back two slashes from the end. In between these two slashes
1017 must be the string __pycache__ or this is not a PEP 3147 style
1018 path. It's possible for there to be only one slash.
1019 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001020 right = rightmost_sep_obj(path, 0, len);
1021 if (right == -1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001022 return NULL;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001023 left = rightmost_sep_obj(path, 0, right);
1024 if (left == -1)
1025 left = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001026 else
1027 left++;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001028 if (right-left != sizeof(CACHEDIR)-1)
1029 return NULL;
1030 for (i = 0; i < sizeof(CACHEDIR)-1; i++)
1031 if (PyUnicode_READ_CHAR(path, left+i) != CACHEDIR[i])
1032 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001033
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001034 /* Now verify that the path component to the right of the last slash
1035 has two dots in it.
1036 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001037 dot0 = PyUnicode_FindChar(path, '.', right+1, len, 1);
1038 if (dot0 < 0)
1039 return NULL;
1040 dot1 = PyUnicode_FindChar(path, '.', dot0+1, len, 1);
1041 if (dot1 < 0)
1042 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001043 /* Too many dots? */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001044 if (PyUnicode_FindChar(path, '.', dot1+1, len, 1) != -1)
1045 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001046
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001047 /* This is a PEP 3147 path. Start by copying everything from the
1048 start of pathname up to and including the leftmost slash. Then
1049 copy the file's basename, removing the magic tag and adding a .py
1050 suffix.
1051 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +02001052 result = PyUnicode_New(left + (dot0-right) + 2,
1053 PyUnicode_MAX_CHAR_VALUE(path));
1054 if (!result)
1055 return NULL;
1056 kind = PyUnicode_KIND(result);
1057 data = PyUnicode_DATA(result);
1058 PyUnicode_CopyCharacters(result, 0, path, 0, (i = left));
1059 PyUnicode_CopyCharacters(result, left, path, right+1,
1060 (j = dot0-right));
1061 PyUnicode_WRITE(kind, data, i+j, 'p');
1062 PyUnicode_WRITE(kind, data, i+j+1, 'y');
1063 return result;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001064}
1065
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001066/* Given a pathname for a Python source file, its time of last
1067 modification, and a pathname for a compiled file, check whether the
1068 compiled file represents the same version of the source. If so,
1069 return a FILE pointer for the compiled file, positioned just after
1070 the header; if not, return NULL.
1071 Doesn't set an exception. */
1072
1073static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001074check_compiled_module(PyObject *pathname, time_t mtime, PyObject *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001075{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001076 FILE *fp;
1077 long magic;
1078 long pyc_mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001079
Victor Stinner2f42ae52011-03-20 00:41:24 +01001080 fp = _Py_fopen(cpathname, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001081 if (fp == NULL)
1082 return NULL;
1083 magic = PyMarshal_ReadLongFromFile(fp);
1084 if (magic != pyc_magic) {
1085 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001086 PySys_FormatStderr("# %R has bad magic\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001087 fclose(fp);
1088 return NULL;
1089 }
1090 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
1091 if (pyc_mtime != mtime) {
1092 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001093 PySys_FormatStderr("# %R has bad mtime\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001094 fclose(fp);
1095 return NULL;
1096 }
1097 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001098 PySys_FormatStderr("# %R matches %R\n", cpathname, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001099 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001100}
1101
1102
1103/* Read a code object from a file and check it for validity */
1104
Guido van Rossum79f25d91997-04-29 20:08:16 +00001105static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001106read_compiled_module(PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001107{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001108 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001109
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001110 co = PyMarshal_ReadLastObjectFromFile(fp);
1111 if (co == NULL)
1112 return NULL;
1113 if (!PyCode_Check(co)) {
1114 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001115 "Non-code object in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001116 Py_DECREF(co);
1117 return NULL;
1118 }
1119 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001120}
1121
1122
1123/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001124 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001125
Guido van Rossum79f25d91997-04-29 20:08:16 +00001126static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001127load_compiled_module(PyObject *name, PyObject *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001128{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001129 long magic;
1130 PyCodeObject *co;
1131 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001132
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001133 magic = PyMarshal_ReadLongFromFile(fp);
1134 if (magic != pyc_magic) {
1135 PyErr_Format(PyExc_ImportError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001136 "Bad magic number in %R", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001137 return NULL;
1138 }
1139 (void) PyMarshal_ReadLongFromFile(fp);
1140 co = read_compiled_module(cpathname, fp);
1141 if (co == NULL)
1142 return NULL;
1143 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001144 PySys_FormatStderr("import %U # precompiled from %R\n",
1145 name, cpathname);
1146 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1147 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001148 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001149
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001150 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001151}
1152
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001153/* Parse a source file and return the corresponding code object */
1154
Guido van Rossum79f25d91997-04-29 20:08:16 +00001155static PyCodeObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001156parse_source_module(PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001157{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001158 PyCodeObject *co;
1159 PyObject *pathbytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001160 mod_ty mod;
1161 PyCompilerFlags flags;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001162 PyArena *arena;
1163
1164 pathbytes = PyUnicode_EncodeFSDefault(pathname);
1165 if (pathbytes == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001166 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001167
Victor Stinner2f42ae52011-03-20 00:41:24 +01001168 arena = PyArena_New();
1169 if (arena == NULL) {
1170 Py_DECREF(pathbytes);
1171 return NULL;
1172 }
1173
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001174 flags.cf_flags = 0;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001175 mod = PyParser_ASTFromFile(fp, PyBytes_AS_STRING(pathbytes), NULL,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001176 Py_file_input, 0, 0, &flags,
1177 NULL, arena);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001178 if (mod != NULL)
1179 co = PyAST_Compile(mod, PyBytes_AS_STRING(pathbytes), NULL, arena);
1180 else
1181 co = NULL;
1182 Py_DECREF(pathbytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001183 PyArena_Free(arena);
1184 return co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001185}
1186
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001187/* Write a compiled module to a file, placing the time of last
1188 modification of its source into the header.
1189 Errors are ignored, if a write error occurs an attempt is made to
1190 remove the file. */
1191
1192static void
Victor Stinner2f42ae52011-03-20 00:41:24 +01001193write_compiled_module(PyCodeObject *co, PyObject *cpathname,
1194 struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001195{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001196 Py_UCS4 *cpathname_ucs4;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001197 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001198 time_t mtime = srcstat->st_mtime;
Antoine Pitrou8ad982c2011-11-15 22:27:32 +01001199 PyObject *cpathname_tmp;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001200#ifdef MS_WINDOWS /* since Windows uses different permissions */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001201 mode_t mode = srcstat->st_mode & ~S_IEXEC;
Victor Stinner1f795172011-11-17 00:45:54 +01001202 wchar_t *wdirname, *wpathname, *wpathname_tmp;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001203#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001204 mode_t dirmode = (srcstat->st_mode |
1205 S_IXUSR | S_IXGRP | S_IXOTH |
1206 S_IWUSR | S_IWGRP | S_IWOTH);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001207 PyObject *dirbytes;
Antoine Pitrou707033a2011-10-17 19:28:44 +02001208 PyObject *cpathbytes, *cpathbytes_tmp;
Victor Stinner783c82c2011-04-20 03:27:51 +02001209#endif
Charles-François Natali0c929d92011-11-10 19:12:29 +01001210 int fd;
Victor Stinner783c82c2011-04-20 03:27:51 +02001211 PyObject *dirname;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001212 Py_UCS4 *dirsep;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001213 int res, ok;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001214
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001215 /* Ensure that the __pycache__ directory exists. */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001216 cpathname_ucs4 = PyUnicode_AsUCS4Copy(cpathname);
1217 if (!cpathname_ucs4)
1218 return;
1219 dirsep = rightmost_sep(cpathname_ucs4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001220 if (dirsep == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001221 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001222 PySys_FormatStderr("# no %s path found %R\n", CACHEDIR, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001223 return;
1224 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001225 dirname = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND,
1226 cpathname_ucs4,
1227 dirsep - cpathname_ucs4);
1228 PyMem_Free(cpathname_ucs4);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001229 if (dirname == NULL) {
1230 PyErr_Clear();
1231 return;
1232 }
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001233
1234#ifdef MS_WINDOWS
Victor Stinner1f795172011-11-17 00:45:54 +01001235 wdirname = PyUnicode_AsUnicode(dirname);
1236 if (wdirname == NULL) {
1237 PyErr_Clear();
1238 return;
1239 }
1240 res = CreateDirectoryW(wdirname, NULL);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001241 ok = (res != 0);
1242 if (!ok && GetLastError() == ERROR_ALREADY_EXISTS)
1243 ok = 1;
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001244#else
Victor Stinner2f42ae52011-03-20 00:41:24 +01001245 dirbytes = PyUnicode_EncodeFSDefault(dirname);
1246 if (dirbytes == NULL) {
1247 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 return;
1249 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001250 res = mkdir(PyBytes_AS_STRING(dirbytes), dirmode);
1251 Py_DECREF(dirbytes);
1252 if (0 <= res)
1253 ok = 1;
1254 else
1255 ok = (errno == EEXIST);
1256#endif
1257 if (!ok) {
1258 if (Py_VerboseFlag)
1259 PySys_FormatStderr("# cannot create cache dir %R\n", dirname);
1260 Py_DECREF(dirname);
1261 return;
1262 }
1263 Py_DECREF(dirname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001264
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001265 /* We first write to a tmp file and then take advantage
Antoine Pitrou8ad982c2011-11-15 22:27:32 +01001266 of atomic renaming (which *should* be true even under Windows).
1267 As in importlib, we use id(something) to generate a pseudo-random
1268 filename. mkstemp() can't be used since it doesn't allow specifying
1269 the file access permissions.
1270 */
1271 cpathname_tmp = PyUnicode_FromFormat("%U.%zd",
1272 cpathname, (Py_ssize_t) co);
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001273 if (cpathname_tmp == NULL) {
1274 PyErr_Clear();
1275 return;
1276 }
Antoine Pitrou8ad982c2011-11-15 22:27:32 +01001277#ifdef MS_WINDOWS
Victor Stinner1f795172011-11-17 00:45:54 +01001278 wpathname = PyUnicode_AsUnicode(cpathname);
1279 if (wpathname == NULL) {
1280 PyErr_Clear();
1281 return;
1282 }
1283 wpathname_tmp = PyUnicode_AsUnicode(cpathname_tmp);
1284 if (wpathname_tmp == NULL) {
1285 PyErr_Clear();
1286 return;
1287 }
1288
1289 (void)DeleteFileW(wpathname_tmp);
1290 fd = _wopen(wpathname_tmp,
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001291 O_EXCL | O_CREAT | O_WRONLY | O_BINARY,
1292 mode);
Victor Stinner783c82c2011-04-20 03:27:51 +02001293 if (0 <= fd)
1294 fp = fdopen(fd, "wb");
1295 else
1296 fp = NULL;
1297#else
Antoine Pitrou8ad982c2011-11-15 22:27:32 +01001298 cpathbytes_tmp = PyUnicode_EncodeFSDefault(cpathname_tmp);
1299 Py_DECREF(cpathname_tmp);
1300 if (cpathbytes_tmp == NULL) {
1301 PyErr_Clear();
1302 return;
1303 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001304 cpathbytes = PyUnicode_EncodeFSDefault(cpathname);
1305 if (cpathbytes == NULL) {
1306 PyErr_Clear();
1307 return;
1308 }
Charles-François Natali0c929d92011-11-10 19:12:29 +01001309 fd = open(PyBytes_AS_STRING(cpathbytes_tmp),
1310 O_CREAT | O_EXCL | O_WRONLY, 0666);
Charles-François Natalie695eec2011-10-31 20:47:31 +01001311 if (0 <= fd)
1312 fp = fdopen(fd, "wb");
1313 else
1314 fp = NULL;
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);
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001320#ifdef MS_WINDOWS
1321 Py_DECREF(cpathname_tmp);
1322#else
Victor Stinner2f42ae52011-03-20 00:41:24 +01001323 Py_DECREF(cpathbytes);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001324 Py_DECREF(cpathbytes_tmp);
Victor Stinner783c82c2011-04-20 03:27:51 +02001325#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001326 return;
1327 }
1328 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
1329 /* First write a 0 for mtime */
1330 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
1331 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001332 fflush(fp);
1333 /* Now write the true mtime */
1334 fseek(fp, 4L, 0);
1335 assert(mtime < LONG_MAX);
1336 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001337 if (fflush(fp) != 0 || ferror(fp)) {
1338 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001339 PySys_FormatStderr("# can't write %R\n", cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001340 /* Don't keep partial file */
1341 fclose(fp);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001342#ifdef MS_WINDOWS
Victor Stinner1f795172011-11-17 00:45:54 +01001343 (void)DeleteFileW(wpathname_tmp);
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001344 Py_DECREF(cpathname_tmp);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001345#else
Antoine Pitrou707033a2011-10-17 19:28:44 +02001346 (void) unlink(PyBytes_AS_STRING(cpathbytes_tmp));
Victor Stinner2f42ae52011-03-20 00:41:24 +01001347 Py_DECREF(cpathbytes);
Antoine Pitrou707033a2011-10-17 19:28:44 +02001348 Py_DECREF(cpathbytes_tmp);
Victor Stinner783c82c2011-04-20 03:27:51 +02001349#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001350 return;
1351 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001352 fclose(fp);
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001353 /* Do a (hopefully) atomic rename */
1354#ifdef MS_WINDOWS
Victor Stinner1f795172011-11-17 00:45:54 +01001355 if (!MoveFileExW(wpathname_tmp, wpathname, MOVEFILE_REPLACE_EXISTING)) {
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001356 if (Py_VerboseFlag)
1357 PySys_FormatStderr("# can't write %R\n", cpathname);
1358 /* Don't keep tmp file */
Victor Stinner1f795172011-11-17 00:45:54 +01001359 (void) DeleteFileW(wpathname_tmp);
Antoine Pitrou28e401e2011-11-15 19:15:19 +01001360 Py_DECREF(cpathname_tmp);
1361 return;
1362 }
1363 Py_DECREF(cpathname_tmp);
1364#else
Antoine Pitrou707033a2011-10-17 19:28:44 +02001365 if (rename(PyBytes_AS_STRING(cpathbytes_tmp),
1366 PyBytes_AS_STRING(cpathbytes))) {
1367 if (Py_VerboseFlag)
1368 PySys_FormatStderr("# can't write %R\n", cpathname);
1369 /* Don't keep tmp file */
1370 unlink(PyBytes_AS_STRING(cpathbytes_tmp));
1371 Py_DECREF(cpathbytes);
1372 Py_DECREF(cpathbytes_tmp);
1373 return;
1374 }
1375 Py_DECREF(cpathbytes);
1376 Py_DECREF(cpathbytes_tmp);
1377#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001378 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001379 PySys_FormatStderr("# wrote %R\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001380}
1381
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001382static void
1383update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
1384{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001385 PyObject *constants, *tmp;
1386 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001387
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001388 if (PyUnicode_Compare(co->co_filename, oldname))
1389 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001390
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001391 tmp = co->co_filename;
1392 co->co_filename = newname;
1393 Py_INCREF(co->co_filename);
1394 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001395
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001396 constants = co->co_consts;
1397 n = PyTuple_GET_SIZE(constants);
1398 for (i = 0; i < n; i++) {
1399 tmp = PyTuple_GET_ITEM(constants, i);
1400 if (PyCode_Check(tmp))
1401 update_code_filenames((PyCodeObject *)tmp,
1402 oldname, newname);
1403 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001404}
1405
Victor Stinner2f42ae52011-03-20 00:41:24 +01001406static void
1407update_compiled_module(PyCodeObject *co, PyObject *newname)
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001408{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001409 PyObject *oldname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001410
Victor Stinner2f42ae52011-03-20 00:41:24 +01001411 if (PyUnicode_Compare(co->co_filename, newname) == 0)
1412 return;
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +00001413
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001414 oldname = co->co_filename;
1415 Py_INCREF(oldname);
1416 update_code_filenames(co, oldname, newname);
1417 Py_DECREF(oldname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001418}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001419
Brett Cannon442c9b92011-03-23 16:14:42 -07001420static PyObject *
1421imp_fix_co_filename(PyObject *self, PyObject *args)
1422{
1423 PyObject *co;
1424 PyObject *file_path;
1425
1426 if (!PyArg_ParseTuple(args, "OO:_fix_co_filename", &co, &file_path))
1427 return NULL;
1428
1429 if (!PyCode_Check(co)) {
1430 PyErr_SetString(PyExc_TypeError,
1431 "first argument must be a code object");
1432 return NULL;
1433 }
1434
1435 if (!PyUnicode_Check(file_path)) {
1436 PyErr_SetString(PyExc_TypeError,
1437 "second argument must be a string");
1438 return NULL;
1439 }
1440
1441 update_compiled_module((PyCodeObject*)co, file_path);
1442
1443 Py_RETURN_NONE;
1444}
1445
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001446/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001447 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
1448 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001449
Guido van Rossum79f25d91997-04-29 20:08:16 +00001450static PyObject *
Victor Stinner2f42ae52011-03-20 00:41:24 +01001451load_source_module(PyObject *name, PyObject *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001452{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001453 struct stat st;
1454 FILE *fpc;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001455 PyObject *cpathname = NULL, *cpathbytes = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001456 PyCodeObject *co;
Victor Stinner2f42ae52011-03-20 00:41:24 +01001457 PyObject *m = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001458
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001459 if (fstat(fileno(fp), &st) != 0) {
1460 PyErr_Format(PyExc_RuntimeError,
Victor Stinner2f42ae52011-03-20 00:41:24 +01001461 "unable to get file status from %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001462 pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001463 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001464 }
Fred Drake4c82b232000-06-30 16:18:57 +00001465#if SIZEOF_TIME_T > 4
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001466 /* Python's .pyc timestamp handling presumes that the timestamp fits
1467 in 4 bytes. This will be fine until sometime in the year 2038,
1468 when a 4-byte signed time_t will overflow.
1469 */
1470 if (st.st_mtime >> 32) {
1471 PyErr_SetString(PyExc_OverflowError,
1472 "modification time overflows a 4 byte field");
Victor Stinner2f42ae52011-03-20 00:41:24 +01001473 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001474 }
Fred Drake4c82b232000-06-30 16:18:57 +00001475#endif
Martin v. Löwis30260a72011-10-23 17:35:46 +02001476 if (PyUnicode_READY(pathname) < 0)
1477 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001478 cpathname = make_compiled_pathname(pathname, !Py_OptimizeFlag);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001479
1480 if (cpathname != NULL)
1481 fpc = check_compiled_module(pathname, st.st_mtime, cpathname);
1482 else
1483 fpc = NULL;
1484
1485 if (fpc) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001486 co = read_compiled_module(cpathname, fpc);
1487 fclose(fpc);
1488 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001489 goto error;
1490 update_compiled_module(co, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001491 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001492 PySys_FormatStderr("import %U # precompiled from %R\n",
1493 name, cpathname);
1494 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1495 cpathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001496 }
1497 else {
1498 co = parse_source_module(pathname, fp);
1499 if (co == NULL)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001500 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001501 if (Py_VerboseFlag)
Victor Stinner2f42ae52011-03-20 00:41:24 +01001502 PySys_FormatStderr("import %U # from %R\n",
Victor Stinner98dbba52011-03-14 15:15:47 -04001503 name, pathname);
Victor Stinner2f42ae52011-03-20 00:41:24 +01001504 if (cpathname != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001505 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1506 if (ro == NULL || !PyObject_IsTrue(ro))
1507 write_compiled_module(co, cpathname, &st);
1508 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01001509 m = PyImport_ExecCodeModuleObject(name, (PyObject *)co,
1510 pathname, cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001511 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001512 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001513
Victor Stinner2f42ae52011-03-20 00:41:24 +01001514error:
1515 Py_XDECREF(cpathbytes);
1516 Py_XDECREF(cpathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001517 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001518}
1519
Christian Heimes3b06e532008-01-07 20:12:44 +00001520/* Get source file -> unicode or None
1521 * Returns the path to the py file if available, else the given path
1522 */
1523static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001524get_sourcefile(PyObject *filename)
Christian Heimes3b06e532008-01-07 20:12:44 +00001525{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001526 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001527 Py_UCS4 *fileuni;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001528 PyObject *py;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001529 struct stat statbuf;
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001530 int err;
Christian Heimes3b06e532008-01-07 20:12:44 +00001531
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001532 len = PyUnicode_GET_LENGTH(filename);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001533 if (len == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001534 Py_RETURN_NONE;
Christian Heimes3b06e532008-01-07 20:12:44 +00001535
Victor Stinnerc9abda02011-03-14 13:33:46 -04001536 /* don't match *.pyc or *.pyo? */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001537 fileuni = PyUnicode_AsUCS4Copy(filename);
1538 if (!fileuni)
1539 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001540 if (len < 5
1541 || fileuni[len-4] != '.'
1542 || (fileuni[len-3] != 'p' && fileuni[len-3] != 'P')
1543 || (fileuni[len-2] != 'y' && fileuni[len-2] != 'Y'))
1544 goto unchanged;
Christian Heimes3b06e532008-01-07 20:12:44 +00001545
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001546 /* Start by trying to turn PEP 3147 path into source path. If that
1547 * fails, just chop off the trailing character, i.e. legacy pyc path
1548 * to py.
1549 */
Victor Stinnerc9abda02011-03-14 13:33:46 -04001550 py = make_source_pathname(filename);
1551 if (py == NULL) {
1552 PyErr_Clear();
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001553 py = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, fileuni, len - 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001554 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001555 if (py == NULL)
1556 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001557
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001558 err = _Py_stat(py, &statbuf);
1559 if (err == -2)
1560 goto error;
1561 if (err == 0 && S_ISREG(statbuf.st_mode)) {
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001562 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001563 return py;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001564 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001565 Py_DECREF(py);
1566 goto unchanged;
1567
1568error:
1569 PyErr_Clear();
1570unchanged:
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001571 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001572 Py_INCREF(filename);
1573 return filename;
Christian Heimes3b06e532008-01-07 20:12:44 +00001574}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001575
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001576/* Forward */
Victor Stinner41c5fec2011-03-13 21:46:30 -04001577static PyObject *load_module(PyObject *, FILE *, PyObject *, int, PyObject *);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001578static struct filedescr *find_module(PyObject *, PyObject *, PyObject *,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001579 PyObject **, FILE **, PyObject **);
Victor Stinner53dc7352011-03-20 01:50:21 +01001580static struct _frozen * find_frozen(PyObject *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001581
1582/* Load a package and return its module object WITH INCREMENTED
1583 REFERENCE COUNT */
1584
1585static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001586load_package(PyObject *name, PyObject *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001587{
Victor Stinner41c5fec2011-03-13 21:46:30 -04001588 PyObject *m, *d, *bufobj;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001589 PyObject *file = NULL, *path_list = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001590 int err;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001591 FILE *fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001592 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001593
Victor Stinnerc9abda02011-03-14 13:33:46 -04001594 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001595 if (m == NULL)
1596 return NULL;
1597 if (Py_VerboseFlag)
Victor Stinner98dbba52011-03-14 15:15:47 -04001598 PySys_FormatStderr("import %U # directory %R\n",
1599 name, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001600 file = get_sourcefile(pathname);
1601 if (file == NULL)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001602 return NULL;
1603 path_list = Py_BuildValue("[O]", file);
1604 if (path_list == NULL) {
1605 Py_DECREF(file);
1606 return NULL;
1607 }
1608 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001609 err = PyDict_SetItemString(d, "__file__", file);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001610 Py_DECREF(file);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001611 if (err == 0)
Victor Stinnerc9abda02011-03-14 13:33:46 -04001612 err = PyDict_SetItemString(d, "__path__", path_list);
1613 if (err != 0) {
1614 Py_DECREF(path_list);
1615 return NULL;
1616 }
Victor Stinner533d7832011-03-14 13:22:54 -04001617 fdp = find_module(name, initstr, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001618 &bufobj, &fp, NULL);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001619 Py_DECREF(path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001620 if (fdp == NULL) {
1621 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1622 PyErr_Clear();
1623 Py_INCREF(m);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001624 return m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001625 }
1626 else
Victor Stinnerc9abda02011-03-14 13:33:46 -04001627 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001628 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001629 m = load_module(name, fp, bufobj, fdp->type, NULL);
1630 Py_XDECREF(bufobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001631 if (fp != NULL)
1632 fclose(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001633 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001634}
1635
1636
1637/* Helper to test for built-in module */
1638
1639static int
Victor Stinner95872862011-03-07 18:20:56 +01001640is_builtin(PyObject *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001641{
Victor Stinner95872862011-03-07 18:20:56 +01001642 int i, cmp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001643 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
Victor Stinner95872862011-03-07 18:20:56 +01001644 cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name);
1645 if (cmp == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001646 if (PyImport_Inittab[i].initfunc == NULL)
1647 return -1;
1648 else
1649 return 1;
1650 }
1651 }
1652 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001653}
1654
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001655
Just van Rossum52e14d62002-12-30 22:08:05 +00001656/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1657 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001658 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001659 that can handle the path item. Return None if no hook could;
1660 this tells our caller it should fall back to the builtin
1661 import mechanism. Cache the result in path_importer_cache.
1662 Returns a borrowed reference. */
1663
1664static PyObject *
1665get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001666 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001667{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001668 PyObject *importer;
1669 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001670
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001671 /* These conditions are the caller's responsibility: */
1672 assert(PyList_Check(path_hooks));
1673 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001674
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001675 nhooks = PyList_Size(path_hooks);
1676 if (nhooks < 0)
1677 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001678
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001679 importer = PyDict_GetItem(path_importer_cache, p);
1680 if (importer != NULL)
1681 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001682
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001683 /* set path_importer_cache[p] to None to avoid recursion */
1684 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1685 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001686
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001687 for (j = 0; j < nhooks; j++) {
1688 PyObject *hook = PyList_GetItem(path_hooks, j);
1689 if (hook == NULL)
1690 return NULL;
1691 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1692 if (importer != NULL)
1693 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001694
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001695 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1696 return NULL;
1697 }
1698 PyErr_Clear();
1699 }
1700 if (importer == NULL) {
1701 importer = PyObject_CallFunctionObjArgs(
1702 (PyObject *)&PyNullImporter_Type, p, NULL
1703 );
1704 if (importer == NULL) {
1705 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1706 PyErr_Clear();
1707 return Py_None;
1708 }
1709 }
1710 }
1711 if (importer != NULL) {
1712 int err = PyDict_SetItem(path_importer_cache, p, importer);
1713 Py_DECREF(importer);
1714 if (err != 0)
1715 return NULL;
1716 }
1717 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001718}
1719
Christian Heimes9cd17752007-11-18 19:35:23 +00001720PyAPI_FUNC(PyObject *)
1721PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001722 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001723
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001724 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1725 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1726 importer = get_path_importer(path_importer_cache,
1727 path_hooks, path);
1728 }
1729 }
1730 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1731 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001732}
1733
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001734/* Search the path (default sys.path) for a module. Return the
1735 corresponding filedescr struct, and (via return arguments) the
1736 pathname and an open file. Return NULL if the module is not found. */
1737
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001738#ifdef MS_COREDLL
Victor Stinner4d6c1c42011-03-08 23:49:04 +01001739extern FILE *_PyWin_FindRegisteredModule(PyObject *, struct filedescr **,
1740 PyObject **p_path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001741#endif
1742
Victor Stinner547a2a62011-03-20 03:07:28 +01001743/* Forward */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001744static int case_ok(PyObject *, Py_ssize_t, PyObject *);
Victor Stinner547a2a62011-03-20 03:07:28 +01001745static int find_init_module(PyObject *);
Just van Rossum52e14d62002-12-30 22:08:05 +00001746static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001747
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001748/* Get the path of a module: get its importer and call importer.find_module()
1749 hook, or check if the module if a package (if path/__init__.py exists).
1750
1751 -1: error: a Python error occurred
1752 0: ignore: an error occurred because of invalid data, but the error is not
1753 important enough to be reported.
1754 1: get path: module not found, but *buf contains its path
1755 2: found: *p_fd is the file descriptor (IMP_HOOK or PKG_DIRECTORY)
1756 and *buf is the path */
1757
1758static int
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001759find_module_path(PyObject *fullname, PyObject *name, PyObject *path,
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001760 PyObject *path_hooks, PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001761 PyObject **p_path, PyObject **p_loader, struct filedescr **p_fd)
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001762{
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001763 PyObject *path_unicode, *filename = NULL;
1764 Py_ssize_t len, pos;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001765 struct stat statbuf;
1766 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001767 int err, result, addsep;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001768
1769 if (PyUnicode_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001770 Py_INCREF(path);
1771 path_unicode = path;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001772 }
1773 else if (PyBytes_Check(path)) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001774 path_unicode = PyUnicode_DecodeFSDefaultAndSize(
1775 PyBytes_AS_STRING(path), PyBytes_GET_SIZE(path));
1776 if (path_unicode == NULL)
1777 return -1;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001778 }
1779 else
1780 return 0;
1781
Victor Stinner46084ba2011-10-06 02:39:42 +02001782 if (PyUnicode_READY(path_unicode))
1783 return -1;
1784
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001785 len = PyUnicode_GET_LENGTH(path_unicode);
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001786 if (PyUnicode_FindChar(path_unicode, 0, 0, len, 1) != -1) {
1787 result = 0;
1788 goto out; /* path contains '\0' */
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001789 }
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001790
1791 /* sys.path_hooks import hook */
1792 if (p_loader != NULL) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001793 _Py_IDENTIFIER(find_module);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001794 PyObject *importer;
1795
1796 importer = get_path_importer(path_importer_cache,
1797 path_hooks, path);
1798 if (importer == NULL) {
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001799 result = -1;
1800 goto out;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001801 }
1802 /* Note: importer is a borrowed reference */
1803 if (importer != Py_None) {
1804 PyObject *loader;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001805 loader = _PyObject_CallMethodId(importer,
1806 &PyId_find_module, "O", fullname);
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001807 if (loader == NULL) {
1808 result = -1; /* error */
1809 goto out;
1810 }
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001811 if (loader != Py_None) {
1812 /* a loader was found */
1813 *p_loader = loader;
1814 *p_fd = &importhookdescr;
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001815 result = 2;
1816 goto out;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001817 }
1818 Py_DECREF(loader);
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001819 result = 0;
1820 goto out;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001821 }
1822 }
1823 /* no hook was found, use builtin import */
1824
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001825 addsep = 0;
1826 if (len > 0 && PyUnicode_READ_CHAR(path_unicode, len-1) != SEP
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001827#ifdef ALTSEP
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001828 && PyUnicode_READ_CHAR(path_unicode, len-1) != ALTSEP
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001829#endif
1830 )
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001831 addsep = 1;
1832 filename = PyUnicode_New(len + PyUnicode_GET_LENGTH(name) + addsep,
1833 Py_MAX(PyUnicode_MAX_CHAR_VALUE(path_unicode),
1834 PyUnicode_MAX_CHAR_VALUE(name)));
1835 if (filename == NULL) {
1836 result = -1;
1837 goto out;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001838 }
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001839 PyUnicode_CopyCharacters(filename, 0, path_unicode, 0, len);
1840 pos = len;
1841 if (addsep)
Victor Stinner1f795172011-11-17 00:45:54 +01001842 PyUnicode_WRITE(PyUnicode_KIND(filename),
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001843 PyUnicode_DATA(filename),
1844 pos++, SEP);
Victor Stinner1f795172011-11-17 00:45:54 +01001845 PyUnicode_CopyCharacters(filename, pos, name, 0,
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001846 PyUnicode_GET_LENGTH(name));
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001847
1848 /* Check for package import (buf holds a directory name,
1849 and there's an __init__ module in that directory */
1850#ifdef HAVE_STAT
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001851 err = _Py_stat(filename, &statbuf);
1852 if (err == -2) {
1853 result = -1;
1854 goto out;
1855 }
1856 if (err == 0 && /* it exists */
Victor Stinnerd0296212011-03-14 14:04:10 -04001857 S_ISDIR(statbuf.st_mode)) /* it's a directory */
1858 {
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001859 int match;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001860
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001861 match = case_ok(filename, 0, name);
1862 if (match < 0) {
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001863 result = -1;
1864 goto out;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001865 }
1866 if (match) { /* case matches */
1867 if (find_init_module(filename)) { /* and has __init__.py */
Victor Stinner2fd76e42011-03-14 15:19:39 -04001868 *p_path = filename;
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001869 filename = NULL;
Victor Stinnerd0296212011-03-14 14:04:10 -04001870 *p_fd = &fd_package;
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001871 result = 2;
1872 goto out;
Victor Stinnerd0296212011-03-14 14:04:10 -04001873 }
1874 else {
1875 int err;
Victor Stinnerd0296212011-03-14 14:04:10 -04001876 err = PyErr_WarnFormat(PyExc_ImportWarning, 1,
Victor Stinner547a2a62011-03-20 03:07:28 +01001877 "Not importing directory %R: missing __init__.py",
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001878 filename);
Victor Stinner547a2a62011-03-20 03:07:28 +01001879 if (err) {
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001880 result = -1;
1881 goto out;
Victor Stinner547a2a62011-03-20 03:07:28 +01001882 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001883 }
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001884 }
1885 }
1886#endif
Victor Stinner2fd76e42011-03-14 15:19:39 -04001887 *p_path = filename;
Martin v. Löwis9af29d32011-10-23 18:45:16 +02001888 filename = NULL;
1889 result = 1;
1890 out:
1891 Py_DECREF(path_unicode);
1892 Py_XDECREF(filename);
1893 return result;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001894}
1895
1896/* Find a module in search_path_list. For each path, try
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001897 find_module_path() or try each _PyImport_Filetab suffix.
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001898
1899 If the module is found, return a file descriptor, write the path in
1900 *p_filename, write the pointer to the file object into *p_fp, and (if
1901 p_loader is not NULL) the loader into *p_loader.
1902
1903 Otherwise, raise an exception and return NULL. */
1904
Victor Stinner37580282011-03-20 01:34:43 +01001905static struct filedescr*
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001906find_module_path_list(PyObject *fullname, PyObject *name,
Victor Stinner37580282011-03-20 01:34:43 +01001907 PyObject *search_path_list, PyObject *path_hooks,
1908 PyObject *path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001909 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001910{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001911 Py_ssize_t i, npath;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001912 struct filedescr *fdp = NULL;
1913 char *filemode;
1914 FILE *fp = NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001915 PyObject *prefix, *filename;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001916 int match;
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001917 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01001918
Victor Stinner37580282011-03-20 01:34:43 +01001919 npath = PyList_Size(search_path_list);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001920 for (i = 0; i < npath; i++) {
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001921 PyObject *path;
1922 int ok;
1923
1924 path = PyList_GetItem(search_path_list, i);
1925 if (path == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001926 return NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001927
Victor Stinner2fd76e42011-03-14 15:19:39 -04001928 prefix = NULL;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001929 ok = find_module_path(fullname, name, path,
1930 path_hooks, path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04001931 &prefix, p_loader, &fdp);
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001932 if (ok < 0)
1933 return NULL;
1934 if (ok == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001935 continue;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001936 if (ok == 2) {
1937 *p_path = prefix;
Victor Stinnerd68c2cf2011-03-12 16:02:28 -05001938 return fdp;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001939 }
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001940
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001941 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001942 struct stat statbuf;
1943
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001944 filemode = fdp->mode;
1945 if (filemode[0] == 'U')
1946 filemode = "r" PY_STDIOTEXTMODE;
Victor Stinnerd0296212011-03-14 14:04:10 -04001947
Victor Stinner2fd76e42011-03-14 15:19:39 -04001948 filename = PyUnicode_FromFormat("%U%s", prefix, fdp->suffix);
1949 if (filename == NULL) {
1950 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001951 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04001952 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001953
1954 if (Py_VerboseFlag > 1)
1955 PySys_FormatStderr("# trying %R\n", filename);
1956
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001957 err = _Py_stat(filename, &statbuf);
1958 if (err == -2) {
1959 Py_DECREF(prefix);
1960 Py_DECREF(filename);
1961 return NULL;
1962 }
1963 if (err != 0 || S_ISDIR(statbuf.st_mode)) {
Charles-François Natali1659b832011-12-07 23:17:58 +01001964 /* it doesn't exist, or it's a directory */
Victor Stinnera1fe1f82011-09-23 18:59:08 +02001965 Py_DECREF(filename);
1966 continue;
1967 }
1968
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001969 fp = _Py_fopen(filename, filemode);
1970 if (fp == NULL) {
1971 Py_DECREF(filename);
Victor Stinner925ef392011-06-20 15:01:10 +02001972 if (PyErr_Occurred()) {
1973 Py_DECREF(prefix);
1974 return NULL;
1975 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001976 continue;
1977 }
1978 match = case_ok(filename, -(Py_ssize_t)strlen(fdp->suffix), name);
1979 if (match < 0) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001980 Py_DECREF(prefix);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001981 Py_DECREF(filename);
1982 return NULL;
1983 }
1984 if (match) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04001985 Py_DECREF(prefix);
1986 *p_path = filename;
Victor Stinnerd0296212011-03-14 14:04:10 -04001987 *p_fp = fp;
1988 return fdp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001989 }
Victor Stinnerc9a271c2011-03-14 14:34:13 -04001990 Py_DECREF(filename);
Victor Stinnerd0296212011-03-14 14:04:10 -04001991
1992 fclose(fp);
1993 fp = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001994 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04001995 Py_DECREF(prefix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001996 }
Victor Stinnerd0296212011-03-14 14:04:10 -04001997 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04001998 "No module named %R", name);
Victor Stinnerd0296212011-03-14 14:04:10 -04001999 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002000}
2001
Victor Stinner37580282011-03-20 01:34:43 +01002002/* Find a module:
2003
2004 - try find_module() of each sys.meta_path hook
2005 - try find_frozen()
2006 - try is_builtin()
2007 - try _PyWin_FindRegisteredModule() (Windows only)
2008 - otherwise, call find_module_path_list() with search_path_list (if not
2009 NULL) or sys.path
2010
Victor Stinner2fd76e42011-03-14 15:19:39 -04002011 fullname can be NULL, but only if p_loader is NULL.
2012
Victor Stinner37580282011-03-20 01:34:43 +01002013 Return:
2014
2015 - &fd_builtin (C_BUILTIN) if it is a builtin
2016 - &fd_frozen (PY_FROZEN) if it is frozen
Victor Stinner2fd76e42011-03-14 15:19:39 -04002017 - &fd_package (PKG_DIRECTORY) and write the filename into *p_path
Victor Stinner37580282011-03-20 01:34:43 +01002018 if it is a package
2019 - &importhookdescr (IMP_HOOK) and write the loader into *p_loader if a
2020 importer loader was found
2021 - a file descriptor (PY_SOURCE, PY_COMPILED, C_EXTENSION, PY_RESOURCE or
2022 PY_CODERESOURCE: see _PyImport_Filetab), write the filename into
Victor Stinner2fd76e42011-03-14 15:19:39 -04002023 *p_path and the pointer to the open file into *p_fp
Victor Stinner37580282011-03-20 01:34:43 +01002024 - NULL on error
2025
Victor Stinner2fd76e42011-03-14 15:19:39 -04002026 By default, *p_path, *p_fp and *p_loader (if set) are set to NULL.
2027 Eg. *p_path is set to NULL for a builtin package.
2028*/
Victor Stinner37580282011-03-20 01:34:43 +01002029
2030static struct filedescr *
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002031find_module(PyObject *fullname, PyObject *name, PyObject *search_path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04002032 PyObject **p_path, FILE **p_fp, PyObject **p_loader)
Victor Stinner37580282011-03-20 01:34:43 +01002033{
2034 Py_ssize_t i, npath;
2035 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
2036 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
2037 PyObject *path_hooks, *path_importer_cache;
Victor Stinner37580282011-03-20 01:34:43 +01002038
Victor Stinner2fd76e42011-03-14 15:19:39 -04002039 *p_path = NULL;
Victor Stinner37580282011-03-20 01:34:43 +01002040 *p_fp = NULL;
2041 if (p_loader != NULL)
2042 *p_loader = NULL;
2043
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002044 if (PyUnicode_GET_LENGTH(name) > MAXPATHLEN) {
2045 PyErr_SetString(PyExc_OverflowError,
2046 "module name is too long");
2047 return NULL;
2048 }
2049
Victor Stinner37580282011-03-20 01:34:43 +01002050 /* sys.meta_path import hook */
2051 if (p_loader != NULL) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002052 _Py_IDENTIFIER(find_module);
Victor Stinner37580282011-03-20 01:34:43 +01002053 PyObject *meta_path;
2054
2055 meta_path = PySys_GetObject("meta_path");
2056 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinner16191322011-09-15 19:28:05 +02002057 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002058 "sys.meta_path must be a list of "
2059 "import hooks");
2060 return NULL;
2061 }
2062 Py_INCREF(meta_path); /* zap guard */
2063 npath = PyList_Size(meta_path);
2064 for (i = 0; i < npath; i++) {
2065 PyObject *loader;
2066 PyObject *hook = PyList_GetItem(meta_path, i);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002067 loader = _PyObject_CallMethodId(hook, &PyId_find_module,
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002068 "OO", fullname,
Victor Stinner37580282011-03-20 01:34:43 +01002069 search_path_list != NULL ?
2070 search_path_list : Py_None);
2071 if (loader == NULL) {
2072 Py_DECREF(meta_path);
2073 return NULL; /* true error */
2074 }
2075 if (loader != Py_None) {
2076 /* a loader was found */
2077 *p_loader = loader;
2078 Py_DECREF(meta_path);
2079 return &importhookdescr;
2080 }
2081 Py_DECREF(loader);
2082 }
2083 Py_DECREF(meta_path);
2084 }
2085
Victor Stinnerdf75a022011-03-14 13:40:04 -04002086 if (find_frozen(fullname) != NULL)
Victor Stinnerad3c03b2011-03-14 09:21:33 -04002087 return &fd_frozen;
Victor Stinner37580282011-03-20 01:34:43 +01002088
2089 if (search_path_list == NULL) {
2090#ifdef MS_COREDLL
2091 FILE *fp;
2092 struct filedescr *fdp;
Victor Stinner37580282011-03-20 01:34:43 +01002093#endif
Victor Stinnerdf75a022011-03-14 13:40:04 -04002094 if (is_builtin(name))
Victor Stinner37580282011-03-20 01:34:43 +01002095 return &fd_builtin;
Victor Stinner37580282011-03-20 01:34:43 +01002096#ifdef MS_COREDLL
Victor Stinner2fd76e42011-03-14 15:19:39 -04002097 fp = _PyWin_FindRegisteredModule(name, &fdp, p_path);
Victor Stinner37580282011-03-20 01:34:43 +01002098 if (fp != NULL) {
Victor Stinner37580282011-03-20 01:34:43 +01002099 *p_fp = fp;
2100 return fdp;
2101 }
2102 else if (PyErr_Occurred())
2103 return NULL;
2104#endif
Victor Stinner37580282011-03-20 01:34:43 +01002105 search_path_list = PySys_GetObject("path");
2106 }
2107
2108 if (search_path_list == NULL || !PyList_Check(search_path_list)) {
Victor Stinner16191322011-09-15 19:28:05 +02002109 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002110 "sys.path must be a list of directory names");
2111 return NULL;
2112 }
2113
2114 path_hooks = PySys_GetObject("path_hooks");
2115 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinner16191322011-09-15 19:28:05 +02002116 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002117 "sys.path_hooks must be a list of "
2118 "import hooks");
2119 return NULL;
2120 }
2121 path_importer_cache = PySys_GetObject("path_importer_cache");
2122 if (path_importer_cache == NULL ||
2123 !PyDict_Check(path_importer_cache)) {
Victor Stinner16191322011-09-15 19:28:05 +02002124 PyErr_SetString(PyExc_RuntimeError,
Victor Stinner37580282011-03-20 01:34:43 +01002125 "sys.path_importer_cache must be a dict");
2126 return NULL;
2127 }
2128
2129 return find_module_path_list(fullname, name,
2130 search_path_list, path_hooks,
2131 path_importer_cache,
Victor Stinner2fd76e42011-03-14 15:19:39 -04002132 p_path, p_fp, p_loader);
Victor Stinner37580282011-03-20 01:34:43 +01002133}
2134
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002135/* case_bytes(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00002136 * The arguments here are tricky, best shown by example:
2137 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
2138 * ^ ^ ^ ^
2139 * |--------------------- buf ---------------------|
2140 * |------------------- len ------------------|
2141 * |------ name -------|
2142 * |----- namelen -----|
2143 * buf is the full path, but len only counts up to (& exclusive of) the
2144 * extension. name is the module name, also exclusive of extension.
2145 *
2146 * We've already done a successful stat() or fopen() on buf, so know that
2147 * there's some match, possibly case-insensitive.
2148 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002149 * case_bytes() is to return 1 if there's a case-sensitive match for
2150 * name, else 0. case_bytes() is also to return 1 if envar PYTHONCASEOK
Tim Peters50d8d372001-02-28 05:34:27 +00002151 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00002152 *
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002153 * case_bytes() is used to implement case-sensitive import semantics even
Tim Peters50d8d372001-02-28 05:34:27 +00002154 * on platforms with case-insensitive filesystems. It's trivial to implement
2155 * for case-sensitive filesystems. It's pretty much a cross-platform
2156 * nightmare for systems with case-insensitive filesystems.
2157 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00002158
Tim Peters50d8d372001-02-28 05:34:27 +00002159/* First we may need a pile of platform-specific header files; the sequence
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002160 * of #if's here should match the sequence in the body of case_bytes().
Tim Peters50d8d372001-02-28 05:34:27 +00002161 */
Jason Tishler7961aa62005-05-20 00:56:54 +00002162#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002163#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00002164
Tim Peters50d8d372001-02-28 05:34:27 +00002165#elif defined(DJGPP)
2166#include <dir.h>
2167
Jason Tishler7961aa62005-05-20 00:56:54 +00002168#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00002169#include <sys/types.h>
2170#include <dirent.h>
2171
Andrew MacIntyred9400542002-02-26 11:41:34 +00002172#elif defined(PYOS_OS2)
2173#define INCL_DOS
2174#define INCL_DOSERRORS
2175#define INCL_NOPMAPI
2176#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00002177#endif
2178
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002179#if defined(DJGPP) \
2180 || ((defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) \
2181 && defined(HAVE_DIRENT_H)) \
2182 || defined(PYOS_OS2)
2183# define USE_CASE_OK_BYTES
2184#endif
2185
2186
2187#ifdef USE_CASE_OK_BYTES
Guido van Rossum0980bd91998-02-13 17:18:36 +00002188static int
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002189case_bytes(char *buf, Py_ssize_t len, Py_ssize_t namelen, const char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00002190{
Tim Peters50d8d372001-02-28 05:34:27 +00002191/* Pick a platform-specific implementation; the sequence of #if's here should
2192 * match the sequence just above.
2193 */
2194
Tim Peters50d8d372001-02-28 05:34:27 +00002195/* DJGPP */
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002196#if defined(DJGPP)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002197 struct ffblk ffblk;
2198 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00002199
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002200 if (Py_GETENV("PYTHONCASEOK") != NULL)
2201 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00002202
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002203 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
2204 if (done) {
2205 PyErr_Format(PyExc_NameError,
2206 "Can't find file for module %.100s\n(filename %.300s)",
2207 name, buf);
Victor Stinner9c61e242011-03-22 01:22:27 +01002208 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002209 }
2210 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002211
Jason Tishler7961aa62005-05-20 00:56:54 +00002212/* new-fangled macintosh (macosx) or Cygwin */
2213#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002214 DIR *dirp;
2215 struct dirent *dp;
2216 char dirname[MAXPATHLEN + 1];
2217 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00002218
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002219 if (Py_GETENV("PYTHONCASEOK") != NULL)
2220 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00002221
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002222 /* Copy the dir component into dirname; substitute "." if empty */
2223 if (dirlen <= 0) {
2224 dirname[0] = '.';
2225 dirname[1] = '\0';
2226 }
2227 else {
2228 assert(dirlen <= MAXPATHLEN);
2229 memcpy(dirname, buf, dirlen);
2230 dirname[dirlen] = '\0';
2231 }
2232 /* Open the directory and search the entries for an exact match. */
2233 dirp = opendir(dirname);
2234 if (dirp) {
2235 char *nameWithExt = buf + len - namelen;
2236 while ((dp = readdir(dirp)) != NULL) {
2237 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00002238#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002239 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00002240#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002241 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00002242#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002243 if (thislen >= namelen &&
2244 strcmp(dp->d_name, nameWithExt) == 0) {
2245 (void)closedir(dirp);
2246 return 1; /* Found */
2247 }
2248 }
2249 (void)closedir(dirp);
2250 }
2251 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00002252
Andrew MacIntyred9400542002-02-26 11:41:34 +00002253/* OS/2 */
2254#elif defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002255 HDIR hdir = 1;
2256 ULONG srchcnt = 1;
2257 FILEFINDBUF3 ffbuf;
2258 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002259
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002260 if (Py_GETENV("PYTHONCASEOK") != NULL)
2261 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002262
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002263 rc = DosFindFirst(buf,
2264 &hdir,
2265 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
2266 &ffbuf, sizeof(ffbuf),
2267 &srchcnt,
2268 FIL_STANDARD);
2269 if (rc != NO_ERROR)
2270 return 0;
2271 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002272
Tim Peters50d8d372001-02-28 05:34:27 +00002273/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
2274#else
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002275# error "USE_CASE_OK_BYTES is not correctly defined"
2276#endif
2277}
2278#endif
2279
2280/*
2281 * Check if a filename case matchs the name case. We've already done a
2282 * successful stat() or fopen() on buf, so know that there's some match,
2283 * possibly case-insensitive.
2284 *
2285 * case_ok() is to return 1 if there's a case-sensitive match for name, 0 if it
2286 * the filename doesn't match, or -1 on error. case_ok() is also to return 1
2287 * if envar PYTHONCASEOK exists.
2288 *
2289 * case_ok() is used to implement case-sensitive import semantics even
2290 * on platforms with case-insensitive filesystems. It's trivial to implement
2291 * for case-sensitive filesystems. It's pretty much a cross-platform
2292 * nightmare for systems with case-insensitive filesystems.
2293 */
2294
2295static int
2296case_ok(PyObject *filename, Py_ssize_t prefix_delta, PyObject *name)
2297{
2298#ifdef MS_WINDOWS
2299 WIN32_FIND_DATAW data;
2300 HANDLE h;
2301 int cmp;
Victor Stinner1f795172011-11-17 00:45:54 +01002302 wchar_t *wfilename, *wname;
Victor Stinner8c981892011-10-11 22:27:13 +02002303 Py_ssize_t wname_len;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002304
2305 if (Py_GETENV("PYTHONCASEOK") != NULL)
2306 return 1;
2307
Victor Stinner1f795172011-11-17 00:45:54 +01002308 wfilename = PyUnicode_AsUnicode(filename);
2309 if (wfilename == NULL)
2310 return -1;
2311
2312 h = FindFirstFileW(wfilename, &data);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002313 if (h == INVALID_HANDLE_VALUE) {
2314 PyErr_Format(PyExc_NameError,
2315 "Can't find file for module %R\n(filename %R)",
2316 name, filename);
Victor Stinner1f795172011-11-17 00:45:54 +01002317 return -1;
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002318 }
2319 FindClose(h);
Victor Stinnerbeac78b2011-10-11 21:55:01 +02002320
2321 wname = PyUnicode_AsUnicodeAndSize(name, &wname_len);
2322 if (wname == NULL)
2323 return -1;
2324
2325 cmp = wcsncmp(data.cFileName, wname, wname_len);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002326 return cmp == 0;
2327#elif defined(USE_CASE_OK_BYTES)
2328 int match;
2329 PyObject *filebytes, *namebytes;
2330 filebytes = PyUnicode_EncodeFSDefault(filename);
2331 if (filebytes == NULL)
2332 return -1;
2333 namebytes = PyUnicode_EncodeFSDefault(name);
2334 if (namebytes == NULL) {
2335 Py_DECREF(filebytes);
2336 return -1;
2337 }
2338 match = case_bytes(
2339 PyBytes_AS_STRING(filebytes),
2340 PyBytes_GET_SIZE(filebytes) + prefix_delta,
Victor Stinner1304f2d2011-03-20 04:28:55 +01002341 PyBytes_GET_SIZE(namebytes),
2342 PyBytes_AS_STRING(namebytes));
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002343 Py_DECREF(filebytes);
2344 Py_DECREF(namebytes);
2345 return match;
2346#else
2347 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002348 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002349
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002350#endif
Tim Peters50d8d372001-02-28 05:34:27 +00002351}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002352
Guido van Rossum197346f1997-10-31 18:38:52 +00002353#ifdef HAVE_STAT
Victor Stinner4f4402c2010-08-14 14:50:26 +00002354
Victor Stinner547a2a62011-03-20 03:07:28 +01002355/* Helper to look for __init__.py or __init__.py[co] in potential package.
2356 Return 1 if __init__ was found, 0 if not, or -1 on error. */
Guido van Rossum197346f1997-10-31 18:38:52 +00002357static int
Victor Stinner547a2a62011-03-20 03:07:28 +01002358find_init_module(PyObject *directory)
Guido van Rossum197346f1997-10-31 18:38:52 +00002359{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002360 struct stat statbuf;
Victor Stinner547a2a62011-03-20 03:07:28 +01002361 PyObject *filename;
2362 int match;
Victor Stinnerbd0850b2011-12-18 20:47:30 +01002363 int err;
Guido van Rossum197346f1997-10-31 18:38:52 +00002364
Victor Stinner547a2a62011-03-20 03:07:28 +01002365 filename = PyUnicode_FromFormat("%U%c__init__.py", directory, SEP);
2366 if (filename == NULL)
2367 return -1;
Victor Stinnerbd0850b2011-12-18 20:47:30 +01002368 err = _Py_stat(filename, &statbuf);
2369 if (err == -2)
2370 return -1;
2371 if (err == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002372 /* 3=len(".py") */
2373 match = case_ok(filename, -3, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002374 if (match < 0) {
2375 Py_DECREF(filename);
2376 return -1;
2377 }
2378 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002379 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002380 return 1;
2381 }
2382 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002383 Py_DECREF(filename);
2384
2385 filename = PyUnicode_FromFormat("%U%c__init__.py%c",
2386 directory, SEP, Py_OptimizeFlag ? 'o' : 'c');
2387 if (filename == NULL)
2388 return -1;
Victor Stinnerbd0850b2011-12-18 20:47:30 +01002389 err = _Py_stat(filename, &statbuf);
2390 if (err == -2) {
2391 Py_DECREF(filename);
2392 return -1;
2393 }
2394 if (err == 0) {
Victor Stinnercc9564e2011-03-20 04:58:29 +01002395 /* 4=len(".pyc") */
2396 match = case_ok(filename, -4, initstr);
Victor Stinnerc9a271c2011-03-14 14:34:13 -04002397 if (match < 0) {
2398 Py_DECREF(filename);
2399 return -1;
2400 }
2401 if (match) {
Victor Stinner547a2a62011-03-20 03:07:28 +01002402 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002403 return 1;
2404 }
2405 }
Victor Stinner547a2a62011-03-20 03:07:28 +01002406 Py_DECREF(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002407 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00002408}
Guido van Rossum48a680c2001-03-02 06:34:14 +00002409
Guido van Rossum197346f1997-10-31 18:38:52 +00002410#endif /* HAVE_STAT */
2411
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002412
Victor Stinner95872862011-03-07 18:20:56 +01002413static int init_builtin(PyObject *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002414
Victor Stinner44c6c152010-08-09 00:59:10 +00002415static PyObject*
Victor Stinner95872862011-03-07 18:20:56 +01002416load_builtin(PyObject *name, int type)
Victor Stinner44c6c152010-08-09 00:59:10 +00002417{
2418 PyObject *m, *modules;
2419 int err;
2420
Victor Stinner44c6c152010-08-09 00:59:10 +00002421 if (type == C_BUILTIN)
2422 err = init_builtin(name);
2423 else
Victor Stinner95872862011-03-07 18:20:56 +01002424 err = PyImport_ImportFrozenModuleObject(name);
Victor Stinner44c6c152010-08-09 00:59:10 +00002425 if (err < 0)
2426 return NULL;
2427 if (err == 0) {
2428 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002429 "Purported %s module %R not found",
2430 type == C_BUILTIN ? "builtin" : "frozen",
Victor Stinner44c6c152010-08-09 00:59:10 +00002431 name);
2432 return NULL;
2433 }
2434
2435 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +01002436 m = PyDict_GetItem(modules, name);
Victor Stinner44c6c152010-08-09 00:59:10 +00002437 if (m == NULL) {
2438 PyErr_Format(
2439 PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002440 "%s module %R not properly initialized",
2441 type == C_BUILTIN ? "builtin" : "frozen",
Victor Stinner44c6c152010-08-09 00:59:10 +00002442 name);
2443 return NULL;
2444 }
2445 Py_INCREF(m);
2446 return m;
2447}
2448
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002449/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002450 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002451
Guido van Rossum79f25d91997-04-29 20:08:16 +00002452static PyObject *
Victor Stinner41c5fec2011-03-13 21:46:30 -04002453load_module(PyObject *name, FILE *fp, PyObject *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002454{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002455 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002456
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002457 /* First check that there's an open file (if we need one) */
2458 switch (type) {
2459 case PY_SOURCE:
2460 case PY_COMPILED:
2461 if (fp == NULL) {
2462 PyErr_Format(PyExc_ValueError,
Victor Stinner41c5fec2011-03-13 21:46:30 -04002463 "file object required for import (type code %d)",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002464 type);
2465 return NULL;
2466 }
2467 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002468
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002469 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002470
Victor Stinner41c5fec2011-03-13 21:46:30 -04002471 case PY_SOURCE:
2472 m = load_source_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002473 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002474
Victor Stinner41c5fec2011-03-13 21:46:30 -04002475 case PY_COMPILED:
2476 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002477 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002478
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002479#ifdef HAVE_DYNAMIC_LOADING
Victor Stinner41c5fec2011-03-13 21:46:30 -04002480 case C_EXTENSION:
2481 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002482 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002483#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002484
Victor Stinner41c5fec2011-03-13 21:46:30 -04002485 case PKG_DIRECTORY:
2486 m = load_package(name, pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002487 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002488
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002489 case C_BUILTIN:
Victor Stinner41c5fec2011-03-13 21:46:30 -04002490 case PY_FROZEN:
2491 m = load_builtin(name, type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002492 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002493
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002494 case IMP_HOOK: {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002495 _Py_IDENTIFIER(load_module);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002496 if (loader == NULL) {
2497 PyErr_SetString(PyExc_ImportError,
2498 "import hook without loader");
2499 return NULL;
2500 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002501 m = _PyObject_CallMethodId(loader, &PyId_load_module, "O", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002502 break;
2503 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002504
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002505 default:
2506 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04002507 "Don't know how to import %R (type code %d)",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002508 name, type);
2509 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002510
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002511 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002512
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002513 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002514}
2515
2516
2517/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00002518 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002519 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002520
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002521static int
Victor Stinner95872862011-03-07 18:20:56 +01002522init_builtin(PyObject *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002523{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002524 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002525
Victor Stinner95872862011-03-07 18:20:56 +01002526 if (_PyImport_FindExtensionObject(name, name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002527 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002528
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002529 for (p = PyImport_Inittab; p->name != NULL; p++) {
2530 PyObject *mod;
Victor Stinner95872862011-03-07 18:20:56 +01002531 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002532 if (p->initfunc == NULL) {
2533 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01002534 "Cannot re-init internal module %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002535 name);
2536 return -1;
2537 }
2538 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +01002539 PySys_FormatStderr("import %U # builtin\n", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002540 mod = (*p->initfunc)();
2541 if (mod == 0)
2542 return -1;
Victor Stinner95872862011-03-07 18:20:56 +01002543 if (_PyImport_FixupExtensionObject(mod, name, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002544 return -1;
2545 /* FixupExtension has put the module into sys.modules,
2546 so we can release our own reference. */
2547 Py_DECREF(mod);
2548 return 1;
2549 }
2550 }
2551 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002552}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002553
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002554
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002555/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002556
Guido van Rossumcfd0a221996-06-17 17:06:34 +00002557static struct _frozen *
Victor Stinner53dc7352011-03-20 01:50:21 +01002558find_frozen(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002559{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002560 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002561
Victor Stinner53dc7352011-03-20 01:50:21 +01002562 if (name == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002563 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00002564
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002565 for (p = PyImport_FrozenModules; ; p++) {
2566 if (p->name == NULL)
2567 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01002568 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002569 break;
2570 }
2571 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002572}
2573
Guido van Rossum79f25d91997-04-29 20:08:16 +00002574static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002575get_frozen_object(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002576{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002577 struct _frozen *p = find_frozen(name);
2578 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002579
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002580 if (p == NULL) {
2581 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002582 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002583 name);
2584 return NULL;
2585 }
2586 if (p->code == NULL) {
2587 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002588 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002589 name);
2590 return NULL;
2591 }
2592 size = p->size;
2593 if (size < 0)
2594 size = -size;
2595 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002596}
2597
Brett Cannon8d110132009-03-15 02:20:16 +00002598static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01002599is_frozen_package(PyObject *name)
Brett Cannon8d110132009-03-15 02:20:16 +00002600{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002601 struct _frozen *p = find_frozen(name);
2602 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00002603
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002604 if (p == NULL) {
2605 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002606 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002607 name);
2608 return NULL;
2609 }
Brett Cannon8d110132009-03-15 02:20:16 +00002610
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002611 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00002612
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002613 if (size < 0)
2614 Py_RETURN_TRUE;
2615 else
2616 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00002617}
2618
2619
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002620/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00002621 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002622 an exception set if the initialization failed.
2623 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002624
2625int
Victor Stinner53dc7352011-03-20 01:50:21 +01002626PyImport_ImportFrozenModuleObject(PyObject *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002627{
Victor Stinner53dc7352011-03-20 01:50:21 +01002628 struct _frozen *p;
2629 PyObject *co, *m, *path;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002630 int ispackage;
2631 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002632
Victor Stinner53dc7352011-03-20 01:50:21 +01002633 p = find_frozen(name);
2634
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002635 if (p == NULL)
2636 return 0;
2637 if (p->code == NULL) {
2638 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002639 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002640 name);
2641 return -1;
2642 }
2643 size = p->size;
2644 ispackage = (size < 0);
2645 if (ispackage)
2646 size = -size;
2647 if (Py_VerboseFlag)
Victor Stinner53dc7352011-03-20 01:50:21 +01002648 PySys_FormatStderr("import %U # frozen%s\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002649 name, ispackage ? " package" : "");
2650 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2651 if (co == NULL)
2652 return -1;
2653 if (!PyCode_Check(co)) {
2654 PyErr_Format(PyExc_TypeError,
Victor Stinner53dc7352011-03-20 01:50:21 +01002655 "frozen object %R is not a code object",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002656 name);
2657 goto err_return;
2658 }
2659 if (ispackage) {
2660 /* Set __path__ to the package name */
Victor Stinner53dc7352011-03-20 01:50:21 +01002661 PyObject *d, *l;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002662 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01002663 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002664 if (m == NULL)
2665 goto err_return;
2666 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002667 l = PyList_New(1);
2668 if (l == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002669 goto err_return;
2670 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002671 Py_INCREF(name);
2672 PyList_SET_ITEM(l, 0, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002673 err = PyDict_SetItemString(d, "__path__", l);
2674 Py_DECREF(l);
2675 if (err != 0)
2676 goto err_return;
2677 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002678 path = PyUnicode_FromString("<frozen>");
2679 if (path == NULL)
2680 goto err_return;
2681 m = PyImport_ExecCodeModuleObject(name, co, path, NULL);
2682 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002683 if (m == NULL)
2684 goto err_return;
2685 Py_DECREF(co);
2686 Py_DECREF(m);
2687 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002688err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002689 Py_DECREF(co);
2690 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002691}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002692
Victor Stinner53dc7352011-03-20 01:50:21 +01002693int
2694PyImport_ImportFrozenModule(char *name)
2695{
2696 PyObject *nameobj;
2697 int ret;
2698 nameobj = PyUnicode_InternFromString(name);
2699 if (nameobj == NULL)
2700 return -1;
2701 ret = PyImport_ImportFrozenModuleObject(nameobj);
2702 Py_DECREF(nameobj);
2703 return ret;
2704}
2705
Guido van Rossum74e6a111994-08-29 12:54:38 +00002706
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002707/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002708 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002709
Guido van Rossum79f25d91997-04-29 20:08:16 +00002710PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002711PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002712{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002713 PyObject *pname;
2714 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002715
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002716 pname = PyUnicode_FromString(name);
2717 if (pname == NULL)
2718 return NULL;
2719 result = PyImport_Import(pname);
2720 Py_DECREF(pname);
2721 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002722}
2723
Christian Heimes072c0f12008-01-03 23:01:04 +00002724/* Import a module without blocking
2725 *
2726 * At first it tries to fetch the module from sys.modules. If the module was
2727 * never loaded before it loads it with PyImport_ImportModule() unless another
2728 * thread holds the import lock. In the latter case the function raises an
2729 * ImportError instead of blocking.
2730 *
2731 * Returns the module object with incremented ref count.
2732 */
2733PyObject *
2734PyImport_ImportModuleNoBlock(const char *name)
2735{
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002736 PyObject *nameobj, *modules, *result;
Victor Stinner0af03062011-09-02 00:11:43 +02002737#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002738 long me;
Victor Stinner0af03062011-09-02 00:11:43 +02002739#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002740
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002741 /* Try to get the module from sys.modules[name] */
2742 modules = PyImport_GetModuleDict();
2743 if (modules == NULL)
2744 return NULL;
Christian Heimes072c0f12008-01-03 23:01:04 +00002745
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002746 nameobj = PyUnicode_FromString(name);
2747 if (nameobj == NULL)
2748 return NULL;
2749 result = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002750 if (result != NULL) {
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002751 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002752 Py_INCREF(result);
2753 return result;
2754 }
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002755 PyErr_Clear();
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002756#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002757 /* check the import lock
2758 * me might be -1 but I ignore the error here, the lock function
2759 * takes care of the problem */
2760 me = PyThread_get_thread_ident();
2761 if (import_lock_thread == -1 || import_lock_thread == me) {
2762 /* no thread or me is holding the lock */
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002763 result = PyImport_Import(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002764 }
2765 else {
2766 PyErr_Format(PyExc_ImportError,
Victor Stinnerc24c8102011-03-13 22:38:06 -04002767 "Failed to import %R because the import lock"
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002768 "is held by another thread.",
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002769 nameobj);
2770 result = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002771 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002772#else
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002773 result = PyImport_Import(nameobj);
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002774#endif
Victor Stinner2e5f11a2011-03-13 21:57:27 -04002775 Py_DECREF(nameobj);
2776 return result;
Christian Heimes072c0f12008-01-03 23:01:04 +00002777}
2778
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002779/* Forward declarations for helper routines */
Victor Stinner974389d2011-03-15 09:33:57 +01002780static PyObject *get_parent(PyObject *globals,
2781 PyObject **p_name,
2782 int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002783static PyObject *load_next(PyObject *mod, PyObject *altmod,
Victor Stinner974389d2011-03-15 09:33:57 +01002784 PyObject *inputname, PyObject **p_outputname,
Martin v. Löwisf45dee92011-10-30 23:50:02 +01002785 PyObject **p_prefix);
Victor Stinner974389d2011-03-15 09:33:57 +01002786static int mark_miss(PyObject *name);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002787static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Victor Stinner974389d2011-03-15 09:33:57 +01002788 PyObject *buf, int recursive);
2789static PyObject * import_submodule(PyObject *mod, PyObject *name,
2790 PyObject *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002791
2792/* The Magnum Opus of dotted-name import :-) */
2793
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002794static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01002795import_module_level(PyObject *name, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002796 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002797{
Martin v. Löwisf45dee92011-10-30 23:50:02 +01002798 PyObject *parent, *next, *inputname, *outputname;
2799 PyObject *head = NULL;
2800 PyObject *tail = NULL;
2801 PyObject *prefix = NULL;
2802 PyObject *result = NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002803 Py_ssize_t sep, altsep;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002804
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002805 if (PyUnicode_READY(name))
2806 return NULL;
Victor Stinner974389d2011-03-15 09:33:57 +01002807
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002808 sep = PyUnicode_FindChar(name, SEP, 0, PyUnicode_GET_LENGTH(name), 1);
2809 if (sep == -2)
2810 return NULL;
Victor Stinner974389d2011-03-15 09:33:57 +01002811#ifdef ALTSEP
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002812 altsep = PyUnicode_FindChar(name, ALTSEP, 0, PyUnicode_GET_LENGTH(name), 1);
2813 if (altsep == -2)
2814 return NULL;
2815#else
2816 altsep = -1;
Christian Heimes454f37b2008-01-10 00:10:02 +00002817#endif
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002818 if (sep != -1 || altsep != -1)
2819 {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002820 PyErr_SetString(PyExc_ImportError,
2821 "Import by filename is not supported.");
2822 return NULL;
2823 }
Christian Heimes454f37b2008-01-10 00:10:02 +00002824
Martin v. Löwisf45dee92011-10-30 23:50:02 +01002825 parent = get_parent(globals, &prefix, level);
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002826 if (parent == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002827 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002828 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002829
Martin v. Löwisf45dee92011-10-30 23:50:02 +01002830 if (PyUnicode_READY(prefix))
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002831 return NULL;
Victor Stinner974389d2011-03-15 09:33:57 +01002832
2833 head = load_next(parent, level < 0 ? Py_None : parent, name, &outputname,
Martin v. Löwisf45dee92011-10-30 23:50:02 +01002834 &prefix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002835 if (head == NULL)
Martin v. Löwisf45dee92011-10-30 23:50:02 +01002836 goto out;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002837
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002838 tail = head;
2839 Py_INCREF(tail);
Victor Stinner974389d2011-03-15 09:33:57 +01002840
2841 if (outputname != NULL) {
2842 while (1) {
2843 inputname = outputname;
2844 next = load_next(tail, tail, inputname, &outputname,
Martin v. Löwisf45dee92011-10-30 23:50:02 +01002845 &prefix);
2846 Py_CLEAR(tail);
2847 Py_CLEAR(inputname);
2848 if (next == NULL)
2849 goto out;
Victor Stinner974389d2011-03-15 09:33:57 +01002850 tail = next;
2851
2852 if (outputname == NULL) {
2853 break;
2854 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002855 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002856 }
2857 if (tail == Py_None) {
2858 /* If tail is Py_None, both get_parent and load_next found
2859 an empty module name: someone called __import__("") or
2860 doctored faulty bytecode */
Victor Stinner974389d2011-03-15 09:33:57 +01002861 PyErr_SetString(PyExc_ValueError, "Empty module name");
Martin v. Löwisf45dee92011-10-30 23:50:02 +01002862 goto out;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002863 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002864
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002865 if (fromlist != NULL) {
2866 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2867 fromlist = NULL;
2868 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002869
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002870 if (fromlist == NULL) {
Martin v. Löwisf45dee92011-10-30 23:50:02 +01002871 result = head;
2872 Py_INCREF(result);
2873 goto out;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002874 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002875
Martin v. Löwisf45dee92011-10-30 23:50:02 +01002876 if (!ensure_fromlist(tail, fromlist, prefix, 0))
2877 goto out;
Victor Stinner1f795172011-11-17 00:45:54 +01002878
Martin v. Löwisf45dee92011-10-30 23:50:02 +01002879 result = tail;
2880 Py_INCREF(result);
2881 out:
2882 Py_XDECREF(head);
2883 Py_XDECREF(tail);
2884 Py_XDECREF(prefix);
2885 return result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002886}
2887
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002888PyObject *
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002889PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
2890 PyObject *locals, PyObject *fromlist,
2891 int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002892{
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002893 PyObject *mod;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002894 _PyImport_AcquireLock();
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002895 mod = import_module_level(name, globals, locals, fromlist, level);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002896 if (_PyImport_ReleaseLock() < 0) {
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002897 Py_XDECREF(mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002898 PyErr_SetString(PyExc_RuntimeError,
2899 "not holding the import lock");
2900 return NULL;
2901 }
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002902 return mod;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002903}
2904
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002905PyObject *
Benjamin Peterson04778a82011-05-25 09:29:00 -05002906PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04002907 PyObject *fromlist, int level)
2908{
2909 PyObject *nameobj, *mod;
2910 nameobj = PyUnicode_FromString(name);
2911 if (nameobj == NULL)
2912 return NULL;
2913 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
2914 fromlist, level);
2915 Py_DECREF(nameobj);
2916 return mod;
2917}
2918
2919
Fred Drake87590902004-05-28 20:21:36 +00002920/* Return the package that an import is being performed in. If globals comes
2921 from the module foo.bar.bat (not itself a package), this returns the
2922 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002923 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002924
Victor Stinner974389d2011-03-15 09:33:57 +01002925 The name of the returned package is returned in *p_name.
Fred Drake87590902004-05-28 20:21:36 +00002926
2927 If globals doesn't come from a package or a module in a package, or a
2928 corresponding entry is not found in sys.modules, Py_None is returned.
2929*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002930static PyObject *
Victor Stinner9599de52011-03-13 22:38:38 -04002931get_parent(PyObject *globals, PyObject **p_name, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002932{
Victor Stinner974389d2011-03-15 09:33:57 +01002933 PyObject *nameobj;
2934
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002935 static PyObject *namestr = NULL;
2936 static PyObject *pathstr = NULL;
2937 static PyObject *pkgstr = NULL;
2938 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2939 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002940
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002941 if (globals == NULL || !PyDict_Check(globals) || !level)
Victor Stinner974389d2011-03-15 09:33:57 +01002942 goto return_none;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002943
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002944 if (namestr == NULL) {
2945 namestr = PyUnicode_InternFromString("__name__");
2946 if (namestr == NULL)
2947 return NULL;
2948 }
2949 if (pathstr == NULL) {
2950 pathstr = PyUnicode_InternFromString("__path__");
2951 if (pathstr == NULL)
2952 return NULL;
2953 }
2954 if (pkgstr == NULL) {
2955 pkgstr = PyUnicode_InternFromString("__package__");
2956 if (pkgstr == NULL)
2957 return NULL;
2958 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002959
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002960 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002961
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002962 if ((pkgname != NULL) && (pkgname != Py_None)) {
2963 /* __package__ is set, so use it */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002964 if (!PyUnicode_Check(pkgname)) {
2965 PyErr_SetString(PyExc_ValueError,
2966 "__package__ set to non-string");
2967 return NULL;
2968 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002969 if (PyUnicode_GET_LENGTH(pkgname) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002970 if (level > 0) {
2971 PyErr_SetString(PyExc_ValueError,
2972 "Attempted relative import in non-package");
2973 return NULL;
2974 }
Victor Stinner974389d2011-03-15 09:33:57 +01002975 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002976 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002977 Py_INCREF(pkgname);
2978 nameobj = pkgname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002979 } else {
2980 /* __package__ not set, so figure it out and set it */
2981 modname = PyDict_GetItem(globals, namestr);
2982 if (modname == NULL || !PyUnicode_Check(modname))
Victor Stinner974389d2011-03-15 09:33:57 +01002983 goto return_none;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00002984
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002985 modpath = PyDict_GetItem(globals, pathstr);
2986 if (modpath != NULL) {
2987 /* __path__ is set, so modname is already the package name */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002988 int error;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002989
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002990 error = PyDict_SetItem(globals, pkgstr, modname);
2991 if (error) {
2992 PyErr_SetString(PyExc_ValueError,
2993 "Could not set __package__");
2994 return NULL;
2995 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002996 Py_INCREF(modname);
2997 nameobj = modname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002998 } else {
2999 /* Normal module, so work out the package name if any */
Victor Stinner974389d2011-03-15 09:33:57 +01003000 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003001 len = PyUnicode_FindChar(modname, '.',
3002 0, PyUnicode_GET_LENGTH(modname), -1);
3003 if (len == -2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003004 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003005 if (len < 0) {
3006 if (level > 0) {
3007 PyErr_SetString(PyExc_ValueError,
3008 "Attempted relative import in non-package");
3009 return NULL;
3010 }
3011 if (PyDict_SetItem(globals, pkgstr, Py_None)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003012 PyErr_SetString(PyExc_ValueError,
3013 "Could not set __package__");
3014 return NULL;
3015 }
Victor Stinner974389d2011-03-15 09:33:57 +01003016 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003017 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003018 pkgname = PyUnicode_Substring(modname, 0, len);
3019 if (pkgname == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003020 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003021 if (PyDict_SetItem(globals, pkgstr, pkgname)) {
3022 Py_DECREF(pkgname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003023 PyErr_SetString(PyExc_ValueError,
3024 "Could not set __package__");
3025 return NULL;
3026 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003027 nameobj = pkgname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003028 }
3029 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003030 if (level > 1) {
3031 Py_ssize_t dot, end = PyUnicode_GET_LENGTH(nameobj);
3032 PyObject *newname;
3033 while (--level > 0) {
3034 dot = PyUnicode_FindChar(nameobj, '.', 0, end, -1);
3035 if (dot == -2) {
3036 Py_DECREF(nameobj);
3037 return NULL;
3038 }
3039 if (dot < 0) {
3040 Py_DECREF(nameobj);
3041 PyErr_SetString(PyExc_ValueError,
3042 "Attempted relative import beyond "
3043 "toplevel package");
3044 return NULL;
3045 }
3046 end = dot;
3047 }
3048 newname = PyUnicode_Substring(nameobj, 0, end);
3049 Py_DECREF(nameobj);
3050 if (newname == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003051 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003052 nameobj = newname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003053 }
Victor Stinner974389d2011-03-15 09:33:57 +01003054
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003055 modules = PyImport_GetModuleDict();
Victor Stinner974389d2011-03-15 09:33:57 +01003056 parent = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003057 if (parent == NULL) {
Victor Stinner974389d2011-03-15 09:33:57 +01003058 int err;
3059
3060 if (orig_level >= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003061 PyErr_Format(PyExc_SystemError,
Victor Stinner974389d2011-03-15 09:33:57 +01003062 "Parent module %R not loaded, "
3063 "cannot perform relative import", nameobj);
3064 Py_DECREF(nameobj);
3065 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003066 }
Victor Stinner974389d2011-03-15 09:33:57 +01003067
3068 err = PyErr_WarnFormat(
3069 PyExc_RuntimeWarning, 1,
3070 "Parent module %R not found while handling absolute import",
3071 nameobj);
3072 Py_DECREF(nameobj);
3073 if (err)
3074 return NULL;
3075
3076 goto return_none;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003077 }
Victor Stinner974389d2011-03-15 09:33:57 +01003078 *p_name = nameobj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003079 return parent;
3080 /* We expect, but can't guarantee, if parent != None, that:
Victor Stinner974389d2011-03-15 09:33:57 +01003081 - parent.__name__ == name
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003082 - parent.__dict__ is globals
3083 If this is violated... Who cares? */
Victor Stinner974389d2011-03-15 09:33:57 +01003084
3085return_none:
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003086 nameobj = PyUnicode_New(0, 0);
Victor Stinner974389d2011-03-15 09:33:57 +01003087 if (nameobj == NULL)
3088 return NULL;
3089 *p_name = nameobj;
3090 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003091}
3092
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003093/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003094static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01003095load_next(PyObject *mod, PyObject *altmod,
3096 PyObject *inputname, PyObject **p_outputname,
Martin v. Löwisf45dee92011-10-30 23:50:02 +01003097 PyObject **p_prefix)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003098{
Martin v. Löwisf45dee92011-10-30 23:50:02 +01003099 Py_ssize_t dot;
Victor Stinner974389d2011-03-15 09:33:57 +01003100 Py_ssize_t len;
Martin v. Löwisf45dee92011-10-30 23:50:02 +01003101 PyObject *fullname, *name = NULL, *result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003102
Victor Stinner974389d2011-03-15 09:33:57 +01003103 *p_outputname = NULL;
3104
Martin v. Löwisf45dee92011-10-30 23:50:02 +01003105 len = PyUnicode_GET_LENGTH(inputname);
3106 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003107 /* completely empty module name should only happen in
3108 'from . import' (or '__import__("")')*/
3109 Py_INCREF(mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003110 return mod;
3111 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00003112
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003113
Martin v. Löwisf45dee92011-10-30 23:50:02 +01003114 dot = PyUnicode_FindChar(inputname, '.', 0, len, 1);
3115 if (dot >= 0) {
3116 len = dot;
Victor Stinner974389d2011-03-15 09:33:57 +01003117 if (len == 0) {
3118 PyErr_SetString(PyExc_ValueError,
3119 "Empty module name");
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003120 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003121 }
3122 }
Victor Stinner974389d2011-03-15 09:33:57 +01003123
Martin v. Löwisf45dee92011-10-30 23:50:02 +01003124 /* name = inputname[:len] */
3125 name = PyUnicode_Substring(inputname, 0, len);
3126 if (name == NULL)
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003127 goto error;
Martin v. Löwisf45dee92011-10-30 23:50:02 +01003128
3129 if (PyUnicode_GET_LENGTH(*p_prefix)) {
3130 /* fullname = prefix + "." + name */
3131 fullname = PyUnicode_FromFormat("%U.%U", *p_prefix, name);
3132 if (fullname == NULL)
3133 goto error;
3134 }
3135 else {
3136 fullname = name;
3137 Py_INCREF(fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003138 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003139
Victor Stinner974389d2011-03-15 09:33:57 +01003140 result = import_submodule(mod, name, fullname);
Martin v. Löwisf45dee92011-10-30 23:50:02 +01003141 Py_DECREF(*p_prefix);
3142 /* Transfer reference. */
3143 *p_prefix = fullname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003144 if (result == Py_None && altmod != mod) {
3145 Py_DECREF(result);
3146 /* Here, altmod must be None and mod must not be None */
Victor Stinner974389d2011-03-15 09:33:57 +01003147 result = import_submodule(altmod, name, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003148 if (result != NULL && result != Py_None) {
Martin v. Löwisf45dee92011-10-30 23:50:02 +01003149 if (mark_miss(*p_prefix) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003150 Py_DECREF(result);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003151 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003152 }
Martin v. Löwisf45dee92011-10-30 23:50:02 +01003153 Py_DECREF(*p_prefix);
3154 *p_prefix = name;
3155 Py_INCREF(*p_prefix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003156 }
3157 }
3158 if (result == NULL)
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003159 goto error;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003160
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003161 if (result == Py_None) {
3162 Py_DECREF(result);
3163 PyErr_Format(PyExc_ImportError,
Victor Stinner974389d2011-03-15 09:33:57 +01003164 "No module named %R", inputname);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003165 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003166 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003167
Martin v. Löwisf45dee92011-10-30 23:50:02 +01003168 if (dot >= 0) {
3169 *p_outputname = PyUnicode_Substring(inputname, dot+1,
3170 PyUnicode_GET_LENGTH(inputname));
Victor Stinner974389d2011-03-15 09:33:57 +01003171 if (*p_outputname == NULL) {
3172 Py_DECREF(result);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003173 goto error;
Victor Stinner974389d2011-03-15 09:33:57 +01003174 }
3175 }
3176
Martin v. Löwisf45dee92011-10-30 23:50:02 +01003177 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003178 return result;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003179
3180error:
Martin v. Löwisf45dee92011-10-30 23:50:02 +01003181 Py_XDECREF(name);
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02003182 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003183}
3184
3185static int
Victor Stinner974389d2011-03-15 09:33:57 +01003186mark_miss(PyObject *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00003187{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003188 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner974389d2011-03-15 09:33:57 +01003189 return PyDict_SetItem(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00003190}
3191
3192static int
Victor Stinner974389d2011-03-15 09:33:57 +01003193ensure_fromlist(PyObject *mod, PyObject *fromlist, PyObject *name,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003194 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003195{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003196 int i;
Victor Stinner974389d2011-03-15 09:33:57 +01003197 PyObject *fullname;
3198 Py_ssize_t fromlist_len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003199
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003200 if (!_PyObject_HasAttrId(mod, &PyId___path__))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003201 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003202
Victor Stinner974389d2011-03-15 09:33:57 +01003203 fromlist_len = PySequence_Size(fromlist);
3204
3205 for (i = 0; i < fromlist_len; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003206 PyObject *item = PySequence_GetItem(fromlist, i);
3207 int hasit;
Victor Stinner974389d2011-03-15 09:33:57 +01003208 if (item == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003209 return 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003210 if (!PyUnicode_Check(item)) {
3211 PyErr_SetString(PyExc_TypeError,
3212 "Item in ``from list'' not a string");
3213 Py_DECREF(item);
3214 return 0;
3215 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003216 if (PyUnicode_READ_CHAR(item, 0) == '*') {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003217 PyObject *all;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02003218 _Py_IDENTIFIER(__all__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003219 Py_DECREF(item);
3220 /* See if the package defines __all__ */
3221 if (recursive)
3222 continue; /* Avoid endless recursion */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003223 all = _PyObject_GetAttrId(mod, &PyId___all__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003224 if (all == NULL)
3225 PyErr_Clear();
3226 else {
Victor Stinner974389d2011-03-15 09:33:57 +01003227 int ret = ensure_fromlist(mod, all, name, 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003228 Py_DECREF(all);
3229 if (!ret)
3230 return 0;
3231 }
3232 continue;
3233 }
3234 hasit = PyObject_HasAttr(mod, item);
3235 if (!hasit) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003236 PyObject *submod;
Victor Stinner974389d2011-03-15 09:33:57 +01003237 fullname = PyUnicode_FromFormat("%U.%U", name, item);
3238 if (fullname != NULL) {
3239 submod = import_submodule(mod, item, fullname);
3240 Py_DECREF(fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003241 }
Victor Stinner974389d2011-03-15 09:33:57 +01003242 else
3243 submod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003244 Py_XDECREF(submod);
3245 if (submod == NULL) {
3246 Py_DECREF(item);
3247 return 0;
3248 }
3249 }
3250 Py_DECREF(item);
3251 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003252
Victor Stinner974389d2011-03-15 09:33:57 +01003253 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003254}
3255
Neil Schemenauer00b09662003-06-16 21:03:07 +00003256static int
Victor Stinner974389d2011-03-15 09:33:57 +01003257add_submodule(PyObject *mod, PyObject *submod, PyObject *fullname,
3258 PyObject *subname, PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00003259{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003260 if (mod == Py_None)
3261 return 1;
3262 /* Irrespective of the success of this load, make a
3263 reference to it in the parent package module. A copy gets
3264 saved in the modules dictionary under the full name, so get a
3265 reference from there, if need be. (The exception is when the
3266 load failed with a SyntaxError -- then there's no trace in
3267 sys.modules. In that case, of course, do nothing extra.) */
3268 if (submod == NULL) {
Victor Stinner974389d2011-03-15 09:33:57 +01003269 submod = PyDict_GetItem(modules, fullname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003270 if (submod == NULL)
3271 return 1;
3272 }
3273 if (PyModule_Check(mod)) {
3274 /* We can't use setattr here since it can give a
3275 * spurious warning if the submodule name shadows a
3276 * builtin name */
3277 PyObject *dict = PyModule_GetDict(mod);
3278 if (!dict)
3279 return 0;
Victor Stinner974389d2011-03-15 09:33:57 +01003280 if (PyDict_SetItem(dict, subname, submod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003281 return 0;
3282 }
3283 else {
Victor Stinner974389d2011-03-15 09:33:57 +01003284 if (PyObject_SetAttr(mod, subname, submod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003285 return 0;
3286 }
3287 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00003288}
3289
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003290static PyObject *
Victor Stinner974389d2011-03-15 09:33:57 +01003291import_submodule(PyObject *mod, PyObject *subname, PyObject *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003292{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003293 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner533d7832011-03-14 13:22:54 -04003294 PyObject *m = NULL, *bufobj, *path_list, *loader;
Victor Stinner9599de52011-03-13 22:38:38 -04003295 struct filedescr *fdp;
3296 FILE *fp;
Guido van Rossum74e6a111994-08-29 12:54:38 +00003297
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003298 /* Require:
3299 if mod == None: subname == fullname
3300 else: mod.__name__ + "." + subname == fullname
3301 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00003302
Victor Stinner974389d2011-03-15 09:33:57 +01003303 if ((m = PyDict_GetItem(modules, fullname)) != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003304 Py_INCREF(m);
Victor Stinner9599de52011-03-13 22:38:38 -04003305 return m;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003306 }
Victor Stinner9599de52011-03-13 22:38:38 -04003307
3308 if (mod == Py_None)
Victor Stinner533d7832011-03-14 13:22:54 -04003309 path_list = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003310 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003311 path_list = _PyObject_GetAttrId(mod, &PyId___path__);
Victor Stinner533d7832011-03-14 13:22:54 -04003312 if (path_list == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003313 PyErr_Clear();
3314 Py_INCREF(Py_None);
3315 return Py_None;
3316 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003317 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003318
Victor Stinner533d7832011-03-14 13:22:54 -04003319 fdp = find_module(fullname, subname, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003320 &bufobj, &fp, &loader);
Victor Stinner533d7832011-03-14 13:22:54 -04003321 Py_XDECREF(path_list);
Victor Stinner9599de52011-03-13 22:38:38 -04003322 if (fdp == NULL) {
3323 if (!PyErr_ExceptionMatches(PyExc_ImportError))
3324 return NULL;
3325 PyErr_Clear();
3326 Py_INCREF(Py_None);
3327 return Py_None;
3328 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003329 m = load_module(fullname, fp, bufobj, fdp->type, loader);
3330 Py_XDECREF(bufobj);
Victor Stinner9599de52011-03-13 22:38:38 -04003331 Py_XDECREF(loader);
3332 if (fp)
3333 fclose(fp);
3334 if (m == NULL)
3335 return NULL;
3336 if (!add_submodule(mod, m, fullname, subname, modules)) {
3337 Py_XDECREF(m);
3338 return NULL;
3339 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003340 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00003341}
3342
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003343
3344/* Re-import a module of any kind and return its module object, WITH
3345 INCREMENTED REFERENCE COUNT */
3346
Guido van Rossum79f25d91997-04-29 20:08:16 +00003347PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003348PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003349{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003350 PyInterpreterState *interp = PyThreadState_Get()->interp;
3351 PyObject *modules_reloading = interp->modules_reloading;
3352 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner533d7832011-03-14 13:22:54 -04003353 PyObject *path_list = NULL, *loader = NULL, *existing_m = NULL;
Martin v. Löwis796ea532011-10-30 09:07:07 +01003354 PyObject *name, *bufobj, *subname;
3355 Py_ssize_t subname_start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003356 struct filedescr *fdp;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003357 FILE *fp = NULL;
3358 PyObject *newm = NULL;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00003359
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003360 if (modules_reloading == NULL) {
3361 Py_FatalError("PyImport_ReloadModule: "
3362 "no modules_reloading dictionary!");
3363 return NULL;
3364 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003365
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003366 if (m == NULL || !PyModule_Check(m)) {
3367 PyErr_SetString(PyExc_TypeError,
3368 "reload() argument must be module");
3369 return NULL;
3370 }
Martin v. Löwis796ea532011-10-30 09:07:07 +01003371 name = PyModule_GetNameObject(m);
3372 if (name == NULL || PyUnicode_READY(name) == -1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003373 return NULL;
Martin v. Löwis796ea532011-10-30 09:07:07 +01003374 if (m != PyDict_GetItem(modules, name)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003375 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003376 "reload(): module %R not in sys.modules",
Martin v. Löwis796ea532011-10-30 09:07:07 +01003377 name);
3378 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003379 return NULL;
3380 }
Martin v. Löwis796ea532011-10-30 09:07:07 +01003381 existing_m = PyDict_GetItem(modules_reloading, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003382 if (existing_m != NULL) {
3383 /* Due to a recursive reload, this module is already
3384 being reloaded. */
Martin v. Löwis796ea532011-10-30 09:07:07 +01003385 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003386 Py_INCREF(existing_m);
3387 return existing_m;
3388 }
Martin v. Löwis796ea532011-10-30 09:07:07 +01003389 if (PyDict_SetItem(modules_reloading, name, m) < 0) {
3390 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003391 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003392 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00003393
Martin v. Löwis796ea532011-10-30 09:07:07 +01003394 subname_start = PyUnicode_FindChar(name, '.', 0,
3395 PyUnicode_GET_LENGTH(name), -1);
3396 if (subname_start == -1) {
3397 Py_INCREF(name);
3398 subname = name;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003399 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003400 else {
3401 PyObject *parentname, *parent;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003402 Py_ssize_t len;
Martin v. Löwis796ea532011-10-30 09:07:07 +01003403 parentname = PyUnicode_Substring(name, 0, subname_start);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003404 if (parentname == NULL) {
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003405 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003406 }
3407 parent = PyDict_GetItem(modules, parentname);
3408 if (parent == NULL) {
3409 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04003410 "reload(): parent %R not in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003411 parentname);
3412 Py_DECREF(parentname);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003413 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003414 }
3415 Py_DECREF(parentname);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02003416 path_list = _PyObject_GetAttrId(parent, &PyId___path__);
Victor Stinner533d7832011-03-14 13:22:54 -04003417 if (path_list == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003418 PyErr_Clear();
Martin v. Löwis796ea532011-10-30 09:07:07 +01003419 subname_start++;
3420 len = PyUnicode_GET_LENGTH(name) - (subname_start + 1);
3421 subname = PyUnicode_Substring(name, subname_start, len);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003422 }
Martin v. Löwis796ea532011-10-30 09:07:07 +01003423 if (subname == NULL)
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003424 goto error;
Martin v. Löwis796ea532011-10-30 09:07:07 +01003425 fdp = find_module(name, subname, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003426 &bufobj, &fp, &loader);
Martin v. Löwis796ea532011-10-30 09:07:07 +01003427 Py_DECREF(subname);
Victor Stinner533d7832011-03-14 13:22:54 -04003428 Py_XDECREF(path_list);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003429
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003430 if (fdp == NULL) {
3431 Py_XDECREF(loader);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003432 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003433 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003434
Martin v. Löwis796ea532011-10-30 09:07:07 +01003435 newm = load_module(name, fp, bufobj, fdp->type, loader);
Victor Stinner2fd76e42011-03-14 15:19:39 -04003436 Py_XDECREF(bufobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003437 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003438
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003439 if (fp)
3440 fclose(fp);
3441 if (newm == NULL) {
3442 /* load_module probably removed name from modules because of
3443 * the error. Put back the original module object. We're
3444 * going to return NULL in this case regardless of whether
3445 * replacing name succeeds, so the return value is ignored.
3446 */
Martin v. Löwis796ea532011-10-30 09:07:07 +01003447 PyDict_SetItem(modules, name, m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003448 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003449
3450error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003451 imp_modules_reloading_clear();
Martin v. Löwis796ea532011-10-30 09:07:07 +01003452 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003453 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003454}
3455
3456
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003457/* Higher-level import emulator which emulates the "import" statement
3458 more accurately -- it invokes the __import__() function from the
3459 builtins of the current globals. This means that the import is
3460 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00003461 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00003462 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00003463 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00003464 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003465
3466PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003467PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003468{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003469 static PyObject *silly_list = NULL;
3470 static PyObject *builtins_str = NULL;
3471 static PyObject *import_str = NULL;
3472 PyObject *globals = NULL;
3473 PyObject *import = NULL;
3474 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003475 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003476 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003477
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003478 /* Initialize constant string objects */
3479 if (silly_list == NULL) {
3480 import_str = PyUnicode_InternFromString("__import__");
3481 if (import_str == NULL)
3482 return NULL;
3483 builtins_str = PyUnicode_InternFromString("__builtins__");
3484 if (builtins_str == NULL)
3485 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003486 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003487 if (silly_list == NULL)
3488 return NULL;
3489 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003490
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003491 /* Get the builtins from current globals */
3492 globals = PyEval_GetGlobals();
3493 if (globals != NULL) {
3494 Py_INCREF(globals);
3495 builtins = PyObject_GetItem(globals, builtins_str);
3496 if (builtins == NULL)
3497 goto err;
3498 }
3499 else {
3500 /* No globals -- use standard builtins, and fake globals */
3501 builtins = PyImport_ImportModuleLevel("builtins",
3502 NULL, NULL, NULL, 0);
3503 if (builtins == NULL)
3504 return NULL;
3505 globals = Py_BuildValue("{OO}", builtins_str, builtins);
3506 if (globals == NULL)
3507 goto err;
3508 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003509
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003510 /* Get the __import__ function from the builtins */
3511 if (PyDict_Check(builtins)) {
3512 import = PyObject_GetItem(builtins, import_str);
3513 if (import == NULL)
3514 PyErr_SetObject(PyExc_KeyError, import_str);
3515 }
3516 else
3517 import = PyObject_GetAttr(builtins, import_str);
3518 if (import == NULL)
3519 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003520
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003521 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00003522 Always use absolute import here.
3523 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003524 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
3525 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00003526 if (r == NULL)
3527 goto err;
3528 Py_DECREF(r);
3529
3530 modules = PyImport_GetModuleDict();
3531 r = PyDict_GetItem(modules, module_name);
3532 if (r != NULL)
3533 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003534
3535 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003536 Py_XDECREF(globals);
3537 Py_XDECREF(builtins);
3538 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00003539
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003540 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003541}
3542
3543
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003544/* Module 'imp' provides Python access to the primitives used for
3545 importing modules.
3546*/
3547
Guido van Rossum79f25d91997-04-29 20:08:16 +00003548static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00003549imp_make_magic(long magic)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003550{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003551 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003552
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003553 buf[0] = (char) ((magic >> 0) & 0xff);
3554 buf[1] = (char) ((magic >> 8) & 0xff);
3555 buf[2] = (char) ((magic >> 16) & 0xff);
3556 buf[3] = (char) ((magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003557
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003558 return PyBytes_FromStringAndSize(buf, 4);
Victor Stinner3e2b7172010-11-09 09:32:19 +00003559}
Barry Warsaw28a691b2010-04-17 00:19:56 +00003560
3561static PyObject *
3562imp_get_magic(PyObject *self, PyObject *noargs)
3563{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003564 return imp_make_magic(pyc_magic);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003565}
3566
3567static PyObject *
3568imp_get_tag(PyObject *self, PyObject *noargs)
3569{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003570 return PyUnicode_FromString(pyc_tag);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003571}
3572
Guido van Rossum79f25d91997-04-29 20:08:16 +00003573static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003574imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003575{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003576 PyObject *list;
3577 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003578
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003579 list = PyList_New(0);
3580 if (list == NULL)
3581 return NULL;
3582 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
3583 PyObject *item = Py_BuildValue("ssi",
3584 fdp->suffix, fdp->mode, fdp->type);
3585 if (item == NULL) {
3586 Py_DECREF(list);
3587 return NULL;
3588 }
3589 if (PyList_Append(list, item) < 0) {
3590 Py_DECREF(list);
3591 Py_DECREF(item);
3592 return NULL;
3593 }
3594 Py_DECREF(item);
3595 }
3596 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003597}
3598
Guido van Rossum79f25d91997-04-29 20:08:16 +00003599static PyObject *
Victor Stinner533d7832011-03-14 13:22:54 -04003600call_find_module(PyObject *name, PyObject *path_list)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003601{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003602 extern int fclose(FILE *);
3603 PyObject *fob, *ret;
3604 PyObject *pathobj;
3605 struct filedescr *fdp;
Victor Stinner7d8b77c2011-03-12 08:45:02 -05003606 FILE *fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003607 int fd = -1;
3608 char *found_encoding = NULL;
3609 char *encoding = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003610
Victor Stinner533d7832011-03-14 13:22:54 -04003611 if (path_list == Py_None)
3612 path_list = NULL;
3613 fdp = find_module(NULL, name, path_list,
Victor Stinner2fd76e42011-03-14 15:19:39 -04003614 &pathobj, &fp, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003615 if (fdp == NULL)
3616 return NULL;
3617 if (fp != NULL) {
3618 fd = fileno(fp);
3619 if (fd != -1)
3620 fd = dup(fd);
3621 fclose(fp);
Victor Stinnerd417d012011-06-20 15:16:55 +02003622 if (fd == -1) {
3623 PyErr_SetFromErrno(PyExc_OSError);
3624 return NULL;
3625 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003626 fp = NULL;
3627 }
3628 if (fd != -1) {
3629 if (strchr(fdp->mode, 'b') == NULL) {
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003630 /* PyTokenizer_FindEncodingFilename() returns PyMem_MALLOC'ed
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003631 memory. */
Victor Stinnerfe7c5b52011-04-05 01:48:03 +02003632 found_encoding = PyTokenizer_FindEncodingFilename(fd, pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003633 lseek(fd, 0, 0); /* Reset position */
Victor Stinner2fd76e42011-03-14 15:19:39 -04003634 if (found_encoding == NULL && PyErr_Occurred()) {
3635 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003636 return NULL;
Victor Stinner2fd76e42011-03-14 15:19:39 -04003637 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003638 encoding = (found_encoding != NULL) ? found_encoding :
3639 (char*)PyUnicode_GetDefaultEncoding();
3640 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003641 fob = PyFile_FromFd(fd, NULL, fdp->mode, -1,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003642 (char*)encoding, NULL, NULL, 1);
3643 if (fob == NULL) {
Victor Stinner2fd76e42011-03-14 15:19:39 -04003644 Py_XDECREF(pathobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003645 close(fd);
3646 PyMem_FREE(found_encoding);
3647 return NULL;
3648 }
3649 }
3650 else {
3651 fob = Py_None;
3652 Py_INCREF(fob);
3653 }
Victor Stinner2fd76e42011-03-14 15:19:39 -04003654 if (pathobj == NULL) {
3655 Py_INCREF(Py_None);
3656 pathobj = Py_None;
3657 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003658 ret = Py_BuildValue("NN(ssi)",
3659 fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
3660 PyMem_FREE(found_encoding);
Brett Cannon3bb42d92007-10-20 03:43:15 +00003661
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003662 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003663}
3664
Guido van Rossum79f25d91997-04-29 20:08:16 +00003665static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003666imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003667{
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003668 PyObject *name, *path_list = NULL;
3669 if (!PyArg_ParseTuple(args, "U|O:find_module",
3670 &name, &path_list))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003671 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04003672 return call_find_module(name, path_list);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003673}
3674
3675static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003676imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003677{
Victor Stinner95872862011-03-07 18:20:56 +01003678 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003679 int ret;
3680 PyObject *m;
Victor Stinner95872862011-03-07 18:20:56 +01003681 if (!PyArg_ParseTuple(args, "U:init_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003682 return NULL;
3683 ret = init_builtin(name);
3684 if (ret < 0)
3685 return NULL;
3686 if (ret == 0) {
3687 Py_INCREF(Py_None);
3688 return Py_None;
3689 }
Victor Stinner95872862011-03-07 18:20:56 +01003690 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003691 Py_XINCREF(m);
3692 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003693}
3694
Guido van Rossum79f25d91997-04-29 20:08:16 +00003695static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003696imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003697{
Victor Stinner53dc7352011-03-20 01:50:21 +01003698 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003699 int ret;
3700 PyObject *m;
Victor Stinner53dc7352011-03-20 01:50:21 +01003701 if (!PyArg_ParseTuple(args, "U:init_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003702 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01003703 ret = PyImport_ImportFrozenModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003704 if (ret < 0)
3705 return NULL;
3706 if (ret == 0) {
3707 Py_INCREF(Py_None);
3708 return Py_None;
3709 }
Victor Stinner53dc7352011-03-20 01:50:21 +01003710 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003711 Py_XINCREF(m);
3712 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003713}
3714
Guido van Rossum79f25d91997-04-29 20:08:16 +00003715static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003716imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003717{
Victor Stinner53dc7352011-03-20 01:50:21 +01003718 PyObject *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00003719
Victor Stinner53dc7352011-03-20 01:50:21 +01003720 if (!PyArg_ParseTuple(args, "U:get_frozen_object", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003721 return NULL;
3722 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003723}
3724
Guido van Rossum79f25d91997-04-29 20:08:16 +00003725static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00003726imp_is_frozen_package(PyObject *self, PyObject *args)
3727{
Victor Stinner53dc7352011-03-20 01:50:21 +01003728 PyObject *name;
Brett Cannon8d110132009-03-15 02:20:16 +00003729
Victor Stinner53dc7352011-03-20 01:50:21 +01003730 if (!PyArg_ParseTuple(args, "U:is_frozen_package", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003731 return NULL;
3732 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00003733}
3734
3735static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003736imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003737{
Victor Stinner95872862011-03-07 18:20:56 +01003738 PyObject *name;
3739 if (!PyArg_ParseTuple(args, "U:is_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003740 return NULL;
3741 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003742}
3743
Guido van Rossum79f25d91997-04-29 20:08:16 +00003744static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003745imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003746{
Victor Stinner53dc7352011-03-20 01:50:21 +01003747 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003748 struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01003749 if (!PyArg_ParseTuple(args, "U:is_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003750 return NULL;
3751 p = find_frozen(name);
3752 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003753}
3754
3755static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01003756get_file(PyObject *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003757{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003758 FILE *fp;
3759 if (mode[0] == 'U')
3760 mode = "r" PY_STDIOTEXTMODE;
3761 if (fob == NULL) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003762 fp = _Py_fopen(pathname, mode);
Victor Stinner35734762011-12-18 21:05:22 +01003763 if (!fp) {
3764 if (!PyErr_Occurred())
3765 PyErr_SetFromErrno(PyExc_IOError);
3766 return NULL;
3767 }
3768 return fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003769 }
3770 else {
3771 int fd = PyObject_AsFileDescriptor(fob);
3772 if (fd == -1)
3773 return NULL;
Victor Stinner35734762011-12-18 21:05:22 +01003774 if (!_PyVerify_fd(fd)) {
3775 PyErr_SetFromErrno(PyExc_IOError);
3776 return NULL;
3777 }
3778
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003779 /* 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);
Victor Stinner35734762011-12-18 21:05:22 +01003783 if (fd == -1) {
3784 PyErr_SetFromErrno(PyExc_IOError);
3785 return NULL;
3786 }
3787
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003788 fp = fdopen(fd, mode);
Victor Stinner35734762011-12-18 21:05:22 +01003789 if (!fp) {
3790 PyErr_SetFromErrno(PyExc_IOError);
3791 return NULL;
3792 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003793 return fp;
Victor Stinner35734762011-12-18 21:05:22 +01003794 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003795}
3796
Guido van Rossum79f25d91997-04-29 20:08:16 +00003797static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003798imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003799{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003800 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003801 PyObject *fob = NULL;
3802 PyObject *m;
3803 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003804 if (!PyArg_ParseTuple(args, "UO&|O:load_compiled",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003805 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003806 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003807 &fob))
3808 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003809 fp = get_file(pathname, fob, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003810 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003811 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003812 return NULL;
3813 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003814 m = load_compiled_module(name, pathname, fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003815 fclose(fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003816 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003817 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003818}
3819
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003820#ifdef HAVE_DYNAMIC_LOADING
3821
Guido van Rossum79f25d91997-04-29 20:08:16 +00003822static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003823imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003824{
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003825 PyObject *name, *pathname, *fob = NULL, *mod;
3826 FILE *fp;
3827
3828 if (!PyArg_ParseTuple(args, "UO&|O:load_dynamic",
3829 &name, PyUnicode_FSDecoder, &pathname, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003830 return NULL;
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003831 if (fob != NULL) {
3832 fp = get_file(NULL, fob, "r");
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003833 if (fp == NULL) {
3834 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003835 return NULL;
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003836 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003837 }
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003838 else
3839 fp = NULL;
3840 mod = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinnere9ddbf62011-03-22 10:46:35 +01003841 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003842 if (fp)
3843 fclose(fp);
Victor Stinnerfefd70c2011-03-14 15:54:07 -04003844 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003845}
3846
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003847#endif /* HAVE_DYNAMIC_LOADING */
3848
Guido van Rossum79f25d91997-04-29 20:08:16 +00003849static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003850imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003851{
Victor Stinner2f42ae52011-03-20 00:41:24 +01003852 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003853 PyObject *fob = NULL;
3854 PyObject *m;
3855 FILE *fp;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003856 if (!PyArg_ParseTuple(args, "UO&|O:load_source",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003857 &name,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003858 PyUnicode_FSDecoder, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003859 &fob))
3860 return NULL;
Victor Stinner2f42ae52011-03-20 00:41:24 +01003861 fp = get_file(pathname, fob, "r");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003862 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003863 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003864 return NULL;
3865 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003866 m = load_source_module(name, pathname, fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003867 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003868 fclose(fp);
3869 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003870}
3871
Guido van Rossum79f25d91997-04-29 20:08:16 +00003872static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003873imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003874{
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003875 PyObject *name, *fob, *pathname, *pathname_obj, *ret;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003876 char *suffix; /* Unused */
3877 char *mode;
3878 int type;
3879 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003880
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003881 if (!PyArg_ParseTuple(args, "UOO(ssi):load_module",
3882 &name, &fob, &pathname_obj, &suffix, &mode, &type))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003883 return NULL;
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003884 if (pathname_obj != Py_None) {
3885 if (!PyUnicode_FSDecoder(pathname_obj, &pathname))
3886 return NULL;
3887 }
3888 else
3889 pathname = NULL;
3890
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003891 if (*mode) {
3892 /* Mode must start with 'r' or 'U' and must not contain '+'.
3893 Implicit in this test is the assumption that the mode
3894 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003895
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003896 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3897 PyErr_Format(PyExc_ValueError,
3898 "invalid file open mode %.200s", mode);
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003899 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003900 return NULL;
3901 }
3902 }
3903 if (fob == Py_None)
3904 fp = NULL;
3905 else {
3906 fp = get_file(NULL, fob, mode);
3907 if (fp == NULL) {
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003908 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003909 return NULL;
3910 }
3911 }
Victor Stinner41c5fec2011-03-13 21:46:30 -04003912 ret = load_module(name, fp, pathname, type, NULL);
Victor Stinner6ae1e7f2011-03-20 22:37:17 +01003913 Py_XDECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003914 if (fp)
3915 fclose(fp);
3916 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003917}
3918
3919static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003920imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003921{
Victor Stinnerc9abda02011-03-14 13:33:46 -04003922 PyObject *name, *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003923 PyObject * ret;
Victor Stinnerc9abda02011-03-14 13:33:46 -04003924 if (!PyArg_ParseTuple(args, "UO&:load_package",
3925 &name, PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003926 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04003927 ret = load_package(name, pathname);
Victor Stinnerebc00522010-12-03 17:06:43 +00003928 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003929 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003930}
3931
3932static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003933imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003934{
Victor Stinnerfe19d212011-03-14 14:53:28 -04003935 PyObject *name;
3936 if (!PyArg_ParseTuple(args, "U:new_module", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003937 return NULL;
Victor Stinnerfe19d212011-03-14 14:53:28 -04003938 return PyModule_NewObject(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003939}
3940
Christian Heimes13a7a212008-01-07 17:13:09 +00003941static PyObject *
3942imp_reload(PyObject *self, PyObject *v)
3943{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003944 return PyImport_ReloadModule(v);
Christian Heimes13a7a212008-01-07 17:13:09 +00003945}
3946
3947PyDoc_STRVAR(doc_reload,
3948"reload(module) -> module\n\
3949\n\
3950Reload the module. The module must have been successfully imported before.");
3951
Barry Warsaw28a691b2010-04-17 00:19:56 +00003952static PyObject *
3953imp_cache_from_source(PyObject *self, PyObject *args, PyObject *kws)
3954{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003955 static char *kwlist[] = {"path", "debug_override", NULL};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003956
Victor Stinner2f42ae52011-03-20 00:41:24 +01003957 PyObject *pathname, *cpathname;
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003958 PyObject *debug_override = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003959 int debug = !Py_OptimizeFlag;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003960
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003961 if (!PyArg_ParseTupleAndKeywords(
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003962 args, kws, "O&|O", kwlist,
Victor Stinner2f42ae52011-03-20 00:41:24 +01003963 PyUnicode_FSDecoder, &pathname, &debug_override))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003964 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003965
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003966 if (debug_override != NULL &&
3967 (debug = PyObject_IsTrue(debug_override)) < 0) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01003968 Py_DECREF(pathname);
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003969 return NULL;
3970 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00003971
Martin v. Löwis30260a72011-10-23 17:35:46 +02003972 if (PyUnicode_READY(pathname) < 0)
3973 return NULL;
3974
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02003975 cpathname = make_compiled_pathname(pathname, debug);
Victor Stinner2f42ae52011-03-20 00:41:24 +01003976 Py_DECREF(pathname);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003977
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003978 if (cpathname == NULL) {
3979 PyErr_Format(PyExc_SystemError, "path buffer too short");
3980 return NULL;
3981 }
Victor Stinner2f42ae52011-03-20 00:41:24 +01003982 return cpathname;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003983}
3984
3985PyDoc_STRVAR(doc_cache_from_source,
Éric Araujo5df11082011-11-03 03:38:44 +01003986"cache_from_source(path, [debug_override]) -> path\n\
3987Given the path to a .py file, return the path to its .pyc/.pyo file.\n\
Barry Warsaw28a691b2010-04-17 00:19:56 +00003988\n\
3989The .py file does not need to exist; this simply returns the path to the\n\
3990.pyc/.pyo file calculated as if the .py file were imported. The extension\n\
3991will be .pyc unless __debug__ is not defined, then it will be .pyo.\n\
3992\n\
3993If debug_override is not None, then it must be a boolean and is taken as\n\
3994the value of __debug__ instead.");
3995
3996static PyObject *
3997imp_source_from_cache(PyObject *self, PyObject *args, PyObject *kws)
3998{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003999 static char *kwlist[] = {"path", NULL};
Victor Stinnerc9abda02011-03-14 13:33:46 -04004000 PyObject *pathname, *source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00004001
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004002 if (!PyArg_ParseTupleAndKeywords(
Victor Stinnerebc00522010-12-03 17:06:43 +00004003 args, kws, "O&", kwlist,
Victor Stinnerc9abda02011-03-14 13:33:46 -04004004 PyUnicode_FSDecoder, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004005 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00004006
Victor Stinnerc9abda02011-03-14 13:33:46 -04004007 source = make_source_pathname(pathname);
4008 if (source == NULL) {
4009 PyErr_Format(PyExc_ValueError, "Not a PEP 3147 pyc path: %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004010 pathname);
Victor Stinnerc9abda02011-03-14 13:33:46 -04004011 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004012 return NULL;
4013 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04004014 Py_DECREF(pathname);
4015 return source;
Barry Warsaw28a691b2010-04-17 00:19:56 +00004016}
4017
4018PyDoc_STRVAR(doc_source_from_cache,
Éric Araujo5df11082011-11-03 03:38:44 +01004019"source_from_cache(path) -> path\n\
4020Given the path to a .pyc./.pyo file, return the path to its .py file.\n\
Barry Warsaw28a691b2010-04-17 00:19:56 +00004021\n\
4022The .pyc/.pyo file does not need to exist; this simply returns the path to\n\
4023the .py file calculated to correspond to the .pyc/.pyo file. If path\n\
4024does not conform to PEP 3147 format, ValueError will be raised.");
4025
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004026/* Doc strings */
4027
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004028PyDoc_STRVAR(doc_imp,
4029"This module provides the components needed to build your own\n\
4030__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004031
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004032PyDoc_STRVAR(doc_find_module,
4033"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004034Search for a module. If path is omitted or None, search for a\n\
4035built-in, frozen or special module and continue search in sys.path.\n\
4036The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004037package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004038
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004039PyDoc_STRVAR(doc_load_module,
4040"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004041Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004042The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004043
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004044PyDoc_STRVAR(doc_get_magic,
4045"get_magic() -> string\n\
4046Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004047
Barry Warsaw28a691b2010-04-17 00:19:56 +00004048PyDoc_STRVAR(doc_get_tag,
4049"get_tag() -> string\n\
4050Return the magic tag for .pyc or .pyo files.");
4051
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004052PyDoc_STRVAR(doc_get_suffixes,
4053"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004054Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004055that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004056
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004057PyDoc_STRVAR(doc_new_module,
4058"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004059Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004060The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00004061
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004062PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00004063"lock_held() -> boolean\n\
4064Return True if the import lock is currently held, else False.\n\
4065On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00004066
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00004067PyDoc_STRVAR(doc_acquire_lock,
4068"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00004069Acquires the interpreter's import lock for the current thread.\n\
4070This lock should be used by import hooks to ensure thread-safety\n\
4071when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00004072On platforms without threads, this function does nothing.");
4073
4074PyDoc_STRVAR(doc_release_lock,
4075"release_lock() -> None\n\
4076Release the interpreter's import lock.\n\
4077On platforms without threads, this function does nothing.");
4078
Guido van Rossum79f25d91997-04-29 20:08:16 +00004079static PyMethodDef imp_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004080 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
4081 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
4082 {"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag},
4083 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
4084 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
4085 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
4086 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
4087 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
4088 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
4089 {"reload", imp_reload, METH_O, doc_reload},
4090 {"cache_from_source", (PyCFunction)imp_cache_from_source,
4091 METH_VARARGS | METH_KEYWORDS, doc_cache_from_source},
4092 {"source_from_cache", (PyCFunction)imp_source_from_cache,
4093 METH_VARARGS | METH_KEYWORDS, doc_source_from_cache},
4094 /* The rest are obsolete */
4095 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
4096 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
4097 {"init_builtin", imp_init_builtin, METH_VARARGS},
4098 {"init_frozen", imp_init_frozen, METH_VARARGS},
4099 {"is_builtin", imp_is_builtin, METH_VARARGS},
4100 {"is_frozen", imp_is_frozen, METH_VARARGS},
4101 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00004102#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004103 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00004104#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004105 {"load_package", imp_load_package, METH_VARARGS},
4106 {"load_source", imp_load_source, METH_VARARGS},
Brett Cannon442c9b92011-03-23 16:14:42 -07004107 {"_fix_co_filename", imp_fix_co_filename, METH_VARARGS},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004108 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004109};
4110
Guido van Rossum1a8791e1998-08-04 22:46:29 +00004111static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004112setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004113{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004114 PyObject *v;
4115 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004116
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004117 v = PyLong_FromLong((long)value);
4118 err = PyDict_SetItemString(d, name, v);
4119 Py_XDECREF(v);
4120 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004121}
4122
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004123typedef struct {
4124 PyObject_HEAD
4125} NullImporter;
4126
4127static int
4128NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
4129{
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004130#ifndef MS_WINDOWS
4131 PyObject *path;
4132 struct stat statbuf;
4133 int rv;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004134
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004135 if (!_PyArg_NoKeywords("NullImporter()", kwds))
4136 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004137
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004138 if (!PyArg_ParseTuple(args, "O&:NullImporter",
4139 PyUnicode_FSConverter, &path))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004140 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004141
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004142 if (PyBytes_GET_SIZE(path) == 0) {
4143 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004144 PyErr_SetString(PyExc_ImportError, "empty pathname");
4145 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004146 }
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004147
4148 rv = stat(PyBytes_AS_STRING(path), &statbuf);
4149 Py_DECREF(path);
4150 if (rv == 0) {
4151 /* it exists */
4152 if (S_ISDIR(statbuf.st_mode)) {
4153 /* it's a directory */
4154 PyErr_SetString(PyExc_ImportError, "existing directory");
4155 return -1;
4156 }
4157 }
4158#else /* MS_WINDOWS */
4159 PyObject *pathobj;
4160 DWORD rv;
Victor Stinner255dfdb2010-09-29 10:28:51 +00004161 wchar_t *path;
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004162
4163 if (!_PyArg_NoKeywords("NullImporter()", kwds))
4164 return -1;
4165
4166 if (!PyArg_ParseTuple(args, "U:NullImporter",
4167 &pathobj))
4168 return -1;
4169
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02004170 if (PyUnicode_GET_LENGTH(pathobj) == 0) {
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004171 PyErr_SetString(PyExc_ImportError, "empty pathname");
4172 return -1;
4173 }
4174
Victor Stinnerbeb4135b2010-10-07 01:02:42 +00004175 path = PyUnicode_AsWideCharString(pathobj, NULL);
Victor Stinner255dfdb2010-09-29 10:28:51 +00004176 if (path == NULL)
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004177 return -1;
4178 /* see issue1293 and issue3677:
4179 * stat() on Windows doesn't recognise paths like
4180 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
4181 */
4182 rv = GetFileAttributesW(path);
Victor Stinner255dfdb2010-09-29 10:28:51 +00004183 PyMem_Free(path);
Victor Stinner1a4d12d2010-08-13 13:07:29 +00004184 if (rv != INVALID_FILE_ATTRIBUTES) {
4185 /* it exists */
4186 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
4187 /* it's a directory */
4188 PyErr_SetString(PyExc_ImportError, "existing directory");
4189 return -1;
4190 }
4191 }
4192#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004193 return 0;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004194}
4195
4196static PyObject *
4197NullImporter_find_module(NullImporter *self, PyObject *args)
4198{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004199 Py_RETURN_NONE;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004200}
4201
4202static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004203 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
4204 "Always return None"
4205 },
4206 {NULL} /* Sentinel */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004207};
4208
4209
Christian Heimes9cd17752007-11-18 19:35:23 +00004210PyTypeObject PyNullImporter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004211 PyVarObject_HEAD_INIT(NULL, 0)
4212 "imp.NullImporter", /*tp_name*/
4213 sizeof(NullImporter), /*tp_basicsize*/
4214 0, /*tp_itemsize*/
4215 0, /*tp_dealloc*/
4216 0, /*tp_print*/
4217 0, /*tp_getattr*/
4218 0, /*tp_setattr*/
4219 0, /*tp_reserved*/
4220 0, /*tp_repr*/
4221 0, /*tp_as_number*/
4222 0, /*tp_as_sequence*/
4223 0, /*tp_as_mapping*/
4224 0, /*tp_hash */
4225 0, /*tp_call*/
4226 0, /*tp_str*/
4227 0, /*tp_getattro*/
4228 0, /*tp_setattro*/
4229 0, /*tp_as_buffer*/
4230 Py_TPFLAGS_DEFAULT, /*tp_flags*/
4231 "Null importer object", /* tp_doc */
4232 0, /* tp_traverse */
4233 0, /* tp_clear */
4234 0, /* tp_richcompare */
4235 0, /* tp_weaklistoffset */
4236 0, /* tp_iter */
4237 0, /* tp_iternext */
4238 NullImporter_methods, /* tp_methods */
4239 0, /* tp_members */
4240 0, /* tp_getset */
4241 0, /* tp_base */
4242 0, /* tp_dict */
4243 0, /* tp_descr_get */
4244 0, /* tp_descr_set */
4245 0, /* tp_dictoffset */
4246 (initproc)NullImporter_init, /* tp_init */
4247 0, /* tp_alloc */
4248 PyType_GenericNew /* tp_new */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004249};
4250
Martin v. Löwis1a214512008-06-11 05:26:20 +00004251static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004252 PyModuleDef_HEAD_INIT,
4253 "imp",
4254 doc_imp,
4255 0,
4256 imp_methods,
4257 NULL,
4258 NULL,
4259 NULL,
4260 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00004261};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004262
Jason Tishler6bc06ec2003-09-04 11:59:50 +00004263PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00004264PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004265{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004266 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004267
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004268 if (PyType_Ready(&PyNullImporter_Type) < 0)
4269 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004270
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004271 m = PyModule_Create(&impmodule);
4272 if (m == NULL)
4273 goto failure;
4274 d = PyModule_GetDict(m);
4275 if (d == NULL)
4276 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004277
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004278 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
4279 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
4280 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
4281 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
4282 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
4283 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
4284 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
4285 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
4286 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
4287 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004288
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004289 Py_INCREF(&PyNullImporter_Type);
4290 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
4291 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00004292 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004293 Py_XDECREF(m);
4294 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00004295}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004296
4297
Guido van Rossumb18618d2000-05-03 23:44:39 +00004298/* API for embedding applications that want to add their own entries
4299 to the table of built-in modules. This should normally be called
4300 *before* Py_Initialize(). When the table resize fails, -1 is
4301 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004302
4303 After a similar function by Just van Rossum. */
4304
4305int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004306PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004307{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004308 static struct _inittab *our_copy = NULL;
4309 struct _inittab *p;
4310 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004311
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004312 /* Count the number of entries in both tables */
4313 for (n = 0; newtab[n].name != NULL; n++)
4314 ;
4315 if (n == 0)
4316 return 0; /* Nothing to do */
4317 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
4318 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004319
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004320 /* Allocate new memory for the combined table */
4321 p = our_copy;
4322 PyMem_RESIZE(p, struct _inittab, i+n+1);
4323 if (p == NULL)
4324 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004325
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004326 /* Copy the tables into the new memory */
4327 if (our_copy != PyImport_Inittab)
4328 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
4329 PyImport_Inittab = our_copy = p;
4330 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004331
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004332 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004333}
4334
4335/* Shorthand to add a single entry given a name and a function */
4336
4337int
Brett Cannona826f322009-04-02 03:41:46 +00004338PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004339{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004340 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004341
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004342 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004343
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004344 newtab[0].name = (char *)name;
4345 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004346
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004347 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004348}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004349
4350#ifdef __cplusplus
4351}
4352#endif