blob: 6715dc929dab8a6b0cefc94778ab82a6ceefc574 [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 */
Neal Norwitzadb69fc2005-12-17 20:54:49 +00008#include "pyarena.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00009#include "pythonrun.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000010#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000011#include "marshal.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000012#include "code.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000013#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000014#include "eval.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000015#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000016#include "importdl.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000017
Guido van Rossum55a83382000-09-20 20:31:38 +000018#ifdef HAVE_FCNTL_H
19#include <fcntl.h>
20#endif
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000021#ifdef __cplusplus
Brett Cannon9a5b25a2010-03-01 02:09:17 +000022extern "C" {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000023#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000024
Christian Heimesd3eb5a152008-02-24 00:38:49 +000025#ifdef MS_WINDOWS
26/* for stat.st_mode */
27typedef unsigned short mode_t;
Daniel Stutzbachc7937792010-09-09 21:18:04 +000028/* for _mkdir */
29#include <direct.h>
Christian Heimesd3eb5a152008-02-24 00:38:49 +000030#endif
31
Guido van Rossum21d335e1993-10-15 13:01:11 +000032
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000033/* Magic word to reject .pyc files generated by other Python versions.
34 It should change for each incompatible change to the bytecode.
35
36 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000037 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000038 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000039
Guido van Rossum45aecf42006-03-15 04:58:47 +000040 The magic numbers must be spaced apart at least 2 values, as the
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000041 -U interpeter flag will cause MAGIC+1 being used. They have been
42 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000043
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000044 There were a variety of old schemes for setting the magic number.
45 The current working scheme is to increment the previous value by
46 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000047
Barry Warsaw28a691b2010-04-17 00:19:56 +000048 Starting with the adoption of PEP 3147 in Python 3.2, every bump in magic
49 number also includes a new "magic tag", i.e. a human readable string used
50 to represent the magic number in __pycache__ directories. When you change
51 the magic number, you must also set a new unique magic tag. Generally this
52 can be named after the Python major version of the magic number bump, but
53 it can really be anything, as long as it's different than anything else
54 that's come before. The tags are included in the following table, starting
55 with Python 3.2a0.
56
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000057 Known values:
58 Python 1.5: 20121
59 Python 1.5.1: 20121
60 Python 1.5.2: 20121
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000061 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000062 Python 2.0: 50823
63 Python 2.0.1: 50823
64 Python 2.1: 60202
65 Python 2.1.1: 60202
66 Python 2.1.2: 60202
67 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000068 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000069 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000070 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000071 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000072 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000073 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000074 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000075 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000076 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000077 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000078 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
79 Python 2.5b3: 62111 (fix wrong code: x += yield)
80 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000081 storing constants that should have been removed)
Thomas Wouters89f507f2006-12-13 04:49:30 +000082 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
Christian Heimes99170a52007-12-19 02:07:34 +000083 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)
Christian Heimesdd15f6c2008-03-16 00:07:10 +000084 Python 2.6a1: 62161 (WITH_CLEANUP optimization)
Guido van Rossum45aecf42006-03-15 04:58:47 +000085 Python 3000: 3000
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000086 3010 (removed UNARY_CONVERT)
87 3020 (added BUILD_SET)
88 3030 (added keyword-only parameters)
89 3040 (added signature annotations)
90 3050 (print becomes a function)
91 3060 (PEP 3115 metaclass syntax)
92 3061 (string literals become unicode)
93 3071 (PEP 3109 raise changes)
94 3081 (PEP 3137 make __file__ and __name__ unicode)
95 3091 (kill str8 interning)
96 3101 (merge from 2.6a0, see 62151)
97 3103 (__file__ points to source file)
Benjamin Peterson0f6cae02009-12-10 02:09:08 +000098 Python 3.0a4: 3111 (WITH_CLEANUP optimization).
99 Python 3.0a5: 3131 (lexical exception stacking, including POP_EXCEPT)
100 Python 3.1a0: 3141 (optimize list, set and dict comprehensions:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000101 change LIST_APPEND and SET_ADD, add MAP_ADD)
Benjamin Peterson0f6cae02009-12-10 02:09:08 +0000102 Python 3.1a0: 3151 (optimize conditional branches:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000103 introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE)
Benjamin Peterson876b2f22009-06-28 03:18:59 +0000104 Python 3.2a0: 3160 (add SETUP_WITH)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000105 tag: cpython-32
Antoine Pitrou74a69fa2010-09-04 18:43:52 +0000106 Python 3.2a1: 3170 (add DUP_TOP_TWO, remove DUP_TOPX and ROT_FOUR)
107 tag: cpython-32
Benjamin Peterson6246d6d2010-09-10 21:51:44 +0000108 Python 3.2a2 3180 (add DELETE_DEREF)
Tim Peters36515e22001-11-18 04:06:29 +0000109*/
Guido van Rossum3ddee711991-12-16 13:06:34 +0000110
Nick Coghlancd419ab2010-09-11 00:39:25 +0000111/* MAGIC must change whenever the bytecode emitted by the compiler may no
112 longer be understood by older implementations of the eval loop (usually
113 due to the addition of new opcodes)
114 TAG must change for each major Python release. The magic number will take
115 care of any bytecode changes that occur during development.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000116*/
Benjamin Peterson6246d6d2010-09-10 21:51:44 +0000117#define MAGIC (3180 | ((long)'\r'<<16) | ((long)'\n'<<24))
Barry Warsaw28a691b2010-04-17 00:19:56 +0000118#define TAG "cpython-32"
119#define CACHEDIR "__pycache__"
120/* Current magic word and string tag as globals. */
Guido van Rossum96774c12000-05-01 20:19:08 +0000121static long pyc_magic = MAGIC;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000122static const char *pyc_tag = TAG;
Guido van Rossum96774c12000-05-01 20:19:08 +0000123
Victor Stinner49d3f252010-10-17 01:24:53 +0000124/* See _PyImport_FixupExtensionUnicode() below */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000125static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000126
Guido van Rossum771c6c81997-10-31 18:37:24 +0000127/* This table is defined in config.c: */
128extern struct _inittab _PyImport_Inittab[];
129
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000130/* Method from Parser/tokenizer.c */
Guido van Rossum40d20bc2007-10-22 00:09:51 +0000131extern char * PyTokenizer_FindEncoding(int);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000132
Guido van Rossum771c6c81997-10-31 18:37:24 +0000133struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +0000134
Guido van Rossumed1170e1999-12-20 21:23:41 +0000135/* these tables define the module suffixes that Python recognizes */
136struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +0000137
Guido van Rossumed1170e1999-12-20 21:23:41 +0000138static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000139 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000140#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000141 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000142#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000143 {".pyc", "rb", PY_COMPILED},
144 {0, 0}
Guido van Rossumed1170e1999-12-20 21:23:41 +0000145};
146
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000147
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000148/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000149
150void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000151_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000152{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000153 const struct filedescr *scan;
154 struct filedescr *filetab;
155 int countD = 0;
156 int countS = 0;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000157
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000158 /* prepare _PyImport_Filetab: copy entries from
159 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
160 */
Guido van Rossum04110fb2007-08-24 16:32:05 +0000161#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000162 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
163 ++countD;
Guido van Rossum04110fb2007-08-24 16:32:05 +0000164#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000165 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
166 ++countS;
167 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
168 if (filetab == NULL)
169 Py_FatalError("Can't initialize import file table.");
Guido van Rossum04110fb2007-08-24 16:32:05 +0000170#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000171 memcpy(filetab, _PyImport_DynLoadFiletab,
172 countD * sizeof(struct filedescr));
Guido van Rossum04110fb2007-08-24 16:32:05 +0000173#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000174 memcpy(filetab + countD, _PyImport_StandardFiletab,
175 countS * sizeof(struct filedescr));
176 filetab[countD + countS].suffix = NULL;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000177
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000178 _PyImport_Filetab = filetab;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000179
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000180 if (Py_OptimizeFlag) {
181 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
182 for (; filetab->suffix != NULL; filetab++) {
183 if (strcmp(filetab->suffix, ".pyc") == 0)
184 filetab->suffix = ".pyo";
185 }
186 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000187}
188
Guido van Rossum25ce5661997-08-02 03:10:38 +0000189void
Just van Rossum52e14d62002-12-30 22:08:05 +0000190_PyImportHooks_Init(void)
191{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000192 PyObject *v, *path_hooks = NULL, *zimpimport;
193 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000194
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000195 /* adding sys.path_hooks and sys.path_importer_cache, setting up
196 zipimport */
197 if (PyType_Ready(&PyNullImporter_Type) < 0)
198 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000199
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000200 if (Py_VerboseFlag)
201 PySys_WriteStderr("# installing zipimport hook\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000202
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000203 v = PyList_New(0);
204 if (v == NULL)
205 goto error;
206 err = PySys_SetObject("meta_path", v);
207 Py_DECREF(v);
208 if (err)
209 goto error;
210 v = PyDict_New();
211 if (v == NULL)
212 goto error;
213 err = PySys_SetObject("path_importer_cache", v);
214 Py_DECREF(v);
215 if (err)
216 goto error;
217 path_hooks = PyList_New(0);
218 if (path_hooks == NULL)
219 goto error;
220 err = PySys_SetObject("path_hooks", path_hooks);
221 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000222 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000223 PyErr_Print();
224 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
225 "path_importer_cache, or NullImporter failed"
226 );
227 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000228
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000229 zimpimport = PyImport_ImportModule("zipimport");
230 if (zimpimport == NULL) {
231 PyErr_Clear(); /* No zip import module -- okay */
232 if (Py_VerboseFlag)
233 PySys_WriteStderr("# can't import zipimport\n");
234 }
235 else {
236 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
237 "zipimporter");
238 Py_DECREF(zimpimport);
239 if (zipimporter == NULL) {
240 PyErr_Clear(); /* No zipimporter object -- okay */
241 if (Py_VerboseFlag)
242 PySys_WriteStderr(
243 "# can't import zipimport.zipimporter\n");
244 }
245 else {
246 /* sys.path_hooks.append(zipimporter) */
247 err = PyList_Append(path_hooks, zipimporter);
248 Py_DECREF(zipimporter);
249 if (err)
250 goto error;
251 if (Py_VerboseFlag)
252 PySys_WriteStderr(
253 "# installed zipimport hook\n");
254 }
255 }
256 Py_DECREF(path_hooks);
Just van Rossum52e14d62002-12-30 22:08:05 +0000257}
258
259void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000260_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000261{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000262 Py_XDECREF(extensions);
263 extensions = NULL;
264 PyMem_DEL(_PyImport_Filetab);
265 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000266}
267
268
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000269/* Locking primitives to prevent parallel imports of the same module
270 in different threads to return with a partially loaded module.
271 These calls are serialized by the global interpreter lock. */
272
273#ifdef WITH_THREAD
274
Guido van Rossum49b56061998-10-01 20:42:43 +0000275#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000276
Guido van Rossum65d5b571998-12-21 19:32:43 +0000277static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000278static long import_lock_thread = -1;
279static int import_lock_level = 0;
280
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000281void
282_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000283{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000284 long me = PyThread_get_thread_ident();
285 if (me == -1)
286 return; /* Too bad */
287 if (import_lock == NULL) {
288 import_lock = PyThread_allocate_lock();
289 if (import_lock == NULL)
290 return; /* Nothing much we can do. */
291 }
292 if (import_lock_thread == me) {
293 import_lock_level++;
294 return;
295 }
296 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
297 {
298 PyThreadState *tstate = PyEval_SaveThread();
299 PyThread_acquire_lock(import_lock, 1);
300 PyEval_RestoreThread(tstate);
301 }
302 import_lock_thread = me;
303 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000304}
305
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000306int
307_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000308{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000309 long me = PyThread_get_thread_ident();
310 if (me == -1 || import_lock == NULL)
311 return 0; /* Too bad */
312 if (import_lock_thread != me)
313 return -1;
314 import_lock_level--;
315 if (import_lock_level == 0) {
316 import_lock_thread = -1;
317 PyThread_release_lock(import_lock);
318 }
319 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000320}
321
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000322/* This function is called from PyOS_AfterFork to ensure that newly
323 created child processes do not share locks with the parent.
324 We now acquire the import lock around fork() calls but on some platforms
325 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000326
327void
328_PyImport_ReInitLock(void)
329{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000330 if (import_lock != NULL)
331 import_lock = PyThread_allocate_lock();
332 import_lock_thread = -1;
333 import_lock_level = 0;
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000334}
335
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000336#endif
337
Tim Peters69232342001-08-30 05:16:13 +0000338static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000339imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000340{
Tim Peters69232342001-08-30 05:16:13 +0000341#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000342 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000343#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000344 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000345#endif
346}
347
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000348static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000349imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000350{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000351#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000352 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000353#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000354 Py_INCREF(Py_None);
355 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000356}
357
358static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000359imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000360{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000361#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000362 if (_PyImport_ReleaseLock() < 0) {
363 PyErr_SetString(PyExc_RuntimeError,
364 "not holding the import lock");
365 return NULL;
366 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000367#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000368 Py_INCREF(Py_None);
369 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000370}
371
Guido van Rossumd8faa362007-04-27 19:54:29 +0000372static void
373imp_modules_reloading_clear(void)
374{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000375 PyInterpreterState *interp = PyThreadState_Get()->interp;
376 if (interp->modules_reloading != NULL)
377 PyDict_Clear(interp->modules_reloading);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000378}
379
Guido van Rossum25ce5661997-08-02 03:10:38 +0000380/* Helper for sys */
381
382PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000383PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000384{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000385 PyInterpreterState *interp = PyThreadState_GET()->interp;
386 if (interp->modules == NULL)
387 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
388 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000389}
390
Guido van Rossum3f5da241990-12-20 15:06:42 +0000391
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000392/* List of names to clear in sys */
393static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000394 "path", "argv", "ps1", "ps2",
395 "last_type", "last_value", "last_traceback",
396 "path_hooks", "path_importer_cache", "meta_path",
397 /* misc stuff */
398 "flags", "float_info",
399 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000400};
401
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000402static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000403 "stdin", "__stdin__",
404 "stdout", "__stdout__",
405 "stderr", "__stderr__",
406 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000407};
408
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000409
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000410/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000411
Guido van Rossum3f5da241990-12-20 15:06:42 +0000412void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000413PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000414{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000415 Py_ssize_t pos, ndone;
416 char *name;
417 PyObject *key, *value, *dict;
418 PyInterpreterState *interp = PyThreadState_GET()->interp;
419 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000420
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000421 if (modules == NULL)
422 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000423
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000424 /* Delete some special variables first. These are common
425 places where user values hide and people complain when their
426 destructors fail. Since the modules containing them are
427 deleted *last* of all, they would come too late in the normal
428 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000429
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000430 value = PyDict_GetItemString(modules, "builtins");
431 if (value != NULL && PyModule_Check(value)) {
432 dict = PyModule_GetDict(value);
433 if (Py_VerboseFlag)
434 PySys_WriteStderr("# clear builtins._\n");
435 PyDict_SetItemString(dict, "_", Py_None);
436 }
437 value = PyDict_GetItemString(modules, "sys");
438 if (value != NULL && PyModule_Check(value)) {
439 char **p;
440 PyObject *v;
441 dict = PyModule_GetDict(value);
442 for (p = sys_deletes; *p != NULL; p++) {
443 if (Py_VerboseFlag)
444 PySys_WriteStderr("# clear sys.%s\n", *p);
445 PyDict_SetItemString(dict, *p, Py_None);
446 }
447 for (p = sys_files; *p != NULL; p+=2) {
448 if (Py_VerboseFlag)
449 PySys_WriteStderr("# restore sys.%s\n", *p);
450 v = PyDict_GetItemString(dict, *(p+1));
451 if (v == NULL)
452 v = Py_None;
453 PyDict_SetItemString(dict, *p, v);
454 }
455 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000456
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000457 /* First, delete __main__ */
458 value = PyDict_GetItemString(modules, "__main__");
459 if (value != NULL && PyModule_Check(value)) {
460 if (Py_VerboseFlag)
461 PySys_WriteStderr("# cleanup __main__\n");
462 _PyModule_Clear(value);
463 PyDict_SetItemString(modules, "__main__", Py_None);
464 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000465
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000466 /* The special treatment of "builtins" here is because even
467 when it's not referenced as a module, its dictionary is
468 referenced by almost every module's __builtins__. Since
469 deleting a module clears its dictionary (even if there are
470 references left to it), we need to delete the "builtins"
471 module last. Likewise, we don't delete sys until the very
472 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000473
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000474 Also note that we 'delete' modules by replacing their entry
475 in the modules dict with None, rather than really deleting
476 them; this avoids a rehash of the modules dictionary and
477 also marks them as "non existent" so they won't be
478 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000479
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000480 /* Next, repeatedly delete modules with a reference count of
481 one (skipping builtins and sys) and delete them */
482 do {
483 ndone = 0;
484 pos = 0;
485 while (PyDict_Next(modules, &pos, &key, &value)) {
486 if (value->ob_refcnt != 1)
487 continue;
488 if (PyUnicode_Check(key) && PyModule_Check(value)) {
489 name = _PyUnicode_AsString(key);
490 if (strcmp(name, "builtins") == 0)
491 continue;
492 if (strcmp(name, "sys") == 0)
493 continue;
494 if (Py_VerboseFlag)
495 PySys_WriteStderr(
496 "# cleanup[1] %s\n", name);
497 _PyModule_Clear(value);
498 PyDict_SetItem(modules, key, Py_None);
499 ndone++;
500 }
501 }
502 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000504 /* Next, delete all modules (still skipping builtins and sys) */
505 pos = 0;
506 while (PyDict_Next(modules, &pos, &key, &value)) {
507 if (PyUnicode_Check(key) && PyModule_Check(value)) {
508 name = _PyUnicode_AsString(key);
509 if (strcmp(name, "builtins") == 0)
510 continue;
511 if (strcmp(name, "sys") == 0)
512 continue;
513 if (Py_VerboseFlag)
514 PySys_WriteStderr("# cleanup[2] %s\n", name);
515 _PyModule_Clear(value);
516 PyDict_SetItem(modules, key, Py_None);
517 }
518 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000519
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000520 /* Next, delete sys and builtins (in that order) */
521 value = PyDict_GetItemString(modules, "sys");
522 if (value != NULL && PyModule_Check(value)) {
523 if (Py_VerboseFlag)
524 PySys_WriteStderr("# cleanup sys\n");
525 _PyModule_Clear(value);
526 PyDict_SetItemString(modules, "sys", Py_None);
527 }
528 value = PyDict_GetItemString(modules, "builtins");
529 if (value != NULL && PyModule_Check(value)) {
530 if (Py_VerboseFlag)
531 PySys_WriteStderr("# cleanup builtins\n");
532 _PyModule_Clear(value);
533 PyDict_SetItemString(modules, "builtins", Py_None);
534 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 /* Finally, clear and delete the modules directory */
537 PyDict_Clear(modules);
538 interp->modules = NULL;
539 Py_DECREF(modules);
540 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000541}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000542
543
Barry Warsaw28a691b2010-04-17 00:19:56 +0000544/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000545
546long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000547PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000548{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000549 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000550}
551
552
Barry Warsaw28a691b2010-04-17 00:19:56 +0000553const char *
554PyImport_GetMagicTag(void)
555{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 return pyc_tag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000557}
558
Guido van Rossum25ce5661997-08-02 03:10:38 +0000559/* Magic for extension modules (built-in as well as dynamically
560 loaded). To prevent initializing an extension module more than
561 once, we keep a static dictionary 'extensions' keyed by module name
562 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000563 modules), containing these modules. A copy of the module's
Victor Stinner49d3f252010-10-17 01:24:53 +0000564 dictionary is stored by calling _PyImport_FixupExtensionUnicode()
Guido van Rossum25ce5661997-08-02 03:10:38 +0000565 immediately after the module initialization function succeeds. A
566 copy can be retrieved from there by calling
Victor Stinner49d3f252010-10-17 01:24:53 +0000567 _PyImport_FindExtensionUnicode().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000568
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000569 Modules which do support multiple initialization set their m_size
570 field to a non-negative number (indicating the size of the
571 module-specific state). They are still recorded in the extensions
572 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000573*/
574
575int
Victor Stinner49d3f252010-10-17 01:24:53 +0000576_PyImport_FixupExtensionUnicode(PyObject *mod, char *name, PyObject *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000577{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000578 PyObject *modules, *dict;
579 struct PyModuleDef *def;
580 if (extensions == NULL) {
581 extensions = PyDict_New();
582 if (extensions == NULL)
583 return -1;
584 }
585 if (mod == NULL || !PyModule_Check(mod)) {
586 PyErr_BadInternalCall();
587 return -1;
588 }
589 def = PyModule_GetDef(mod);
590 if (!def) {
591 PyErr_BadInternalCall();
592 return -1;
593 }
594 modules = PyImport_GetModuleDict();
595 if (PyDict_SetItemString(modules, name, mod) < 0)
596 return -1;
597 if (_PyState_AddModule(mod, def) < 0) {
598 PyDict_DelItemString(modules, name);
599 return -1;
600 }
601 if (def->m_size == -1) {
602 if (def->m_base.m_copy) {
603 /* Somebody already imported the module,
604 likely under a different name.
605 XXX this should really not happen. */
606 Py_DECREF(def->m_base.m_copy);
607 def->m_base.m_copy = NULL;
608 }
609 dict = PyModule_GetDict(mod);
610 if (dict == NULL)
611 return -1;
612 def->m_base.m_copy = PyDict_Copy(dict);
613 if (def->m_base.m_copy == NULL)
614 return -1;
615 }
Victor Stinner49d3f252010-10-17 01:24:53 +0000616 PyDict_SetItem(extensions, filename, (PyObject*)def);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000617 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000618}
619
Victor Stinner49d3f252010-10-17 01:24:53 +0000620int
621_PyImport_FixupBuiltin(PyObject *mod, char *name)
622{
623 int res;
624 PyObject *filename;
625 filename = PyUnicode_FromString(name);
626 if (filename == NULL)
627 return -1;
628 res = _PyImport_FixupExtensionUnicode(mod, name, filename);
629 Py_DECREF(filename);
630 return res;
631}
632
Guido van Rossum25ce5661997-08-02 03:10:38 +0000633PyObject *
Victor Stinner49d3f252010-10-17 01:24:53 +0000634_PyImport_FindExtensionUnicode(char *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000635{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000636 PyObject *mod, *mdict;
637 PyModuleDef* def;
638 if (extensions == NULL)
639 return NULL;
Victor Stinner49d3f252010-10-17 01:24:53 +0000640 def = (PyModuleDef*)PyDict_GetItem(extensions, filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000641 if (def == NULL)
642 return NULL;
643 if (def->m_size == -1) {
644 /* Module does not support repeated initialization */
645 if (def->m_base.m_copy == NULL)
646 return NULL;
647 mod = PyImport_AddModule(name);
648 if (mod == NULL)
649 return NULL;
650 mdict = PyModule_GetDict(mod);
651 if (mdict == NULL)
652 return NULL;
653 if (PyDict_Update(mdict, def->m_base.m_copy))
654 return NULL;
655 }
656 else {
657 if (def->m_base.m_init == NULL)
658 return NULL;
659 mod = def->m_base.m_init();
660 if (mod == NULL)
661 return NULL;
662 PyDict_SetItemString(PyImport_GetModuleDict(), name, mod);
663 Py_DECREF(mod);
664 }
665 if (_PyState_AddModule(mod, def) < 0) {
666 PyDict_DelItemString(PyImport_GetModuleDict(), name);
667 Py_DECREF(mod);
668 return NULL;
669 }
670 if (Py_VerboseFlag)
Victor Stinner49d3f252010-10-17 01:24:53 +0000671 PySys_FormatStderr("import %s # previously loaded (%U)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000672 name, filename);
673 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000674
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000675}
676
Victor Stinner49d3f252010-10-17 01:24:53 +0000677PyObject *
678_PyImport_FindBuiltin(char *name)
679{
680 PyObject *res, *filename;
681 filename = PyUnicode_FromString(name);
682 if (filename == NULL)
683 return NULL;
684 res = _PyImport_FindExtensionUnicode(name, filename);
685 Py_DECREF(filename);
686 return res;
687}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000688
689/* Get the module object corresponding to a module name.
690 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000691 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000692 Because the former action is most common, THIS DOES NOT RETURN A
693 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000694
Guido van Rossum79f25d91997-04-29 20:08:16 +0000695PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000696PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000697{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000698 PyObject *modules = PyImport_GetModuleDict();
699 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000700
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000701 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
702 PyModule_Check(m))
703 return m;
704 m = PyModule_New(name);
705 if (m == NULL)
706 return NULL;
707 if (PyDict_SetItemString(modules, name, m) != 0) {
708 Py_DECREF(m);
709 return NULL;
710 }
711 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000712
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000713 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000714}
715
Tim Peters1cd70172004-08-02 03:52:12 +0000716/* Remove name from sys.modules, if it's there. */
717static void
Benjamin Petersonfa0aeba2010-03-25 23:30:20 +0000718remove_module(const char *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000719{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000720 PyObject *modules = PyImport_GetModuleDict();
721 if (PyDict_GetItemString(modules, name) == NULL)
722 return;
723 if (PyDict_DelItemString(modules, name) < 0)
724 Py_FatalError("import: deleting existing key in"
725 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000726}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000727
Barry Warsaw28a691b2010-04-17 00:19:56 +0000728static PyObject * get_sourcefile(char *file);
729static char *make_source_pathname(char *pathname, char *buf);
730static char *make_compiled_pathname(char *pathname, char *buf, size_t buflen,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000731 int debug);
Christian Heimes3b06e532008-01-07 20:12:44 +0000732
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000733/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000734 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
735 * removed from sys.modules, to avoid leaving damaged module objects
736 * in sys.modules. The caller may wish to restore the original
737 * module object (if any) in this case; PyImport_ReloadModule is an
738 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000739 *
740 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
741 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000742 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000743PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000744PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000745{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000746 return PyImport_ExecCodeModuleWithPathnames(
747 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000748}
749
750PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000751PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000752{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000753 return PyImport_ExecCodeModuleWithPathnames(
754 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000755}
756
757PyObject *
758PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000759 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000760{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000761 PyObject *modules = PyImport_GetModuleDict();
762 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000763
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000764 m = PyImport_AddModule(name);
765 if (m == NULL)
766 return NULL;
767 /* If the module is being reloaded, we get the old module back
768 and re-use its dict to exec the new code. */
769 d = PyModule_GetDict(m);
770 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
771 if (PyDict_SetItemString(d, "__builtins__",
772 PyEval_GetBuiltins()) != 0)
773 goto error;
774 }
775 /* Remember the filename as the __file__ attribute */
776 v = NULL;
777 if (pathname != NULL) {
778 v = get_sourcefile(pathname);
779 if (v == NULL)
780 PyErr_Clear();
781 }
782 if (v == NULL) {
783 v = ((PyCodeObject *)co)->co_filename;
784 Py_INCREF(v);
785 }
786 if (PyDict_SetItemString(d, "__file__", v) != 0)
787 PyErr_Clear(); /* Not important enough to report */
788 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000789
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 /* Remember the pyc path name as the __cached__ attribute. */
791 if (cpathname == NULL) {
792 v = Py_None;
793 Py_INCREF(v);
794 }
795 else if ((v = PyUnicode_FromString(cpathname)) == NULL) {
796 PyErr_Clear(); /* Not important enough to report */
797 v = Py_None;
798 Py_INCREF(v);
799 }
800 if (PyDict_SetItemString(d, "__cached__", v) != 0)
801 PyErr_Clear(); /* Not important enough to report */
802 Py_DECREF(v);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000803
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000804 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
805 if (v == NULL)
806 goto error;
807 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000808
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000809 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
810 PyErr_Format(PyExc_ImportError,
811 "Loaded module %.200s not found in sys.modules",
812 name);
813 return NULL;
814 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000815
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000817
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000818 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000819
820 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000821 remove_module(name);
822 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000823}
824
825
Barry Warsaw28a691b2010-04-17 00:19:56 +0000826/* Like strrchr(string, '/') but searches for the rightmost of either SEP
827 or ALTSEP, if the latter is defined.
828*/
829static char *
830rightmost_sep(char *s)
831{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000832 char *found, c;
833 for (found = NULL; (c = *s); s++) {
834 if (c == SEP
Barry Warsaw28a691b2010-04-17 00:19:56 +0000835#ifdef ALTSEP
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000836 || c == ALTSEP
Barry Warsaw28a691b2010-04-17 00:19:56 +0000837#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000838 )
839 {
840 found = s;
841 }
842 }
843 return found;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000844}
845
846
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000847/* Given a pathname for a Python source file, fill a buffer with the
848 pathname for the corresponding compiled file. Return the pathname
849 for the compiled file, or NULL if there's no space in the buffer.
850 Doesn't set an exception. */
851
852static char *
Barry Warsaw28a691b2010-04-17 00:19:56 +0000853make_compiled_pathname(char *pathname, char *buf, size_t buflen, int debug)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000854{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000855 /* foo.py -> __pycache__/foo.<tag>.pyc */
856 size_t len = strlen(pathname);
857 size_t i, save;
858 char *pos;
859 int sep = SEP;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000860
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 /* Sanity check that the buffer has roughly enough space to hold what
862 will eventually be the full path to the compiled file. The 5 extra
863 bytes include the slash afer __pycache__, the two extra dots, the
864 extra trailing character ('c' or 'o') and null. This isn't exact
865 because the contents of the buffer can affect how many actual
866 characters of the string get into the buffer. We'll do a final
867 sanity check before writing the extension to ensure we do not
868 overflow the buffer.
869 */
870 if (len + strlen(CACHEDIR) + strlen(pyc_tag) + 5 > buflen)
871 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000872
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000873 /* Find the last path separator and copy everything from the start of
874 the source string up to and including the separator.
875 */
876 if ((pos = rightmost_sep(pathname)) == NULL) {
877 i = 0;
878 }
879 else {
880 sep = *pos;
881 i = pos - pathname + 1;
882 strncpy(buf, pathname, i);
883 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000884
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000885 save = i;
886 buf[i++] = '\0';
887 /* Add __pycache__/ */
888 strcat(buf, CACHEDIR);
889 i += strlen(CACHEDIR) - 1;
890 buf[i++] = sep;
891 buf[i++] = '\0';
892 /* Add the base filename, but remove the .py or .pyw extension, since
893 the tag name must go before the extension.
894 */
895 strcat(buf, pathname + save);
896 if ((pos = strrchr(buf, '.')) != NULL)
897 *++pos = '\0';
898 strcat(buf, pyc_tag);
899 /* The length test above assumes that we're only adding one character
900 to the end of what would normally be the extension. What if there
901 is no extension, or the string ends in '.' or '.p', and otherwise
902 fills the buffer? By appending 4 more characters onto the string
903 here, we could overrun the buffer.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000904
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000905 As a simple example, let's say buflen=32 and the input string is
906 'xxx.py'. strlen() would be 6 and the test above would yield:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000907
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000908 (6 + 11 + 10 + 5 == 32) > 32
Barry Warsaw28a691b2010-04-17 00:19:56 +0000909
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000910 which is false and so the name mangling would continue. This would
911 be fine because we'd end up with this string in buf:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000912
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000913 __pycache__/xxx.cpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000914
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000915 strlen(of that) == 30 + the nul fits inside a 32 character buffer.
916 We can even handle an input string of say 'xxxxx' above because
917 that's (5 + 11 + 10 + 5 == 31) > 32 which is also false. Name
918 mangling that yields:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000919
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000920 __pycache__/xxxxxcpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000921
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000922 which is 32 characters including the nul, and thus fits in the
923 buffer. However, an input string of 'xxxxxx' would yield a result
924 string of:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000925
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 __pycache__/xxxxxxcpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000927
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000928 which is 33 characters long (including the nul), thus overflowing
929 the buffer, even though the first test would fail, i.e.: the input
930 string is also 6 characters long, so 32 > 32 is false.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000931
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000932 The reason the first test fails but we still overflow the buffer is
933 that the test above only expects to add one extra character to be
934 added to the extension, and here we're adding three (pyc). We
935 don't add the first dot, so that reclaims one of expected
936 positions, leaving us overflowing by 1 byte (3 extra - 1 reclaimed
937 dot - 1 expected extra == 1 overflowed).
Barry Warsaw28a691b2010-04-17 00:19:56 +0000938
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000939 The best we can do is ensure that we still have enough room in the
940 target buffer before we write the extension. Because it's always
941 only the extension that can cause the overflow, and never the other
942 path bytes we've written, it's sufficient to just do one more test
943 here. Still, the assertion that follows can't hurt.
944 */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000945#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000946 printf("strlen(buf): %d; buflen: %d\n", (int)strlen(buf), (int)buflen);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000947#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000948 if (strlen(buf) + 5 > buflen)
949 return NULL;
950 strcat(buf, debug ? ".pyc" : ".pyo");
951 assert(strlen(buf) < buflen);
952 return buf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000953}
954
955
Barry Warsaw28a691b2010-04-17 00:19:56 +0000956/* Given a pathname to a Python byte compiled file, return the path to the
957 source file, if the path matches the PEP 3147 format. This does not check
958 for any file existence, however, if the pyc file name does not match PEP
959 3147 style, NULL is returned. buf must be at least as big as pathname;
960 the resulting path will always be shorter. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000961
Barry Warsaw28a691b2010-04-17 00:19:56 +0000962static char *
963make_source_pathname(char *pathname, char *buf)
964{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000965 /* __pycache__/foo.<tag>.pyc -> foo.py */
966 size_t i, j;
967 char *left, *right, *dot0, *dot1, sep;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000968
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000969 /* Look back two slashes from the end. In between these two slashes
970 must be the string __pycache__ or this is not a PEP 3147 style
971 path. It's possible for there to be only one slash.
972 */
973 if ((right = rightmost_sep(pathname)) == NULL)
974 return NULL;
975 sep = *right;
976 *right = '\0';
977 left = rightmost_sep(pathname);
978 *right = sep;
979 if (left == NULL)
980 left = pathname;
981 else
982 left++;
983 if (right-left != strlen(CACHEDIR) ||
984 strncmp(left, CACHEDIR, right-left) != 0)
985 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000986
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000987 /* Now verify that the path component to the right of the last slash
988 has two dots in it.
989 */
990 if ((dot0 = strchr(right + 1, '.')) == NULL)
991 return NULL;
992 if ((dot1 = strchr(dot0 + 1, '.')) == NULL)
993 return NULL;
994 /* Too many dots? */
995 if (strchr(dot1 + 1, '.') != NULL)
996 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000997
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000998 /* This is a PEP 3147 path. Start by copying everything from the
999 start of pathname up to and including the leftmost slash. Then
1000 copy the file's basename, removing the magic tag and adding a .py
1001 suffix.
1002 */
1003 strncpy(buf, pathname, (i=left-pathname));
1004 strncpy(buf+i, right+1, (j=dot0-right));
1005 strcpy(buf+i+j, "py");
1006 return buf;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001007}
1008
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001009/* Given a pathname for a Python source file, its time of last
1010 modification, and a pathname for a compiled file, check whether the
1011 compiled file represents the same version of the source. If so,
1012 return a FILE pointer for the compiled file, positioned just after
1013 the header; if not, return NULL.
1014 Doesn't set an exception. */
1015
1016static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001017check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001018{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001019 FILE *fp;
1020 long magic;
1021 long pyc_mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001022
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001023 fp = fopen(cpathname, "rb");
1024 if (fp == NULL)
1025 return NULL;
1026 magic = PyMarshal_ReadLongFromFile(fp);
1027 if (magic != pyc_magic) {
1028 if (Py_VerboseFlag)
1029 PySys_WriteStderr("# %s has bad magic\n", cpathname);
1030 fclose(fp);
1031 return NULL;
1032 }
1033 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
1034 if (pyc_mtime != mtime) {
1035 if (Py_VerboseFlag)
1036 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
1037 fclose(fp);
1038 return NULL;
1039 }
1040 if (Py_VerboseFlag)
1041 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
1042 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001043}
1044
1045
1046/* Read a code object from a file and check it for validity */
1047
Guido van Rossum79f25d91997-04-29 20:08:16 +00001048static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001049read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001050{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001051 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001052
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001053 co = PyMarshal_ReadLastObjectFromFile(fp);
1054 if (co == NULL)
1055 return NULL;
1056 if (!PyCode_Check(co)) {
1057 PyErr_Format(PyExc_ImportError,
1058 "Non-code object in %.200s", cpathname);
1059 Py_DECREF(co);
1060 return NULL;
1061 }
1062 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001063}
1064
1065
1066/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001067 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001068
Guido van Rossum79f25d91997-04-29 20:08:16 +00001069static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001070load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001071{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001072 long magic;
1073 PyCodeObject *co;
1074 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001075
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001076 magic = PyMarshal_ReadLongFromFile(fp);
1077 if (magic != pyc_magic) {
1078 PyErr_Format(PyExc_ImportError,
1079 "Bad magic number in %.200s", cpathname);
1080 return NULL;
1081 }
1082 (void) PyMarshal_ReadLongFromFile(fp);
1083 co = read_compiled_module(cpathname, fp);
1084 if (co == NULL)
1085 return NULL;
1086 if (Py_VerboseFlag)
1087 PySys_WriteStderr("import %s # precompiled from %s\n",
1088 name, cpathname);
1089 m = PyImport_ExecCodeModuleWithPathnames(
1090 name, (PyObject *)co, cpathname, cpathname);
1091 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001092
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001093 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001094}
1095
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001096/* Parse a source file and return the corresponding code object */
1097
Guido van Rossum79f25d91997-04-29 20:08:16 +00001098static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001099parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001100{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001101 PyCodeObject *co = NULL;
1102 mod_ty mod;
1103 PyCompilerFlags flags;
1104 PyArena *arena = PyArena_New();
1105 if (arena == NULL)
1106 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001107
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001108 flags.cf_flags = 0;
1109 mod = PyParser_ASTFromFile(fp, pathname, NULL,
1110 Py_file_input, 0, 0, &flags,
1111 NULL, arena);
1112 if (mod) {
1113 co = PyAST_Compile(mod, pathname, NULL, arena);
1114 }
1115 PyArena_Free(arena);
1116 return co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001117}
1118
1119
Guido van Rossum55a83382000-09-20 20:31:38 +00001120/* Helper to open a bytecode file for writing in exclusive mode */
1121
1122static FILE *
Christian Heimes05e8be12008-02-23 18:30:17 +00001123open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +00001124{
1125#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001126 /* Use O_EXCL to avoid a race condition when another process tries to
1127 write the same file. When that happens, our open() call fails,
1128 which is just fine (since it's only a cache).
1129 XXX If the file exists and is writable but the directory is not
1130 writable, the file will never be written. Oh well.
1131 */
1132 int fd;
1133 (void) unlink(filename);
1134 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
Tim Peters42c83af2000-09-29 04:03:10 +00001135#ifdef O_BINARY
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001136 |O_BINARY /* necessary for Windows */
Tim Peters42c83af2000-09-29 04:03:10 +00001137#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001138#ifdef __VMS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001139 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001140#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001141 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001142#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001143 );
1144 if (fd < 0)
1145 return NULL;
1146 return fdopen(fd, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001147#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001148 /* Best we can do -- on Windows this can't happen anyway */
1149 return fopen(filename, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001150#endif
1151}
1152
1153
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001154/* Write a compiled module to a file, placing the time of last
1155 modification of its source into the header.
1156 Errors are ignored, if a write error occurs an attempt is made to
1157 remove the file. */
1158
1159static void
Christian Heimes05e8be12008-02-23 18:30:17 +00001160write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001161{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001162 FILE *fp;
1163 char *dirpath;
1164 time_t mtime = srcstat->st_mtime;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001165#ifdef MS_WINDOWS /* since Windows uses different permissions */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001166 mode_t mode = srcstat->st_mode & ~S_IEXEC;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001167#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001168 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
1169 mode_t dirmode = (srcstat->st_mode |
1170 S_IXUSR | S_IXGRP | S_IXOTH |
1171 S_IWUSR | S_IWGRP | S_IWOTH);
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001172#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001173 int saved;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001174
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001175 /* Ensure that the __pycache__ directory exists. */
1176 dirpath = rightmost_sep(cpathname);
1177 if (dirpath == NULL) {
1178 if (Py_VerboseFlag)
1179 PySys_WriteStderr(
1180 "# no %s path found %s\n",
1181 CACHEDIR, cpathname);
1182 return;
1183 }
1184 saved = *dirpath;
1185 *dirpath = '\0';
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001186
1187#ifdef MS_WINDOWS
1188 if (_mkdir(cpathname) < 0 && errno != EEXIST) {
1189#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001190 if (mkdir(cpathname, dirmode) < 0 && errno != EEXIST) {
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001191#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001192 *dirpath = saved;
1193 if (Py_VerboseFlag)
1194 PySys_WriteStderr(
1195 "# cannot create cache dir %s\n", cpathname);
1196 return;
1197 }
1198 *dirpath = saved;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001199
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001200 fp = open_exclusive(cpathname, mode);
1201 if (fp == NULL) {
1202 if (Py_VerboseFlag)
1203 PySys_WriteStderr(
1204 "# can't create %s\n", cpathname);
1205 return;
1206 }
1207 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
1208 /* First write a 0 for mtime */
1209 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
1210 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
1211 if (fflush(fp) != 0 || ferror(fp)) {
1212 if (Py_VerboseFlag)
1213 PySys_WriteStderr("# can't write %s\n", cpathname);
1214 /* Don't keep partial file */
1215 fclose(fp);
1216 (void) unlink(cpathname);
1217 return;
1218 }
1219 /* Now write the true mtime */
1220 fseek(fp, 4L, 0);
1221 assert(mtime < LONG_MAX);
1222 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
1223 fflush(fp);
1224 fclose(fp);
1225 if (Py_VerboseFlag)
1226 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001227}
1228
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001229static void
1230update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
1231{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001232 PyObject *constants, *tmp;
1233 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001234
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001235 if (PyUnicode_Compare(co->co_filename, oldname))
1236 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001237
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001238 tmp = co->co_filename;
1239 co->co_filename = newname;
1240 Py_INCREF(co->co_filename);
1241 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001242
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001243 constants = co->co_consts;
1244 n = PyTuple_GET_SIZE(constants);
1245 for (i = 0; i < n; i++) {
1246 tmp = PyTuple_GET_ITEM(constants, i);
1247 if (PyCode_Check(tmp))
1248 update_code_filenames((PyCodeObject *)tmp,
1249 oldname, newname);
1250 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001251}
1252
1253static int
1254update_compiled_module(PyCodeObject *co, char *pathname)
1255{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001256 PyObject *oldname, *newname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001257
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001258 newname = PyUnicode_DecodeFSDefault(pathname);
1259 if (newname == NULL)
1260 return -1;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001261
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001262 if (!PyUnicode_Compare(co->co_filename, newname)) {
1263 Py_DECREF(newname);
1264 return 0;
1265 }
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +00001266
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001267 oldname = co->co_filename;
1268 Py_INCREF(oldname);
1269 update_code_filenames(co, oldname, newname);
1270 Py_DECREF(oldname);
1271 Py_DECREF(newname);
1272 return 1;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001273}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001274
1275/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001276 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
1277 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001278
Guido van Rossum79f25d91997-04-29 20:08:16 +00001279static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001280load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001281{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001282 struct stat st;
1283 FILE *fpc;
1284 char buf[MAXPATHLEN+1];
1285 char *cpathname;
1286 PyCodeObject *co;
1287 PyObject *m;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001288
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001289 if (fstat(fileno(fp), &st) != 0) {
1290 PyErr_Format(PyExc_RuntimeError,
1291 "unable to get file status from '%s'",
1292 pathname);
1293 return NULL;
1294 }
Fred Drake4c82b232000-06-30 16:18:57 +00001295#if SIZEOF_TIME_T > 4
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001296 /* Python's .pyc timestamp handling presumes that the timestamp fits
1297 in 4 bytes. This will be fine until sometime in the year 2038,
1298 when a 4-byte signed time_t will overflow.
1299 */
1300 if (st.st_mtime >> 32) {
1301 PyErr_SetString(PyExc_OverflowError,
1302 "modification time overflows a 4 byte field");
1303 return NULL;
1304 }
Fred Drake4c82b232000-06-30 16:18:57 +00001305#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001306 cpathname = make_compiled_pathname(
1307 pathname, buf, (size_t)MAXPATHLEN + 1, !Py_OptimizeFlag);
1308 if (cpathname != NULL &&
1309 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
1310 co = read_compiled_module(cpathname, fpc);
1311 fclose(fpc);
1312 if (co == NULL)
1313 return NULL;
1314 if (update_compiled_module(co, pathname) < 0)
1315 return NULL;
1316 if (Py_VerboseFlag)
1317 PySys_WriteStderr("import %s # precompiled from %s\n",
1318 name, cpathname);
1319 pathname = cpathname;
1320 }
1321 else {
1322 co = parse_source_module(pathname, fp);
1323 if (co == NULL)
1324 return NULL;
1325 if (Py_VerboseFlag)
1326 PySys_WriteStderr("import %s # from %s\n",
1327 name, pathname);
1328 if (cpathname) {
1329 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1330 if (ro == NULL || !PyObject_IsTrue(ro))
1331 write_compiled_module(co, cpathname, &st);
1332 }
1333 }
1334 m = PyImport_ExecCodeModuleWithPathnames(
1335 name, (PyObject *)co, pathname, cpathname);
1336 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001337
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001338 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001339}
1340
Christian Heimes3b06e532008-01-07 20:12:44 +00001341/* Get source file -> unicode or None
1342 * Returns the path to the py file if available, else the given path
1343 */
1344static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00001345get_sourcefile(char *file)
Christian Heimes3b06e532008-01-07 20:12:44 +00001346{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001347 char py[MAXPATHLEN + 1];
1348 Py_ssize_t len;
1349 PyObject *u;
1350 struct stat statbuf;
Christian Heimes3b06e532008-01-07 20:12:44 +00001351
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001352 if (!file || !*file) {
1353 Py_RETURN_NONE;
1354 }
Christian Heimes3b06e532008-01-07 20:12:44 +00001355
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001356 len = strlen(file);
1357 /* match '*.py?' */
1358 if (len > MAXPATHLEN || PyOS_strnicmp(&file[len-4], ".py", 3) != 0) {
1359 return PyUnicode_DecodeFSDefault(file);
1360 }
Christian Heimes3b06e532008-01-07 20:12:44 +00001361
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001362 /* Start by trying to turn PEP 3147 path into source path. If that
1363 * fails, just chop off the trailing character, i.e. legacy pyc path
1364 * to py.
1365 */
1366 if (make_source_pathname(file, py) == NULL) {
1367 strncpy(py, file, len-1);
1368 py[len-1] = '\0';
1369 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00001370
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001371 if (stat(py, &statbuf) == 0 &&
1372 S_ISREG(statbuf.st_mode)) {
1373 u = PyUnicode_DecodeFSDefault(py);
1374 }
1375 else {
1376 u = PyUnicode_DecodeFSDefault(file);
1377 }
1378 return u;
Christian Heimes3b06e532008-01-07 20:12:44 +00001379}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001380
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001381/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001382static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1383static struct filedescr *find_module(char *, char *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001384 char *, size_t, FILE **, PyObject **);
Christian Heimes3b06e532008-01-07 20:12:44 +00001385static struct _frozen * find_frozen(char *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001386
1387/* Load a package and return its module object WITH INCREMENTED
1388 REFERENCE COUNT */
1389
1390static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001391load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001392{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001393 PyObject *m, *d;
1394 PyObject *file = NULL;
1395 PyObject *path = NULL;
1396 int err;
1397 char buf[MAXPATHLEN+1];
1398 FILE *fp = NULL;
1399 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001401 m = PyImport_AddModule(name);
1402 if (m == NULL)
1403 return NULL;
1404 if (Py_VerboseFlag)
1405 PySys_WriteStderr("import %s # directory %s\n",
1406 name, pathname);
1407 d = PyModule_GetDict(m);
1408 file = get_sourcefile(pathname);
1409 if (file == NULL)
1410 goto error;
1411 path = Py_BuildValue("[O]", file);
1412 if (path == NULL)
1413 goto error;
1414 err = PyDict_SetItemString(d, "__file__", file);
1415 if (err == 0)
1416 err = PyDict_SetItemString(d, "__path__", path);
1417 if (err != 0)
1418 goto error;
1419 buf[0] = '\0';
1420 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
1421 if (fdp == NULL) {
1422 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1423 PyErr_Clear();
1424 Py_INCREF(m);
1425 }
1426 else
1427 m = NULL;
1428 goto cleanup;
1429 }
1430 m = load_module(name, fp, buf, fdp->type, NULL);
1431 if (fp != NULL)
1432 fclose(fp);
1433 goto cleanup;
Tim Peters1cd70172004-08-02 03:52:12 +00001434
1435 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001436 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001437 cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001438 Py_XDECREF(path);
1439 Py_XDECREF(file);
1440 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001441}
1442
1443
1444/* Helper to test for built-in module */
1445
1446static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001447is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001448{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001449 int i;
1450 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1451 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1452 if (PyImport_Inittab[i].initfunc == NULL)
1453 return -1;
1454 else
1455 return 1;
1456 }
1457 }
1458 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001459}
1460
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001461
Just van Rossum52e14d62002-12-30 22:08:05 +00001462/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1463 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001464 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001465 that can handle the path item. Return None if no hook could;
1466 this tells our caller it should fall back to the builtin
1467 import mechanism. Cache the result in path_importer_cache.
1468 Returns a borrowed reference. */
1469
1470static PyObject *
1471get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001472 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001473{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001474 PyObject *importer;
1475 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001476
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001477 /* These conditions are the caller's responsibility: */
1478 assert(PyList_Check(path_hooks));
1479 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001480
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001481 nhooks = PyList_Size(path_hooks);
1482 if (nhooks < 0)
1483 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001484
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001485 importer = PyDict_GetItem(path_importer_cache, p);
1486 if (importer != NULL)
1487 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001488
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001489 /* set path_importer_cache[p] to None to avoid recursion */
1490 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1491 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001492
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001493 for (j = 0; j < nhooks; j++) {
1494 PyObject *hook = PyList_GetItem(path_hooks, j);
1495 if (hook == NULL)
1496 return NULL;
1497 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1498 if (importer != NULL)
1499 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001500
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001501 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1502 return NULL;
1503 }
1504 PyErr_Clear();
1505 }
1506 if (importer == NULL) {
1507 importer = PyObject_CallFunctionObjArgs(
1508 (PyObject *)&PyNullImporter_Type, p, NULL
1509 );
1510 if (importer == NULL) {
1511 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1512 PyErr_Clear();
1513 return Py_None;
1514 }
1515 }
1516 }
1517 if (importer != NULL) {
1518 int err = PyDict_SetItem(path_importer_cache, p, importer);
1519 Py_DECREF(importer);
1520 if (err != 0)
1521 return NULL;
1522 }
1523 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001524}
1525
Christian Heimes9cd17752007-11-18 19:35:23 +00001526PyAPI_FUNC(PyObject *)
1527PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001528 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001529
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001530 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1531 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1532 importer = get_path_importer(path_importer_cache,
1533 path_hooks, path);
1534 }
1535 }
1536 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1537 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001538}
1539
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001540/* Search the path (default sys.path) for a module. Return the
1541 corresponding filedescr struct, and (via return arguments) the
1542 pathname and an open file. Return NULL if the module is not found. */
1543
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001544#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001545extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001546 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001547#endif
1548
Martin v. Löwis18e16552006-02-15 17:27:45 +00001549static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001550static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001551static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001552
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001553static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001554find_module(char *fullname, char *subname, PyObject *path, char *buf,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001555 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001556{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001557 Py_ssize_t i, npath;
1558 size_t len, namelen;
1559 struct filedescr *fdp = NULL;
1560 char *filemode;
1561 FILE *fp = NULL;
1562 PyObject *path_hooks, *path_importer_cache;
1563 struct stat statbuf;
1564 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1565 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1566 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
1567 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001568#if defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001569 size_t saved_len;
1570 size_t saved_namelen;
1571 char *saved_buf = NULL;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001572#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001573 if (p_loader != NULL)
1574 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001575
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001576 if (strlen(subname) > MAXPATHLEN) {
1577 PyErr_SetString(PyExc_OverflowError,
1578 "module name is too long");
1579 return NULL;
1580 }
1581 strcpy(name, subname);
Just van Rossum52e14d62002-12-30 22:08:05 +00001582
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001583 /* sys.meta_path import hook */
1584 if (p_loader != NULL) {
1585 PyObject *meta_path;
Just van Rossum52e14d62002-12-30 22:08:05 +00001586
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001587 meta_path = PySys_GetObject("meta_path");
1588 if (meta_path == NULL || !PyList_Check(meta_path)) {
1589 PyErr_SetString(PyExc_ImportError,
1590 "sys.meta_path must be a list of "
1591 "import hooks");
1592 return NULL;
1593 }
1594 Py_INCREF(meta_path); /* zap guard */
1595 npath = PyList_Size(meta_path);
1596 for (i = 0; i < npath; i++) {
1597 PyObject *loader;
1598 PyObject *hook = PyList_GetItem(meta_path, i);
1599 loader = PyObject_CallMethod(hook, "find_module",
1600 "sO", fullname,
1601 path != NULL ?
1602 path : Py_None);
1603 if (loader == NULL) {
1604 Py_DECREF(meta_path);
1605 return NULL; /* true error */
1606 }
1607 if (loader != Py_None) {
1608 /* a loader was found */
1609 *p_loader = loader;
1610 Py_DECREF(meta_path);
1611 return &importhookdescr;
1612 }
1613 Py_DECREF(loader);
1614 }
1615 Py_DECREF(meta_path);
1616 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001617
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001618 if (find_frozen(fullname) != NULL) {
1619 strcpy(buf, fullname);
1620 return &fd_frozen;
1621 }
Benjamin Petersond968e272008-11-05 22:48:33 +00001622
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001623 if (path == NULL) {
1624 if (is_builtin(name)) {
1625 strcpy(buf, name);
1626 return &fd_builtin;
1627 }
Guido van Rossumac279101996-08-22 23:10:58 +00001628#ifdef MS_COREDLL
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001629 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1630 if (fp != NULL) {
1631 *p_fp = fp;
1632 return fdp;
1633 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001634#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001635 path = PySys_GetObject("path");
1636 }
Benjamin Petersond968e272008-11-05 22:48:33 +00001637
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001638 if (path == NULL || !PyList_Check(path)) {
1639 PyErr_SetString(PyExc_ImportError,
1640 "sys.path must be a list of directory names");
1641 return NULL;
1642 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001643
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001644 path_hooks = PySys_GetObject("path_hooks");
1645 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1646 PyErr_SetString(PyExc_ImportError,
1647 "sys.path_hooks must be a list of "
1648 "import hooks");
1649 return NULL;
1650 }
1651 path_importer_cache = PySys_GetObject("path_importer_cache");
1652 if (path_importer_cache == NULL ||
1653 !PyDict_Check(path_importer_cache)) {
1654 PyErr_SetString(PyExc_ImportError,
1655 "sys.path_importer_cache must be a dict");
1656 return NULL;
1657 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001658
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001659 npath = PyList_Size(path);
1660 namelen = strlen(name);
1661 for (i = 0; i < npath; i++) {
1662 PyObject *v = PyList_GetItem(path, i);
1663 PyObject *origv = v;
1664 const char *base;
1665 Py_ssize_t size;
1666 if (!v)
1667 return NULL;
1668 if (PyUnicode_Check(v)) {
Victor Stinnerae6265f2010-05-15 16:27:27 +00001669 v = PyUnicode_EncodeFSDefault(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001670 if (v == NULL)
1671 return NULL;
1672 }
1673 else if (!PyBytes_Check(v))
1674 continue;
1675 else
1676 Py_INCREF(v);
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001677
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001678 base = PyBytes_AS_STRING(v);
1679 size = PyBytes_GET_SIZE(v);
1680 len = size;
1681 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1682 Py_DECREF(v);
1683 continue; /* Too long */
1684 }
1685 strcpy(buf, base);
1686 Py_DECREF(v);
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001687
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001688 if (strlen(buf) != len) {
1689 continue; /* v contains '\0' */
1690 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001691
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001692 /* sys.path_hooks import hook */
1693 if (p_loader != NULL) {
1694 PyObject *importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001695
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001696 importer = get_path_importer(path_importer_cache,
1697 path_hooks, origv);
1698 if (importer == NULL) {
1699 return NULL;
1700 }
1701 /* Note: importer is a borrowed reference */
1702 if (importer != Py_None) {
1703 PyObject *loader;
1704 loader = PyObject_CallMethod(importer,
1705 "find_module",
1706 "s", fullname);
1707 if (loader == NULL)
1708 return NULL; /* error */
1709 if (loader != Py_None) {
1710 /* a loader was found */
1711 *p_loader = loader;
1712 return &importhookdescr;
1713 }
1714 Py_DECREF(loader);
1715 continue;
1716 }
1717 }
1718 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001719
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001720 if (len > 0 && buf[len-1] != SEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001721#ifdef ALTSEP
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001722 && buf[len-1] != ALTSEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001723#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001724 )
1725 buf[len++] = SEP;
1726 strcpy(buf+len, name);
1727 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001728
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001729 /* Check for package import (buf holds a directory name,
1730 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001731#ifdef HAVE_STAT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001732 if (stat(buf, &statbuf) == 0 && /* it exists */
1733 S_ISDIR(statbuf.st_mode) && /* it's a directory */
1734 case_ok(buf, len, namelen, name)) { /* case matches */
1735 if (find_init_module(buf)) { /* and has __init__.py */
1736 return &fd_package;
1737 }
1738 else {
1739 char warnstr[MAXPATHLEN+80];
1740 sprintf(warnstr, "Not importing directory "
1741 "'%.*s': missing __init__.py",
1742 MAXPATHLEN, buf);
1743 if (PyErr_WarnEx(PyExc_ImportWarning,
1744 warnstr, 1)) {
1745 return NULL;
1746 }
1747 }
1748 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001749#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001750#if defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001751 /* take a snapshot of the module spec for restoration
1752 * after the 8 character DLL hackery
1753 */
1754 saved_buf = strdup(buf);
1755 saved_len = len;
1756 saved_namelen = namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001757#endif /* PYOS_OS2 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001758 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Guido van Rossum04110fb2007-08-24 16:32:05 +00001759#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001760 /* OS/2 limits DLLs to 8 character names (w/o
1761 extension)
1762 * so if the name is longer than that and its a
1763 * dynamically loaded module we're going to try,
1764 * truncate the name before trying
1765 */
1766 if (strlen(subname) > 8) {
1767 /* is this an attempt to load a C extension? */
1768 const struct filedescr *scan;
1769 scan = _PyImport_DynLoadFiletab;
1770 while (scan->suffix != NULL) {
1771 if (!strcmp(scan->suffix, fdp->suffix))
1772 break;
1773 else
1774 scan++;
1775 }
1776 if (scan->suffix != NULL) {
1777 /* yes, so truncate the name */
1778 namelen = 8;
1779 len -= strlen(subname) - namelen;
1780 buf[len] = '\0';
1781 }
1782 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001783#endif /* PYOS_OS2 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001784 strcpy(buf+len, fdp->suffix);
1785 if (Py_VerboseFlag > 1)
1786 PySys_WriteStderr("# trying %s\n", buf);
1787 filemode = fdp->mode;
1788 if (filemode[0] == 'U')
1789 filemode = "r" PY_STDIOTEXTMODE;
1790 fp = fopen(buf, filemode);
1791 if (fp != NULL) {
1792 if (case_ok(buf, len, namelen, name))
1793 break;
1794 else { /* continue search */
1795 fclose(fp);
1796 fp = NULL;
1797 }
1798 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001799#if defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001800 /* restore the saved snapshot */
1801 strcpy(buf, saved_buf);
1802 len = saved_len;
1803 namelen = saved_namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001804#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001805 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001806#if defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001807 /* don't need/want the module name snapshot anymore */
1808 if (saved_buf)
1809 {
1810 free(saved_buf);
1811 saved_buf = NULL;
1812 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001813#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001814 if (fp != NULL)
1815 break;
1816 }
1817 if (fp == NULL) {
1818 PyErr_Format(PyExc_ImportError,
1819 "No module named %.200s", name);
1820 return NULL;
1821 }
1822 *p_fp = fp;
1823 return fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001824}
1825
Martin v. Löwis18e16552006-02-15 17:27:45 +00001826/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001827 * The arguments here are tricky, best shown by example:
1828 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1829 * ^ ^ ^ ^
1830 * |--------------------- buf ---------------------|
1831 * |------------------- len ------------------|
1832 * |------ name -------|
1833 * |----- namelen -----|
1834 * buf is the full path, but len only counts up to (& exclusive of) the
1835 * extension. name is the module name, also exclusive of extension.
1836 *
1837 * We've already done a successful stat() or fopen() on buf, so know that
1838 * there's some match, possibly case-insensitive.
1839 *
Tim Peters50d8d372001-02-28 05:34:27 +00001840 * case_ok() is to return 1 if there's a case-sensitive match for
1841 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1842 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001843 *
Tim Peters50d8d372001-02-28 05:34:27 +00001844 * case_ok() is used to implement case-sensitive import semantics even
1845 * on platforms with case-insensitive filesystems. It's trivial to implement
1846 * for case-sensitive filesystems. It's pretty much a cross-platform
1847 * nightmare for systems with case-insensitive filesystems.
1848 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001849
Tim Peters50d8d372001-02-28 05:34:27 +00001850/* First we may need a pile of platform-specific header files; the sequence
1851 * of #if's here should match the sequence in the body of case_ok().
1852 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001853#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001854#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001855
Tim Peters50d8d372001-02-28 05:34:27 +00001856#elif defined(DJGPP)
1857#include <dir.h>
1858
Jason Tishler7961aa62005-05-20 00:56:54 +00001859#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001860#include <sys/types.h>
1861#include <dirent.h>
1862
Andrew MacIntyred9400542002-02-26 11:41:34 +00001863#elif defined(PYOS_OS2)
1864#define INCL_DOS
1865#define INCL_DOSERRORS
1866#define INCL_NOPMAPI
1867#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00001868#endif
1869
Guido van Rossum0980bd91998-02-13 17:18:36 +00001870static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001871case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001872{
Tim Peters50d8d372001-02-28 05:34:27 +00001873/* Pick a platform-specific implementation; the sequence of #if's here should
1874 * match the sequence just above.
1875 */
1876
Jason Tishler7961aa62005-05-20 00:56:54 +00001877/* MS_WINDOWS */
1878#if defined(MS_WINDOWS)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001879 WIN32_FIND_DATA data;
1880 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001881
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001882 if (Py_GETENV("PYTHONCASEOK") != NULL)
1883 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001884
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001885 h = FindFirstFile(buf, &data);
1886 if (h == INVALID_HANDLE_VALUE) {
1887 PyErr_Format(PyExc_NameError,
1888 "Can't find file for module %.100s\n(filename %.300s)",
1889 name, buf);
1890 return 0;
1891 }
1892 FindClose(h);
1893 return strncmp(data.cFileName, name, namelen) == 0;
Tim Peters50d8d372001-02-28 05:34:27 +00001894
1895/* DJGPP */
1896#elif defined(DJGPP)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001897 struct ffblk ffblk;
1898 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00001899
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 if (Py_GETENV("PYTHONCASEOK") != NULL)
1901 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001902
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001903 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1904 if (done) {
1905 PyErr_Format(PyExc_NameError,
1906 "Can't find file for module %.100s\n(filename %.300s)",
1907 name, buf);
1908 return 0;
1909 }
1910 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001911
Jason Tishler7961aa62005-05-20 00:56:54 +00001912/* new-fangled macintosh (macosx) or Cygwin */
1913#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001914 DIR *dirp;
1915 struct dirent *dp;
1916 char dirname[MAXPATHLEN + 1];
1917 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001918
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001919 if (Py_GETENV("PYTHONCASEOK") != NULL)
1920 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001921
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001922 /* Copy the dir component into dirname; substitute "." if empty */
1923 if (dirlen <= 0) {
1924 dirname[0] = '.';
1925 dirname[1] = '\0';
1926 }
1927 else {
1928 assert(dirlen <= MAXPATHLEN);
1929 memcpy(dirname, buf, dirlen);
1930 dirname[dirlen] = '\0';
1931 }
1932 /* Open the directory and search the entries for an exact match. */
1933 dirp = opendir(dirname);
1934 if (dirp) {
1935 char *nameWithExt = buf + len - namelen;
1936 while ((dp = readdir(dirp)) != NULL) {
1937 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001938#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001939 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001940#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001941 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001942#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001943 if (thislen >= namelen &&
1944 strcmp(dp->d_name, nameWithExt) == 0) {
1945 (void)closedir(dirp);
1946 return 1; /* Found */
1947 }
1948 }
1949 (void)closedir(dirp);
1950 }
1951 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001952
Andrew MacIntyred9400542002-02-26 11:41:34 +00001953/* OS/2 */
1954#elif defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001955 HDIR hdir = 1;
1956 ULONG srchcnt = 1;
1957 FILEFINDBUF3 ffbuf;
1958 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001959
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001960 if (Py_GETENV("PYTHONCASEOK") != NULL)
1961 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001962
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001963 rc = DosFindFirst(buf,
1964 &hdir,
1965 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1966 &ffbuf, sizeof(ffbuf),
1967 &srchcnt,
1968 FIL_STANDARD);
1969 if (rc != NO_ERROR)
1970 return 0;
1971 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001972
Tim Peters50d8d372001-02-28 05:34:27 +00001973/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1974#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001975 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001976
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001977#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001978}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001979
Guido van Rossum197346f1997-10-31 18:38:52 +00001980#ifdef HAVE_STAT
Victor Stinner4f4402c2010-08-14 14:50:26 +00001981
Guido van Rossum197346f1997-10-31 18:38:52 +00001982/* Helper to look for __init__.py or __init__.py[co] in potential package */
1983static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001984find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001985{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001986 const size_t save_len = strlen(buf);
1987 size_t i = save_len;
1988 char *pname; /* pointer to start of __init__ */
1989 struct stat statbuf;
Guido van Rossum197346f1997-10-31 18:38:52 +00001990
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001991/* For calling case_ok(buf, len, namelen, name):
1992 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1993 * ^ ^ ^ ^
1994 * |--------------------- buf ---------------------|
1995 * |------------------- len ------------------|
1996 * |------ name -------|
1997 * |----- namelen -----|
Tim Peters0f9431f2001-07-05 03:47:53 +00001998 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001999 if (save_len + 13 >= MAXPATHLEN)
2000 return 0;
2001 buf[i++] = SEP;
2002 pname = buf + i;
2003 strcpy(pname, "__init__.py");
2004 if (stat(buf, &statbuf) == 0) {
2005 if (case_ok(buf,
2006 save_len + 9, /* len("/__init__") */
2007 8, /* len("__init__") */
2008 pname)) {
2009 buf[save_len] = '\0';
2010 return 1;
2011 }
2012 }
2013 i += strlen(pname);
2014 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
2015 if (stat(buf, &statbuf) == 0) {
2016 if (case_ok(buf,
2017 save_len + 9, /* len("/__init__") */
2018 8, /* len("__init__") */
2019 pname)) {
2020 buf[save_len] = '\0';
2021 return 1;
2022 }
2023 }
2024 buf[save_len] = '\0';
2025 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00002026}
Guido van Rossum48a680c2001-03-02 06:34:14 +00002027
Guido van Rossum197346f1997-10-31 18:38:52 +00002028#endif /* HAVE_STAT */
2029
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002030
Tim Petersdbd9ba62000-07-09 03:09:57 +00002031static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002032
Victor Stinner44c6c152010-08-09 00:59:10 +00002033static PyObject*
2034load_builtin(char *name, char *pathname, int type)
2035{
2036 PyObject *m, *modules;
2037 int err;
2038
2039 if (pathname != NULL && pathname[0] != '\0')
2040 name = pathname;
2041
2042 if (type == C_BUILTIN)
2043 err = init_builtin(name);
2044 else
2045 err = PyImport_ImportFrozenModule(name);
2046 if (err < 0)
2047 return NULL;
2048 if (err == 0) {
2049 PyErr_Format(PyExc_ImportError,
2050 "Purported %s module %.200s not found",
2051 type == C_BUILTIN ?
2052 "builtin" : "frozen",
2053 name);
2054 return NULL;
2055 }
2056
2057 modules = PyImport_GetModuleDict();
2058 m = PyDict_GetItemString(modules, name);
2059 if (m == NULL) {
2060 PyErr_Format(
2061 PyExc_ImportError,
2062 "%s module %.200s not properly initialized",
2063 type == C_BUILTIN ?
2064 "builtin" : "frozen",
2065 name);
2066 return NULL;
2067 }
2068 Py_INCREF(m);
2069 return m;
2070}
2071
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002072/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002073 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002074
Guido van Rossum79f25d91997-04-29 20:08:16 +00002075static PyObject *
Alexandre Vassalottie223eb82009-07-29 20:12:15 +00002076load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002077{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002078 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002079
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002080 /* First check that there's an open file (if we need one) */
2081 switch (type) {
2082 case PY_SOURCE:
2083 case PY_COMPILED:
2084 if (fp == NULL) {
2085 PyErr_Format(PyExc_ValueError,
2086 "file object required for import (type code %d)",
2087 type);
2088 return NULL;
2089 }
2090 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002091
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002092 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002093
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002094 case PY_SOURCE:
2095 m = load_source_module(name, pathname, fp);
2096 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002097
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002098 case PY_COMPILED:
2099 m = load_compiled_module(name, pathname, fp);
2100 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002101
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002102#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002103 case C_EXTENSION:
2104 m = _PyImport_LoadDynamicModule(name, pathname, fp);
2105 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002106#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002107
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002108 case PKG_DIRECTORY:
2109 m = load_package(name, pathname);
2110 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002111
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002112 case C_BUILTIN:
2113 case PY_FROZEN:
Victor Stinner44c6c152010-08-09 00:59:10 +00002114 m = load_builtin(name, pathname, type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002115 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002116
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002117 case IMP_HOOK: {
2118 if (loader == NULL) {
2119 PyErr_SetString(PyExc_ImportError,
2120 "import hook without loader");
2121 return NULL;
2122 }
2123 m = PyObject_CallMethod(loader, "load_module", "s", name);
2124 break;
2125 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002126
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002127 default:
2128 PyErr_Format(PyExc_ImportError,
2129 "Don't know how to import %.200s (type code %d)",
2130 name, type);
2131 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002132
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002133 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002134
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002135 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002136}
2137
2138
2139/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00002140 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002141 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002142
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002143static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002144init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002145{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002146 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002147
Victor Stinner49d3f252010-10-17 01:24:53 +00002148 if (_PyImport_FindBuiltin(name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002149 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002150
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002151 for (p = PyImport_Inittab; p->name != NULL; p++) {
2152 PyObject *mod;
2153 if (strcmp(name, p->name) == 0) {
2154 if (p->initfunc == NULL) {
2155 PyErr_Format(PyExc_ImportError,
2156 "Cannot re-init internal module %.200s",
2157 name);
2158 return -1;
2159 }
2160 if (Py_VerboseFlag)
2161 PySys_WriteStderr("import %s # builtin\n", name);
2162 mod = (*p->initfunc)();
2163 if (mod == 0)
2164 return -1;
Victor Stinner49d3f252010-10-17 01:24:53 +00002165 if (_PyImport_FixupBuiltin(mod, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002166 return -1;
2167 /* FixupExtension has put the module into sys.modules,
2168 so we can release our own reference. */
2169 Py_DECREF(mod);
2170 return 1;
2171 }
2172 }
2173 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002174}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002175
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002176
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002177/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002178
Guido van Rossumcfd0a221996-06-17 17:06:34 +00002179static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002180find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002181{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002182 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002183
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002184 if (!name)
2185 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00002186
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002187 for (p = PyImport_FrozenModules; ; p++) {
2188 if (p->name == NULL)
2189 return NULL;
2190 if (strcmp(p->name, name) == 0)
2191 break;
2192 }
2193 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002194}
2195
Guido van Rossum79f25d91997-04-29 20:08:16 +00002196static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002197get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002198{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002199 struct _frozen *p = find_frozen(name);
2200 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002201
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002202 if (p == NULL) {
2203 PyErr_Format(PyExc_ImportError,
2204 "No such frozen object named %.200s",
2205 name);
2206 return NULL;
2207 }
2208 if (p->code == NULL) {
2209 PyErr_Format(PyExc_ImportError,
2210 "Excluded frozen object named %.200s",
2211 name);
2212 return NULL;
2213 }
2214 size = p->size;
2215 if (size < 0)
2216 size = -size;
2217 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002218}
2219
Brett Cannon8d110132009-03-15 02:20:16 +00002220static PyObject *
2221is_frozen_package(char *name)
2222{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002223 struct _frozen *p = find_frozen(name);
2224 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00002225
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002226 if (p == NULL) {
2227 PyErr_Format(PyExc_ImportError,
2228 "No such frozen object named %.200s",
2229 name);
2230 return NULL;
2231 }
Brett Cannon8d110132009-03-15 02:20:16 +00002232
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002233 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00002234
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002235 if (size < 0)
2236 Py_RETURN_TRUE;
2237 else
2238 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00002239}
2240
2241
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002242/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00002243 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002244 an exception set if the initialization failed.
2245 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002246
2247int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002248PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002249{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002250 struct _frozen *p = find_frozen(name);
2251 PyObject *co;
2252 PyObject *m;
2253 int ispackage;
2254 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002255
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002256 if (p == NULL)
2257 return 0;
2258 if (p->code == NULL) {
2259 PyErr_Format(PyExc_ImportError,
2260 "Excluded frozen object named %.200s",
2261 name);
2262 return -1;
2263 }
2264 size = p->size;
2265 ispackage = (size < 0);
2266 if (ispackage)
2267 size = -size;
2268 if (Py_VerboseFlag)
2269 PySys_WriteStderr("import %s # frozen%s\n",
2270 name, ispackage ? " package" : "");
2271 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2272 if (co == NULL)
2273 return -1;
2274 if (!PyCode_Check(co)) {
2275 PyErr_Format(PyExc_TypeError,
2276 "frozen object %.200s is not a code object",
2277 name);
2278 goto err_return;
2279 }
2280 if (ispackage) {
2281 /* Set __path__ to the package name */
2282 PyObject *d, *s, *l;
2283 int err;
2284 m = PyImport_AddModule(name);
2285 if (m == NULL)
2286 goto err_return;
2287 d = PyModule_GetDict(m);
2288 s = PyUnicode_InternFromString(name);
2289 if (s == NULL)
2290 goto err_return;
2291 l = PyList_New(1);
2292 if (l == NULL) {
2293 Py_DECREF(s);
2294 goto err_return;
2295 }
2296 PyList_SET_ITEM(l, 0, s);
2297 err = PyDict_SetItemString(d, "__path__", l);
2298 Py_DECREF(l);
2299 if (err != 0)
2300 goto err_return;
2301 }
2302 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
2303 if (m == NULL)
2304 goto err_return;
2305 Py_DECREF(co);
2306 Py_DECREF(m);
2307 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002308err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002309 Py_DECREF(co);
2310 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002311}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002312
2313
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002314/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002315 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002316
Guido van Rossum79f25d91997-04-29 20:08:16 +00002317PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002318PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002319{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002320 PyObject *pname;
2321 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002322
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002323 pname = PyUnicode_FromString(name);
2324 if (pname == NULL)
2325 return NULL;
2326 result = PyImport_Import(pname);
2327 Py_DECREF(pname);
2328 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002329}
2330
Christian Heimes072c0f12008-01-03 23:01:04 +00002331/* Import a module without blocking
2332 *
2333 * At first it tries to fetch the module from sys.modules. If the module was
2334 * never loaded before it loads it with PyImport_ImportModule() unless another
2335 * thread holds the import lock. In the latter case the function raises an
2336 * ImportError instead of blocking.
2337 *
2338 * Returns the module object with incremented ref count.
2339 */
2340PyObject *
2341PyImport_ImportModuleNoBlock(const char *name)
2342{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002343 PyObject *result;
2344 PyObject *modules;
2345 long me;
Christian Heimes072c0f12008-01-03 23:01:04 +00002346
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002347 /* Try to get the module from sys.modules[name] */
2348 modules = PyImport_GetModuleDict();
2349 if (modules == NULL)
2350 return NULL;
Christian Heimes072c0f12008-01-03 23:01:04 +00002351
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002352 result = PyDict_GetItemString(modules, name);
2353 if (result != NULL) {
2354 Py_INCREF(result);
2355 return result;
2356 }
2357 else {
2358 PyErr_Clear();
2359 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002360#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002361 /* check the import lock
2362 * me might be -1 but I ignore the error here, the lock function
2363 * takes care of the problem */
2364 me = PyThread_get_thread_ident();
2365 if (import_lock_thread == -1 || import_lock_thread == me) {
2366 /* no thread or me is holding the lock */
2367 return PyImport_ImportModule(name);
2368 }
2369 else {
2370 PyErr_Format(PyExc_ImportError,
2371 "Failed to import %.200s because the import lock"
2372 "is held by another thread.",
2373 name);
2374 return NULL;
2375 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002376#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002377 return PyImport_ImportModule(name);
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002378#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002379}
2380
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002381/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002382static PyObject *get_parent(PyObject *globals, char *buf,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002383 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002384static PyObject *load_next(PyObject *mod, PyObject *altmod,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002385 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002386static int mark_miss(char *name);
2387static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002388 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002389static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002390
2391/* The Magnum Opus of dotted-name import :-) */
2392
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002393static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002394import_module_level(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002395 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002396{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002397 char buf[MAXPATHLEN+1];
2398 Py_ssize_t buflen = 0;
2399 PyObject *parent, *head, *next, *tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002401 if (strchr(name, '/') != NULL
Christian Heimes454f37b2008-01-10 00:10:02 +00002402#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002403 || strchr(name, '\\') != NULL
Christian Heimes454f37b2008-01-10 00:10:02 +00002404#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002405 ) {
2406 PyErr_SetString(PyExc_ImportError,
2407 "Import by filename is not supported.");
2408 return NULL;
2409 }
Christian Heimes454f37b2008-01-10 00:10:02 +00002410
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002411 parent = get_parent(globals, buf, &buflen, level);
2412 if (parent == NULL)
2413 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002414
Benjamin Peterson556d8002010-06-27 22:37:28 +00002415 head = load_next(parent, level < 0 ? Py_None : parent, &name, buf,
2416 &buflen);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002417 if (head == NULL)
2418 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002419
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002420 tail = head;
2421 Py_INCREF(tail);
2422 while (name) {
2423 next = load_next(tail, tail, &name, buf, &buflen);
2424 Py_DECREF(tail);
2425 if (next == NULL) {
2426 Py_DECREF(head);
2427 return NULL;
2428 }
2429 tail = next;
2430 }
2431 if (tail == Py_None) {
2432 /* If tail is Py_None, both get_parent and load_next found
2433 an empty module name: someone called __import__("") or
2434 doctored faulty bytecode */
2435 Py_DECREF(tail);
2436 Py_DECREF(head);
2437 PyErr_SetString(PyExc_ValueError,
2438 "Empty module name");
2439 return NULL;
2440 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002441
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002442 if (fromlist != NULL) {
2443 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2444 fromlist = NULL;
2445 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002447 if (fromlist == NULL) {
2448 Py_DECREF(tail);
2449 return head;
2450 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002451
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002452 Py_DECREF(head);
2453 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
2454 Py_DECREF(tail);
2455 return NULL;
2456 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002457
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002458 return tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002459}
2460
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002461PyObject *
2462PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002463 PyObject *fromlist, int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002464{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002465 PyObject *result;
2466 _PyImport_AcquireLock();
2467 result = import_module_level(name, globals, locals, fromlist, level);
2468 if (_PyImport_ReleaseLock() < 0) {
2469 Py_XDECREF(result);
2470 PyErr_SetString(PyExc_RuntimeError,
2471 "not holding the import lock");
2472 return NULL;
2473 }
2474 return result;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002475}
2476
Fred Drake87590902004-05-28 20:21:36 +00002477/* Return the package that an import is being performed in. If globals comes
2478 from the module foo.bar.bat (not itself a package), this returns the
2479 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002480 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002481
2482 The *name* of the returned package is returned in buf, with the length of
2483 the name in *p_buflen.
2484
2485 If globals doesn't come from a package or a module in a package, or a
2486 corresponding entry is not found in sys.modules, Py_None is returned.
2487*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002488static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002489get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002490{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002491 static PyObject *namestr = NULL;
2492 static PyObject *pathstr = NULL;
2493 static PyObject *pkgstr = NULL;
2494 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2495 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002496
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002497 if (globals == NULL || !PyDict_Check(globals) || !level)
2498 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002499
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002500 if (namestr == NULL) {
2501 namestr = PyUnicode_InternFromString("__name__");
2502 if (namestr == NULL)
2503 return NULL;
2504 }
2505 if (pathstr == NULL) {
2506 pathstr = PyUnicode_InternFromString("__path__");
2507 if (pathstr == NULL)
2508 return NULL;
2509 }
2510 if (pkgstr == NULL) {
2511 pkgstr = PyUnicode_InternFromString("__package__");
2512 if (pkgstr == NULL)
2513 return NULL;
2514 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002515
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002516 *buf = '\0';
2517 *p_buflen = 0;
2518 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002519
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002520 if ((pkgname != NULL) && (pkgname != Py_None)) {
2521 /* __package__ is set, so use it */
2522 char *pkgname_str;
2523 Py_ssize_t len;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002524
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002525 if (!PyUnicode_Check(pkgname)) {
2526 PyErr_SetString(PyExc_ValueError,
2527 "__package__ set to non-string");
2528 return NULL;
2529 }
2530 pkgname_str = _PyUnicode_AsStringAndSize(pkgname, &len);
2531 if (len == 0) {
2532 if (level > 0) {
2533 PyErr_SetString(PyExc_ValueError,
2534 "Attempted relative import in non-package");
2535 return NULL;
2536 }
2537 return Py_None;
2538 }
2539 if (len > MAXPATHLEN) {
2540 PyErr_SetString(PyExc_ValueError,
2541 "Package name too long");
2542 return NULL;
2543 }
2544 strcpy(buf, pkgname_str);
2545 } else {
2546 /* __package__ not set, so figure it out and set it */
2547 modname = PyDict_GetItem(globals, namestr);
2548 if (modname == NULL || !PyUnicode_Check(modname))
2549 return Py_None;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00002550
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002551 modpath = PyDict_GetItem(globals, pathstr);
2552 if (modpath != NULL) {
2553 /* __path__ is set, so modname is already the package name */
2554 char *modname_str;
2555 Py_ssize_t len;
2556 int error;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002557
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002558 modname_str = _PyUnicode_AsStringAndSize(modname, &len);
2559 if (len > MAXPATHLEN) {
2560 PyErr_SetString(PyExc_ValueError,
2561 "Module name too long");
2562 return NULL;
2563 }
2564 strcpy(buf, modname_str);
2565 error = PyDict_SetItem(globals, pkgstr, modname);
2566 if (error) {
2567 PyErr_SetString(PyExc_ValueError,
2568 "Could not set __package__");
2569 return NULL;
2570 }
2571 } else {
2572 /* Normal module, so work out the package name if any */
2573 char *start = _PyUnicode_AsString(modname);
2574 char *lastdot = strrchr(start, '.');
2575 size_t len;
2576 int error;
2577 if (lastdot == NULL && level > 0) {
2578 PyErr_SetString(PyExc_ValueError,
2579 "Attempted relative import in non-package");
2580 return NULL;
2581 }
2582 if (lastdot == NULL) {
2583 error = PyDict_SetItem(globals, pkgstr, Py_None);
2584 if (error) {
2585 PyErr_SetString(PyExc_ValueError,
2586 "Could not set __package__");
2587 return NULL;
2588 }
2589 return Py_None;
2590 }
2591 len = lastdot - start;
2592 if (len >= MAXPATHLEN) {
2593 PyErr_SetString(PyExc_ValueError,
2594 "Module name too long");
2595 return NULL;
2596 }
2597 strncpy(buf, start, len);
2598 buf[len] = '\0';
2599 pkgname = PyUnicode_FromString(buf);
2600 if (pkgname == NULL) {
2601 return NULL;
2602 }
2603 error = PyDict_SetItem(globals, pkgstr, pkgname);
2604 Py_DECREF(pkgname);
2605 if (error) {
2606 PyErr_SetString(PyExc_ValueError,
2607 "Could not set __package__");
2608 return NULL;
2609 }
2610 }
2611 }
2612 while (--level > 0) {
2613 char *dot = strrchr(buf, '.');
2614 if (dot == NULL) {
2615 PyErr_SetString(PyExc_ValueError,
2616 "Attempted relative import beyond "
2617 "toplevel package");
2618 return NULL;
2619 }
2620 *dot = '\0';
2621 }
2622 *p_buflen = strlen(buf);
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002623
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002624 modules = PyImport_GetModuleDict();
2625 parent = PyDict_GetItemString(modules, buf);
2626 if (parent == NULL) {
2627 if (orig_level < 1) {
2628 PyObject *err_msg = PyBytes_FromFormat(
2629 "Parent module '%.200s' not found "
2630 "while handling absolute import", buf);
2631 if (err_msg == NULL) {
2632 return NULL;
2633 }
2634 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2635 PyBytes_AsString(err_msg), 1)) {
2636 *buf = '\0';
2637 *p_buflen = 0;
2638 parent = Py_None;
2639 }
2640 Py_DECREF(err_msg);
2641 } else {
2642 PyErr_Format(PyExc_SystemError,
2643 "Parent module '%.200s' not loaded, "
2644 "cannot perform relative import", buf);
2645 }
2646 }
2647 return parent;
2648 /* We expect, but can't guarantee, if parent != None, that:
2649 - parent.__name__ == buf
2650 - parent.__dict__ is globals
2651 If this is violated... Who cares? */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002652}
2653
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002654/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002655static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002656load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002657 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002658{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002659 char *name = *p_name;
2660 char *dot = strchr(name, '.');
2661 size_t len;
2662 char *p;
2663 PyObject *result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002664
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002665 if (strlen(name) == 0) {
2666 /* completely empty module name should only happen in
2667 'from . import' (or '__import__("")')*/
2668 Py_INCREF(mod);
2669 *p_name = NULL;
2670 return mod;
2671 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002672
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002673 if (dot == NULL) {
2674 *p_name = NULL;
2675 len = strlen(name);
2676 }
2677 else {
2678 *p_name = dot+1;
2679 len = dot-name;
2680 }
2681 if (len == 0) {
2682 PyErr_SetString(PyExc_ValueError,
2683 "Empty module name");
2684 return NULL;
2685 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002686
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002687 p = buf + *p_buflen;
2688 if (p != buf)
2689 *p++ = '.';
2690 if (p+len-buf >= MAXPATHLEN) {
2691 PyErr_SetString(PyExc_ValueError,
2692 "Module name too long");
2693 return NULL;
2694 }
2695 strncpy(p, name, len);
2696 p[len] = '\0';
2697 *p_buflen = p+len-buf;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002698
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002699 result = import_submodule(mod, p, buf);
2700 if (result == Py_None && altmod != mod) {
2701 Py_DECREF(result);
2702 /* Here, altmod must be None and mod must not be None */
2703 result = import_submodule(altmod, p, p);
2704 if (result != NULL && result != Py_None) {
2705 if (mark_miss(buf) != 0) {
2706 Py_DECREF(result);
2707 return NULL;
2708 }
2709 strncpy(buf, name, len);
2710 buf[len] = '\0';
2711 *p_buflen = len;
2712 }
2713 }
2714 if (result == NULL)
2715 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002716
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002717 if (result == Py_None) {
2718 Py_DECREF(result);
2719 PyErr_Format(PyExc_ImportError,
2720 "No module named %.200s", name);
2721 return NULL;
2722 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002723
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002724 return result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002725}
2726
2727static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002728mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002729{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002730 PyObject *modules = PyImport_GetModuleDict();
2731 return PyDict_SetItemString(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002732}
2733
2734static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002735ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002736 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002737{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002738 int i;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002739
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002740 if (!PyObject_HasAttrString(mod, "__path__"))
2741 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002742
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002743 for (i = 0; ; i++) {
2744 PyObject *item = PySequence_GetItem(fromlist, i);
2745 int hasit;
2746 if (item == NULL) {
2747 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2748 PyErr_Clear();
2749 return 1;
2750 }
2751 return 0;
2752 }
2753 if (!PyUnicode_Check(item)) {
2754 PyErr_SetString(PyExc_TypeError,
2755 "Item in ``from list'' not a string");
2756 Py_DECREF(item);
2757 return 0;
2758 }
2759 if (PyUnicode_AS_UNICODE(item)[0] == '*') {
2760 PyObject *all;
2761 Py_DECREF(item);
2762 /* See if the package defines __all__ */
2763 if (recursive)
2764 continue; /* Avoid endless recursion */
2765 all = PyObject_GetAttrString(mod, "__all__");
2766 if (all == NULL)
2767 PyErr_Clear();
2768 else {
2769 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
2770 Py_DECREF(all);
2771 if (!ret)
2772 return 0;
2773 }
2774 continue;
2775 }
2776 hasit = PyObject_HasAttr(mod, item);
2777 if (!hasit) {
2778 PyObject *item8;
2779 char *subname;
2780 PyObject *submod;
2781 char *p;
Victor Stinnerae6265f2010-05-15 16:27:27 +00002782 item8 = PyUnicode_EncodeFSDefault(item);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002783 if (!item8) {
2784 PyErr_SetString(PyExc_ValueError, "Cannot encode path item");
2785 return 0;
2786 }
2787 subname = PyBytes_AS_STRING(item8);
2788 if (buflen + strlen(subname) >= MAXPATHLEN) {
2789 PyErr_SetString(PyExc_ValueError,
2790 "Module name too long");
2791 Py_DECREF(item);
2792 return 0;
2793 }
2794 p = buf + buflen;
2795 *p++ = '.';
2796 strcpy(p, subname);
2797 submod = import_submodule(mod, subname, buf);
2798 Py_DECREF(item8);
2799 Py_XDECREF(submod);
2800 if (submod == NULL) {
2801 Py_DECREF(item);
2802 return 0;
2803 }
2804 }
2805 Py_DECREF(item);
2806 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002807
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002808 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002809}
2810
Neil Schemenauer00b09662003-06-16 21:03:07 +00002811static int
2812add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002813 PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00002814{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002815 if (mod == Py_None)
2816 return 1;
2817 /* Irrespective of the success of this load, make a
2818 reference to it in the parent package module. A copy gets
2819 saved in the modules dictionary under the full name, so get a
2820 reference from there, if need be. (The exception is when the
2821 load failed with a SyntaxError -- then there's no trace in
2822 sys.modules. In that case, of course, do nothing extra.) */
2823 if (submod == NULL) {
2824 submod = PyDict_GetItemString(modules, fullname);
2825 if (submod == NULL)
2826 return 1;
2827 }
2828 if (PyModule_Check(mod)) {
2829 /* We can't use setattr here since it can give a
2830 * spurious warning if the submodule name shadows a
2831 * builtin name */
2832 PyObject *dict = PyModule_GetDict(mod);
2833 if (!dict)
2834 return 0;
2835 if (PyDict_SetItemString(dict, subname, submod) < 0)
2836 return 0;
2837 }
2838 else {
2839 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2840 return 0;
2841 }
2842 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00002843}
2844
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002845static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002846import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002847{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002848 PyObject *modules = PyImport_GetModuleDict();
2849 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002850
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002851 /* Require:
2852 if mod == None: subname == fullname
2853 else: mod.__name__ + "." + subname == fullname
2854 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002855
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002856 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
2857 Py_INCREF(m);
2858 }
2859 else {
2860 PyObject *path, *loader = NULL;
2861 char buf[MAXPATHLEN+1];
2862 struct filedescr *fdp;
2863 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002864
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002865 if (mod == Py_None)
2866 path = NULL;
2867 else {
2868 path = PyObject_GetAttrString(mod, "__path__");
2869 if (path == NULL) {
2870 PyErr_Clear();
2871 Py_INCREF(Py_None);
2872 return Py_None;
2873 }
2874 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002875
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002876 buf[0] = '\0';
2877 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2878 &fp, &loader);
2879 Py_XDECREF(path);
2880 if (fdp == NULL) {
2881 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2882 return NULL;
2883 PyErr_Clear();
2884 Py_INCREF(Py_None);
2885 return Py_None;
2886 }
2887 m = load_module(fullname, fp, buf, fdp->type, loader);
2888 Py_XDECREF(loader);
2889 if (fp)
2890 fclose(fp);
2891 if (!add_submodule(mod, m, fullname, subname, modules)) {
2892 Py_XDECREF(m);
2893 m = NULL;
2894 }
2895 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002896
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002897 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002898}
2899
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002900
2901/* Re-import a module of any kind and return its module object, WITH
2902 INCREMENTED REFERENCE COUNT */
2903
Guido van Rossum79f25d91997-04-29 20:08:16 +00002904PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002905PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002906{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002907 PyInterpreterState *interp = PyThreadState_Get()->interp;
2908 PyObject *modules_reloading = interp->modules_reloading;
2909 PyObject *modules = PyImport_GetModuleDict();
2910 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
2911 char *name, *subname;
2912 char buf[MAXPATHLEN+1];
2913 struct filedescr *fdp;
2914 FILE *fp = NULL;
2915 PyObject *newm;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00002916
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002917 if (modules_reloading == NULL) {
2918 Py_FatalError("PyImport_ReloadModule: "
2919 "no modules_reloading dictionary!");
2920 return NULL;
2921 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002923 if (m == NULL || !PyModule_Check(m)) {
2924 PyErr_SetString(PyExc_TypeError,
2925 "reload() argument must be module");
2926 return NULL;
2927 }
2928 name = (char*)PyModule_GetName(m);
2929 if (name == NULL)
2930 return NULL;
2931 if (m != PyDict_GetItemString(modules, name)) {
2932 PyErr_Format(PyExc_ImportError,
2933 "reload(): module %.200s not in sys.modules",
2934 name);
2935 return NULL;
2936 }
2937 existing_m = PyDict_GetItemString(modules_reloading, name);
2938 if (existing_m != NULL) {
2939 /* Due to a recursive reload, this module is already
2940 being reloaded. */
2941 Py_INCREF(existing_m);
2942 return existing_m;
2943 }
2944 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2945 return NULL;
Guido van Rossumd8faa362007-04-27 19:54:29 +00002946
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002947 subname = strrchr(name, '.');
2948 if (subname == NULL)
2949 subname = name;
2950 else {
2951 PyObject *parentname, *parent;
2952 parentname = PyUnicode_FromStringAndSize(name, (subname-name));
2953 if (parentname == NULL) {
2954 imp_modules_reloading_clear();
2955 return NULL;
2956 }
2957 parent = PyDict_GetItem(modules, parentname);
2958 if (parent == NULL) {
2959 PyErr_Format(PyExc_ImportError,
2960 "reload(): parent %U not in sys.modules",
2961 parentname);
2962 Py_DECREF(parentname);
2963 imp_modules_reloading_clear();
2964 return NULL;
2965 }
2966 Py_DECREF(parentname);
2967 subname++;
2968 path = PyObject_GetAttrString(parent, "__path__");
2969 if (path == NULL)
2970 PyErr_Clear();
2971 }
2972 buf[0] = '\0';
2973 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
2974 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002975
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002976 if (fdp == NULL) {
2977 Py_XDECREF(loader);
2978 imp_modules_reloading_clear();
2979 return NULL;
2980 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002982 newm = load_module(name, fp, buf, fdp->type, loader);
2983 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002984
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002985 if (fp)
2986 fclose(fp);
2987 if (newm == NULL) {
2988 /* load_module probably removed name from modules because of
2989 * the error. Put back the original module object. We're
2990 * going to return NULL in this case regardless of whether
2991 * replacing name succeeds, so the return value is ignored.
2992 */
2993 PyDict_SetItemString(modules, name, m);
2994 }
2995 imp_modules_reloading_clear();
2996 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002997}
2998
2999
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003000/* Higher-level import emulator which emulates the "import" statement
3001 more accurately -- it invokes the __import__() function from the
3002 builtins of the current globals. This means that the import is
3003 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00003004 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00003005 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00003006 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00003007 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003008
3009PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003010PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003011{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003012 static PyObject *silly_list = NULL;
3013 static PyObject *builtins_str = NULL;
3014 static PyObject *import_str = NULL;
3015 PyObject *globals = NULL;
3016 PyObject *import = NULL;
3017 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003018 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003019 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003020
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003021 /* Initialize constant string objects */
3022 if (silly_list == NULL) {
3023 import_str = PyUnicode_InternFromString("__import__");
3024 if (import_str == NULL)
3025 return NULL;
3026 builtins_str = PyUnicode_InternFromString("__builtins__");
3027 if (builtins_str == NULL)
3028 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003029 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003030 if (silly_list == NULL)
3031 return NULL;
3032 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003033
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003034 /* Get the builtins from current globals */
3035 globals = PyEval_GetGlobals();
3036 if (globals != NULL) {
3037 Py_INCREF(globals);
3038 builtins = PyObject_GetItem(globals, builtins_str);
3039 if (builtins == NULL)
3040 goto err;
3041 }
3042 else {
3043 /* No globals -- use standard builtins, and fake globals */
3044 builtins = PyImport_ImportModuleLevel("builtins",
3045 NULL, NULL, NULL, 0);
3046 if (builtins == NULL)
3047 return NULL;
3048 globals = Py_BuildValue("{OO}", builtins_str, builtins);
3049 if (globals == NULL)
3050 goto err;
3051 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003052
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003053 /* Get the __import__ function from the builtins */
3054 if (PyDict_Check(builtins)) {
3055 import = PyObject_GetItem(builtins, import_str);
3056 if (import == NULL)
3057 PyErr_SetObject(PyExc_KeyError, import_str);
3058 }
3059 else
3060 import = PyObject_GetAttr(builtins, import_str);
3061 if (import == NULL)
3062 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003063
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003064 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00003065 Always use absolute import here.
3066 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003067 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
3068 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00003069 if (r == NULL)
3070 goto err;
3071 Py_DECREF(r);
3072
3073 modules = PyImport_GetModuleDict();
3074 r = PyDict_GetItem(modules, module_name);
3075 if (r != NULL)
3076 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003077
3078 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003079 Py_XDECREF(globals);
3080 Py_XDECREF(builtins);
3081 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00003082
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003083 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003084}
3085
3086
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003087/* Module 'imp' provides Python access to the primitives used for
3088 importing modules.
3089*/
3090
Guido van Rossum79f25d91997-04-29 20:08:16 +00003091static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00003092imp_make_magic(long magic)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003093{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003094 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003095
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003096 buf[0] = (char) ((magic >> 0) & 0xff);
3097 buf[1] = (char) ((magic >> 8) & 0xff);
3098 buf[2] = (char) ((magic >> 16) & 0xff);
3099 buf[3] = (char) ((magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003100
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003101 return PyBytes_FromStringAndSize(buf, 4);
3102};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003103
3104static PyObject *
3105imp_get_magic(PyObject *self, PyObject *noargs)
3106{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003107 return imp_make_magic(pyc_magic);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003108}
3109
3110static PyObject *
3111imp_get_tag(PyObject *self, PyObject *noargs)
3112{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003113 return PyUnicode_FromString(pyc_tag);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003114}
3115
Guido van Rossum79f25d91997-04-29 20:08:16 +00003116static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003117imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003118{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003119 PyObject *list;
3120 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003121
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003122 list = PyList_New(0);
3123 if (list == NULL)
3124 return NULL;
3125 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
3126 PyObject *item = Py_BuildValue("ssi",
3127 fdp->suffix, fdp->mode, fdp->type);
3128 if (item == NULL) {
3129 Py_DECREF(list);
3130 return NULL;
3131 }
3132 if (PyList_Append(list, item) < 0) {
3133 Py_DECREF(list);
3134 Py_DECREF(item);
3135 return NULL;
3136 }
3137 Py_DECREF(item);
3138 }
3139 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003140}
3141
Guido van Rossum79f25d91997-04-29 20:08:16 +00003142static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003143call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003144{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003145 extern int fclose(FILE *);
3146 PyObject *fob, *ret;
3147 PyObject *pathobj;
3148 struct filedescr *fdp;
3149 char pathname[MAXPATHLEN+1];
3150 FILE *fp = NULL;
3151 int fd = -1;
3152 char *found_encoding = NULL;
3153 char *encoding = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003154
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003155 pathname[0] = '\0';
3156 if (path == Py_None)
3157 path = NULL;
3158 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
3159 if (fdp == NULL)
3160 return NULL;
3161 if (fp != NULL) {
3162 fd = fileno(fp);
3163 if (fd != -1)
3164 fd = dup(fd);
3165 fclose(fp);
3166 fp = NULL;
3167 }
3168 if (fd != -1) {
3169 if (strchr(fdp->mode, 'b') == NULL) {
3170 /* PyTokenizer_FindEncoding() returns PyMem_MALLOC'ed
3171 memory. */
3172 found_encoding = PyTokenizer_FindEncoding(fd);
3173 lseek(fd, 0, 0); /* Reset position */
3174 if (found_encoding == NULL && PyErr_Occurred())
3175 return NULL;
3176 encoding = (found_encoding != NULL) ? found_encoding :
3177 (char*)PyUnicode_GetDefaultEncoding();
3178 }
3179 fob = PyFile_FromFd(fd, pathname, fdp->mode, -1,
3180 (char*)encoding, NULL, NULL, 1);
3181 if (fob == NULL) {
3182 close(fd);
3183 PyMem_FREE(found_encoding);
3184 return NULL;
3185 }
3186 }
3187 else {
3188 fob = Py_None;
3189 Py_INCREF(fob);
3190 }
3191 pathobj = PyUnicode_DecodeFSDefault(pathname);
3192 ret = Py_BuildValue("NN(ssi)",
3193 fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
3194 PyMem_FREE(found_encoding);
Brett Cannon3bb42d92007-10-20 03:43:15 +00003195
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003196 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003197}
3198
Guido van Rossum79f25d91997-04-29 20:08:16 +00003199static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003200imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003201{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003202 char *name;
3203 PyObject *ret, *path = NULL;
3204 if (!PyArg_ParseTuple(args, "es|O:find_module",
3205 Py_FileSystemDefaultEncoding, &name,
3206 &path))
3207 return NULL;
3208 ret = call_find_module(name, path);
3209 PyMem_Free(name);
3210 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003211}
3212
3213static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003214imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003215{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003216 char *name;
3217 int ret;
3218 PyObject *m;
3219 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
3220 return NULL;
3221 ret = init_builtin(name);
3222 if (ret < 0)
3223 return NULL;
3224 if (ret == 0) {
3225 Py_INCREF(Py_None);
3226 return Py_None;
3227 }
3228 m = PyImport_AddModule(name);
3229 Py_XINCREF(m);
3230 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003231}
3232
Guido van Rossum79f25d91997-04-29 20:08:16 +00003233static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003234imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003235{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003236 char *name;
3237 int ret;
3238 PyObject *m;
3239 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
3240 return NULL;
3241 ret = PyImport_ImportFrozenModule(name);
3242 if (ret < 0)
3243 return NULL;
3244 if (ret == 0) {
3245 Py_INCREF(Py_None);
3246 return Py_None;
3247 }
3248 m = PyImport_AddModule(name);
3249 Py_XINCREF(m);
3250 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003251}
3252
Guido van Rossum79f25d91997-04-29 20:08:16 +00003253static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003254imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003255{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003256 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00003257
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003258 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
3259 return NULL;
3260 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003261}
3262
Guido van Rossum79f25d91997-04-29 20:08:16 +00003263static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00003264imp_is_frozen_package(PyObject *self, PyObject *args)
3265{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003266 char *name;
Brett Cannon8d110132009-03-15 02:20:16 +00003267
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003268 if (!PyArg_ParseTuple(args, "s:is_frozen_package", &name))
3269 return NULL;
3270 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00003271}
3272
3273static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003274imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003275{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003276 char *name;
3277 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
3278 return NULL;
3279 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003280}
3281
Guido van Rossum79f25d91997-04-29 20:08:16 +00003282static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003283imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003284{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003285 char *name;
3286 struct _frozen *p;
3287 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
3288 return NULL;
3289 p = find_frozen(name);
3290 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003291}
3292
3293static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003294get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003295{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003296 FILE *fp;
3297 if (mode[0] == 'U')
3298 mode = "r" PY_STDIOTEXTMODE;
3299 if (fob == NULL) {
3300 fp = fopen(pathname, mode);
3301 }
3302 else {
3303 int fd = PyObject_AsFileDescriptor(fob);
3304 if (fd == -1)
3305 return NULL;
3306 if (!_PyVerify_fd(fd))
3307 goto error;
3308 /* the FILE struct gets a new fd, so that it can be closed
3309 * independently of the file descriptor given
3310 */
3311 fd = dup(fd);
3312 if (fd == -1)
3313 goto error;
3314 fp = fdopen(fd, mode);
3315 }
3316 if (fp)
3317 return fp;
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003318error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003319 PyErr_SetFromErrno(PyExc_IOError);
3320 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003321}
3322
Guido van Rossum79f25d91997-04-29 20:08:16 +00003323static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003324imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003325{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003326 char *name;
3327 char *pathname;
3328 PyObject *fob = NULL;
3329 PyObject *m;
3330 FILE *fp;
3331 if (!PyArg_ParseTuple(args, "ses|O:load_compiled",
3332 &name,
3333 Py_FileSystemDefaultEncoding, &pathname,
3334 &fob))
3335 return NULL;
3336 fp = get_file(pathname, fob, "rb");
3337 if (fp == NULL) {
3338 PyMem_Free(pathname);
3339 return NULL;
3340 }
3341 m = load_compiled_module(name, pathname, fp);
3342 fclose(fp);
3343 PyMem_Free(pathname);
3344 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003345}
3346
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003347#ifdef HAVE_DYNAMIC_LOADING
3348
Guido van Rossum79f25d91997-04-29 20:08:16 +00003349static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003350imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003351{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003352 char *name;
Victor Stinner8dbf6292010-10-15 12:48:01 +00003353 PyObject *pathbytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003354 char *pathname;
3355 PyObject *fob = NULL;
3356 PyObject *m;
3357 FILE *fp = NULL;
Victor Stinner8dbf6292010-10-15 12:48:01 +00003358 if (!PyArg_ParseTuple(args, "sO&|O:load_dynamic",
3359 &name, PyUnicode_FSConverter, &pathbytes, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003360 return NULL;
Victor Stinner8dbf6292010-10-15 12:48:01 +00003361 pathname = PyBytes_AS_STRING(pathbytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003362 if (fob) {
3363 fp = get_file(pathname, fob, "r");
3364 if (fp == NULL) {
Victor Stinner8dbf6292010-10-15 12:48:01 +00003365 Py_DECREF(pathbytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003366 return NULL;
3367 }
3368 }
3369 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinner8dbf6292010-10-15 12:48:01 +00003370 Py_DECREF(pathbytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003371 if (fp)
3372 fclose(fp);
3373 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003374}
3375
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003376#endif /* HAVE_DYNAMIC_LOADING */
3377
Guido van Rossum79f25d91997-04-29 20:08:16 +00003378static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003379imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003380{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003381 char *name;
3382 char *pathname;
3383 PyObject *fob = NULL;
3384 PyObject *m;
3385 FILE *fp;
3386 if (!PyArg_ParseTuple(args, "ses|O:load_source",
3387 &name,
3388 Py_FileSystemDefaultEncoding, &pathname,
3389 &fob))
3390 return NULL;
3391 fp = get_file(pathname, fob, "r");
3392 if (fp == NULL) {
3393 PyMem_Free(pathname);
3394 return NULL;
3395 }
3396 m = load_source_module(name, pathname, fp);
3397 PyMem_Free(pathname);
3398 fclose(fp);
3399 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003400}
3401
Guido van Rossum79f25d91997-04-29 20:08:16 +00003402static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003403imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003404{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003405 char *name;
3406 PyObject *fob;
Victor Stinner1a563032010-10-15 22:43:10 +00003407 PyObject *pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003408 PyObject * ret;
3409 char *suffix; /* Unused */
3410 char *mode;
3411 int type;
3412 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003413
Victor Stinner1a563032010-10-15 22:43:10 +00003414 if (!PyArg_ParseTuple(args, "sOO&(ssi):load_module",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003415 &name, &fob,
Victor Stinner1a563032010-10-15 22:43:10 +00003416 PyUnicode_FSConverter, &pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003417 &suffix, &mode, &type))
3418 return NULL;
3419 if (*mode) {
3420 /* Mode must start with 'r' or 'U' and must not contain '+'.
3421 Implicit in this test is the assumption that the mode
3422 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003423
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003424 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3425 PyErr_Format(PyExc_ValueError,
3426 "invalid file open mode %.200s", mode);
Victor Stinner1a563032010-10-15 22:43:10 +00003427 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003428 return NULL;
3429 }
3430 }
3431 if (fob == Py_None)
3432 fp = NULL;
3433 else {
3434 fp = get_file(NULL, fob, mode);
3435 if (fp == NULL) {
Victor Stinner1a563032010-10-15 22:43:10 +00003436 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003437 return NULL;
3438 }
3439 }
Victor Stinner1a563032010-10-15 22:43:10 +00003440 ret = load_module(name, fp, PyBytes_AS_STRING(pathname), type, NULL);
3441 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003442 if (fp)
3443 fclose(fp);
3444 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003445}
3446
3447static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003448imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003449{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003450 char *name;
3451 char *pathname;
3452 PyObject * ret;
3453 if (!PyArg_ParseTuple(args, "ses:load_package",
3454 &name, Py_FileSystemDefaultEncoding, &pathname))
3455 return NULL;
3456 ret = load_package(name, pathname);
3457 PyMem_Free(pathname);
3458 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003459}
3460
3461static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003462imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003463{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003464 char *name;
3465 if (!PyArg_ParseTuple(args, "s:new_module", &name))
3466 return NULL;
3467 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003468}
3469
Christian Heimes13a7a212008-01-07 17:13:09 +00003470static PyObject *
3471imp_reload(PyObject *self, PyObject *v)
3472{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003473 return PyImport_ReloadModule(v);
Christian Heimes13a7a212008-01-07 17:13:09 +00003474}
3475
3476PyDoc_STRVAR(doc_reload,
3477"reload(module) -> module\n\
3478\n\
3479Reload the module. The module must have been successfully imported before.");
3480
Barry Warsaw28a691b2010-04-17 00:19:56 +00003481static PyObject *
3482imp_cache_from_source(PyObject *self, PyObject *args, PyObject *kws)
3483{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003484 static char *kwlist[] = {"path", "debug_override", NULL};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003485
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003486 char buf[MAXPATHLEN+1];
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003487 PyObject *pathbytes;
3488 char *cpathname;
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003489 PyObject *debug_override = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003490 int debug = !Py_OptimizeFlag;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003491
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003492 if (!PyArg_ParseTupleAndKeywords(
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003493 args, kws, "O&|O", kwlist,
3494 PyUnicode_FSConverter, &pathbytes, &debug_override))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003495 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003496
Benjamin Peterson294a9fc2010-10-16 03:12:39 +00003497 if (debug_override != NULL &&
3498 (debug = PyObject_IsTrue(debug_override)) < 0) {
3499 Py_DECREF(pathbytes);
3500 return NULL;
3501 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00003502
Victor Stinner3ea23dd2010-10-15 20:34:32 +00003503 cpathname = make_compiled_pathname(
3504 PyBytes_AS_STRING(pathbytes),
3505 buf, MAXPATHLEN+1, debug);
3506 Py_DECREF(pathbytes);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003507
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003508 if (cpathname == NULL) {
3509 PyErr_Format(PyExc_SystemError, "path buffer too short");
3510 return NULL;
3511 }
Victor Stinner88bd8912010-10-15 22:46:07 +00003512 return PyUnicode_DecodeFSDefault(buf);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003513}
3514
3515PyDoc_STRVAR(doc_cache_from_source,
3516"Given the path to a .py file, return the path to its .pyc/.pyo file.\n\
3517\n\
3518The .py file does not need to exist; this simply returns the path to the\n\
3519.pyc/.pyo file calculated as if the .py file were imported. The extension\n\
3520will be .pyc unless __debug__ is not defined, then it will be .pyo.\n\
3521\n\
3522If debug_override is not None, then it must be a boolean and is taken as\n\
3523the value of __debug__ instead.");
3524
3525static PyObject *
3526imp_source_from_cache(PyObject *self, PyObject *args, PyObject *kws)
3527{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003528 static char *kwlist[] = {"path", NULL};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003529
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003530 char *pathname;
3531 char buf[MAXPATHLEN+1];
Barry Warsaw28a691b2010-04-17 00:19:56 +00003532
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003533 if (!PyArg_ParseTupleAndKeywords(
3534 args, kws, "es", kwlist,
3535 Py_FileSystemDefaultEncoding, &pathname))
3536 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003537
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003538 if (make_source_pathname(pathname, buf) == NULL) {
3539 PyErr_Format(PyExc_ValueError, "Not a PEP 3147 pyc path: %s",
3540 pathname);
3541 PyMem_Free(pathname);
3542 return NULL;
3543 }
3544 PyMem_Free(pathname);
3545 return PyUnicode_FromString(buf);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003546}
3547
3548PyDoc_STRVAR(doc_source_from_cache,
3549"Given the path to a .pyc./.pyo file, return the path to its .py file.\n\
3550\n\
3551The .pyc/.pyo file does not need to exist; this simply returns the path to\n\
3552the .py file calculated to correspond to the .pyc/.pyo file. If path\n\
3553does not conform to PEP 3147 format, ValueError will be raised.");
3554
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003555/* Doc strings */
3556
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003557PyDoc_STRVAR(doc_imp,
3558"This module provides the components needed to build your own\n\
3559__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003560
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003561PyDoc_STRVAR(doc_find_module,
3562"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003563Search for a module. If path is omitted or None, search for a\n\
3564built-in, frozen or special module and continue search in sys.path.\n\
3565The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003566package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003567
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003568PyDoc_STRVAR(doc_load_module,
3569"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003570Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003571The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003572
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003573PyDoc_STRVAR(doc_get_magic,
3574"get_magic() -> string\n\
3575Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003576
Barry Warsaw28a691b2010-04-17 00:19:56 +00003577PyDoc_STRVAR(doc_get_tag,
3578"get_tag() -> string\n\
3579Return the magic tag for .pyc or .pyo files.");
3580
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003581PyDoc_STRVAR(doc_get_suffixes,
3582"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003583Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003584that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003585
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003586PyDoc_STRVAR(doc_new_module,
3587"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003588Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003589The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003590
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003591PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003592"lock_held() -> boolean\n\
3593Return True if the import lock is currently held, else False.\n\
3594On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003595
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003596PyDoc_STRVAR(doc_acquire_lock,
3597"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003598Acquires the interpreter's import lock for the current thread.\n\
3599This lock should be used by import hooks to ensure thread-safety\n\
3600when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003601On platforms without threads, this function does nothing.");
3602
3603PyDoc_STRVAR(doc_release_lock,
3604"release_lock() -> None\n\
3605Release the interpreter's import lock.\n\
3606On platforms without threads, this function does nothing.");
3607
Guido van Rossum79f25d91997-04-29 20:08:16 +00003608static PyMethodDef imp_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003609 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3610 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3611 {"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag},
3612 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3613 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3614 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3615 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3616 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3617 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
3618 {"reload", imp_reload, METH_O, doc_reload},
3619 {"cache_from_source", (PyCFunction)imp_cache_from_source,
3620 METH_VARARGS | METH_KEYWORDS, doc_cache_from_source},
3621 {"source_from_cache", (PyCFunction)imp_source_from_cache,
3622 METH_VARARGS | METH_KEYWORDS, doc_source_from_cache},
3623 /* The rest are obsolete */
3624 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3625 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
3626 {"init_builtin", imp_init_builtin, METH_VARARGS},
3627 {"init_frozen", imp_init_frozen, METH_VARARGS},
3628 {"is_builtin", imp_is_builtin, METH_VARARGS},
3629 {"is_frozen", imp_is_frozen, METH_VARARGS},
3630 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003631#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003632 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003633#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003634 {"load_package", imp_load_package, METH_VARARGS},
3635 {"load_source", imp_load_source, METH_VARARGS},
3636 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003637};
3638
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003639static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003640setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003641{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003642 PyObject *v;
3643 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003644
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003645 v = PyLong_FromLong((long)value);
3646 err = PyDict_SetItemString(d, name, v);
3647 Py_XDECREF(v);
3648 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003649}
3650
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003651typedef struct {
3652 PyObject_HEAD
3653} NullImporter;
3654
3655static int
3656NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3657{
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003658#ifndef MS_WINDOWS
3659 PyObject *path;
3660 struct stat statbuf;
3661 int rv;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003662
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003663 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3664 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003665
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003666 if (!PyArg_ParseTuple(args, "O&:NullImporter",
3667 PyUnicode_FSConverter, &path))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003668 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003669
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003670 if (PyBytes_GET_SIZE(path) == 0) {
3671 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003672 PyErr_SetString(PyExc_ImportError, "empty pathname");
3673 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003674 }
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003675
3676 rv = stat(PyBytes_AS_STRING(path), &statbuf);
3677 Py_DECREF(path);
3678 if (rv == 0) {
3679 /* it exists */
3680 if (S_ISDIR(statbuf.st_mode)) {
3681 /* it's a directory */
3682 PyErr_SetString(PyExc_ImportError, "existing directory");
3683 return -1;
3684 }
3685 }
3686#else /* MS_WINDOWS */
3687 PyObject *pathobj;
3688 DWORD rv;
Victor Stinner255dfdb2010-09-29 10:28:51 +00003689 wchar_t *path;
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003690
3691 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3692 return -1;
3693
3694 if (!PyArg_ParseTuple(args, "U:NullImporter",
3695 &pathobj))
3696 return -1;
3697
3698 if (PyUnicode_GET_SIZE(pathobj) == 0) {
3699 PyErr_SetString(PyExc_ImportError, "empty pathname");
3700 return -1;
3701 }
3702
Victor Stinnerbeb4135b2010-10-07 01:02:42 +00003703 path = PyUnicode_AsWideCharString(pathobj, NULL);
Victor Stinner255dfdb2010-09-29 10:28:51 +00003704 if (path == NULL)
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003705 return -1;
3706 /* see issue1293 and issue3677:
3707 * stat() on Windows doesn't recognise paths like
3708 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
3709 */
3710 rv = GetFileAttributesW(path);
Victor Stinner255dfdb2010-09-29 10:28:51 +00003711 PyMem_Free(path);
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003712 if (rv != INVALID_FILE_ATTRIBUTES) {
3713 /* it exists */
3714 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
3715 /* it's a directory */
3716 PyErr_SetString(PyExc_ImportError, "existing directory");
3717 return -1;
3718 }
3719 }
3720#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003721 return 0;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003722}
3723
3724static PyObject *
3725NullImporter_find_module(NullImporter *self, PyObject *args)
3726{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003727 Py_RETURN_NONE;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003728}
3729
3730static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003731 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3732 "Always return None"
3733 },
3734 {NULL} /* Sentinel */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003735};
3736
3737
Christian Heimes9cd17752007-11-18 19:35:23 +00003738PyTypeObject PyNullImporter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003739 PyVarObject_HEAD_INIT(NULL, 0)
3740 "imp.NullImporter", /*tp_name*/
3741 sizeof(NullImporter), /*tp_basicsize*/
3742 0, /*tp_itemsize*/
3743 0, /*tp_dealloc*/
3744 0, /*tp_print*/
3745 0, /*tp_getattr*/
3746 0, /*tp_setattr*/
3747 0, /*tp_reserved*/
3748 0, /*tp_repr*/
3749 0, /*tp_as_number*/
3750 0, /*tp_as_sequence*/
3751 0, /*tp_as_mapping*/
3752 0, /*tp_hash */
3753 0, /*tp_call*/
3754 0, /*tp_str*/
3755 0, /*tp_getattro*/
3756 0, /*tp_setattro*/
3757 0, /*tp_as_buffer*/
3758 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3759 "Null importer object", /* tp_doc */
3760 0, /* tp_traverse */
3761 0, /* tp_clear */
3762 0, /* tp_richcompare */
3763 0, /* tp_weaklistoffset */
3764 0, /* tp_iter */
3765 0, /* tp_iternext */
3766 NullImporter_methods, /* tp_methods */
3767 0, /* tp_members */
3768 0, /* tp_getset */
3769 0, /* tp_base */
3770 0, /* tp_dict */
3771 0, /* tp_descr_get */
3772 0, /* tp_descr_set */
3773 0, /* tp_dictoffset */
3774 (initproc)NullImporter_init, /* tp_init */
3775 0, /* tp_alloc */
3776 PyType_GenericNew /* tp_new */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003777};
3778
Martin v. Löwis1a214512008-06-11 05:26:20 +00003779static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003780 PyModuleDef_HEAD_INIT,
3781 "imp",
3782 doc_imp,
3783 0,
3784 imp_methods,
3785 NULL,
3786 NULL,
3787 NULL,
3788 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00003789};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003790
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003791PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00003792PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003793{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003794 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003795
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003796 if (PyType_Ready(&PyNullImporter_Type) < 0)
3797 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003798
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003799 m = PyModule_Create(&impmodule);
3800 if (m == NULL)
3801 goto failure;
3802 d = PyModule_GetDict(m);
3803 if (d == NULL)
3804 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003805
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003806 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3807 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3808 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3809 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3810 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3811 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3812 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3813 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
3814 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
3815 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003816
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003817 Py_INCREF(&PyNullImporter_Type);
3818 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
3819 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003820 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003821 Py_XDECREF(m);
3822 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003823}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003824
3825
Guido van Rossumb18618d2000-05-03 23:44:39 +00003826/* API for embedding applications that want to add their own entries
3827 to the table of built-in modules. This should normally be called
3828 *before* Py_Initialize(). When the table resize fails, -1 is
3829 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003830
3831 After a similar function by Just van Rossum. */
3832
3833int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003834PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003835{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003836 static struct _inittab *our_copy = NULL;
3837 struct _inittab *p;
3838 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003839
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003840 /* Count the number of entries in both tables */
3841 for (n = 0; newtab[n].name != NULL; n++)
3842 ;
3843 if (n == 0)
3844 return 0; /* Nothing to do */
3845 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3846 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003847
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003848 /* Allocate new memory for the combined table */
3849 p = our_copy;
3850 PyMem_RESIZE(p, struct _inittab, i+n+1);
3851 if (p == NULL)
3852 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003853
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003854 /* Copy the tables into the new memory */
3855 if (our_copy != PyImport_Inittab)
3856 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3857 PyImport_Inittab = our_copy = p;
3858 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003859
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003860 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003861}
3862
3863/* Shorthand to add a single entry given a name and a function */
3864
3865int
Brett Cannona826f322009-04-02 03:41:46 +00003866PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003867{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003868 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003869
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003870 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003871
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003872 newtab[0].name = (char *)name;
3873 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003874
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003875 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003876}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003877
3878#ifdef __cplusplus
3879}
3880#endif