blob: beb0eecb5a01a88570dfd66ef67d764e49d08810 [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)
Tim Peters36515e22001-11-18 04:06:29 +0000105*/
Guido van Rossum3ddee711991-12-16 13:06:34 +0000106
Nick Coghlancd419ab2010-09-11 00:39:25 +0000107/* MAGIC must change whenever the bytecode emitted by the compiler may no
108 longer be understood by older implementations of the eval loop (usually
109 due to the addition of new opcodes)
110 TAG must change for each major Python release. The magic number will take
111 care of any bytecode changes that occur during development.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000112*/
Benjamin Peterson6246d6d2010-09-10 21:51:44 +0000113#define MAGIC (3180 | ((long)'\r'<<16) | ((long)'\n'<<24))
Barry Warsaw28a691b2010-04-17 00:19:56 +0000114#define TAG "cpython-32"
115#define CACHEDIR "__pycache__"
116/* Current magic word and string tag as globals. */
Guido van Rossum96774c12000-05-01 20:19:08 +0000117static long pyc_magic = MAGIC;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000118static const char *pyc_tag = TAG;
Guido van Rossum96774c12000-05-01 20:19:08 +0000119
Victor Stinner49d3f252010-10-17 01:24:53 +0000120/* See _PyImport_FixupExtensionUnicode() below */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000121static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000122
Guido van Rossum771c6c81997-10-31 18:37:24 +0000123/* This table is defined in config.c: */
124extern struct _inittab _PyImport_Inittab[];
125
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000126/* Method from Parser/tokenizer.c */
Guido van Rossum40d20bc2007-10-22 00:09:51 +0000127extern char * PyTokenizer_FindEncoding(int);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000128
Guido van Rossum771c6c81997-10-31 18:37:24 +0000129struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +0000130
Guido van Rossumed1170e1999-12-20 21:23:41 +0000131/* these tables define the module suffixes that Python recognizes */
132struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +0000133
Guido van Rossumed1170e1999-12-20 21:23:41 +0000134static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000135 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000136#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000137 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000138#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000139 {".pyc", "rb", PY_COMPILED},
140 {0, 0}
Guido van Rossumed1170e1999-12-20 21:23:41 +0000141};
142
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000143
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000144/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000145
146void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000147_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000148{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000149 const struct filedescr *scan;
150 struct filedescr *filetab;
151 int countD = 0;
152 int countS = 0;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000153
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000154 /* prepare _PyImport_Filetab: copy entries from
155 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
156 */
Guido van Rossum04110fb2007-08-24 16:32:05 +0000157#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000158 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
159 ++countD;
Guido van Rossum04110fb2007-08-24 16:32:05 +0000160#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000161 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
162 ++countS;
163 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
164 if (filetab == NULL)
165 Py_FatalError("Can't initialize import file table.");
Guido van Rossum04110fb2007-08-24 16:32:05 +0000166#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000167 memcpy(filetab, _PyImport_DynLoadFiletab,
168 countD * sizeof(struct filedescr));
Guido van Rossum04110fb2007-08-24 16:32:05 +0000169#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000170 memcpy(filetab + countD, _PyImport_StandardFiletab,
171 countS * sizeof(struct filedescr));
172 filetab[countD + countS].suffix = NULL;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000173
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000174 _PyImport_Filetab = filetab;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000175
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000176 if (Py_OptimizeFlag) {
177 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
178 for (; filetab->suffix != NULL; filetab++) {
179 if (strcmp(filetab->suffix, ".pyc") == 0)
180 filetab->suffix = ".pyo";
181 }
182 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000183}
184
Guido van Rossum25ce5661997-08-02 03:10:38 +0000185void
Just van Rossum52e14d62002-12-30 22:08:05 +0000186_PyImportHooks_Init(void)
187{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000188 PyObject *v, *path_hooks = NULL, *zimpimport;
189 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000190
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000191 /* adding sys.path_hooks and sys.path_importer_cache, setting up
192 zipimport */
193 if (PyType_Ready(&PyNullImporter_Type) < 0)
194 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000195
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000196 if (Py_VerboseFlag)
197 PySys_WriteStderr("# installing zipimport hook\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000198
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000199 v = PyList_New(0);
200 if (v == NULL)
201 goto error;
202 err = PySys_SetObject("meta_path", v);
203 Py_DECREF(v);
204 if (err)
205 goto error;
206 v = PyDict_New();
207 if (v == NULL)
208 goto error;
209 err = PySys_SetObject("path_importer_cache", v);
210 Py_DECREF(v);
211 if (err)
212 goto error;
213 path_hooks = PyList_New(0);
214 if (path_hooks == NULL)
215 goto error;
216 err = PySys_SetObject("path_hooks", path_hooks);
217 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000218 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000219 PyErr_Print();
220 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
221 "path_importer_cache, or NullImporter failed"
222 );
223 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000224
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000225 zimpimport = PyImport_ImportModule("zipimport");
226 if (zimpimport == NULL) {
227 PyErr_Clear(); /* No zip import module -- okay */
228 if (Py_VerboseFlag)
229 PySys_WriteStderr("# can't import zipimport\n");
230 }
231 else {
232 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
233 "zipimporter");
234 Py_DECREF(zimpimport);
235 if (zipimporter == NULL) {
236 PyErr_Clear(); /* No zipimporter object -- okay */
237 if (Py_VerboseFlag)
238 PySys_WriteStderr(
239 "# can't import zipimport.zipimporter\n");
240 }
241 else {
242 /* sys.path_hooks.append(zipimporter) */
243 err = PyList_Append(path_hooks, zipimporter);
244 Py_DECREF(zipimporter);
245 if (err)
246 goto error;
247 if (Py_VerboseFlag)
248 PySys_WriteStderr(
249 "# installed zipimport hook\n");
250 }
251 }
252 Py_DECREF(path_hooks);
Just van Rossum52e14d62002-12-30 22:08:05 +0000253}
254
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000255/* Locking primitives to prevent parallel imports of the same module
256 in different threads to return with a partially loaded module.
257 These calls are serialized by the global interpreter lock. */
258
259#ifdef WITH_THREAD
260
Guido van Rossum49b56061998-10-01 20:42:43 +0000261#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000262
Guido van Rossum65d5b571998-12-21 19:32:43 +0000263static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000264static long import_lock_thread = -1;
265static int import_lock_level = 0;
266
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000267void
268_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000269{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000270 long me = PyThread_get_thread_ident();
271 if (me == -1)
272 return; /* Too bad */
273 if (import_lock == NULL) {
274 import_lock = PyThread_allocate_lock();
275 if (import_lock == NULL)
276 return; /* Nothing much we can do. */
277 }
278 if (import_lock_thread == me) {
279 import_lock_level++;
280 return;
281 }
282 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
283 {
284 PyThreadState *tstate = PyEval_SaveThread();
285 PyThread_acquire_lock(import_lock, 1);
286 PyEval_RestoreThread(tstate);
287 }
288 import_lock_thread = me;
289 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000290}
291
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000292int
293_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000294{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000295 long me = PyThread_get_thread_ident();
296 if (me == -1 || import_lock == NULL)
297 return 0; /* Too bad */
298 if (import_lock_thread != me)
299 return -1;
300 import_lock_level--;
301 if (import_lock_level == 0) {
302 import_lock_thread = -1;
303 PyThread_release_lock(import_lock);
304 }
305 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000306}
307
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000308/* This function is called from PyOS_AfterFork to ensure that newly
309 created child processes do not share locks with the parent.
310 We now acquire the import lock around fork() calls but on some platforms
311 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000312
313void
314_PyImport_ReInitLock(void)
315{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000316 if (import_lock != NULL)
317 import_lock = PyThread_allocate_lock();
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000318 if (import_lock_level > 1) {
319 /* Forked as a side effect of import */
320 long me = PyThread_get_thread_ident();
321 PyThread_acquire_lock(import_lock, 0);
322 /* XXX: can the previous line fail? */
323 import_lock_thread = me;
324 import_lock_level--;
325 } else {
326 import_lock_thread = -1;
327 import_lock_level = 0;
328 }
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000329}
330
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000331#endif
332
Tim Peters69232342001-08-30 05:16:13 +0000333static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000334imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000335{
Tim Peters69232342001-08-30 05:16:13 +0000336#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000337 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000338#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000339 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000340#endif
341}
342
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000343static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000344imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000345{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000346#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000347 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000348#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000349 Py_INCREF(Py_None);
350 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000351}
352
353static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000354imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000355{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000356#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000357 if (_PyImport_ReleaseLock() < 0) {
358 PyErr_SetString(PyExc_RuntimeError,
359 "not holding the import lock");
360 return NULL;
361 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000362#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000363 Py_INCREF(Py_None);
364 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000365}
366
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100367void
368_PyImport_Fini(void)
369{
370 Py_XDECREF(extensions);
371 extensions = NULL;
372 PyMem_DEL(_PyImport_Filetab);
373 _PyImport_Filetab = NULL;
374#ifdef WITH_THREAD
375 if (import_lock != NULL) {
376 PyThread_free_lock(import_lock);
377 import_lock = NULL;
378 }
379#endif
380}
381
Guido van Rossumd8faa362007-04-27 19:54:29 +0000382static void
383imp_modules_reloading_clear(void)
384{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000385 PyInterpreterState *interp = PyThreadState_Get()->interp;
386 if (interp->modules_reloading != NULL)
387 PyDict_Clear(interp->modules_reloading);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000388}
389
Guido van Rossum25ce5661997-08-02 03:10:38 +0000390/* Helper for sys */
391
392PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000393PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000394{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000395 PyInterpreterState *interp = PyThreadState_GET()->interp;
396 if (interp->modules == NULL)
397 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
398 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000399}
400
Guido van Rossum3f5da241990-12-20 15:06:42 +0000401
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000402/* List of names to clear in sys */
403static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000404 "path", "argv", "ps1", "ps2",
405 "last_type", "last_value", "last_traceback",
406 "path_hooks", "path_importer_cache", "meta_path",
407 /* misc stuff */
408 "flags", "float_info",
409 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000410};
411
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000412static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000413 "stdin", "__stdin__",
414 "stdout", "__stdout__",
415 "stderr", "__stderr__",
416 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000417};
418
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000419
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000420/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000421
Guido van Rossum3f5da241990-12-20 15:06:42 +0000422void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000423PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000424{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000425 Py_ssize_t pos, ndone;
426 char *name;
427 PyObject *key, *value, *dict;
428 PyInterpreterState *interp = PyThreadState_GET()->interp;
429 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000430
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000431 if (modules == NULL)
432 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000433
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000434 /* Delete some special variables first. These are common
435 places where user values hide and people complain when their
436 destructors fail. Since the modules containing them are
437 deleted *last* of all, they would come too late in the normal
438 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000439
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000440 value = PyDict_GetItemString(modules, "builtins");
441 if (value != NULL && PyModule_Check(value)) {
442 dict = PyModule_GetDict(value);
443 if (Py_VerboseFlag)
444 PySys_WriteStderr("# clear builtins._\n");
445 PyDict_SetItemString(dict, "_", Py_None);
446 }
447 value = PyDict_GetItemString(modules, "sys");
448 if (value != NULL && PyModule_Check(value)) {
449 char **p;
450 PyObject *v;
451 dict = PyModule_GetDict(value);
452 for (p = sys_deletes; *p != NULL; p++) {
453 if (Py_VerboseFlag)
454 PySys_WriteStderr("# clear sys.%s\n", *p);
455 PyDict_SetItemString(dict, *p, Py_None);
456 }
457 for (p = sys_files; *p != NULL; p+=2) {
458 if (Py_VerboseFlag)
459 PySys_WriteStderr("# restore sys.%s\n", *p);
460 v = PyDict_GetItemString(dict, *(p+1));
461 if (v == NULL)
462 v = Py_None;
463 PyDict_SetItemString(dict, *p, v);
464 }
465 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000466
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000467 /* First, delete __main__ */
468 value = PyDict_GetItemString(modules, "__main__");
469 if (value != NULL && PyModule_Check(value)) {
470 if (Py_VerboseFlag)
471 PySys_WriteStderr("# cleanup __main__\n");
472 _PyModule_Clear(value);
473 PyDict_SetItemString(modules, "__main__", Py_None);
474 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000475
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000476 /* The special treatment of "builtins" here is because even
477 when it's not referenced as a module, its dictionary is
478 referenced by almost every module's __builtins__. Since
479 deleting a module clears its dictionary (even if there are
480 references left to it), we need to delete the "builtins"
481 module last. Likewise, we don't delete sys until the very
482 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000483
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000484 Also note that we 'delete' modules by replacing their entry
485 in the modules dict with None, rather than really deleting
486 them; this avoids a rehash of the modules dictionary and
487 also marks them as "non existent" so they won't be
488 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000489
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000490 /* Next, repeatedly delete modules with a reference count of
491 one (skipping builtins and sys) and delete them */
492 do {
493 ndone = 0;
494 pos = 0;
495 while (PyDict_Next(modules, &pos, &key, &value)) {
496 if (value->ob_refcnt != 1)
497 continue;
498 if (PyUnicode_Check(key) && PyModule_Check(value)) {
499 name = _PyUnicode_AsString(key);
500 if (strcmp(name, "builtins") == 0)
501 continue;
502 if (strcmp(name, "sys") == 0)
503 continue;
504 if (Py_VerboseFlag)
505 PySys_WriteStderr(
506 "# cleanup[1] %s\n", name);
507 _PyModule_Clear(value);
508 PyDict_SetItem(modules, key, Py_None);
509 ndone++;
510 }
511 }
512 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000513
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000514 /* Next, delete all modules (still skipping builtins and sys) */
515 pos = 0;
516 while (PyDict_Next(modules, &pos, &key, &value)) {
517 if (PyUnicode_Check(key) && PyModule_Check(value)) {
518 name = _PyUnicode_AsString(key);
519 if (strcmp(name, "builtins") == 0)
520 continue;
521 if (strcmp(name, "sys") == 0)
522 continue;
523 if (Py_VerboseFlag)
524 PySys_WriteStderr("# cleanup[2] %s\n", name);
525 _PyModule_Clear(value);
526 PyDict_SetItem(modules, key, Py_None);
527 }
528 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000529
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000530 /* Next, delete sys and builtins (in that order) */
531 value = PyDict_GetItemString(modules, "sys");
532 if (value != NULL && PyModule_Check(value)) {
533 if (Py_VerboseFlag)
534 PySys_WriteStderr("# cleanup sys\n");
535 _PyModule_Clear(value);
536 PyDict_SetItemString(modules, "sys", Py_None);
537 }
538 value = PyDict_GetItemString(modules, "builtins");
539 if (value != NULL && PyModule_Check(value)) {
540 if (Py_VerboseFlag)
541 PySys_WriteStderr("# cleanup builtins\n");
542 _PyModule_Clear(value);
543 PyDict_SetItemString(modules, "builtins", Py_None);
544 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000545
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000546 /* Finally, clear and delete the modules directory */
547 PyDict_Clear(modules);
548 interp->modules = NULL;
549 Py_DECREF(modules);
550 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000551}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000552
553
Barry Warsaw28a691b2010-04-17 00:19:56 +0000554/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000555
556long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000557PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000558{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000559 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000560}
561
562
Barry Warsaw28a691b2010-04-17 00:19:56 +0000563const char *
564PyImport_GetMagicTag(void)
565{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000566 return pyc_tag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000567}
568
Guido van Rossum25ce5661997-08-02 03:10:38 +0000569/* Magic for extension modules (built-in as well as dynamically
570 loaded). To prevent initializing an extension module more than
571 once, we keep a static dictionary 'extensions' keyed by module name
572 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000573 modules), containing these modules. A copy of the module's
Victor Stinner49d3f252010-10-17 01:24:53 +0000574 dictionary is stored by calling _PyImport_FixupExtensionUnicode()
Guido van Rossum25ce5661997-08-02 03:10:38 +0000575 immediately after the module initialization function succeeds. A
576 copy can be retrieved from there by calling
Victor Stinner49d3f252010-10-17 01:24:53 +0000577 _PyImport_FindExtensionUnicode().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000578
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000579 Modules which do support multiple initialization set their m_size
580 field to a non-negative number (indicating the size of the
581 module-specific state). They are still recorded in the extensions
582 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000583*/
584
585int
Victor Stinner49d3f252010-10-17 01:24:53 +0000586_PyImport_FixupExtensionUnicode(PyObject *mod, char *name, PyObject *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000587{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000588 PyObject *modules, *dict;
589 struct PyModuleDef *def;
590 if (extensions == NULL) {
591 extensions = PyDict_New();
592 if (extensions == NULL)
593 return -1;
594 }
595 if (mod == NULL || !PyModule_Check(mod)) {
596 PyErr_BadInternalCall();
597 return -1;
598 }
599 def = PyModule_GetDef(mod);
600 if (!def) {
601 PyErr_BadInternalCall();
602 return -1;
603 }
604 modules = PyImport_GetModuleDict();
605 if (PyDict_SetItemString(modules, name, mod) < 0)
606 return -1;
607 if (_PyState_AddModule(mod, def) < 0) {
608 PyDict_DelItemString(modules, name);
609 return -1;
610 }
611 if (def->m_size == -1) {
612 if (def->m_base.m_copy) {
613 /* Somebody already imported the module,
614 likely under a different name.
615 XXX this should really not happen. */
616 Py_DECREF(def->m_base.m_copy);
617 def->m_base.m_copy = NULL;
618 }
619 dict = PyModule_GetDict(mod);
620 if (dict == NULL)
621 return -1;
622 def->m_base.m_copy = PyDict_Copy(dict);
623 if (def->m_base.m_copy == NULL)
624 return -1;
625 }
Victor Stinner49d3f252010-10-17 01:24:53 +0000626 PyDict_SetItem(extensions, filename, (PyObject*)def);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000627 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000628}
629
Victor Stinner49d3f252010-10-17 01:24:53 +0000630int
631_PyImport_FixupBuiltin(PyObject *mod, char *name)
632{
633 int res;
634 PyObject *filename;
635 filename = PyUnicode_FromString(name);
636 if (filename == NULL)
637 return -1;
638 res = _PyImport_FixupExtensionUnicode(mod, name, filename);
639 Py_DECREF(filename);
640 return res;
641}
642
Guido van Rossum25ce5661997-08-02 03:10:38 +0000643PyObject *
Victor Stinner49d3f252010-10-17 01:24:53 +0000644_PyImport_FindExtensionUnicode(char *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000645{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000646 PyObject *mod, *mdict;
647 PyModuleDef* def;
648 if (extensions == NULL)
649 return NULL;
Victor Stinner49d3f252010-10-17 01:24:53 +0000650 def = (PyModuleDef*)PyDict_GetItem(extensions, filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000651 if (def == NULL)
652 return NULL;
653 if (def->m_size == -1) {
654 /* Module does not support repeated initialization */
655 if (def->m_base.m_copy == NULL)
656 return NULL;
657 mod = PyImport_AddModule(name);
658 if (mod == NULL)
659 return NULL;
660 mdict = PyModule_GetDict(mod);
661 if (mdict == NULL)
662 return NULL;
663 if (PyDict_Update(mdict, def->m_base.m_copy))
664 return NULL;
665 }
666 else {
667 if (def->m_base.m_init == NULL)
668 return NULL;
669 mod = def->m_base.m_init();
670 if (mod == NULL)
671 return NULL;
672 PyDict_SetItemString(PyImport_GetModuleDict(), name, mod);
673 Py_DECREF(mod);
674 }
675 if (_PyState_AddModule(mod, def) < 0) {
676 PyDict_DelItemString(PyImport_GetModuleDict(), name);
677 Py_DECREF(mod);
678 return NULL;
679 }
680 if (Py_VerboseFlag)
Victor Stinner49d3f252010-10-17 01:24:53 +0000681 PySys_FormatStderr("import %s # previously loaded (%U)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000682 name, filename);
683 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000684
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000685}
686
Victor Stinner49d3f252010-10-17 01:24:53 +0000687PyObject *
688_PyImport_FindBuiltin(char *name)
689{
690 PyObject *res, *filename;
691 filename = PyUnicode_FromString(name);
692 if (filename == NULL)
693 return NULL;
694 res = _PyImport_FindExtensionUnicode(name, filename);
695 Py_DECREF(filename);
696 return res;
697}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000698
699/* Get the module object corresponding to a module name.
700 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000701 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000702 Because the former action is most common, THIS DOES NOT RETURN A
703 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000704
Guido van Rossum79f25d91997-04-29 20:08:16 +0000705PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000706PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000707{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000708 PyObject *modules = PyImport_GetModuleDict();
709 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000710
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000711 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
712 PyModule_Check(m))
713 return m;
714 m = PyModule_New(name);
715 if (m == NULL)
716 return NULL;
717 if (PyDict_SetItemString(modules, name, m) != 0) {
718 Py_DECREF(m);
719 return NULL;
720 }
721 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000722
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000723 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000724}
725
Tim Peters1cd70172004-08-02 03:52:12 +0000726/* Remove name from sys.modules, if it's there. */
727static void
Benjamin Petersonfa0aeba2010-03-25 23:30:20 +0000728remove_module(const char *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000729{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000730 PyObject *modules = PyImport_GetModuleDict();
731 if (PyDict_GetItemString(modules, name) == NULL)
732 return;
733 if (PyDict_DelItemString(modules, name) < 0)
734 Py_FatalError("import: deleting existing key in"
735 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000736}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000737
Barry Warsaw28a691b2010-04-17 00:19:56 +0000738static PyObject * get_sourcefile(char *file);
739static char *make_source_pathname(char *pathname, char *buf);
740static char *make_compiled_pathname(char *pathname, char *buf, size_t buflen,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000741 int debug);
Christian Heimes3b06e532008-01-07 20:12:44 +0000742
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000743/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000744 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
745 * removed from sys.modules, to avoid leaving damaged module objects
746 * in sys.modules. The caller may wish to restore the original
747 * module object (if any) in this case; PyImport_ReloadModule is an
748 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000749 *
750 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
751 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000752 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000753PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000754PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000755{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000756 return PyImport_ExecCodeModuleWithPathnames(
757 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000758}
759
760PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000761PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000762{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000763 return PyImport_ExecCodeModuleWithPathnames(
764 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000765}
766
767PyObject *
768PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000769 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000770{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000771 PyObject *modules = PyImport_GetModuleDict();
772 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000773
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000774 m = PyImport_AddModule(name);
775 if (m == NULL)
776 return NULL;
777 /* If the module is being reloaded, we get the old module back
778 and re-use its dict to exec the new code. */
779 d = PyModule_GetDict(m);
780 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
781 if (PyDict_SetItemString(d, "__builtins__",
782 PyEval_GetBuiltins()) != 0)
783 goto error;
784 }
785 /* Remember the filename as the __file__ attribute */
786 v = NULL;
787 if (pathname != NULL) {
788 v = get_sourcefile(pathname);
789 if (v == NULL)
790 PyErr_Clear();
791 }
792 if (v == NULL) {
793 v = ((PyCodeObject *)co)->co_filename;
794 Py_INCREF(v);
795 }
796 if (PyDict_SetItemString(d, "__file__", v) != 0)
797 PyErr_Clear(); /* Not important enough to report */
798 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000799
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000800 /* Remember the pyc path name as the __cached__ attribute. */
801 if (cpathname == NULL) {
802 v = Py_None;
803 Py_INCREF(v);
804 }
805 else if ((v = PyUnicode_FromString(cpathname)) == NULL) {
806 PyErr_Clear(); /* Not important enough to report */
807 v = Py_None;
808 Py_INCREF(v);
809 }
810 if (PyDict_SetItemString(d, "__cached__", v) != 0)
811 PyErr_Clear(); /* Not important enough to report */
812 Py_DECREF(v);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000813
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000814 v = PyEval_EvalCode(co, d, d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000815 if (v == NULL)
816 goto error;
817 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000818
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000819 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
820 PyErr_Format(PyExc_ImportError,
821 "Loaded module %.200s not found in sys.modules",
822 name);
823 return NULL;
824 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000825
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000826 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000827
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000828 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000829
830 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000831 remove_module(name);
832 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000833}
834
835
Barry Warsaw28a691b2010-04-17 00:19:56 +0000836/* Like strrchr(string, '/') but searches for the rightmost of either SEP
837 or ALTSEP, if the latter is defined.
838*/
839static char *
840rightmost_sep(char *s)
841{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000842 char *found, c;
843 for (found = NULL; (c = *s); s++) {
844 if (c == SEP
Barry Warsaw28a691b2010-04-17 00:19:56 +0000845#ifdef ALTSEP
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000846 || c == ALTSEP
Barry Warsaw28a691b2010-04-17 00:19:56 +0000847#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000848 )
849 {
850 found = s;
851 }
852 }
853 return found;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000854}
855
856
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000857/* Given a pathname for a Python source file, fill a buffer with the
858 pathname for the corresponding compiled file. Return the pathname
859 for the compiled file, or NULL if there's no space in the buffer.
860 Doesn't set an exception. */
861
862static char *
Barry Warsaw28a691b2010-04-17 00:19:56 +0000863make_compiled_pathname(char *pathname, char *buf, size_t buflen, int debug)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000864{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000865 /* foo.py -> __pycache__/foo.<tag>.pyc */
866 size_t len = strlen(pathname);
867 size_t i, save;
868 char *pos;
869 int sep = SEP;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000870
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000871 /* Sanity check that the buffer has roughly enough space to hold what
872 will eventually be the full path to the compiled file. The 5 extra
873 bytes include the slash afer __pycache__, the two extra dots, the
874 extra trailing character ('c' or 'o') and null. This isn't exact
875 because the contents of the buffer can affect how many actual
876 characters of the string get into the buffer. We'll do a final
877 sanity check before writing the extension to ensure we do not
878 overflow the buffer.
879 */
880 if (len + strlen(CACHEDIR) + strlen(pyc_tag) + 5 > buflen)
881 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000882
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000883 /* Find the last path separator and copy everything from the start of
884 the source string up to and including the separator.
885 */
886 if ((pos = rightmost_sep(pathname)) == NULL) {
887 i = 0;
888 }
889 else {
890 sep = *pos;
891 i = pos - pathname + 1;
892 strncpy(buf, pathname, i);
893 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000894
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000895 save = i;
896 buf[i++] = '\0';
897 /* Add __pycache__/ */
898 strcat(buf, CACHEDIR);
899 i += strlen(CACHEDIR) - 1;
900 buf[i++] = sep;
901 buf[i++] = '\0';
902 /* Add the base filename, but remove the .py or .pyw extension, since
903 the tag name must go before the extension.
904 */
905 strcat(buf, pathname + save);
906 if ((pos = strrchr(buf, '.')) != NULL)
907 *++pos = '\0';
908 strcat(buf, pyc_tag);
909 /* The length test above assumes that we're only adding one character
910 to the end of what would normally be the extension. What if there
911 is no extension, or the string ends in '.' or '.p', and otherwise
912 fills the buffer? By appending 4 more characters onto the string
913 here, we could overrun the buffer.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000914
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000915 As a simple example, let's say buflen=32 and the input string is
916 'xxx.py'. strlen() would be 6 and the test above would yield:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000917
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000918 (6 + 11 + 10 + 5 == 32) > 32
Barry Warsaw28a691b2010-04-17 00:19:56 +0000919
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000920 which is false and so the name mangling would continue. This would
921 be fine because we'd end up with this string in buf:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000923 __pycache__/xxx.cpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000924
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000925 strlen(of that) == 30 + the nul fits inside a 32 character buffer.
926 We can even handle an input string of say 'xxxxx' above because
927 that's (5 + 11 + 10 + 5 == 31) > 32 which is also false. Name
928 mangling that yields:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000929
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000930 __pycache__/xxxxxcpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000931
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000932 which is 32 characters including the nul, and thus fits in the
933 buffer. However, an input string of 'xxxxxx' would yield a result
934 string of:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000935
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000936 __pycache__/xxxxxxcpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000937
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000938 which is 33 characters long (including the nul), thus overflowing
939 the buffer, even though the first test would fail, i.e.: the input
940 string is also 6 characters long, so 32 > 32 is false.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000941
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000942 The reason the first test fails but we still overflow the buffer is
943 that the test above only expects to add one extra character to be
944 added to the extension, and here we're adding three (pyc). We
945 don't add the first dot, so that reclaims one of expected
946 positions, leaving us overflowing by 1 byte (3 extra - 1 reclaimed
947 dot - 1 expected extra == 1 overflowed).
Barry Warsaw28a691b2010-04-17 00:19:56 +0000948
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000949 The best we can do is ensure that we still have enough room in the
950 target buffer before we write the extension. Because it's always
951 only the extension that can cause the overflow, and never the other
952 path bytes we've written, it's sufficient to just do one more test
953 here. Still, the assertion that follows can't hurt.
954 */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000955#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000956 printf("strlen(buf): %d; buflen: %d\n", (int)strlen(buf), (int)buflen);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000957#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000958 if (strlen(buf) + 5 > buflen)
959 return NULL;
960 strcat(buf, debug ? ".pyc" : ".pyo");
961 assert(strlen(buf) < buflen);
962 return buf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000963}
964
965
Barry Warsaw28a691b2010-04-17 00:19:56 +0000966/* Given a pathname to a Python byte compiled file, return the path to the
967 source file, if the path matches the PEP 3147 format. This does not check
968 for any file existence, however, if the pyc file name does not match PEP
969 3147 style, NULL is returned. buf must be at least as big as pathname;
970 the resulting path will always be shorter. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000971
Barry Warsaw28a691b2010-04-17 00:19:56 +0000972static char *
973make_source_pathname(char *pathname, char *buf)
974{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000975 /* __pycache__/foo.<tag>.pyc -> foo.py */
976 size_t i, j;
977 char *left, *right, *dot0, *dot1, sep;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000978
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000979 /* Look back two slashes from the end. In between these two slashes
980 must be the string __pycache__ or this is not a PEP 3147 style
981 path. It's possible for there to be only one slash.
982 */
983 if ((right = rightmost_sep(pathname)) == NULL)
984 return NULL;
985 sep = *right;
986 *right = '\0';
987 left = rightmost_sep(pathname);
988 *right = sep;
989 if (left == NULL)
990 left = pathname;
991 else
992 left++;
993 if (right-left != strlen(CACHEDIR) ||
994 strncmp(left, CACHEDIR, right-left) != 0)
995 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000996
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997 /* Now verify that the path component to the right of the last slash
998 has two dots in it.
999 */
1000 if ((dot0 = strchr(right + 1, '.')) == NULL)
1001 return NULL;
1002 if ((dot1 = strchr(dot0 + 1, '.')) == NULL)
1003 return NULL;
1004 /* Too many dots? */
1005 if (strchr(dot1 + 1, '.') != NULL)
1006 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001007
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001008 /* This is a PEP 3147 path. Start by copying everything from the
1009 start of pathname up to and including the leftmost slash. Then
1010 copy the file's basename, removing the magic tag and adding a .py
1011 suffix.
1012 */
1013 strncpy(buf, pathname, (i=left-pathname));
1014 strncpy(buf+i, right+1, (j=dot0-right));
1015 strcpy(buf+i+j, "py");
1016 return buf;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001017}
1018
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001019/* Given a pathname for a Python source file, its time of last
1020 modification, and a pathname for a compiled file, check whether the
1021 compiled file represents the same version of the source. If so,
1022 return a FILE pointer for the compiled file, positioned just after
1023 the header; if not, return NULL.
1024 Doesn't set an exception. */
1025
1026static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001027check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001028{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001029 FILE *fp;
1030 long magic;
1031 long pyc_mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001032
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001033 fp = fopen(cpathname, "rb");
1034 if (fp == NULL)
1035 return NULL;
1036 magic = PyMarshal_ReadLongFromFile(fp);
1037 if (magic != pyc_magic) {
1038 if (Py_VerboseFlag)
1039 PySys_WriteStderr("# %s has bad magic\n", cpathname);
1040 fclose(fp);
1041 return NULL;
1042 }
1043 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
1044 if (pyc_mtime != mtime) {
1045 if (Py_VerboseFlag)
1046 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
1047 fclose(fp);
1048 return NULL;
1049 }
1050 if (Py_VerboseFlag)
1051 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
1052 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001053}
1054
1055
1056/* Read a code object from a file and check it for validity */
1057
Guido van Rossum79f25d91997-04-29 20:08:16 +00001058static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001059read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001060{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001061 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001062
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001063 co = PyMarshal_ReadLastObjectFromFile(fp);
1064 if (co == NULL)
1065 return NULL;
1066 if (!PyCode_Check(co)) {
1067 PyErr_Format(PyExc_ImportError,
1068 "Non-code object in %.200s", cpathname);
1069 Py_DECREF(co);
1070 return NULL;
1071 }
1072 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001073}
1074
1075
1076/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001077 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001078
Guido van Rossum79f25d91997-04-29 20:08:16 +00001079static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001080load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001081{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001082 long magic;
1083 PyCodeObject *co;
1084 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001085
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001086 magic = PyMarshal_ReadLongFromFile(fp);
1087 if (magic != pyc_magic) {
1088 PyErr_Format(PyExc_ImportError,
1089 "Bad magic number in %.200s", cpathname);
1090 return NULL;
1091 }
1092 (void) PyMarshal_ReadLongFromFile(fp);
1093 co = read_compiled_module(cpathname, fp);
1094 if (co == NULL)
1095 return NULL;
1096 if (Py_VerboseFlag)
1097 PySys_WriteStderr("import %s # precompiled from %s\n",
1098 name, cpathname);
1099 m = PyImport_ExecCodeModuleWithPathnames(
1100 name, (PyObject *)co, cpathname, cpathname);
1101 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001102
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001103 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001104}
1105
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001106/* Parse a source file and return the corresponding code object */
1107
Guido van Rossum79f25d91997-04-29 20:08:16 +00001108static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001109parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001110{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001111 PyCodeObject *co = NULL;
1112 mod_ty mod;
1113 PyCompilerFlags flags;
1114 PyArena *arena = PyArena_New();
1115 if (arena == NULL)
1116 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001117
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001118 flags.cf_flags = 0;
1119 mod = PyParser_ASTFromFile(fp, pathname, NULL,
1120 Py_file_input, 0, 0, &flags,
1121 NULL, arena);
1122 if (mod) {
1123 co = PyAST_Compile(mod, pathname, NULL, arena);
1124 }
1125 PyArena_Free(arena);
1126 return co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001127}
1128
1129
Guido van Rossum55a83382000-09-20 20:31:38 +00001130/* Helper to open a bytecode file for writing in exclusive mode */
1131
1132static FILE *
Christian Heimes05e8be12008-02-23 18:30:17 +00001133open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +00001134{
1135#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001136 /* Use O_EXCL to avoid a race condition when another process tries to
1137 write the same file. When that happens, our open() call fails,
1138 which is just fine (since it's only a cache).
1139 XXX If the file exists and is writable but the directory is not
1140 writable, the file will never be written. Oh well.
1141 */
1142 int fd;
1143 (void) unlink(filename);
1144 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
Tim Peters42c83af2000-09-29 04:03:10 +00001145#ifdef O_BINARY
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001146 |O_BINARY /* necessary for Windows */
Tim Peters42c83af2000-09-29 04:03:10 +00001147#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001148#ifdef __VMS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001149 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001150#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001151 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001152#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001153 );
1154 if (fd < 0)
1155 return NULL;
1156 return fdopen(fd, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001157#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001158 /* Best we can do -- on Windows this can't happen anyway */
1159 return fopen(filename, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001160#endif
1161}
1162
1163
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001164/* Write a compiled module to a file, placing the time of last
1165 modification of its source into the header.
1166 Errors are ignored, if a write error occurs an attempt is made to
1167 remove the file. */
1168
1169static void
Christian Heimes05e8be12008-02-23 18:30:17 +00001170write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001171{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001172 FILE *fp;
1173 char *dirpath;
1174 time_t mtime = srcstat->st_mtime;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001175#ifdef MS_WINDOWS /* since Windows uses different permissions */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001176 mode_t mode = srcstat->st_mode & ~S_IEXEC;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001177#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001178 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
1179 mode_t dirmode = (srcstat->st_mode |
1180 S_IXUSR | S_IXGRP | S_IXOTH |
1181 S_IWUSR | S_IWGRP | S_IWOTH);
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001182#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001183 int saved;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001184
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001185 /* Ensure that the __pycache__ directory exists. */
1186 dirpath = rightmost_sep(cpathname);
1187 if (dirpath == NULL) {
1188 if (Py_VerboseFlag)
1189 PySys_WriteStderr(
1190 "# no %s path found %s\n",
1191 CACHEDIR, cpathname);
1192 return;
1193 }
1194 saved = *dirpath;
1195 *dirpath = '\0';
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001196
1197#ifdef MS_WINDOWS
1198 if (_mkdir(cpathname) < 0 && errno != EEXIST) {
1199#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001200 if (mkdir(cpathname, dirmode) < 0 && errno != EEXIST) {
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001201#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001202 *dirpath = saved;
1203 if (Py_VerboseFlag)
1204 PySys_WriteStderr(
1205 "# cannot create cache dir %s\n", cpathname);
1206 return;
1207 }
1208 *dirpath = saved;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001209
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001210 fp = open_exclusive(cpathname, mode);
1211 if (fp == NULL) {
1212 if (Py_VerboseFlag)
1213 PySys_WriteStderr(
1214 "# can't create %s\n", cpathname);
1215 return;
1216 }
1217 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
1218 /* First write a 0 for mtime */
1219 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
1220 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
1221 if (fflush(fp) != 0 || ferror(fp)) {
1222 if (Py_VerboseFlag)
1223 PySys_WriteStderr("# can't write %s\n", cpathname);
1224 /* Don't keep partial file */
1225 fclose(fp);
1226 (void) unlink(cpathname);
1227 return;
1228 }
Antoine Pitrou33d15f72012-01-25 18:01:45 +01001229 /* Now write the true mtime (as a 32-bit field) */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 fseek(fp, 4L, 0);
Antoine Pitrou33d15f72012-01-25 18:01:45 +01001231 assert(mtime <= 0xFFFFFFFF);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001232 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
1233 fflush(fp);
1234 fclose(fp);
1235 if (Py_VerboseFlag)
1236 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001237}
1238
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001239static void
1240update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
1241{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001242 PyObject *constants, *tmp;
1243 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001244
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001245 if (PyUnicode_Compare(co->co_filename, oldname))
1246 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001247
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 tmp = co->co_filename;
1249 co->co_filename = newname;
1250 Py_INCREF(co->co_filename);
1251 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001252
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001253 constants = co->co_consts;
1254 n = PyTuple_GET_SIZE(constants);
1255 for (i = 0; i < n; i++) {
1256 tmp = PyTuple_GET_ITEM(constants, i);
1257 if (PyCode_Check(tmp))
1258 update_code_filenames((PyCodeObject *)tmp,
1259 oldname, newname);
1260 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001261}
1262
1263static int
1264update_compiled_module(PyCodeObject *co, char *pathname)
1265{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001266 PyObject *oldname, *newname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001267
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001268 newname = PyUnicode_DecodeFSDefault(pathname);
1269 if (newname == NULL)
1270 return -1;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001271
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001272 if (!PyUnicode_Compare(co->co_filename, newname)) {
1273 Py_DECREF(newname);
1274 return 0;
1275 }
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +00001276
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001277 oldname = co->co_filename;
1278 Py_INCREF(oldname);
1279 update_code_filenames(co, oldname, newname);
1280 Py_DECREF(oldname);
1281 Py_DECREF(newname);
1282 return 1;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001283}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001284
1285/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001286 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
1287 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001288
Guido van Rossum79f25d91997-04-29 20:08:16 +00001289static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001290load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001291{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001292 struct stat st;
1293 FILE *fpc;
Gregory P. Smithc809f982012-03-18 16:06:53 -07001294 char *buf;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001295 char *cpathname;
Antoine Pitroud576c712012-05-09 13:24:31 +02001296 PyCodeObject *co = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001297 PyObject *m;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001298
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001299 if (fstat(fileno(fp), &st) != 0) {
1300 PyErr_Format(PyExc_RuntimeError,
1301 "unable to get file status from '%s'",
1302 pathname);
1303 return NULL;
1304 }
Antoine Pitrou33d15f72012-01-25 18:01:45 +01001305 if (sizeof st.st_mtime > 4) {
1306 /* Python's .pyc timestamp handling presumes that the timestamp fits
1307 in 4 bytes. Since the code only does an equality comparison,
1308 ordering is not important and we can safely ignore the higher bits
1309 (collisions are extremely unlikely).
1310 */
1311 st.st_mtime &= 0xFFFFFFFF;
1312 }
Gregory P. Smithc809f982012-03-18 16:06:53 -07001313 buf = PyMem_MALLOC(MAXPATHLEN+1);
1314 if (buf == NULL) {
1315 return PyErr_NoMemory();
1316 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001317 cpathname = make_compiled_pathname(
1318 pathname, buf, (size_t)MAXPATHLEN + 1, !Py_OptimizeFlag);
1319 if (cpathname != NULL &&
1320 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
1321 co = read_compiled_module(cpathname, fpc);
1322 fclose(fpc);
1323 if (co == NULL)
Gregory P. Smithc809f982012-03-18 16:06:53 -07001324 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001325 if (update_compiled_module(co, pathname) < 0)
Gregory P. Smithc809f982012-03-18 16:06:53 -07001326 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001327 if (Py_VerboseFlag)
1328 PySys_WriteStderr("import %s # precompiled from %s\n",
1329 name, cpathname);
1330 pathname = cpathname;
1331 }
1332 else {
1333 co = parse_source_module(pathname, fp);
1334 if (co == NULL)
Gregory P. Smithc809f982012-03-18 16:06:53 -07001335 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001336 if (Py_VerboseFlag)
1337 PySys_WriteStderr("import %s # from %s\n",
1338 name, pathname);
1339 if (cpathname) {
1340 PyObject *ro = PySys_GetObject("dont_write_bytecode");
Antoine Pitrou6f430e42012-08-15 23:18:25 +02001341 int b = (ro == NULL) ? 0 : PyObject_IsTrue(ro);
1342 if (b < 0)
1343 goto error_exit;
1344 if (!b)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001345 write_compiled_module(co, cpathname, &st);
1346 }
1347 }
1348 m = PyImport_ExecCodeModuleWithPathnames(
1349 name, (PyObject *)co, pathname, cpathname);
1350 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001351
Gregory P. Smithc809f982012-03-18 16:06:53 -07001352 PyMem_FREE(buf);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001353 return m;
Gregory P. Smithc809f982012-03-18 16:06:53 -07001354
1355error_exit:
Antoine Pitroud576c712012-05-09 13:24:31 +02001356 Py_XDECREF(co);
Gregory P. Smithc809f982012-03-18 16:06:53 -07001357 PyMem_FREE(buf);
1358 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001359}
1360
Christian Heimes3b06e532008-01-07 20:12:44 +00001361/* Get source file -> unicode or None
1362 * Returns the path to the py file if available, else the given path
1363 */
1364static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00001365get_sourcefile(char *file)
Christian Heimes3b06e532008-01-07 20:12:44 +00001366{
Gregory P. Smithc809f982012-03-18 16:06:53 -07001367 char *py = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001368 Py_ssize_t len;
1369 PyObject *u;
1370 struct stat statbuf;
Christian Heimes3b06e532008-01-07 20:12:44 +00001371
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001372 if (!file || !*file) {
1373 Py_RETURN_NONE;
1374 }
Christian Heimes3b06e532008-01-07 20:12:44 +00001375
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001376 len = strlen(file);
1377 /* match '*.py?' */
1378 if (len > MAXPATHLEN || PyOS_strnicmp(&file[len-4], ".py", 3) != 0) {
1379 return PyUnicode_DecodeFSDefault(file);
1380 }
Christian Heimes3b06e532008-01-07 20:12:44 +00001381
Gregory P. Smithc809f982012-03-18 16:06:53 -07001382 py = PyMem_MALLOC(MAXPATHLEN+1);
1383 if (py == NULL) {
1384 return PyErr_NoMemory();
1385 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001386 /* Start by trying to turn PEP 3147 path into source path. If that
1387 * fails, just chop off the trailing character, i.e. legacy pyc path
1388 * to py.
1389 */
1390 if (make_source_pathname(file, py) == NULL) {
1391 strncpy(py, file, len-1);
1392 py[len-1] = '\0';
1393 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00001394
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001395 if (stat(py, &statbuf) == 0 &&
1396 S_ISREG(statbuf.st_mode)) {
1397 u = PyUnicode_DecodeFSDefault(py);
1398 }
1399 else {
1400 u = PyUnicode_DecodeFSDefault(file);
1401 }
Gregory P. Smithc809f982012-03-18 16:06:53 -07001402 PyMem_FREE(py);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001403 return u;
Christian Heimes3b06e532008-01-07 20:12:44 +00001404}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001405
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001406/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001407static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1408static struct filedescr *find_module(char *, char *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001409 char *, size_t, FILE **, PyObject **);
Christian Heimes3b06e532008-01-07 20:12:44 +00001410static struct _frozen * find_frozen(char *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001411
1412/* Load a package and return its module object WITH INCREMENTED
1413 REFERENCE COUNT */
1414
1415static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001416load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001417{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001418 PyObject *m, *d;
1419 PyObject *file = NULL;
1420 PyObject *path = NULL;
1421 int err;
Gregory P. Smithc809f982012-03-18 16:06:53 -07001422 char *buf = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001423 FILE *fp = NULL;
1424 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001425
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001426 m = PyImport_AddModule(name);
1427 if (m == NULL)
1428 return NULL;
1429 if (Py_VerboseFlag)
1430 PySys_WriteStderr("import %s # directory %s\n",
1431 name, pathname);
1432 d = PyModule_GetDict(m);
1433 file = get_sourcefile(pathname);
1434 if (file == NULL)
1435 goto error;
1436 path = Py_BuildValue("[O]", file);
1437 if (path == NULL)
1438 goto error;
1439 err = PyDict_SetItemString(d, "__file__", file);
1440 if (err == 0)
1441 err = PyDict_SetItemString(d, "__path__", path);
1442 if (err != 0)
1443 goto error;
Gregory P. Smithc809f982012-03-18 16:06:53 -07001444 buf = PyMem_MALLOC(MAXPATHLEN+1);
1445 if (buf == NULL) {
1446 PyErr_NoMemory();
1447 goto error;
1448 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001449 buf[0] = '\0';
Gregory P. Smithc809f982012-03-18 16:06:53 -07001450 fdp = find_module(name, "__init__", path, buf, MAXPATHLEN+1, &fp, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001451 if (fdp == NULL) {
1452 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1453 PyErr_Clear();
1454 Py_INCREF(m);
1455 }
1456 else
1457 m = NULL;
1458 goto cleanup;
1459 }
1460 m = load_module(name, fp, buf, fdp->type, NULL);
1461 if (fp != NULL)
1462 fclose(fp);
1463 goto cleanup;
Tim Peters1cd70172004-08-02 03:52:12 +00001464
1465 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001466 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001467 cleanup:
Gregory P. Smithc809f982012-03-18 16:06:53 -07001468 if (buf)
1469 PyMem_FREE(buf);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001470 Py_XDECREF(path);
1471 Py_XDECREF(file);
1472 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001473}
1474
1475
1476/* Helper to test for built-in module */
1477
1478static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001479is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001480{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001481 int i;
1482 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1483 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1484 if (PyImport_Inittab[i].initfunc == NULL)
1485 return -1;
1486 else
1487 return 1;
1488 }
1489 }
1490 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001491}
1492
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001493
Just van Rossum52e14d62002-12-30 22:08:05 +00001494/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1495 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001496 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001497 that can handle the path item. Return None if no hook could;
1498 this tells our caller it should fall back to the builtin
1499 import mechanism. Cache the result in path_importer_cache.
1500 Returns a borrowed reference. */
1501
1502static PyObject *
1503get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001504 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001505{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001506 PyObject *importer;
1507 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001508
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001509 /* These conditions are the caller's responsibility: */
1510 assert(PyList_Check(path_hooks));
1511 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001512
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001513 nhooks = PyList_Size(path_hooks);
1514 if (nhooks < 0)
1515 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001516
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001517 importer = PyDict_GetItem(path_importer_cache, p);
1518 if (importer != NULL)
1519 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001520
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001521 /* set path_importer_cache[p] to None to avoid recursion */
1522 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1523 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001524
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001525 for (j = 0; j < nhooks; j++) {
1526 PyObject *hook = PyList_GetItem(path_hooks, j);
1527 if (hook == NULL)
1528 return NULL;
1529 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1530 if (importer != NULL)
1531 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001532
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001533 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1534 return NULL;
1535 }
1536 PyErr_Clear();
1537 }
1538 if (importer == NULL) {
1539 importer = PyObject_CallFunctionObjArgs(
1540 (PyObject *)&PyNullImporter_Type, p, NULL
1541 );
1542 if (importer == NULL) {
1543 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1544 PyErr_Clear();
1545 return Py_None;
1546 }
1547 }
1548 }
1549 if (importer != NULL) {
1550 int err = PyDict_SetItem(path_importer_cache, p, importer);
1551 Py_DECREF(importer);
1552 if (err != 0)
1553 return NULL;
1554 }
1555 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001556}
1557
Christian Heimes9cd17752007-11-18 19:35:23 +00001558PyAPI_FUNC(PyObject *)
1559PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001560 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001561
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001562 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1563 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1564 importer = get_path_importer(path_importer_cache,
1565 path_hooks, path);
1566 }
1567 }
1568 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1569 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001570}
1571
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001572/* Search the path (default sys.path) for a module. Return the
1573 corresponding filedescr struct, and (via return arguments) the
1574 pathname and an open file. Return NULL if the module is not found. */
1575
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001576#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001577extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001578 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001579#endif
1580
Martin v. Löwis18e16552006-02-15 17:27:45 +00001581static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001582static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001583static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001584
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001585static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001586find_module(char *fullname, char *subname, PyObject *path, char *buf,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001587 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001588{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001589 Py_ssize_t i, npath;
1590 size_t len, namelen;
1591 struct filedescr *fdp = NULL;
1592 char *filemode;
1593 FILE *fp = NULL;
1594 PyObject *path_hooks, *path_importer_cache;
1595 struct stat statbuf;
1596 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1597 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1598 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Gregory P. Smithc809f982012-03-18 16:06:53 -07001599 char *name;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001600#if defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001601 size_t saved_len;
1602 size_t saved_namelen;
1603 char *saved_buf = NULL;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001604#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001605 if (p_loader != NULL)
1606 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001607
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001608 if (strlen(subname) > MAXPATHLEN) {
1609 PyErr_SetString(PyExc_OverflowError,
1610 "module name is too long");
1611 return NULL;
1612 }
Gregory P. Smithc809f982012-03-18 16:06:53 -07001613 name = PyMem_MALLOC(MAXPATHLEN+1);
1614 if (name == NULL) {
1615 PyErr_NoMemory();
1616 return NULL;
1617 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001618 strcpy(name, subname);
Just van Rossum52e14d62002-12-30 22:08:05 +00001619
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001620 /* sys.meta_path import hook */
1621 if (p_loader != NULL) {
1622 PyObject *meta_path;
Just van Rossum52e14d62002-12-30 22:08:05 +00001623
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001624 meta_path = PySys_GetObject("meta_path");
1625 if (meta_path == NULL || !PyList_Check(meta_path)) {
Victor Stinner16191322011-09-15 19:28:05 +02001626 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001627 "sys.meta_path must be a list of "
1628 "import hooks");
Gregory P. Smithc809f982012-03-18 16:06:53 -07001629 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001630 }
1631 Py_INCREF(meta_path); /* zap guard */
1632 npath = PyList_Size(meta_path);
1633 for (i = 0; i < npath; i++) {
1634 PyObject *loader;
1635 PyObject *hook = PyList_GetItem(meta_path, i);
1636 loader = PyObject_CallMethod(hook, "find_module",
1637 "sO", fullname,
1638 path != NULL ?
1639 path : Py_None);
1640 if (loader == NULL) {
1641 Py_DECREF(meta_path);
Gregory P. Smithc809f982012-03-18 16:06:53 -07001642 goto error_exit; /* true error */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001643 }
1644 if (loader != Py_None) {
1645 /* a loader was found */
1646 *p_loader = loader;
1647 Py_DECREF(meta_path);
Gregory P. Smithc809f982012-03-18 16:06:53 -07001648 PyMem_FREE(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001649 return &importhookdescr;
1650 }
1651 Py_DECREF(loader);
1652 }
1653 Py_DECREF(meta_path);
1654 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001655
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001656 if (find_frozen(fullname) != NULL) {
1657 strcpy(buf, fullname);
Gregory P. Smithc809f982012-03-18 16:06:53 -07001658 PyMem_FREE(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001659 return &fd_frozen;
1660 }
Benjamin Petersond968e272008-11-05 22:48:33 +00001661
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001662 if (path == NULL) {
1663 if (is_builtin(name)) {
1664 strcpy(buf, name);
Gregory P. Smithc809f982012-03-18 16:06:53 -07001665 PyMem_FREE(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001666 return &fd_builtin;
1667 }
Guido van Rossumac279101996-08-22 23:10:58 +00001668#ifdef MS_COREDLL
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001669 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1670 if (fp != NULL) {
1671 *p_fp = fp;
Gregory P. Smithc809f982012-03-18 16:06:53 -07001672 PyMem_FREE(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001673 return fdp;
1674 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001675#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001676 path = PySys_GetObject("path");
1677 }
Benjamin Petersond968e272008-11-05 22:48:33 +00001678
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001679 if (path == NULL || !PyList_Check(path)) {
Victor Stinner16191322011-09-15 19:28:05 +02001680 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001681 "sys.path must be a list of directory names");
Gregory P. Smithc809f982012-03-18 16:06:53 -07001682 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001683 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001684
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001685 path_hooks = PySys_GetObject("path_hooks");
1686 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
Victor Stinner16191322011-09-15 19:28:05 +02001687 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001688 "sys.path_hooks must be a list of "
1689 "import hooks");
Gregory P. Smithc809f982012-03-18 16:06:53 -07001690 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001691 }
1692 path_importer_cache = PySys_GetObject("path_importer_cache");
1693 if (path_importer_cache == NULL ||
1694 !PyDict_Check(path_importer_cache)) {
Victor Stinner16191322011-09-15 19:28:05 +02001695 PyErr_SetString(PyExc_RuntimeError,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001696 "sys.path_importer_cache must be a dict");
Gregory P. Smithc809f982012-03-18 16:06:53 -07001697 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001698 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001699
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001700 npath = PyList_Size(path);
1701 namelen = strlen(name);
1702 for (i = 0; i < npath; i++) {
1703 PyObject *v = PyList_GetItem(path, i);
1704 PyObject *origv = v;
1705 const char *base;
1706 Py_ssize_t size;
1707 if (!v)
Gregory P. Smithc809f982012-03-18 16:06:53 -07001708 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001709 if (PyUnicode_Check(v)) {
Victor Stinnerae6265f2010-05-15 16:27:27 +00001710 v = PyUnicode_EncodeFSDefault(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001711 if (v == NULL)
Gregory P. Smithc809f982012-03-18 16:06:53 -07001712 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001713 }
1714 else if (!PyBytes_Check(v))
1715 continue;
1716 else
1717 Py_INCREF(v);
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001718
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001719 base = PyBytes_AS_STRING(v);
1720 size = PyBytes_GET_SIZE(v);
1721 len = size;
1722 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1723 Py_DECREF(v);
1724 continue; /* Too long */
1725 }
1726 strcpy(buf, base);
1727 Py_DECREF(v);
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001728
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001729 if (strlen(buf) != len) {
1730 continue; /* v contains '\0' */
1731 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001732
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001733 /* sys.path_hooks import hook */
1734 if (p_loader != NULL) {
1735 PyObject *importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001736
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001737 importer = get_path_importer(path_importer_cache,
1738 path_hooks, origv);
1739 if (importer == NULL) {
Gregory P. Smithc809f982012-03-18 16:06:53 -07001740 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001741 }
1742 /* Note: importer is a borrowed reference */
1743 if (importer != Py_None) {
1744 PyObject *loader;
1745 loader = PyObject_CallMethod(importer,
1746 "find_module",
1747 "s", fullname);
1748 if (loader == NULL)
Gregory P. Smithc809f982012-03-18 16:06:53 -07001749 goto error_exit; /* error */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001750 if (loader != Py_None) {
1751 /* a loader was found */
1752 *p_loader = loader;
Gregory P. Smithc809f982012-03-18 16:06:53 -07001753 PyMem_FREE(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001754 return &importhookdescr;
1755 }
1756 Py_DECREF(loader);
1757 continue;
1758 }
1759 }
1760 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001761
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001762 if (len > 0 && buf[len-1] != SEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001763#ifdef ALTSEP
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001764 && buf[len-1] != ALTSEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001765#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001766 )
1767 buf[len++] = SEP;
1768 strcpy(buf+len, name);
1769 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001770
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001771 /* Check for package import (buf holds a directory name,
1772 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001773#ifdef HAVE_STAT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001774 if (stat(buf, &statbuf) == 0 && /* it exists */
1775 S_ISDIR(statbuf.st_mode) && /* it's a directory */
1776 case_ok(buf, len, namelen, name)) { /* case matches */
1777 if (find_init_module(buf)) { /* and has __init__.py */
Gregory P. Smithc809f982012-03-18 16:06:53 -07001778 PyMem_FREE(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001779 return &fd_package;
1780 }
1781 else {
Victor Stinnered7916d2010-10-17 02:07:09 +00001782 int err;
1783 PyObject *unicode = PyUnicode_DecodeFSDefault(buf);
1784 if (unicode == NULL)
Gregory P. Smithc809f982012-03-18 16:06:53 -07001785 goto error_exit;
Victor Stinnered7916d2010-10-17 02:07:09 +00001786 err = PyErr_WarnFormat(PyExc_ImportWarning, 1,
1787 "Not importing directory '%U': missing __init__.py",
1788 unicode);
1789 Py_DECREF(unicode);
1790 if (err)
Gregory P. Smithc809f982012-03-18 16:06:53 -07001791 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001792 }
1793 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001794#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001795#if defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001796 /* take a snapshot of the module spec for restoration
1797 * after the 8 character DLL hackery
1798 */
1799 saved_buf = strdup(buf);
1800 saved_len = len;
1801 saved_namelen = namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001802#endif /* PYOS_OS2 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001803 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Victor Stinner53ffdc52011-09-23 18:54:40 +02001804 struct stat statbuf;
Guido van Rossum04110fb2007-08-24 16:32:05 +00001805#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001806 /* OS/2 limits DLLs to 8 character names (w/o
1807 extension)
1808 * so if the name is longer than that and its a
1809 * dynamically loaded module we're going to try,
1810 * truncate the name before trying
1811 */
1812 if (strlen(subname) > 8) {
1813 /* is this an attempt to load a C extension? */
1814 const struct filedescr *scan;
1815 scan = _PyImport_DynLoadFiletab;
1816 while (scan->suffix != NULL) {
1817 if (!strcmp(scan->suffix, fdp->suffix))
1818 break;
1819 else
1820 scan++;
1821 }
1822 if (scan->suffix != NULL) {
1823 /* yes, so truncate the name */
1824 namelen = 8;
1825 len -= strlen(subname) - namelen;
1826 buf[len] = '\0';
1827 }
1828 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001829#endif /* PYOS_OS2 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001830 strcpy(buf+len, fdp->suffix);
1831 if (Py_VerboseFlag > 1)
1832 PySys_WriteStderr("# trying %s\n", buf);
Victor Stinner53ffdc52011-09-23 18:54:40 +02001833
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001834 filemode = fdp->mode;
1835 if (filemode[0] == 'U')
1836 filemode = "r" PY_STDIOTEXTMODE;
Victor Stinner53ffdc52011-09-23 18:54:40 +02001837
1838 if (stat(buf, &statbuf) == 0 && S_ISDIR(statbuf.st_mode))
1839 /* it's a directory */
1840 fp = NULL;
1841 else
1842 fp = fopen(buf, filemode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001843 if (fp != NULL) {
1844 if (case_ok(buf, len, namelen, name))
1845 break;
1846 else { /* continue search */
1847 fclose(fp);
1848 fp = NULL;
1849 }
1850 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001851#if defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001852 /* restore the saved snapshot */
1853 strcpy(buf, saved_buf);
1854 len = saved_len;
1855 namelen = saved_namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001856#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001857 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001858#if defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001859 /* don't need/want the module name snapshot anymore */
1860 if (saved_buf)
1861 {
1862 free(saved_buf);
1863 saved_buf = NULL;
1864 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001865#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001866 if (fp != NULL)
1867 break;
1868 }
1869 if (fp == NULL) {
1870 PyErr_Format(PyExc_ImportError,
1871 "No module named %.200s", name);
Gregory P. Smithc809f982012-03-18 16:06:53 -07001872 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001873 }
1874 *p_fp = fp;
Gregory P. Smithc809f982012-03-18 16:06:53 -07001875 PyMem_FREE(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001876 return fdp;
Gregory P. Smithc809f982012-03-18 16:06:53 -07001877
1878error_exit:
1879 PyMem_FREE(name);
1880 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001881}
1882
Martin v. Löwis18e16552006-02-15 17:27:45 +00001883/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001884 * The arguments here are tricky, best shown by example:
1885 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1886 * ^ ^ ^ ^
1887 * |--------------------- buf ---------------------|
1888 * |------------------- len ------------------|
1889 * |------ name -------|
1890 * |----- namelen -----|
1891 * buf is the full path, but len only counts up to (& exclusive of) the
1892 * extension. name is the module name, also exclusive of extension.
1893 *
1894 * We've already done a successful stat() or fopen() on buf, so know that
1895 * there's some match, possibly case-insensitive.
1896 *
Tim Peters50d8d372001-02-28 05:34:27 +00001897 * case_ok() is to return 1 if there's a case-sensitive match for
1898 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1899 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001900 *
Tim Peters50d8d372001-02-28 05:34:27 +00001901 * case_ok() is used to implement case-sensitive import semantics even
1902 * on platforms with case-insensitive filesystems. It's trivial to implement
1903 * for case-sensitive filesystems. It's pretty much a cross-platform
1904 * nightmare for systems with case-insensitive filesystems.
1905 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001906
Tim Peters50d8d372001-02-28 05:34:27 +00001907/* First we may need a pile of platform-specific header files; the sequence
1908 * of #if's here should match the sequence in the body of case_ok().
1909 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001910#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001911#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001912
Tim Peters50d8d372001-02-28 05:34:27 +00001913#elif defined(DJGPP)
1914#include <dir.h>
1915
Jason Tishler7961aa62005-05-20 00:56:54 +00001916#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001917#include <sys/types.h>
1918#include <dirent.h>
1919
Andrew MacIntyred9400542002-02-26 11:41:34 +00001920#elif defined(PYOS_OS2)
1921#define INCL_DOS
1922#define INCL_DOSERRORS
1923#define INCL_NOPMAPI
1924#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00001925#endif
1926
Guido van Rossum0980bd91998-02-13 17:18:36 +00001927static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001928case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001929{
Tim Peters50d8d372001-02-28 05:34:27 +00001930/* Pick a platform-specific implementation; the sequence of #if's here should
1931 * match the sequence just above.
1932 */
1933
Jason Tishler7961aa62005-05-20 00:56:54 +00001934/* MS_WINDOWS */
1935#if defined(MS_WINDOWS)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001936 WIN32_FIND_DATA data;
1937 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001938
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001939 if (Py_GETENV("PYTHONCASEOK") != NULL)
1940 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001941
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001942 h = FindFirstFile(buf, &data);
1943 if (h == INVALID_HANDLE_VALUE) {
1944 PyErr_Format(PyExc_NameError,
1945 "Can't find file for module %.100s\n(filename %.300s)",
1946 name, buf);
1947 return 0;
1948 }
1949 FindClose(h);
1950 return strncmp(data.cFileName, name, namelen) == 0;
Tim Peters50d8d372001-02-28 05:34:27 +00001951
1952/* DJGPP */
1953#elif defined(DJGPP)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001954 struct ffblk ffblk;
1955 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00001956
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001957 if (Py_GETENV("PYTHONCASEOK") != NULL)
1958 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001959
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001960 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1961 if (done) {
1962 PyErr_Format(PyExc_NameError,
1963 "Can't find file for module %.100s\n(filename %.300s)",
1964 name, buf);
1965 return 0;
1966 }
1967 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001968
Jason Tishler7961aa62005-05-20 00:56:54 +00001969/* new-fangled macintosh (macosx) or Cygwin */
1970#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001971 DIR *dirp;
1972 struct dirent *dp;
1973 char dirname[MAXPATHLEN + 1];
1974 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001975
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001976 if (Py_GETENV("PYTHONCASEOK") != NULL)
1977 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001978
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001979 /* Copy the dir component into dirname; substitute "." if empty */
1980 if (dirlen <= 0) {
1981 dirname[0] = '.';
1982 dirname[1] = '\0';
1983 }
1984 else {
1985 assert(dirlen <= MAXPATHLEN);
1986 memcpy(dirname, buf, dirlen);
1987 dirname[dirlen] = '\0';
1988 }
1989 /* Open the directory and search the entries for an exact match. */
1990 dirp = opendir(dirname);
1991 if (dirp) {
1992 char *nameWithExt = buf + len - namelen;
1993 while ((dp = readdir(dirp)) != NULL) {
1994 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001995#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001996 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001997#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001998 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001999#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002000 if (thislen >= namelen &&
2001 strcmp(dp->d_name, nameWithExt) == 0) {
2002 (void)closedir(dirp);
2003 return 1; /* Found */
2004 }
2005 }
2006 (void)closedir(dirp);
2007 }
2008 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00002009
Andrew MacIntyred9400542002-02-26 11:41:34 +00002010/* OS/2 */
2011#elif defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002012 HDIR hdir = 1;
2013 ULONG srchcnt = 1;
2014 FILEFINDBUF3 ffbuf;
2015 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002016
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002017 if (Py_GETENV("PYTHONCASEOK") != NULL)
2018 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002019
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002020 rc = DosFindFirst(buf,
2021 &hdir,
2022 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
2023 &ffbuf, sizeof(ffbuf),
2024 &srchcnt,
2025 FIL_STANDARD);
2026 if (rc != NO_ERROR)
2027 return 0;
2028 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00002029
Tim Peters50d8d372001-02-28 05:34:27 +00002030/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
2031#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002032 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00002033
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002034#endif
Tim Peters50d8d372001-02-28 05:34:27 +00002035}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00002036
Guido van Rossum197346f1997-10-31 18:38:52 +00002037#ifdef HAVE_STAT
Victor Stinner4f4402c2010-08-14 14:50:26 +00002038
Guido van Rossum197346f1997-10-31 18:38:52 +00002039/* Helper to look for __init__.py or __init__.py[co] in potential package */
2040static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002041find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00002042{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002043 const size_t save_len = strlen(buf);
2044 size_t i = save_len;
2045 char *pname; /* pointer to start of __init__ */
2046 struct stat statbuf;
Guido van Rossum197346f1997-10-31 18:38:52 +00002047
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002048/* For calling case_ok(buf, len, namelen, name):
2049 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
2050 * ^ ^ ^ ^
2051 * |--------------------- buf ---------------------|
2052 * |------------------- len ------------------|
2053 * |------ name -------|
2054 * |----- namelen -----|
Tim Peters0f9431f2001-07-05 03:47:53 +00002055 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002056 if (save_len + 13 >= MAXPATHLEN)
2057 return 0;
2058 buf[i++] = SEP;
2059 pname = buf + i;
2060 strcpy(pname, "__init__.py");
2061 if (stat(buf, &statbuf) == 0) {
2062 if (case_ok(buf,
2063 save_len + 9, /* len("/__init__") */
2064 8, /* len("__init__") */
2065 pname)) {
2066 buf[save_len] = '\0';
2067 return 1;
2068 }
2069 }
2070 i += strlen(pname);
2071 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
2072 if (stat(buf, &statbuf) == 0) {
2073 if (case_ok(buf,
2074 save_len + 9, /* len("/__init__") */
2075 8, /* len("__init__") */
2076 pname)) {
2077 buf[save_len] = '\0';
2078 return 1;
2079 }
2080 }
2081 buf[save_len] = '\0';
2082 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00002083}
Guido van Rossum48a680c2001-03-02 06:34:14 +00002084
Guido van Rossum197346f1997-10-31 18:38:52 +00002085#endif /* HAVE_STAT */
2086
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002087
Tim Petersdbd9ba62000-07-09 03:09:57 +00002088static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002089
Victor Stinner44c6c152010-08-09 00:59:10 +00002090static PyObject*
2091load_builtin(char *name, char *pathname, int type)
2092{
2093 PyObject *m, *modules;
2094 int err;
2095
2096 if (pathname != NULL && pathname[0] != '\0')
2097 name = pathname;
2098
2099 if (type == C_BUILTIN)
2100 err = init_builtin(name);
2101 else
2102 err = PyImport_ImportFrozenModule(name);
2103 if (err < 0)
2104 return NULL;
2105 if (err == 0) {
2106 PyErr_Format(PyExc_ImportError,
2107 "Purported %s module %.200s not found",
2108 type == C_BUILTIN ?
2109 "builtin" : "frozen",
2110 name);
2111 return NULL;
2112 }
2113
2114 modules = PyImport_GetModuleDict();
2115 m = PyDict_GetItemString(modules, name);
2116 if (m == NULL) {
2117 PyErr_Format(
2118 PyExc_ImportError,
2119 "%s module %.200s not properly initialized",
2120 type == C_BUILTIN ?
2121 "builtin" : "frozen",
2122 name);
2123 return NULL;
2124 }
2125 Py_INCREF(m);
2126 return m;
2127}
2128
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002129/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002130 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002131
Guido van Rossum79f25d91997-04-29 20:08:16 +00002132static PyObject *
Alexandre Vassalottie223eb82009-07-29 20:12:15 +00002133load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002134{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002135 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002136
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002137 /* First check that there's an open file (if we need one) */
2138 switch (type) {
2139 case PY_SOURCE:
2140 case PY_COMPILED:
2141 if (fp == NULL) {
2142 PyErr_Format(PyExc_ValueError,
2143 "file object required for import (type code %d)",
2144 type);
2145 return NULL;
2146 }
2147 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002148
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002149 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002150
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002151 case PY_SOURCE:
2152 m = load_source_module(name, pathname, fp);
2153 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002154
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002155 case PY_COMPILED:
2156 m = load_compiled_module(name, pathname, fp);
2157 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002158
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002159#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002160 case C_EXTENSION:
2161 m = _PyImport_LoadDynamicModule(name, pathname, fp);
2162 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002163#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002164
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002165 case PKG_DIRECTORY:
2166 m = load_package(name, pathname);
2167 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002168
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002169 case C_BUILTIN:
2170 case PY_FROZEN:
Victor Stinner44c6c152010-08-09 00:59:10 +00002171 m = load_builtin(name, pathname, type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002172 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002173
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002174 case IMP_HOOK: {
2175 if (loader == NULL) {
2176 PyErr_SetString(PyExc_ImportError,
2177 "import hook without loader");
2178 return NULL;
2179 }
2180 m = PyObject_CallMethod(loader, "load_module", "s", name);
2181 break;
2182 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002183
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002184 default:
2185 PyErr_Format(PyExc_ImportError,
2186 "Don't know how to import %.200s (type code %d)",
2187 name, type);
2188 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002189
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002190 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002191
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002192 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002193}
2194
2195
2196/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00002197 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002198 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002199
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002200static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002201init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002202{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002203 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002204
Victor Stinner49d3f252010-10-17 01:24:53 +00002205 if (_PyImport_FindBuiltin(name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002206 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002207
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002208 for (p = PyImport_Inittab; p->name != NULL; p++) {
2209 PyObject *mod;
Antoine Pitrou6c40eb72012-01-18 20:16:09 +01002210 PyModuleDef *def;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002211 if (strcmp(name, p->name) == 0) {
2212 if (p->initfunc == NULL) {
2213 PyErr_Format(PyExc_ImportError,
2214 "Cannot re-init internal module %.200s",
2215 name);
2216 return -1;
2217 }
2218 if (Py_VerboseFlag)
2219 PySys_WriteStderr("import %s # builtin\n", name);
2220 mod = (*p->initfunc)();
2221 if (mod == 0)
2222 return -1;
Antoine Pitrou6c40eb72012-01-18 20:16:09 +01002223 /* Remember pointer to module init function. */
2224 def = PyModule_GetDef(mod);
2225 def->m_base.m_init = p->initfunc;
Victor Stinner49d3f252010-10-17 01:24:53 +00002226 if (_PyImport_FixupBuiltin(mod, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002227 return -1;
2228 /* FixupExtension has put the module into sys.modules,
2229 so we can release our own reference. */
2230 Py_DECREF(mod);
2231 return 1;
2232 }
2233 }
2234 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002235}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002236
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002237
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002238/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002239
Guido van Rossumcfd0a221996-06-17 17:06:34 +00002240static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002241find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002242{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002243 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002244
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002245 if (!name)
2246 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00002247
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002248 for (p = PyImport_FrozenModules; ; p++) {
2249 if (p->name == NULL)
2250 return NULL;
2251 if (strcmp(p->name, name) == 0)
2252 break;
2253 }
2254 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002255}
2256
Guido van Rossum79f25d91997-04-29 20:08:16 +00002257static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002258get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002259{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002260 struct _frozen *p = find_frozen(name);
2261 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002262
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002263 if (p == NULL) {
2264 PyErr_Format(PyExc_ImportError,
2265 "No such frozen object named %.200s",
2266 name);
2267 return NULL;
2268 }
2269 if (p->code == NULL) {
2270 PyErr_Format(PyExc_ImportError,
2271 "Excluded frozen object named %.200s",
2272 name);
2273 return NULL;
2274 }
2275 size = p->size;
2276 if (size < 0)
2277 size = -size;
2278 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002279}
2280
Brett Cannon8d110132009-03-15 02:20:16 +00002281static PyObject *
2282is_frozen_package(char *name)
2283{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002284 struct _frozen *p = find_frozen(name);
2285 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00002286
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002287 if (p == NULL) {
2288 PyErr_Format(PyExc_ImportError,
2289 "No such frozen object named %.200s",
2290 name);
2291 return NULL;
2292 }
Brett Cannon8d110132009-03-15 02:20:16 +00002293
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002294 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00002295
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002296 if (size < 0)
2297 Py_RETURN_TRUE;
2298 else
2299 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00002300}
2301
2302
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002303/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00002304 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002305 an exception set if the initialization failed.
2306 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002307
2308int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002309PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002310{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002311 struct _frozen *p = find_frozen(name);
2312 PyObject *co;
2313 PyObject *m;
2314 int ispackage;
2315 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002316
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002317 if (p == NULL)
2318 return 0;
2319 if (p->code == NULL) {
2320 PyErr_Format(PyExc_ImportError,
2321 "Excluded frozen object named %.200s",
2322 name);
2323 return -1;
2324 }
2325 size = p->size;
2326 ispackage = (size < 0);
2327 if (ispackage)
2328 size = -size;
2329 if (Py_VerboseFlag)
2330 PySys_WriteStderr("import %s # frozen%s\n",
2331 name, ispackage ? " package" : "");
2332 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2333 if (co == NULL)
2334 return -1;
2335 if (!PyCode_Check(co)) {
2336 PyErr_Format(PyExc_TypeError,
2337 "frozen object %.200s is not a code object",
2338 name);
2339 goto err_return;
2340 }
2341 if (ispackage) {
2342 /* Set __path__ to the package name */
2343 PyObject *d, *s, *l;
2344 int err;
2345 m = PyImport_AddModule(name);
2346 if (m == NULL)
2347 goto err_return;
2348 d = PyModule_GetDict(m);
2349 s = PyUnicode_InternFromString(name);
2350 if (s == NULL)
2351 goto err_return;
2352 l = PyList_New(1);
2353 if (l == NULL) {
2354 Py_DECREF(s);
2355 goto err_return;
2356 }
2357 PyList_SET_ITEM(l, 0, s);
2358 err = PyDict_SetItemString(d, "__path__", l);
2359 Py_DECREF(l);
2360 if (err != 0)
2361 goto err_return;
2362 }
2363 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
2364 if (m == NULL)
2365 goto err_return;
2366 Py_DECREF(co);
2367 Py_DECREF(m);
2368 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002369err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002370 Py_DECREF(co);
2371 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002372}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002373
2374
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002375/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002376 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002377
Guido van Rossum79f25d91997-04-29 20:08:16 +00002378PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002379PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002380{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002381 PyObject *pname;
2382 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002383
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002384 pname = PyUnicode_FromString(name);
2385 if (pname == NULL)
2386 return NULL;
2387 result = PyImport_Import(pname);
2388 Py_DECREF(pname);
2389 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002390}
2391
Christian Heimes072c0f12008-01-03 23:01:04 +00002392/* Import a module without blocking
2393 *
2394 * At first it tries to fetch the module from sys.modules. If the module was
2395 * never loaded before it loads it with PyImport_ImportModule() unless another
2396 * thread holds the import lock. In the latter case the function raises an
2397 * ImportError instead of blocking.
2398 *
2399 * Returns the module object with incremented ref count.
2400 */
2401PyObject *
2402PyImport_ImportModuleNoBlock(const char *name)
2403{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002404 PyObject *result;
2405 PyObject *modules;
Victor Stinner0af03062011-09-02 00:11:43 +02002406#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002407 long me;
Victor Stinner0af03062011-09-02 00:11:43 +02002408#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002409
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002410 /* Try to get the module from sys.modules[name] */
2411 modules = PyImport_GetModuleDict();
2412 if (modules == NULL)
2413 return NULL;
Christian Heimes072c0f12008-01-03 23:01:04 +00002414
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002415 result = PyDict_GetItemString(modules, name);
2416 if (result != NULL) {
2417 Py_INCREF(result);
2418 return result;
2419 }
2420 else {
2421 PyErr_Clear();
2422 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002423#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002424 /* check the import lock
2425 * me might be -1 but I ignore the error here, the lock function
2426 * takes care of the problem */
2427 me = PyThread_get_thread_ident();
2428 if (import_lock_thread == -1 || import_lock_thread == me) {
2429 /* no thread or me is holding the lock */
2430 return PyImport_ImportModule(name);
2431 }
2432 else {
2433 PyErr_Format(PyExc_ImportError,
2434 "Failed to import %.200s because the import lock"
2435 "is held by another thread.",
2436 name);
2437 return NULL;
2438 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002439#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002440 return PyImport_ImportModule(name);
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002441#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002442}
2443
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002444/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002445static PyObject *get_parent(PyObject *globals, char *buf,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002446 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002447static PyObject *load_next(PyObject *mod, PyObject *altmod,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002448 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002449static int mark_miss(char *name);
2450static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002451 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002452static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002453
2454/* The Magnum Opus of dotted-name import :-) */
2455
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002456static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002457import_module_level(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002458 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002459{
Gregory P. Smithc809f982012-03-18 16:06:53 -07002460 char *buf;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002461 Py_ssize_t buflen = 0;
2462 PyObject *parent, *head, *next, *tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002463
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002464 if (strchr(name, '/') != NULL
Christian Heimes454f37b2008-01-10 00:10:02 +00002465#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002466 || strchr(name, '\\') != NULL
Christian Heimes454f37b2008-01-10 00:10:02 +00002467#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002468 ) {
2469 PyErr_SetString(PyExc_ImportError,
2470 "Import by filename is not supported.");
2471 return NULL;
2472 }
Christian Heimes454f37b2008-01-10 00:10:02 +00002473
Gregory P. Smithc809f982012-03-18 16:06:53 -07002474 buf = PyMem_MALLOC(MAXPATHLEN+1);
2475 if (buf == NULL) {
2476 return PyErr_NoMemory();
2477 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002478 parent = get_parent(globals, buf, &buflen, level);
2479 if (parent == NULL)
Gregory P. Smithc809f982012-03-18 16:06:53 -07002480 goto error_exit;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002481
Benjamin Peterson556d8002010-06-27 22:37:28 +00002482 head = load_next(parent, level < 0 ? Py_None : parent, &name, buf,
2483 &buflen);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002484 if (head == NULL)
Gregory P. Smithc809f982012-03-18 16:06:53 -07002485 goto error_exit;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002486
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002487 tail = head;
2488 Py_INCREF(tail);
2489 while (name) {
2490 next = load_next(tail, tail, &name, buf, &buflen);
2491 Py_DECREF(tail);
2492 if (next == NULL) {
2493 Py_DECREF(head);
Gregory P. Smithc809f982012-03-18 16:06:53 -07002494 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002495 }
2496 tail = next;
2497 }
2498 if (tail == Py_None) {
2499 /* If tail is Py_None, both get_parent and load_next found
2500 an empty module name: someone called __import__("") or
2501 doctored faulty bytecode */
2502 Py_DECREF(tail);
2503 Py_DECREF(head);
2504 PyErr_SetString(PyExc_ValueError,
2505 "Empty module name");
Gregory P. Smithc809f982012-03-18 16:06:53 -07002506 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002507 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002508
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002509 if (fromlist != NULL) {
Antoine Pitrou6f430e42012-08-15 23:18:25 +02002510 int b = (fromlist == Py_None) ? 0 : PyObject_IsTrue(fromlist);
2511 if (b < 0) {
2512 Py_DECREF(tail);
2513 Py_DECREF(head);
2514 goto error_exit;
2515 }
2516 if (!b)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002517 fromlist = NULL;
2518 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002519
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002520 if (fromlist == NULL) {
2521 Py_DECREF(tail);
Gregory P. Smithc809f982012-03-18 16:06:53 -07002522 PyMem_FREE(buf);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002523 return head;
2524 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002525
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002526 Py_DECREF(head);
2527 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
2528 Py_DECREF(tail);
Gregory P. Smithc809f982012-03-18 16:06:53 -07002529 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002530 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002531
Gregory P. Smithc809f982012-03-18 16:06:53 -07002532 PyMem_FREE(buf);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002533 return tail;
Gregory P. Smithc809f982012-03-18 16:06:53 -07002534
2535error_exit:
2536 PyMem_FREE(buf);
2537 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002538}
2539
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002540PyObject *
2541PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002542 PyObject *fromlist, int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002543{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002544 PyObject *result;
2545 _PyImport_AcquireLock();
2546 result = import_module_level(name, globals, locals, fromlist, level);
2547 if (_PyImport_ReleaseLock() < 0) {
2548 Py_XDECREF(result);
2549 PyErr_SetString(PyExc_RuntimeError,
2550 "not holding the import lock");
2551 return NULL;
2552 }
2553 return result;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002554}
2555
Fred Drake87590902004-05-28 20:21:36 +00002556/* Return the package that an import is being performed in. If globals comes
2557 from the module foo.bar.bat (not itself a package), this returns the
2558 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002559 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002560
2561 The *name* of the returned package is returned in buf, with the length of
2562 the name in *p_buflen.
2563
2564 If globals doesn't come from a package or a module in a package, or a
2565 corresponding entry is not found in sys.modules, Py_None is returned.
2566*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002567static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002568get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002569{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002570 static PyObject *namestr = NULL;
2571 static PyObject *pathstr = NULL;
2572 static PyObject *pkgstr = NULL;
2573 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2574 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002575
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002576 if (globals == NULL || !PyDict_Check(globals) || !level)
2577 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002578
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002579 if (namestr == NULL) {
2580 namestr = PyUnicode_InternFromString("__name__");
2581 if (namestr == NULL)
2582 return NULL;
2583 }
2584 if (pathstr == NULL) {
2585 pathstr = PyUnicode_InternFromString("__path__");
2586 if (pathstr == NULL)
2587 return NULL;
2588 }
2589 if (pkgstr == NULL) {
2590 pkgstr = PyUnicode_InternFromString("__package__");
2591 if (pkgstr == NULL)
2592 return NULL;
2593 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002594
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002595 *buf = '\0';
2596 *p_buflen = 0;
2597 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002598
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002599 if ((pkgname != NULL) && (pkgname != Py_None)) {
2600 /* __package__ is set, so use it */
2601 char *pkgname_str;
2602 Py_ssize_t len;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002603
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002604 if (!PyUnicode_Check(pkgname)) {
2605 PyErr_SetString(PyExc_ValueError,
2606 "__package__ set to non-string");
2607 return NULL;
2608 }
2609 pkgname_str = _PyUnicode_AsStringAndSize(pkgname, &len);
2610 if (len == 0) {
2611 if (level > 0) {
2612 PyErr_SetString(PyExc_ValueError,
2613 "Attempted relative import in non-package");
2614 return NULL;
2615 }
2616 return Py_None;
2617 }
2618 if (len > MAXPATHLEN) {
2619 PyErr_SetString(PyExc_ValueError,
2620 "Package name too long");
2621 return NULL;
2622 }
2623 strcpy(buf, pkgname_str);
2624 } else {
2625 /* __package__ not set, so figure it out and set it */
2626 modname = PyDict_GetItem(globals, namestr);
2627 if (modname == NULL || !PyUnicode_Check(modname))
2628 return Py_None;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00002629
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002630 modpath = PyDict_GetItem(globals, pathstr);
2631 if (modpath != NULL) {
2632 /* __path__ is set, so modname is already the package name */
2633 char *modname_str;
2634 Py_ssize_t len;
2635 int error;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002636
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002637 modname_str = _PyUnicode_AsStringAndSize(modname, &len);
2638 if (len > MAXPATHLEN) {
2639 PyErr_SetString(PyExc_ValueError,
2640 "Module name too long");
2641 return NULL;
2642 }
2643 strcpy(buf, modname_str);
2644 error = PyDict_SetItem(globals, pkgstr, modname);
2645 if (error) {
2646 PyErr_SetString(PyExc_ValueError,
2647 "Could not set __package__");
2648 return NULL;
2649 }
2650 } else {
2651 /* Normal module, so work out the package name if any */
2652 char *start = _PyUnicode_AsString(modname);
2653 char *lastdot = strrchr(start, '.');
2654 size_t len;
2655 int error;
2656 if (lastdot == NULL && level > 0) {
2657 PyErr_SetString(PyExc_ValueError,
2658 "Attempted relative import in non-package");
2659 return NULL;
2660 }
2661 if (lastdot == NULL) {
2662 error = PyDict_SetItem(globals, pkgstr, Py_None);
2663 if (error) {
2664 PyErr_SetString(PyExc_ValueError,
2665 "Could not set __package__");
2666 return NULL;
2667 }
2668 return Py_None;
2669 }
2670 len = lastdot - start;
2671 if (len >= MAXPATHLEN) {
2672 PyErr_SetString(PyExc_ValueError,
2673 "Module name too long");
2674 return NULL;
2675 }
2676 strncpy(buf, start, len);
2677 buf[len] = '\0';
2678 pkgname = PyUnicode_FromString(buf);
2679 if (pkgname == NULL) {
2680 return NULL;
2681 }
2682 error = PyDict_SetItem(globals, pkgstr, pkgname);
2683 Py_DECREF(pkgname);
2684 if (error) {
2685 PyErr_SetString(PyExc_ValueError,
2686 "Could not set __package__");
2687 return NULL;
2688 }
2689 }
2690 }
2691 while (--level > 0) {
2692 char *dot = strrchr(buf, '.');
2693 if (dot == NULL) {
2694 PyErr_SetString(PyExc_ValueError,
2695 "Attempted relative import beyond "
2696 "toplevel package");
2697 return NULL;
2698 }
2699 *dot = '\0';
2700 }
2701 *p_buflen = strlen(buf);
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002702
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002703 modules = PyImport_GetModuleDict();
2704 parent = PyDict_GetItemString(modules, buf);
2705 if (parent == NULL) {
2706 if (orig_level < 1) {
2707 PyObject *err_msg = PyBytes_FromFormat(
2708 "Parent module '%.200s' not found "
2709 "while handling absolute import", buf);
2710 if (err_msg == NULL) {
2711 return NULL;
2712 }
2713 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2714 PyBytes_AsString(err_msg), 1)) {
2715 *buf = '\0';
2716 *p_buflen = 0;
2717 parent = Py_None;
2718 }
2719 Py_DECREF(err_msg);
2720 } else {
2721 PyErr_Format(PyExc_SystemError,
2722 "Parent module '%.200s' not loaded, "
2723 "cannot perform relative import", buf);
2724 }
2725 }
2726 return parent;
2727 /* We expect, but can't guarantee, if parent != None, that:
2728 - parent.__name__ == buf
2729 - parent.__dict__ is globals
2730 If this is violated... Who cares? */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002731}
2732
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002733/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002734static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002735load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002736 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002737{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002738 char *name = *p_name;
2739 char *dot = strchr(name, '.');
2740 size_t len;
2741 char *p;
2742 PyObject *result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002743
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002744 if (strlen(name) == 0) {
2745 /* completely empty module name should only happen in
2746 'from . import' (or '__import__("")')*/
2747 Py_INCREF(mod);
2748 *p_name = NULL;
2749 return mod;
2750 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002751
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002752 if (dot == NULL) {
2753 *p_name = NULL;
2754 len = strlen(name);
2755 }
2756 else {
2757 *p_name = dot+1;
2758 len = dot-name;
2759 }
2760 if (len == 0) {
2761 PyErr_SetString(PyExc_ValueError,
2762 "Empty module name");
2763 return NULL;
2764 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002765
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002766 p = buf + *p_buflen;
2767 if (p != buf)
2768 *p++ = '.';
2769 if (p+len-buf >= MAXPATHLEN) {
2770 PyErr_SetString(PyExc_ValueError,
2771 "Module name too long");
2772 return NULL;
2773 }
2774 strncpy(p, name, len);
2775 p[len] = '\0';
2776 *p_buflen = p+len-buf;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002777
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002778 result = import_submodule(mod, p, buf);
2779 if (result == Py_None && altmod != mod) {
2780 Py_DECREF(result);
2781 /* Here, altmod must be None and mod must not be None */
2782 result = import_submodule(altmod, p, p);
2783 if (result != NULL && result != Py_None) {
2784 if (mark_miss(buf) != 0) {
2785 Py_DECREF(result);
2786 return NULL;
2787 }
2788 strncpy(buf, name, len);
2789 buf[len] = '\0';
2790 *p_buflen = len;
2791 }
2792 }
2793 if (result == NULL)
2794 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002795
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002796 if (result == Py_None) {
2797 Py_DECREF(result);
2798 PyErr_Format(PyExc_ImportError,
2799 "No module named %.200s", name);
2800 return NULL;
2801 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002802
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002803 return result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002804}
2805
2806static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002807mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002808{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002809 PyObject *modules = PyImport_GetModuleDict();
2810 return PyDict_SetItemString(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002811}
2812
2813static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002814ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002815 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002816{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002817 int i;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002818
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002819 if (!PyObject_HasAttrString(mod, "__path__"))
2820 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002821
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002822 for (i = 0; ; i++) {
2823 PyObject *item = PySequence_GetItem(fromlist, i);
2824 int hasit;
2825 if (item == NULL) {
2826 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2827 PyErr_Clear();
2828 return 1;
2829 }
2830 return 0;
2831 }
2832 if (!PyUnicode_Check(item)) {
2833 PyErr_SetString(PyExc_TypeError,
2834 "Item in ``from list'' not a string");
2835 Py_DECREF(item);
2836 return 0;
2837 }
2838 if (PyUnicode_AS_UNICODE(item)[0] == '*') {
2839 PyObject *all;
2840 Py_DECREF(item);
2841 /* See if the package defines __all__ */
2842 if (recursive)
2843 continue; /* Avoid endless recursion */
2844 all = PyObject_GetAttrString(mod, "__all__");
2845 if (all == NULL)
2846 PyErr_Clear();
2847 else {
2848 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
2849 Py_DECREF(all);
2850 if (!ret)
2851 return 0;
2852 }
2853 continue;
2854 }
2855 hasit = PyObject_HasAttr(mod, item);
2856 if (!hasit) {
2857 PyObject *item8;
2858 char *subname;
2859 PyObject *submod;
2860 char *p;
Victor Stinnerae6265f2010-05-15 16:27:27 +00002861 item8 = PyUnicode_EncodeFSDefault(item);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002862 if (!item8) {
2863 PyErr_SetString(PyExc_ValueError, "Cannot encode path item");
2864 return 0;
2865 }
2866 subname = PyBytes_AS_STRING(item8);
2867 if (buflen + strlen(subname) >= MAXPATHLEN) {
2868 PyErr_SetString(PyExc_ValueError,
2869 "Module name too long");
2870 Py_DECREF(item);
2871 return 0;
2872 }
2873 p = buf + buflen;
2874 *p++ = '.';
2875 strcpy(p, subname);
2876 submod = import_submodule(mod, subname, buf);
2877 Py_DECREF(item8);
2878 Py_XDECREF(submod);
2879 if (submod == NULL) {
2880 Py_DECREF(item);
2881 return 0;
2882 }
2883 }
2884 Py_DECREF(item);
2885 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002886
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002887 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002888}
2889
Neil Schemenauer00b09662003-06-16 21:03:07 +00002890static int
2891add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002892 PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00002893{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002894 if (mod == Py_None)
2895 return 1;
2896 /* Irrespective of the success of this load, make a
2897 reference to it in the parent package module. A copy gets
2898 saved in the modules dictionary under the full name, so get a
2899 reference from there, if need be. (The exception is when the
2900 load failed with a SyntaxError -- then there's no trace in
2901 sys.modules. In that case, of course, do nothing extra.) */
2902 if (submod == NULL) {
2903 submod = PyDict_GetItemString(modules, fullname);
2904 if (submod == NULL)
2905 return 1;
2906 }
2907 if (PyModule_Check(mod)) {
2908 /* We can't use setattr here since it can give a
2909 * spurious warning if the submodule name shadows a
2910 * builtin name */
2911 PyObject *dict = PyModule_GetDict(mod);
2912 if (!dict)
2913 return 0;
2914 if (PyDict_SetItemString(dict, subname, submod) < 0)
2915 return 0;
2916 }
2917 else {
2918 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2919 return 0;
2920 }
2921 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00002922}
2923
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002924static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002925import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002926{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002927 PyObject *modules = PyImport_GetModuleDict();
2928 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002929
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002930 /* Require:
2931 if mod == None: subname == fullname
2932 else: mod.__name__ + "." + subname == fullname
2933 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002934
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002935 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
2936 Py_INCREF(m);
2937 }
2938 else {
2939 PyObject *path, *loader = NULL;
Gregory P. Smithc809f982012-03-18 16:06:53 -07002940 char *buf;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002941 struct filedescr *fdp;
2942 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002943
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002944 if (mod == Py_None)
2945 path = NULL;
2946 else {
2947 path = PyObject_GetAttrString(mod, "__path__");
2948 if (path == NULL) {
2949 PyErr_Clear();
2950 Py_INCREF(Py_None);
2951 return Py_None;
2952 }
2953 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002954
Gregory P. Smithc809f982012-03-18 16:06:53 -07002955 buf = PyMem_MALLOC(MAXPATHLEN+1);
2956 if (buf == NULL) {
2957 return PyErr_NoMemory();
2958 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002959 buf[0] = '\0';
2960 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2961 &fp, &loader);
2962 Py_XDECREF(path);
2963 if (fdp == NULL) {
Gregory P. Smithc809f982012-03-18 16:06:53 -07002964 PyMem_FREE(buf);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002965 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2966 return NULL;
2967 PyErr_Clear();
2968 Py_INCREF(Py_None);
2969 return Py_None;
2970 }
2971 m = load_module(fullname, fp, buf, fdp->type, loader);
2972 Py_XDECREF(loader);
2973 if (fp)
2974 fclose(fp);
2975 if (!add_submodule(mod, m, fullname, subname, modules)) {
2976 Py_XDECREF(m);
2977 m = NULL;
2978 }
Gregory P. Smithc809f982012-03-18 16:06:53 -07002979 PyMem_FREE(buf);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002980 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002982 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002983}
2984
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002985
2986/* Re-import a module of any kind and return its module object, WITH
2987 INCREMENTED REFERENCE COUNT */
2988
Guido van Rossum79f25d91997-04-29 20:08:16 +00002989PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002990PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002991{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002992 PyInterpreterState *interp = PyThreadState_Get()->interp;
2993 PyObject *modules_reloading = interp->modules_reloading;
2994 PyObject *modules = PyImport_GetModuleDict();
2995 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
2996 char *name, *subname;
Gregory P. Smithc809f982012-03-18 16:06:53 -07002997 char *buf;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002998 struct filedescr *fdp;
2999 FILE *fp = NULL;
3000 PyObject *newm;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00003001
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003002 if (modules_reloading == NULL) {
3003 Py_FatalError("PyImport_ReloadModule: "
3004 "no modules_reloading dictionary!");
3005 return NULL;
3006 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003007
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003008 if (m == NULL || !PyModule_Check(m)) {
3009 PyErr_SetString(PyExc_TypeError,
3010 "reload() argument must be module");
3011 return NULL;
3012 }
3013 name = (char*)PyModule_GetName(m);
3014 if (name == NULL)
3015 return NULL;
3016 if (m != PyDict_GetItemString(modules, name)) {
3017 PyErr_Format(PyExc_ImportError,
3018 "reload(): module %.200s not in sys.modules",
3019 name);
3020 return NULL;
3021 }
3022 existing_m = PyDict_GetItemString(modules_reloading, name);
3023 if (existing_m != NULL) {
3024 /* Due to a recursive reload, this module is already
3025 being reloaded. */
3026 Py_INCREF(existing_m);
3027 return existing_m;
3028 }
3029 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
3030 return NULL;
Guido van Rossumd8faa362007-04-27 19:54:29 +00003031
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003032 subname = strrchr(name, '.');
3033 if (subname == NULL)
3034 subname = name;
3035 else {
3036 PyObject *parentname, *parent;
3037 parentname = PyUnicode_FromStringAndSize(name, (subname-name));
3038 if (parentname == NULL) {
3039 imp_modules_reloading_clear();
3040 return NULL;
3041 }
3042 parent = PyDict_GetItem(modules, parentname);
3043 if (parent == NULL) {
3044 PyErr_Format(PyExc_ImportError,
3045 "reload(): parent %U not in sys.modules",
3046 parentname);
3047 Py_DECREF(parentname);
3048 imp_modules_reloading_clear();
3049 return NULL;
3050 }
3051 Py_DECREF(parentname);
3052 subname++;
3053 path = PyObject_GetAttrString(parent, "__path__");
3054 if (path == NULL)
3055 PyErr_Clear();
3056 }
Gregory P. Smithc809f982012-03-18 16:06:53 -07003057 buf = PyMem_MALLOC(MAXPATHLEN+1);
3058 if (buf == NULL) {
3059 Py_XDECREF(path);
3060 return PyErr_NoMemory();
3061 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003062 buf[0] = '\0';
3063 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
3064 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003065
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003066 if (fdp == NULL) {
3067 Py_XDECREF(loader);
3068 imp_modules_reloading_clear();
Gregory P. Smithc809f982012-03-18 16:06:53 -07003069 PyMem_FREE(buf);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003070 return NULL;
3071 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003072
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003073 newm = load_module(name, fp, buf, fdp->type, loader);
3074 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003075
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003076 if (fp)
3077 fclose(fp);
3078 if (newm == NULL) {
3079 /* load_module probably removed name from modules because of
3080 * the error. Put back the original module object. We're
3081 * going to return NULL in this case regardless of whether
3082 * replacing name succeeds, so the return value is ignored.
3083 */
3084 PyDict_SetItemString(modules, name, m);
3085 }
3086 imp_modules_reloading_clear();
Gregory P. Smithc809f982012-03-18 16:06:53 -07003087 PyMem_FREE(buf);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003088 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003089}
3090
3091
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003092/* Higher-level import emulator which emulates the "import" statement
3093 more accurately -- it invokes the __import__() function from the
3094 builtins of the current globals. This means that the import is
3095 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00003096 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00003097 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00003098 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00003099 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003100
3101PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003102PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003103{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003104 static PyObject *silly_list = NULL;
3105 static PyObject *builtins_str = NULL;
3106 static PyObject *import_str = NULL;
3107 PyObject *globals = NULL;
3108 PyObject *import = NULL;
3109 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003110 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003111 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003112
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003113 /* Initialize constant string objects */
3114 if (silly_list == NULL) {
3115 import_str = PyUnicode_InternFromString("__import__");
3116 if (import_str == NULL)
3117 return NULL;
3118 builtins_str = PyUnicode_InternFromString("__builtins__");
3119 if (builtins_str == NULL)
3120 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003121 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003122 if (silly_list == NULL)
3123 return NULL;
3124 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003125
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003126 /* Get the builtins from current globals */
3127 globals = PyEval_GetGlobals();
3128 if (globals != NULL) {
3129 Py_INCREF(globals);
3130 builtins = PyObject_GetItem(globals, builtins_str);
3131 if (builtins == NULL)
3132 goto err;
3133 }
3134 else {
3135 /* No globals -- use standard builtins, and fake globals */
3136 builtins = PyImport_ImportModuleLevel("builtins",
3137 NULL, NULL, NULL, 0);
3138 if (builtins == NULL)
3139 return NULL;
3140 globals = Py_BuildValue("{OO}", builtins_str, builtins);
3141 if (globals == NULL)
3142 goto err;
3143 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003144
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003145 /* Get the __import__ function from the builtins */
3146 if (PyDict_Check(builtins)) {
3147 import = PyObject_GetItem(builtins, import_str);
3148 if (import == NULL)
3149 PyErr_SetObject(PyExc_KeyError, import_str);
3150 }
3151 else
3152 import = PyObject_GetAttr(builtins, import_str);
3153 if (import == NULL)
3154 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003155
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003156 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00003157 Always use absolute import here.
3158 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003159 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
3160 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00003161 if (r == NULL)
3162 goto err;
3163 Py_DECREF(r);
3164
3165 modules = PyImport_GetModuleDict();
3166 r = PyDict_GetItem(modules, module_name);
3167 if (r != NULL)
3168 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003169
3170 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003171 Py_XDECREF(globals);
3172 Py_XDECREF(builtins);
3173 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00003174
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003175 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003176}
3177
3178
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003179/* Module 'imp' provides Python access to the primitives used for
3180 importing modules.
3181*/
3182
Guido van Rossum79f25d91997-04-29 20:08:16 +00003183static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00003184imp_make_magic(long magic)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003185{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003186 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003187
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003188 buf[0] = (char) ((magic >> 0) & 0xff);
3189 buf[1] = (char) ((magic >> 8) & 0xff);
3190 buf[2] = (char) ((magic >> 16) & 0xff);
3191 buf[3] = (char) ((magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003192
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003193 return PyBytes_FromStringAndSize(buf, 4);
Victor Stinner3e2b7172010-11-09 09:32:19 +00003194}
Barry Warsaw28a691b2010-04-17 00:19:56 +00003195
3196static PyObject *
3197imp_get_magic(PyObject *self, PyObject *noargs)
3198{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003199 return imp_make_magic(pyc_magic);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003200}
3201
3202static PyObject *
3203imp_get_tag(PyObject *self, PyObject *noargs)
3204{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003205 return PyUnicode_FromString(pyc_tag);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003206}
3207
Guido van Rossum79f25d91997-04-29 20:08:16 +00003208static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003209imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003210{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003211 PyObject *list;
3212 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003213
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003214 list = PyList_New(0);
3215 if (list == NULL)
3216 return NULL;
3217 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
3218 PyObject *item = Py_BuildValue("ssi",
3219 fdp->suffix, fdp->mode, fdp->type);
3220 if (item == NULL) {
3221 Py_DECREF(list);
3222 return NULL;
3223 }
3224 if (PyList_Append(list, item) < 0) {
3225 Py_DECREF(list);
3226 Py_DECREF(item);
3227 return NULL;
3228 }
3229 Py_DECREF(item);
3230 }
3231 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003232}
3233
Guido van Rossum79f25d91997-04-29 20:08:16 +00003234static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003235call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003236{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003237 extern int fclose(FILE *);
3238 PyObject *fob, *ret;
3239 PyObject *pathobj;
3240 struct filedescr *fdp;
Gregory P. Smithc809f982012-03-18 16:06:53 -07003241 char *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003242 FILE *fp = NULL;
3243 int fd = -1;
3244 char *found_encoding = NULL;
3245 char *encoding = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003246
Gregory P. Smithc809f982012-03-18 16:06:53 -07003247 pathname = PyMem_MALLOC(MAXPATHLEN+1);
3248 if (pathname == NULL) {
3249 return PyErr_NoMemory();
3250 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003251 pathname[0] = '\0';
3252 if (path == Py_None)
3253 path = NULL;
3254 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
3255 if (fdp == NULL)
Gregory P. Smithc809f982012-03-18 16:06:53 -07003256 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003257 if (fp != NULL) {
3258 fd = fileno(fp);
3259 if (fd != -1)
3260 fd = dup(fd);
3261 fclose(fp);
3262 fp = NULL;
Gregory P. Smithc809f982012-03-18 16:06:53 -07003263 if (fd == -1) {
3264 PyErr_SetFromErrno(PyExc_OSError);
3265 goto error_exit;
3266 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003267 }
3268 if (fd != -1) {
3269 if (strchr(fdp->mode, 'b') == NULL) {
3270 /* PyTokenizer_FindEncoding() returns PyMem_MALLOC'ed
3271 memory. */
3272 found_encoding = PyTokenizer_FindEncoding(fd);
3273 lseek(fd, 0, 0); /* Reset position */
Antoine Pitrou4f22a8d2012-02-22 18:05:43 +01003274 if (found_encoding == NULL && PyErr_Occurred()) {
3275 close(fd);
Gregory P. Smithc809f982012-03-18 16:06:53 -07003276 goto error_exit;
Antoine Pitrou4f22a8d2012-02-22 18:05:43 +01003277 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003278 encoding = (found_encoding != NULL) ? found_encoding :
3279 (char*)PyUnicode_GetDefaultEncoding();
3280 }
3281 fob = PyFile_FromFd(fd, pathname, fdp->mode, -1,
3282 (char*)encoding, NULL, NULL, 1);
3283 if (fob == NULL) {
3284 close(fd);
3285 PyMem_FREE(found_encoding);
Gregory P. Smithc809f982012-03-18 16:06:53 -07003286 goto error_exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003287 }
3288 }
3289 else {
3290 fob = Py_None;
3291 Py_INCREF(fob);
3292 }
3293 pathobj = PyUnicode_DecodeFSDefault(pathname);
3294 ret = Py_BuildValue("NN(ssi)",
3295 fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
3296 PyMem_FREE(found_encoding);
Gregory P. Smithc809f982012-03-18 16:06:53 -07003297 PyMem_FREE(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003298 return ret;
Gregory P. Smithc809f982012-03-18 16:06:53 -07003299
3300error_exit:
3301 PyMem_FREE(pathname);
3302 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003303}
3304
Guido van Rossum79f25d91997-04-29 20:08:16 +00003305static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003306imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003307{
Victor Stinnerebc00522010-12-03 17:06:43 +00003308 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003309 PyObject *ret, *path = NULL;
Victor Stinnerebc00522010-12-03 17:06:43 +00003310 if (!PyArg_ParseTuple(args, "O&|O:find_module",
3311 PyUnicode_FSConverter, &name,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003312 &path))
3313 return NULL;
Victor Stinnerebc00522010-12-03 17:06:43 +00003314 ret = call_find_module(PyBytes_AS_STRING(name), path);
3315 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003316 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003317}
3318
3319static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003320imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003321{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003322 char *name;
3323 int ret;
3324 PyObject *m;
3325 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
3326 return NULL;
3327 ret = init_builtin(name);
3328 if (ret < 0)
3329 return NULL;
3330 if (ret == 0) {
3331 Py_INCREF(Py_None);
3332 return Py_None;
3333 }
3334 m = PyImport_AddModule(name);
3335 Py_XINCREF(m);
3336 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003337}
3338
Guido van Rossum79f25d91997-04-29 20:08:16 +00003339static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003340imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003341{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003342 char *name;
3343 int ret;
3344 PyObject *m;
3345 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
3346 return NULL;
3347 ret = PyImport_ImportFrozenModule(name);
3348 if (ret < 0)
3349 return NULL;
3350 if (ret == 0) {
3351 Py_INCREF(Py_None);
3352 return Py_None;
3353 }
3354 m = PyImport_AddModule(name);
3355 Py_XINCREF(m);
3356 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003357}
3358
Guido van Rossum79f25d91997-04-29 20:08:16 +00003359static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003360imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003361{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003362 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00003363
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003364 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
3365 return NULL;
3366 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003367}
3368
Guido van Rossum79f25d91997-04-29 20:08:16 +00003369static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00003370imp_is_frozen_package(PyObject *self, PyObject *args)
3371{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003372 char *name;
Brett Cannon8d110132009-03-15 02:20:16 +00003373
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003374 if (!PyArg_ParseTuple(args, "s:is_frozen_package", &name))
3375 return NULL;
3376 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00003377}
3378
3379static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003380imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003381{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003382 char *name;
3383 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
3384 return NULL;
3385 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003386}
3387
Guido van Rossum79f25d91997-04-29 20:08:16 +00003388static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003389imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003390{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003391 char *name;
3392 struct _frozen *p;
3393 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
3394 return NULL;
3395 p = find_frozen(name);
3396 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003397}
3398
3399static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003400get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003401{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003402 FILE *fp;
3403 if (mode[0] == 'U')
3404 mode = "r" PY_STDIOTEXTMODE;
3405 if (fob == NULL) {
3406 fp = fopen(pathname, mode);
3407 }
3408 else {
3409 int fd = PyObject_AsFileDescriptor(fob);
3410 if (fd == -1)
3411 return NULL;
3412 if (!_PyVerify_fd(fd))
3413 goto error;
3414 /* the FILE struct gets a new fd, so that it can be closed
3415 * independently of the file descriptor given
3416 */
3417 fd = dup(fd);
3418 if (fd == -1)
3419 goto error;
3420 fp = fdopen(fd, mode);
3421 }
3422 if (fp)
3423 return fp;
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003424error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003425 PyErr_SetFromErrno(PyExc_IOError);
3426 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003427}
3428
Guido van Rossum79f25d91997-04-29 20:08:16 +00003429static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003430imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003431{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003432 char *name;
Victor Stinnerebc00522010-12-03 17:06:43 +00003433 PyObject *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003434 PyObject *fob = NULL;
3435 PyObject *m;
3436 FILE *fp;
Victor Stinnerebc00522010-12-03 17:06:43 +00003437 if (!PyArg_ParseTuple(args, "sO&|O:load_compiled",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003438 &name,
Victor Stinnerebc00522010-12-03 17:06:43 +00003439 PyUnicode_FSConverter, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003440 &fob))
3441 return NULL;
Victor Stinnerebc00522010-12-03 17:06:43 +00003442 fp = get_file(PyBytes_AS_STRING(pathname), fob, "rb");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003443 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003444 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003445 return NULL;
3446 }
Victor Stinnerebc00522010-12-03 17:06:43 +00003447 m = load_compiled_module(name, PyBytes_AS_STRING(pathname), fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003448 fclose(fp);
Victor Stinnerebc00522010-12-03 17:06:43 +00003449 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003450 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003451}
3452
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003453#ifdef HAVE_DYNAMIC_LOADING
3454
Guido van Rossum79f25d91997-04-29 20:08:16 +00003455static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003456imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003457{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003458 char *name;
Victor Stinner8dbf6292010-10-15 12:48:01 +00003459 PyObject *pathbytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003460 char *pathname;
3461 PyObject *fob = NULL;
3462 PyObject *m;
3463 FILE *fp = NULL;
Victor Stinner8dbf6292010-10-15 12:48:01 +00003464 if (!PyArg_ParseTuple(args, "sO&|O:load_dynamic",
3465 &name, PyUnicode_FSConverter, &pathbytes, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003466 return NULL;
Victor Stinner8dbf6292010-10-15 12:48:01 +00003467 pathname = PyBytes_AS_STRING(pathbytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003468 if (fob) {
3469 fp = get_file(pathname, fob, "r");
3470 if (fp == NULL) {
Victor Stinner8dbf6292010-10-15 12:48:01 +00003471 Py_DECREF(pathbytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003472 return NULL;
3473 }
3474 }
3475 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinner8dbf6292010-10-15 12:48:01 +00003476 Py_DECREF(pathbytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003477 if (fp)
3478 fclose(fp);
3479 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003480}
3481
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003482#endif /* HAVE_DYNAMIC_LOADING */
3483
Guido van Rossum79f25d91997-04-29 20:08:16 +00003484static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003485imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003486{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003487 char *name;
Victor Stinnerebc00522010-12-03 17:06:43 +00003488 PyObject *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003489 PyObject *fob = NULL;
3490 PyObject *m;
3491 FILE *fp;
Victor Stinnerebc00522010-12-03 17:06:43 +00003492 if (!PyArg_ParseTuple(args, "sO&|O:load_source",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003493 &name,
Victor Stinnerebc00522010-12-03 17:06:43 +00003494 PyUnicode_FSConverter, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003495 &fob))
3496 return NULL;
Victor Stinnerebc00522010-12-03 17:06:43 +00003497 fp = get_file(PyBytes_AS_STRING(pathname), fob, "r");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003498 if (fp == NULL) {
Victor Stinnerebc00522010-12-03 17:06:43 +00003499 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003500 return NULL;
3501 }
Victor Stinnerebc00522010-12-03 17:06:43 +00003502 m = load_source_module(name, PyBytes_AS_STRING(pathname), fp);
3503 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003504 fclose(fp);
3505 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003506}
3507
Guido van Rossum79f25d91997-04-29 20:08:16 +00003508static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003509imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003510{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003511 char *name;
3512 PyObject *fob;
Victor Stinner1a563032010-10-15 22:43:10 +00003513 PyObject *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003514 PyObject * ret;
3515 char *suffix; /* Unused */
3516 char *mode;
3517 int type;
3518 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003519
Victor Stinner1a563032010-10-15 22:43:10 +00003520 if (!PyArg_ParseTuple(args, "sOO&(ssi):load_module",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003521 &name, &fob,
Victor Stinner1a563032010-10-15 22:43:10 +00003522 PyUnicode_FSConverter, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003523 &suffix, &mode, &type))
3524 return NULL;
3525 if (*mode) {
3526 /* Mode must start with 'r' or 'U' and must not contain '+'.
3527 Implicit in this test is the assumption that the mode
3528 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003529
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003530 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3531 PyErr_Format(PyExc_ValueError,
3532 "invalid file open mode %.200s", mode);
Victor Stinner1a563032010-10-15 22:43:10 +00003533 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003534 return NULL;
3535 }
3536 }
3537 if (fob == Py_None)
3538 fp = NULL;
3539 else {
3540 fp = get_file(NULL, fob, mode);
3541 if (fp == NULL) {
Victor Stinner1a563032010-10-15 22:43:10 +00003542 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003543 return NULL;
3544 }
3545 }
Victor Stinner1a563032010-10-15 22:43:10 +00003546 ret = load_module(name, fp, PyBytes_AS_STRING(pathname), type, NULL);
3547 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003548 if (fp)
3549 fclose(fp);
3550 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003551}
3552
3553static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003554imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003555{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003556 char *name;
Victor Stinnerebc00522010-12-03 17:06:43 +00003557 PyObject *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003558 PyObject * ret;
Victor Stinnerebc00522010-12-03 17:06:43 +00003559 if (!PyArg_ParseTuple(args, "sO&:load_package",
3560 &name, PyUnicode_FSConverter, &pathname))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003561 return NULL;
Victor Stinnerebc00522010-12-03 17:06:43 +00003562 ret = load_package(name, PyBytes_AS_STRING(pathname));
3563 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003564 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003565}
3566
3567static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003568imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003569{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003570 char *name;
3571 if (!PyArg_ParseTuple(args, "s:new_module", &name))
3572 return NULL;
3573 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003574}
3575
Christian Heimes13a7a212008-01-07 17:13:09 +00003576static PyObject *
3577imp_reload(PyObject *self, PyObject *v)
3578{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003579 return PyImport_ReloadModule(v);
Christian Heimes13a7a212008-01-07 17:13:09 +00003580}
3581
3582PyDoc_STRVAR(doc_reload,
3583"reload(module) -> module\n\
3584\n\
3585Reload the module. The module must have been successfully imported before.");
3586
Barry Warsaw28a691b2010-04-17 00:19:56 +00003587static PyObject *
3588imp_cache_from_source(PyObject *self, PyObject *args, PyObject *kws)
3589{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003590 static char *kwlist[] = {"path", "debug_override", NULL};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003591
Gregory P. Smithc809f982012-03-18 16:06:53 -07003592 char *buf;
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003593 PyObject *pathbytes;
3594 char *cpathname;
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003595 PyObject *debug_override = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003596 int debug = !Py_OptimizeFlag;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003597
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003598 if (!PyArg_ParseTupleAndKeywords(
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003599 args, kws, "O&|O", kwlist,
3600 PyUnicode_FSConverter, &pathbytes, &debug_override))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003601 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003602
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003603 if (debug_override != NULL &&
3604 (debug = PyObject_IsTrue(debug_override)) < 0) {
3605 Py_DECREF(pathbytes);
3606 return NULL;
3607 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00003608
Gregory P. Smithc809f982012-03-18 16:06:53 -07003609 buf = PyMem_MALLOC(MAXPATHLEN+1);
3610 if (buf == NULL) {
3611 return PyErr_NoMemory();
3612 }
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003613 cpathname = make_compiled_pathname(
3614 PyBytes_AS_STRING(pathbytes),
3615 buf, MAXPATHLEN+1, debug);
3616 Py_DECREF(pathbytes);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003617
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003618 if (cpathname == NULL) {
3619 PyErr_Format(PyExc_SystemError, "path buffer too short");
Gregory P. Smithc809f982012-03-18 16:06:53 -07003620 PyMem_FREE(buf);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003621 return NULL;
3622 }
Gregory P. Smithc809f982012-03-18 16:06:53 -07003623 {
3624 PyObject *ret = PyUnicode_DecodeFSDefault(buf);
3625 PyMem_FREE(buf);
3626 return ret;
3627 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00003628}
3629
3630PyDoc_STRVAR(doc_cache_from_source,
Éric Araujo5df11082011-11-03 03:38:44 +01003631"cache_from_source(path, [debug_override]) -> path\n\
3632Given the path to a .py file, return the path to its .pyc/.pyo file.\n\
Barry Warsaw28a691b2010-04-17 00:19:56 +00003633\n\
3634The .py file does not need to exist; this simply returns the path to the\n\
3635.pyc/.pyo file calculated as if the .py file were imported. The extension\n\
3636will be .pyc unless __debug__ is not defined, then it will be .pyo.\n\
3637\n\
3638If debug_override is not None, then it must be a boolean and is taken as\n\
3639the value of __debug__ instead.");
3640
3641static PyObject *
3642imp_source_from_cache(PyObject *self, PyObject *args, PyObject *kws)
3643{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003644 static char *kwlist[] = {"path", NULL};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003645
Victor Stinnerebc00522010-12-03 17:06:43 +00003646 PyObject *pathname_obj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003647 char *pathname;
Gregory P. Smithc809f982012-03-18 16:06:53 -07003648 char *buf;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003649
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003650 if (!PyArg_ParseTupleAndKeywords(
Victor Stinnerebc00522010-12-03 17:06:43 +00003651 args, kws, "O&", kwlist,
3652 PyUnicode_FSConverter, &pathname_obj))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003653 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003654
Victor Stinnerebc00522010-12-03 17:06:43 +00003655 pathname = PyBytes_AS_STRING(pathname_obj);
Gregory P. Smithc809f982012-03-18 16:06:53 -07003656 buf = PyMem_MALLOC(MAXPATHLEN+1);
3657 if (buf == NULL) {
3658 return PyErr_NoMemory();
3659 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003660 if (make_source_pathname(pathname, buf) == NULL) {
3661 PyErr_Format(PyExc_ValueError, "Not a PEP 3147 pyc path: %s",
3662 pathname);
Victor Stinnerebc00522010-12-03 17:06:43 +00003663 Py_DECREF(pathname_obj);
Gregory P. Smithc809f982012-03-18 16:06:53 -07003664 PyMem_FREE(buf);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003665 return NULL;
3666 }
Victor Stinnerebc00522010-12-03 17:06:43 +00003667 Py_DECREF(pathname_obj);
Gregory P. Smithc809f982012-03-18 16:06:53 -07003668 {
3669 PyObject *ret = PyUnicode_FromString(buf);
3670 PyMem_FREE(buf);
3671 return ret;
3672 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00003673}
3674
3675PyDoc_STRVAR(doc_source_from_cache,
Éric Araujo5df11082011-11-03 03:38:44 +01003676"source_from_cache(path) -> path\n\
3677Given the path to a .pyc./.pyo file, return the path to its .py file.\n\
Barry Warsaw28a691b2010-04-17 00:19:56 +00003678\n\
3679The .pyc/.pyo file does not need to exist; this simply returns the path to\n\
3680the .py file calculated to correspond to the .pyc/.pyo file. If path\n\
3681does not conform to PEP 3147 format, ValueError will be raised.");
3682
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003683/* Doc strings */
3684
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003685PyDoc_STRVAR(doc_imp,
3686"This module provides the components needed to build your own\n\
3687__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003688
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003689PyDoc_STRVAR(doc_find_module,
3690"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003691Search for a module. If path is omitted or None, search for a\n\
3692built-in, frozen or special module and continue search in sys.path.\n\
3693The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003694package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003695
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003696PyDoc_STRVAR(doc_load_module,
3697"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003698Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003699The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003700
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003701PyDoc_STRVAR(doc_get_magic,
3702"get_magic() -> string\n\
3703Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003704
Barry Warsaw28a691b2010-04-17 00:19:56 +00003705PyDoc_STRVAR(doc_get_tag,
3706"get_tag() -> string\n\
3707Return the magic tag for .pyc or .pyo files.");
3708
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003709PyDoc_STRVAR(doc_get_suffixes,
3710"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003711Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003712that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003713
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003714PyDoc_STRVAR(doc_new_module,
3715"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003716Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003717The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003718
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003719PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003720"lock_held() -> boolean\n\
3721Return True if the import lock is currently held, else False.\n\
3722On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003723
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003724PyDoc_STRVAR(doc_acquire_lock,
3725"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003726Acquires the interpreter's import lock for the current thread.\n\
3727This lock should be used by import hooks to ensure thread-safety\n\
3728when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003729On platforms without threads, this function does nothing.");
3730
3731PyDoc_STRVAR(doc_release_lock,
3732"release_lock() -> None\n\
3733Release the interpreter's import lock.\n\
3734On platforms without threads, this function does nothing.");
3735
Guido van Rossum79f25d91997-04-29 20:08:16 +00003736static PyMethodDef imp_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003737 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3738 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3739 {"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag},
3740 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3741 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3742 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3743 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3744 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3745 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
3746 {"reload", imp_reload, METH_O, doc_reload},
3747 {"cache_from_source", (PyCFunction)imp_cache_from_source,
3748 METH_VARARGS | METH_KEYWORDS, doc_cache_from_source},
3749 {"source_from_cache", (PyCFunction)imp_source_from_cache,
3750 METH_VARARGS | METH_KEYWORDS, doc_source_from_cache},
3751 /* The rest are obsolete */
3752 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3753 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
3754 {"init_builtin", imp_init_builtin, METH_VARARGS},
3755 {"init_frozen", imp_init_frozen, METH_VARARGS},
3756 {"is_builtin", imp_is_builtin, METH_VARARGS},
3757 {"is_frozen", imp_is_frozen, METH_VARARGS},
3758 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003759#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003760 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003761#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003762 {"load_package", imp_load_package, METH_VARARGS},
3763 {"load_source", imp_load_source, METH_VARARGS},
3764 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003765};
3766
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003767static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003768setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003769{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003770 PyObject *v;
3771 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003772
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003773 v = PyLong_FromLong((long)value);
3774 err = PyDict_SetItemString(d, name, v);
3775 Py_XDECREF(v);
3776 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003777}
3778
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003779typedef struct {
3780 PyObject_HEAD
3781} NullImporter;
3782
3783static int
3784NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3785{
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003786#ifndef MS_WINDOWS
3787 PyObject *path;
3788 struct stat statbuf;
3789 int rv;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003790
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003791 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3792 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003793
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003794 if (!PyArg_ParseTuple(args, "O&:NullImporter",
3795 PyUnicode_FSConverter, &path))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003796 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003797
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003798 if (PyBytes_GET_SIZE(path) == 0) {
3799 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003800 PyErr_SetString(PyExc_ImportError, "empty pathname");
3801 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003802 }
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003803
3804 rv = stat(PyBytes_AS_STRING(path), &statbuf);
3805 Py_DECREF(path);
3806 if (rv == 0) {
3807 /* it exists */
3808 if (S_ISDIR(statbuf.st_mode)) {
3809 /* it's a directory */
3810 PyErr_SetString(PyExc_ImportError, "existing directory");
3811 return -1;
3812 }
3813 }
3814#else /* MS_WINDOWS */
3815 PyObject *pathobj;
3816 DWORD rv;
Victor Stinner255dfdb2010-09-29 10:28:51 +00003817 wchar_t *path;
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003818
3819 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3820 return -1;
3821
3822 if (!PyArg_ParseTuple(args, "U:NullImporter",
3823 &pathobj))
3824 return -1;
3825
3826 if (PyUnicode_GET_SIZE(pathobj) == 0) {
3827 PyErr_SetString(PyExc_ImportError, "empty pathname");
3828 return -1;
3829 }
3830
Victor Stinnerbeb4135b2010-10-07 01:02:42 +00003831 path = PyUnicode_AsWideCharString(pathobj, NULL);
Victor Stinner255dfdb2010-09-29 10:28:51 +00003832 if (path == NULL)
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003833 return -1;
3834 /* see issue1293 and issue3677:
3835 * stat() on Windows doesn't recognise paths like
3836 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
3837 */
3838 rv = GetFileAttributesW(path);
Victor Stinner255dfdb2010-09-29 10:28:51 +00003839 PyMem_Free(path);
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003840 if (rv != INVALID_FILE_ATTRIBUTES) {
3841 /* it exists */
3842 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
3843 /* it's a directory */
3844 PyErr_SetString(PyExc_ImportError, "existing directory");
3845 return -1;
3846 }
3847 }
3848#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003849 return 0;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003850}
3851
3852static PyObject *
3853NullImporter_find_module(NullImporter *self, PyObject *args)
3854{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003855 Py_RETURN_NONE;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003856}
3857
3858static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003859 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3860 "Always return None"
3861 },
3862 {NULL} /* Sentinel */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003863};
3864
3865
Christian Heimes9cd17752007-11-18 19:35:23 +00003866PyTypeObject PyNullImporter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003867 PyVarObject_HEAD_INIT(NULL, 0)
3868 "imp.NullImporter", /*tp_name*/
3869 sizeof(NullImporter), /*tp_basicsize*/
3870 0, /*tp_itemsize*/
3871 0, /*tp_dealloc*/
3872 0, /*tp_print*/
3873 0, /*tp_getattr*/
3874 0, /*tp_setattr*/
3875 0, /*tp_reserved*/
3876 0, /*tp_repr*/
3877 0, /*tp_as_number*/
3878 0, /*tp_as_sequence*/
3879 0, /*tp_as_mapping*/
3880 0, /*tp_hash */
3881 0, /*tp_call*/
3882 0, /*tp_str*/
3883 0, /*tp_getattro*/
3884 0, /*tp_setattro*/
3885 0, /*tp_as_buffer*/
3886 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3887 "Null importer object", /* tp_doc */
3888 0, /* tp_traverse */
3889 0, /* tp_clear */
3890 0, /* tp_richcompare */
3891 0, /* tp_weaklistoffset */
3892 0, /* tp_iter */
3893 0, /* tp_iternext */
3894 NullImporter_methods, /* tp_methods */
3895 0, /* tp_members */
3896 0, /* tp_getset */
3897 0, /* tp_base */
3898 0, /* tp_dict */
3899 0, /* tp_descr_get */
3900 0, /* tp_descr_set */
3901 0, /* tp_dictoffset */
3902 (initproc)NullImporter_init, /* tp_init */
3903 0, /* tp_alloc */
3904 PyType_GenericNew /* tp_new */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003905};
3906
Martin v. Löwis1a214512008-06-11 05:26:20 +00003907static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003908 PyModuleDef_HEAD_INIT,
3909 "imp",
3910 doc_imp,
3911 0,
3912 imp_methods,
3913 NULL,
3914 NULL,
3915 NULL,
3916 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00003917};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003918
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003919PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00003920PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003921{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003922 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003923
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003924 if (PyType_Ready(&PyNullImporter_Type) < 0)
3925 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003926
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003927 m = PyModule_Create(&impmodule);
3928 if (m == NULL)
3929 goto failure;
3930 d = PyModule_GetDict(m);
3931 if (d == NULL)
3932 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003933
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003934 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3935 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3936 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3937 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3938 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3939 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3940 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3941 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
3942 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
3943 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003944
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003945 Py_INCREF(&PyNullImporter_Type);
3946 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
3947 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003948 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003949 Py_XDECREF(m);
3950 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003951}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003952
3953
Guido van Rossumb18618d2000-05-03 23:44:39 +00003954/* API for embedding applications that want to add their own entries
3955 to the table of built-in modules. This should normally be called
3956 *before* Py_Initialize(). When the table resize fails, -1 is
3957 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003958
3959 After a similar function by Just van Rossum. */
3960
3961int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003962PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003963{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003964 static struct _inittab *our_copy = NULL;
3965 struct _inittab *p;
3966 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003967
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003968 /* Count the number of entries in both tables */
3969 for (n = 0; newtab[n].name != NULL; n++)
3970 ;
3971 if (n == 0)
3972 return 0; /* Nothing to do */
3973 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3974 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003975
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003976 /* Allocate new memory for the combined table */
3977 p = our_copy;
3978 PyMem_RESIZE(p, struct _inittab, i+n+1);
3979 if (p == NULL)
3980 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003982 /* Copy the tables into the new memory */
3983 if (our_copy != PyImport_Inittab)
3984 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3985 PyImport_Inittab = our_copy = p;
3986 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003987
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003988 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003989}
3990
3991/* Shorthand to add a single entry given a name and a function */
3992
3993int
Brett Cannona826f322009-04-02 03:41:46 +00003994PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003995{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003996 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003997
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003998 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003999
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004000 newtab[0].name = (char *)name;
4001 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004002
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004003 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00004004}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004005
4006#ifdef __cplusplus
4007}
4008#endif